Yandex.Money Hackathonでのロボットの戦い

3月11〜12日にYandex.Money Hackathonが開催され、サンクトペテルブルクのHappy Santaチームが参加しました。 受賞者に関する別の記事が既にあります。 私たちのチームはそこにいないので、私たちはHabrasocietyに私たちのプロジェクトと使用したソリューションについて伝えることにしました。











どのようにアイデアを選びましたか?



24時間、最も困難なタスクを解決する必要がありました。ハッカソンの主催者は、「販売」ボット(ネタバレ:最終的に、そのようなボットが勝った)の範囲を超える興味深いアイデアと珍しいケースを提供するように求めました。



アイデアがないからではなく、売り手と留守番電話ボットを作ることにしましたが、私たちはeコマースで働いており、ストアのビジネスロジックに関する問題や多くの明白な要件に精通しているためです。 強みを評価した後、購入、注文のステータスの通知、ユーザーからのよくある質問への回答、フィードバックの収集を行うボットを作成することにしました。 さらに、最小作業条件では、注文と宅配便の商品とCRMを予約する倉庫を作成する必要がありました。 すべてをさらに面白くするために、2種類のボットをサポートすることにしました。



静的コマンドに応答する電報の方が簡単です。

VKontakteの場合はより複雑です。VKontakteは、馴染みのある人間の言語に応答し、実際の人間のように見えます。



これをどうやってやったの?



Hackathon VKontakteで2位になったとしても、これは私たちにとって最初のHackathonではありません。 そして、すでに知っているように、このようなイベントで最も重要なタスクは、タスクをうまく分解することです(実際、アイデアを提示して審査員に感銘を与えるのは美しいことですが、これはすでに誰にとっても興味深いことです)。 まず、すべてのタスクを中断し、可能な限りそれらを分離して、それぞれが独立してコーディングできるようにしました。 要約すると、タスクには次の3つのカテゴリがあります。



Yandex.MoneyとのWeb +統合。

トランスポートレベル-インスタントメッセンジャーへのメッセージの送受信。

脳-メッセージへの反応について決定を下します。



このようなパーティションにより、区別されたタスクを独立して実現し、注意散漫を最小限に抑え、これらの層間の相互作用を調整することができました。



スタック



Hackathonは何か新しいことを学ぶ時間がある場所ではないため、通常のスタックを選択しました:PHP 5、MySQL、RabbitMQ、Redis。 PHP7を試してみたいという要望がありましたが、リスクを冒さないことに決めました。 RabbitMQが条件付きレイヤー間の接着剤として選択されたため、コードベースを分割できました。 MySQLは注文とそのステータスのリポジトリです。 Redis-キャッシング、ブロッキング。



私たちが直面している問題。



主な問題は輸送レベルにありました。 以前は、VKとTelegramのボットをすでに作成しており、各プラットフォームの機能、マイナス面、およびプロに精通していました。 メッセージは、インスタントメッセンジャーからロングプールを介してダウンロードされ、開発が大幅に促進されました。さらに、VKとTelegramでもほぼ同じように実装されました。 信頼性のために、致命的なエラーが発生した場合にAPIからメッセージを受信するプロセスを自動的に再開し、ボットがオフラインのときに送信されたメッセージを再開するアルゴリズムを提供しました。 VKontakteでは、APIを介したメッセージの送信に問題がある場合があります。最初にメッセージを送信することはできないため、送信を繰り返す必要があります。 遅延メッセージ(ttl + dead-letter)をサポートするRabbitMQは、ここで非常に役立ちました。 同じ方法がTelegramで使用されました。 これらには同様の問題があります:時々、リクエストでエラー502が表示されるようになりますこれは、時間またはボットトークンの再発行によって処理されます(常にではありません)。



上で書いたように、ボットの2つのバージョンを作成することが決定されました。 テレグラムにはボットメニューの便利な実装があり、チームシステムはそこでうまく機能しました。したがって、ボットは厳密にそれらに焦点を合わせ、コマンドとメニューを通じてユーザーと厳密に対話しました。



「スマート」バージョンでは、ボットは、顧客が通常サポートを求める標準的な質問(支払い、配送方法、サイズ、空室について)を尋ねられます。 しかし、ユーザーが何を望んでいるかを理解する方法は? 十分な時間はありませんでしたが、十分にクールにしたかったため、完全性のためにボットの精度を上げることにしました。 「スマート」ボットは、3〜10個の単語を含む質問を1つだけ含むメッセージに反応しました。 このようにして、ユーザーからの定期的なメッセージと複雑な一連の質問を排除しました。 明確で正しい答えを出すことができる対象については、明確な領域のみが残っていました。 ボットが何を返信するかわからない場合、またはメッセージが除外された場合、ボットはスマートですが、あまりスマートではないという10の標準的な回答の1つを送信しました。 誤ってスパムに飛び込まないために、10種類の回答オプションを追加しました。 嬉しいことに、このアプローチはうまく機能し、買い手がボットを「破る」ことを特に試みなかった場合、配達、支払い、注文の条件に慣れることができました。



問題番号1 :メッセージのどこに質問があるのか​​を理解する方法と、そこにある質問を見つける方法 まず、テキストを文に分割し、各文を個別に調べました。



疑問文の兆候は非常に単純でした:



1.疑問符

2.疑問語の1つ(「where」/「when」/ ...)、

3.文の先頭にある連合「a」。



問題2 :言葉の誤りを修正する。 この問題を解決するために、 pspellを使用しました 。 それを修正するために、彼はあまりにも多くのオプションを提案したので、ラインスタイン距離を使用してそれらをフィルタリングしました:置換重量= 1、除去/追加重量= 2、より低い重みを持つオプションからオプションを選択しました。



問題番号3 :それが何であるかをまだ理解する方法は? 言語分析と機械学習を使用した非常にクールなソリューションの時間はなかったため、サポートワードを探しました。 しかし、ご存知のように、ロシア語では、言葉にはさまざまな形があります。 Yandexのもう1つの技術が救助に訪れました-Mystem 。 Mystemは、ロシア語のテキストの形態素解析のための別のプログラムです。 単語の形式を決定するまで、多くのクールなことを行うことができますが、私たちは1つのことだけに興味がありました-単語を通常の形式にすることです。



興味深いことに、一部の人々はボットと通信するときにそれに適応しようとしました。 彼らは、普通の人と同じように、彼に質問しようとしませんでした。 そして彼らは彼の生活を楽にし、彼に「配達/支払い」という具体的な言葉を送ろうとしました、そして彼は彼らからの質問を期待しました。 したがって、将来は、チームのコミュニケーションと理解が可能な複合ボットのようです。



これはすべて、人生でどのように機能しましたか?



彼らは、質量、実装、利便性、ヒューマノイド、独創性の5つの基準で判断することを約束しました。 また、ボットは実際に機能するはずであると別に述べられましたが、判明したように、この条件は勝利には必要ありませんでした。



審査員と参加者がボットを介して実際の購入を行い、彼とチャットし、この購入の代金を支払い、配送方法を選択してから、ハッカソンに直接宅配便で商品を受け取ることができるようにするのが最高のプレゼンテーションになると思われました。 結局のところ、私たちは人々の関心を過大評価しました。 審査員は誰も購入しなかったため、ボットがどのように機能するのか、なぜ私たちが本当に面白いことをしたのかを自分で感じました。 同時に、できるだけ多くの人に購入を促すために、Yandex.Moneyのロゴが付いた木製のバッジを特別に用意しました。



ボットは現在動作しているので、自分で試してみることができます。

santa12.tk

vk.com/hsstore

telegram.me/hsstorebot



スクリーンショットでは、VKontakteでの注文方法の例を見ることができます。 ユーザーは好きな製品を選択し、「購入」をクリックします。 この時点で、コミュニティとの対話が作成され、対応する製品が倉庫で5分間予約されます。 この段階で、ボットはユーザーに関する情報(名前、住所、その他の追加フィールド)を収集できます。 名前だけが必要でした。 配達は2つの方法で行われました:テーブルからの受け取りまたは宅配便。 Yandex.Moneyを介した支払い。 支払いが完了すると、一意のコードが注文に割り当てられ、宅配便業者が商品を正しい受取人に転送できるようにユーザーに送信されます。 ちなみに、宅配便業者は同じチャットルームのハッカソン会場で会うことに同意し、商品を転送した後、CRMでの配達の注文のステータスを変更しました。 この時点で、ユーザーはボットから、注文が配信されたというメッセージと、サービスへの要望を残すというメッセージを受け取りました。







残念ながら、勝つことはできませんでした。 しかし、とにかくイベントとすべての参加者にYandexに感謝します。 特に、ボットを使用してバッジを購入した人に。 ボットがどのように機能したのか、そして私たちの配信サービスから驚きを見るのは嬉しかったです。 ところで、もしあなたがサンクトペテルブルク出身なら、まだいくつかのバッジが残っており、ルーブルで購入することができます。



あとがき。



最後に、VK APIを使用したHackathonのチームは私たちだけでした。 Slackのボットを使用した別の優れたチームがあり、他の全員がTelegram APIで投票を行いました。 彼らは、裁判官がVKontakteにページを持たない可能性が高く、スマートボットの動作を評価できないことを示唆しました。 もちろん、Telegramにはボット用の優れたAPIがありますが、ボットは依然としてユーザー向けに作成されています。 しかし、彼らはまだこれに問題があります。 VKontakteを忘れないようにしてください。特にコミュニティメッセージ、製品のAPIに積極的に取り組み始めており、すぐに多くの新しい機能が追加される予定です。



All Articles