Twitter Streaming API が面倒だったので、api.aiで済ませた話。

twitter api.ai
Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInEmail this to someone

とある案件で、「Twitterでリプライを受けたら、その内容にあった返答を返す。」というよくあるTwitterボット開発の話があったのですが、その仕様というのが

  • 特定のハッシュタグが付いたリプライのみ、ボットで自動応答を返す。
  • リプライ内容から質問に該当する単語を抽出
  • 抽出した単語を別途用意されたMySQLから検索
  • 検索でマッチした行の返答文を返す

というもの。

Twitterには、「Twitter Webstreamin API」があるので、それでリプライを監視。取得したリプライから形態素解析してごにょごにょ…と考えていました。

で、いろいろコードを書いて試した上での結果。

api.aiに監視してもらったほうが実装も反応も早かった

api.aiの「Integration」機能でTwitterアプリと連携。「Fulfillment」で応答文処理をするコードにwebhookさせる。というやり方で、結構あっさり実装完了。しかも応答が早い…。Streaming APIに悩む必要なかった ( ;∀;)

api.aiとTwitterのIntegrationは、普通に公式ドキュメントが分かりやすいです。アプリ名とボット名を揃えないと機能しないのでご注意を。

Fulfillmentは、応答プログラム先をWebhook URLに指定するだけなので、特に難しいこともなく。特定のハッシュタグの場合のみWebhookするとかの条件には、Intentsの中で「Use webhook」をチェックします。

こうする事で、該当ハッシュタグがない応答はスルーされます。

Webhook URL側からTwitterにリプライする

api.aiからFulfillmentでWebhookされた際、Twitter側のJSON内容もWebhookされてきます。ここから投稿内容とあわせて、投稿固有のID(idStr)も取得できるため、それを使ってTwitter REST APIを通してリプライします。

結果として、Twitter Streaming APIを使わなくても、ある程度の自由度を持った、自前のDBと連携したリプライボットが構築できました。( ;∀;)

Streaming APIが正しく動いているか?の監視の手間とかも考えると、これはだいぶ便利な感じです。かつ、それ以降の処理自由度が保たれているのも、api.aiの特長と言えるでしょう。

ちなみに、特定ツイート監視用と自然言語処理用でapi.aiを2エージェント組み合わせて遊んだりもしてます。ラピッドプロトタイピング的に使えるのもいいですね。

Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInEmail this to someone