![](https://habrastorage.org/web/d5e/ea6/caf/d5eea6caf9cc423093b37146b2b88c78.jpg)
長い間、TelegramとFacebookのボットのテーマに目を向けていましたが、どのような動物であるかを見る時間はまだありませんでした。 そして最も重要なこと-私は私の人生でTgやFb Messangerを積極的に使用していないので、実際の生活でそのようなボットが必要な理由は明確ではありませんでした。
そして偶然にも、この分野に没頭し、完全に適用された問題を解決する機会が生まれました。 たとえば、チャットを離れずにキャットフードを購入します)
静かな土曜日の朝、私は誤ってPerl(!!!)の国際(!)オンラインオリンピアード(!!)が開催されていることに気づきました。 イベントのシュールレアリズム(Habrを含むプロファイルリソースに関する発表はありませんでした)にもかかわらず、サインアップし、月曜日の午前10時15分にタスクを取得しました-オンラインストアとの対話を実装するインスタントメッセンジャーの1人のためにボットを開発しました。 これがトピックに飛び込む絶好のチャンスであると判断して、私は仕事を始めました。
オンラインストアの選択は簡単でした- ユルマートではキャットフードも買います。 はい、場合によっては、アプリケーションを電話にかけずに鉄片の現在の価格を調べることが必要になることがあります。
割り当ては月曜日の朝に受け取られ、誰も仕事をキャンセルしなかったので、開発の大部分は夜と夜に続きました。
初夜
最初の夜は、オンラインストアのモバイル発行用のパーサーを作成し、バスケットを使用して必要なすべての操作を実装し、注文(ピックアップ、登録なし)を行うことに専念しました。 Yulmartはさまざまな都市に代表されており、完全を期すために、現在の都市とピックアップポイントの選択を実現する必要がありました。 倒錯したパーサーは私の専門であるため、これに特別な困難はありませんでした。 唯一の待ち伏せ-最終チェックアウトでエラーが発生する理由を理解するために数時間を費やす必要がありました。 私はすぐにオンラインストアからの応答を要求し、彼は彼の内部会計システムに注文する時間がないことが判明しました。 5秒の遅延で問題が解決し、朝までにYulmart WebサイトでAPIを実装するモジュールの準備が整いました。
擬似APIは次のことができます。
- カタログセクションのリストを取得する
- カタログを検索する
- カタログアイテムまたは検索結果のリストを取得する
- すべての特徴を備えた製品情報を受け取る
- 現在の都市を選択します(価格、空室状況、ピックアップポイントの選択はこれに依存します)
- バスケットを管理する
- 選択したアイテムからのピックアップの注文
時間制限のため、カタログにフィルターを実装できませんでした。 しかし、基本的な機能があり、それをTelegramボットプラットフォームに転送しようとすることができます。
ネタバレ:テレグラムから直接キャットフードを購入できるようになりました
![](https://habrastorage.org/web/b14/462/4ca/b144624ca58a42ab939e83d3d18d4aaf.jpg)
二日目
今度は、Telegram APIのボット機能に精通する時が来ました。 その時までTelegramを使用していなかったので、トピックへの没頭が加速されました))詳細については説明しません-このトピックに関する記事は十分にあります。 私は、私の問題を解決する文脈で注意を引いた機能のみに注意します。 それが判明したように、オンラインストアのチャットボット用の多かれ少なかれ便利なインターフェースを作成することは別のタスクです...
- Webサーバー、SSL証明書をインストールし、時間のイベントモデルを調査するのは残念でした。そのため、ボットへのリクエストのプールが長く、それらを処理するシングルスレッド(申し訳ありませんが)の遅いが許容できるプロトタイプが選択されました
- このプラットフォームは、ユーザーセッションに関連するすべての問題を解決します-すばらしい。 インターフェイス要素にパラメーターを渡す方が簡単だったため、リクエスト間の中間情報を保存するためのステートマシンを実装するという最初のアイデアは、しばらくして破棄されました。 glyいが、速い。
- 何らかの理由で、単一のリクエストを処理する一環として、複数の回答を生成できることを、私は鈍感にし、すぐには理解しませんでした。 したがって、ボットはリクエストを受け取った後は沈黙しますが、考えていることは警告しません(検索の処理を除くすべての場所)
- Telegramは、メッセージ内のコントロールボタンを最適に配置する方法を知りません。 自分でボタンのグリッドを形成する必要があります。ボタンが多数ある場合(そしてどれくらいになるかが明確ではない場合)、これは追加の困難です。 さらに、それらは限られた数(正しい)にすることができますが、...
- ...これらのボタンとテキスト入力の他に、ボットとやり取りするオプションがないため、リストからの商品の選択とページネーションの実装が非常に複雑になりました。
そして、リストをプログラミングしていたとき、いくつかの答えを出すことができるとはまだ理解していませんでした(3節を参照)。そうでなければ、リストの各位置の下に独自の「詳細」ボタンがあります。 それが良いという事実ではなく、突然。
- 列を使用して回答を生成する機会はほとんどありません。 これにより、長い選択リストの作業が大幅に簡素化されます。 したがって、たとえば、ボットで現在の都市を選択すると、アクティブなボタンのリストのようになります。
または製品のリスト-3つの列に表示するのが最適です。たとえば、写真、名前、「詳細」ボタン、しかしいいえ。
そして全体として、プラットフォームのシンプルで快適なAPIにより、擬似APIで以前に実装されたすべてを実行できるチャットボットを一晩で作成することができました。
バスケット管理を含む:
![](https://habrastorage.org/web/572/31d/189/57231d18949c4fc38954374d211a067b.jpg)
ピックアップポイントの選択:
![](https://habrastorage.org/web/cb5/fa3/b7a/cb5fa3b7a06547e887554784f5632d79.jpg)
最後のチェックアウト:
![](https://habrastorage.org/web/da2/c22/9a4/da2c229a47254cd4bcf31a1d818a3319.jpg)
朝までに、ボットは終了し、テストサーバーで起動されました。
どこに触れることができますか
ボットは@ecom_ulmart_botと呼ばれ、テストベンチ上で動作し、1つの(!!!)ストリームでロングプールモードでリクエストを受け入れて処理します。
したがって、あなたが彼を苦しめるなら、忍耐を持っている))
したがって、あなたが彼を苦しめるなら、忍耐を持っている))
これはチャットボットのプロトタイプに近いため、多くの開発が必要です。
- WebHooksを介してマルチスレッドのリクエスト処理を行う
- インターフェイスをだます
- インラインボットとして他のチャットに埋め込むことを可能にします(マイニング用のトップエンドビデオカードが販売されているかどうかを緊急に知る必要がある場合)
- 機能の開発として、選択した製品の価格と他のオンラインストアからのオファーとの比較を追加できます。
そして誰かがこれを手に入れたら、githubからソースを取得し、このタスクのためにボット(別のAPIトークン)を登録することでこれを行うことができます。
そして、国際オリンピックはどうですか?
しかし、何も)
私は自分の決定に対する答えを受け取ったことはありません。 1週間後、自分に思い出させて、「結果がまもなく要約される」という回答を受け取り、その後沈黙しました。
この広告を偶然見て、何らかの解決策を送ったのは私だけだと思います。 そのため、曲線コードに関するラリーウォールのコメントは受け取りませんでした)
![](https://habrastorage.org/web/10f/9a1/a5d/10f9a1a5d81e4e169cf84fa0a8807b0e.jpg)
しかし、何も)
私は自分の決定に対する答えを受け取ったことはありません。 1週間後、自分に思い出させて、「結果がまもなく要約される」という回答を受け取り、その後沈黙しました。
この広告を偶然見て、何らかの解決策を送ったのは私だけだと思います。 そのため、曲線コードに関するラリーウォールのコメントは受け取りませんでした)
それは楽しい経験であり、次のターゲットプラットフォームはFacebook Messengerです。 新しいチャットボットのアイデアはすでにあります!