1日半で即興の玠材からFacebookチャットボットを組み立おる方法





私たちはハッカ゜ンのプロゞェクトのいく぀かに぀いお話し始めたす。 今日はボットで、FBの孊生に勉匷甚に取ったばかりの単語を含むいく぀かの人気のあるツむヌトを提䟛したす。 このようなボットを「キュヌブ」から組み立おるための䟿利でシンプルなツヌルであるChatfuelの䞀皮のマむクロチュヌトリアルが刀明したした。



免責事項から始めたしょう。このテキストでは、Skyeng孊校の完成したサヌビスに぀いおではなく、1日半で膝の䞊に組み立おられたプロトタむプに぀いお話しおいたす。 おそらく、この物語が䞀郚の人々にずっお有甚であるが、単に楜したれるこずを願っおいたす。 あるいは、圌は誰かにむンスピレヌションを䞎えお、それを思い起こさせたす-私たちは幞せになるだけです、これは生態系の「倖郚茪郭」の抂念に適合したす。 実践が瀺すように、 ハッカ゜ンの盎埌、その参加者党員がプロゞェクトを完了するこずに熱心ですが、それから毎日のルヌチンが入り、これらの欲求はどこかに消えたす...



アむデア



蟞曞の単語の䜿甚䟋はありたすが、それらはすべお人工的なものです-それらは方法論者によっお䜜成されたもので、孊術的な「正しい」䟋です。 珟実には、人々は奜きな蚀葉でやりたすので、「野生の自然」からのそのような実際の䜿甚䟋を瀺すためにアむデアが浮䞊したした。 たずえば、Twitterから-人々は䜕でも䜕でも曞くので、痛いずきはすぐに短いメッセヌゞを曞く必芁がありたす。 したがっお、圌らは生きおいるこずが刀明し、人々はフレヌズの構造を考えず、䞀般的にこれは人生に最も近いテキスト圢匏です。



そのため、私たちは、 オヌプンなSkyeng APIを䜿甚しお孊習甚に孊生が远加した単語を远跡し、メッセンゞャヌでそれらを含む人気のあるツむヌトを送信する小さなプロゞェクトを考案したした。 ナヌザヌがどこに行っお䜕もむンストヌルする必芁がないように、個別のWebサむトや個別のアプリケヌションではなく、メッセンゞャヌで補品が特に機胜するこずを望みたした。 私は圌のために垞に機胜し、独立しおそれを匕き出すこずができるポむントが必芁でした。



チヌムは、2人のサヌバヌプログラマず、フロント゚ンドの開発経隓のあるアナリストで構成されおいたした。 そしお、プロゞェクト自䜓は、それぞれ2぀の郚分で構成されおいたす-小さいサヌバヌアプリケヌションずチャットボットです。 䞀般的な気分は次のずおりでした。䞀生懞呜抌しお、単玔なものをたずめたしょう。 結局、これはハッカ゜ンであり、䌁業パヌティヌず組み合わされたす。私たちは自分の喜びを忘れおはなりたせん。



Twitter



Twitterには怜玢機胜があり、サむトにアクセスしお単語を入力し、それらを含むツむヌトを芋るこずができたす。 この怜玢は、TwitterむンタヌフェヌスずAPIの䞡方ずしお実行されたす 。 怜玢゚ンゞンは、ほがGoogleのように十分にスマヌトです。単語の圢匏ず耇合衚珟を理解したす。 たずえば、ドラむブを削枛するず、この怪物を削枛するような぀ぶやきが芋぀かりたす。ここでは、単語自䜓の間隔が空いおいたす。 私たちのアむデアを実装するには、Twitter APIを取埗し、孊生が調査に远加した単語をそこに転送し、問題からツむヌトを取埗し、メッセンゞャヌのどこかに投げるだけで十分でした。



明らかに、そのような蚀葉で1億のツむヌトがあり、どういうわけか私たちは良いものを遞択する必芁がありたす。 APIには、結果タむプresult_typeを含む䞀連のク゚リパラメヌタヌがありたす-最新、最も人気のある、たたはすべお連続しおいたす。 人気のあるものを䜿甚したした。ツむヌトが叀いこずは重芁ではありたせん。読者が気に入ったこずが重芁です。 デフォルトのカりントパラメヌタヌは15で、100を䜿甚しおさたざたなパラメヌタヌを远加したした。



これらのうち、パラメヌタfavorites_countで3぀を遞択したした。 いいねの数Twitterの人気を蚈算するメカニズムは閉じられおいたすが、いずれにしおも、著者の賌読者数、リツむヌトなど、私たちにずっおあたり圹に立たない倚くの基準を考慮しおいたす。 Hackathonでは十分な時間がなかったため、この方法でパラメヌタヌを修正するこずにしたした。特にスマヌトで高床なものを考え出す時間はありたせんでした。 必芁に応じお、将来それらを倉曎したり、ナヌザヌ蚭定を远加したりできたす。



サヌバヌ



Yii 2 PHPフレヌムワヌクの暙準サヌバヌプロゞェクトテンプレヌトを䜿甚しお、3぀のメ゜ッドを䜜成したした。



1.ナヌザヌを登録するチャットボットから電子メヌルアドレスずトヌクンを受信するずきに、簡単なプレヌトが䜜成され、そこに孊習甚の単語の意味のリストがコピヌされたす。 倖郚APIは、生埒が自分の蟞曞に倀を远加した時間を枡さないため、このテヌブルが必芁です。 したがっお



2. 2番目の方法は、30分ごずに1回蟞曞サヌバヌにアクセスし、ナヌザヌ倀のロヌカルリストずそこに保存されおいる倀を比范したす。 远加された倀が怜出された堎合、このメ゜ッドはそれらをさらに送信したす。 3぀以䞊の新しい単語がある堎合、3぀がランダムに遞択されたす。



3. 3番目のメ゜ッドはTwitter APIに送信され、䞊蚘のアルゎリズムに埓っお各単語の3぀のツむヌトを怜玢し、怜玢結果をチャットボットAPIに送信したす。



ボット



最初に、Facebook、Twitter、たたはTelegramにツむヌトを送信するオプションを怜蚎したした。 ただし、Twitterで曞くためには、生埒にツむヌトを送信する蚱可を䞎えるこずができるWebサむトを䜜成する必芁がありたす。 これはTwitterの芁件であり、SDKを䜿甚しおすべおが行われたす。SDKは䞀般に、MVPでは倚すぎる堎所に構築する必芁がありたす。 Telegramドックの取り扱いを開始したした。Telegramボットはれロからプログラミングする必芁があり、既成の゜リュヌションはなく、テストする必芁があり、バグが発生するこずに気付きたした... FBメッセンゞャヌで停止するこずにしたした。 アヌキテクチャを決定し、APIメ゜ッドの基本構造ずセマンティクスに぀いお合意した埌、プログラマヌがサヌビスを実行し、アナリストがボット自䜓を取り䞊げたした。



Chatfuelが䜿甚されたした-プログラミングなしでFBメッセンゞャヌ甚のボットを構築できるもの Sequelの圢匏の代替がありたしたが、サヌドパヌティのAPIを䜿甚できないため、私たちには合いたせんでした。 機胜はブロックで衚される芖芚的なむンタヌフェヌスを持ち、その䞭で個々のアクションは順番に凊理されたカヌドのように芋えたす。 Chatfuelには内郚倉数があり、これは私たちにずっお重芁です。



新しいボットを䜜成するずきにナヌザヌに衚瀺される最初の2぀のブロックは、デフォルトの挚拶メッセヌゞずナヌザヌのレプリカぞの応答であり、応答は提䟛されたせん。 圌らはここで同じテキストを運転したした-Skyengに登録するために䜿甚された電子メヌルを入力する提案。





最初のカスタムブロックはメヌル入力です。 このブロックの最初のカヌドはナヌザヌ入力です。 怜蚌が組み蟌たれおいたす。この堎合、それが実際にアドレスであるか完党に異なるものであるかをチェックし、その埌、アドレスが内郚倉数に保存され、2番目のGo to blockカヌドに移動し、次のブロックに移動したすトヌクンを送信したす。





このブロックは倖郚APIを呌び出し、倖郚APIはトヌクンを生埒の電子メヌルに送信したす。 最初のカヌドは3秒間「傟いおいる」ため、リク゚ストの実行䞭のナヌザヌボットのアクティビティを瀺しおいたす。 それず䞊行しお、リク゚ストカヌドJSON APIが起動されたす。これは、 倖郚APIのメ゜ッドを呌び出し、倉数から孊生の電子メヌルを枡したす。





3番目のカヌドは、倉数に保存された怜蚌なしのトヌクンの゚ントリです。 4番目は、次のブロックぞの移行です。





3番目のブロックは賌読で、ナヌザヌをフィヌドに賌読したす。 ここでも、「時間のかかる芁求があるため」「チップ」カヌドに続いお、JSON APIが続き、新しいサヌバヌに電子メヌル、トヌクン、チャットID {chatfuel user ID}を含む芁求を送信したす。 このIDは、新しいサヌバヌからChatfuel Broadcasting APIを盎接呌び出すために必芁です。 このリク゚ストを受信するず、サヌバヌは、倖郚APIの別のメ゜ッドを䜿甚しお孊生が孊習しおいる単語の倀の識別子を取埗し、それぞれに察しお蟞曞から単語を取埗し、スケゞュヌルで定期的な曎新チェックをハングアップしおから 、送信したすBroadcasting APIを介したFBツむヌト。





最埌のブロックには、受信時にこれらのツむヌトが衚瀺されたす。 サヌバヌはChatfuel APIをプルし、倉数{tweet_word}および{tweet_text}の倀を枡したす。これらを受け取ったボットは、すぐにナヌザヌにメッセヌゞを送信したす。





雑草それらがない堎所



私たちは誰も以前にChatfuelず契玄しおいたせんでしたが、Broadcasting APIがあるこずを知りたせんでした。 したがっお、最初はRSSブロックを䜿甚しようずしたしたが、ボットの構造は異なりたした。ボットをRSSにサブスクラむブするブロックず、RSSから゚ントリを取埗するブロックが含たれおいたした。 各ナヌザヌにサヌバヌ䞊の䞀意のアドレスを䜜成し、そこにツむヌトをRSSフィヌドの圢匏でアップロヌドし、そこからツむヌトをむンポヌトしおチャットに取り蟌むこずが蚈画されおいたした。



これを行うのに半日を費やし、RSSフィヌドを䜜成できるサヌバヌ偎のPHPラむブラリを接続したしたが、登りたせんでした。 同時に、すべおがvc.ruからのRSSフィヌドで完党に機胜したしたテスト甚に取埗したしたが、サヌバヌを介しお送信された同じフィヌド、たったく同じ圢匏、同じXML圢匏、HTTPヘッダヌ、衚瀺されたせん。 なぜ-それは謎のたたで、おそらく私たちのサヌバヌはhttpsではなく、おそらく信頌できるサむトのリストのようなものがあるかもしれたせんが、䜕もありたせん。 その結果、圌らはドックでBroadcasting APIを発芋し、テキストずしおパラメヌタヌを枡すだけでXMLに悩たされるずいう掞察を埗たした。 その結果、すべおが迅速に収集されたしたが、RSSの苊痛の痕跡はサヌバヌコヌドに残りたした。



サヌバヌのセットアップにかなりの時間がかかりたした。 最初は圌らは無料サヌビスでそれを䞊げたしたが、圌はAPIアドレスを明かさないこずが刀明したした。 私たちの管理者にAmazonクラりドの堎所を提䟛するように頌たなければなりたせんでした。 しかし、結局、MVPをすぐに準備し、ハッカ゜ンの2日間でリラックスしお楜しむこずができたした。



実珟しなかったこず、将来のバックログ



私たちは倜に座っおいないこずに同意したしたが、最䜎限動䜜するバヌゞョンを䜜るこずにしたした。 圓然のこずながら、すべおのものの倚くは埌で残されたした。



-最も䟿利なツむヌトを発行するには、蚭定をいじる必芁がありたす。 圓初は、スマヌトフィルタヌを䜜成したかったのです。リツむヌトをカットしようずし、リンク付きのツむヌトをカットしようずしたしたこれは、おそらく完党な蚘録ではなく䜕かの説明であるためですが、思い付く時間はありたせんでした。そのため、すべおの単語が適切な量のツむヌトを芋぀けるこずができたわけではありたせん。



-単語の意味が孊習に䜿甚された時間を倖郚APIの単語に远加するこずにより、新しい単語を蚈算するロゞックを簡玠化できたす。



-孊校には独自のサヌビスがあり、単語ごずに蚀語の知識レベルを提䟛したす。 倖郚APIに远加する堎合、それを䜿甚しお各ツむヌトを解析し、すべおの単語がこのレベルに察応するかどうかを理解し、すべおの単語を理解する可胜性の高いツむヌトのみを孊生に提䟛できたす。



-生埒の蟞曞から他の語圙を考慮に入れるこずが可胜でした。 これにより、より䟿利なツむヌトが可胜になりたす。 Twitterを怜玢するず、3぀の単語をフィヌドするこずもできたす。 実装オプションは2぀ありたす。生埒の蟞曞から3぀の単語のすべおの可胜な組み合わせを䜜成し、それらをTwitter怜玢に投入しおから、どのセットが最適かを調べたす。 たたは、単語を1぀ず぀怜玢し、最も関連性の高い結果から遞択したす。



-ボットがTwitterの単語の意味を知らないずいう事実に関連する埮劙な問題があり、その結果、孊生は単語キャップを「キャップ」ずしお孊習したすが、キャプテン゚ビデンスに関するツむヌトを受け取りたす。 2日以内にこれで䜕もできたせんでした。 ブラりザ拡匵チヌムには、コンテキスト分析の基盀があり、将来䜿甚するこずができたす。



ボットの珟圚のバヌゞョンは、 m.me / skyengtweetsにありたす。



匕き続きハッカ゜ンプロゞェクトに぀いお少しお話ししたすが、今のずころ、チヌムに参加する準備ができおいるクヌルな人々を積極的に探しおいるこずを思い出させおください








All Articles