TwitterAPIで、DMを受け取り、DMを返す

目的

お手伝いしてる案件で、TwitterAPI使ってみたのでメモ APIRailsで実装した。

方法

Twitterの開発用アカウント作って、自分のアプリケーションのURLを登録する。

下のURLがわかりやすいので、参考に。 qiita.com

この通りにやれば、別のTwitterアカウントから、開発しているTwitterアカウントにDirectMessageを送ると、APIが叩かれる。

APIの中身を実装する。

下はRubyで実装してあるので、この通りにすればとりあえず動いた GitHub - twitterdev/SnowBotDev: A demo illustrating the Twitter Account Activity and Direct Message APIs.

quick_reply っていう項目があって、これにデータを入れて、レスポンスを返すと、DMの下に選択肢が出るので、便利だなと思った。

簡単に説明

注) パラメーターはミスしてるかもなので、実際に実装するときは、SnowBotDevのgithub参考にしてください。

DMが送られると、TwitterからAPIに、以下のパラメータでリクエストが届く。

params = {
  direct_message_events: {
    type: 'message_create',
    sender_id: 'DMを送信したユーザーのID'
    message_create: {
      message_data: {
        text: 'hogehoge' // ここに文字が入ってるときは、直接DMが送られたとき。
        quick_reply_response: {
          metadata: 'hogehoge' // ここに文字が入ってるときは、こちらが提示した選択肢を押したとき
        }
      }
    }
  }
} 

このリクエストをみて、下のようなレスポンスを作成する。

{
  event: {
    type: 'message_create',
    target: {
       recipient_id: 'DMを送りたいユーザーのID'
    }
    message_create: {
      message_data: {
        text: 'DM message' // DMで送りたいメッセージを入れる
        quick_reply: {  // ここにデータを入れると選択肢を提示できる。
          options: {
            label: '選択肢に出てくるラベル',
            description: '選択肢の説明',
            metadata: '選択肢のIDみたいなもの。この選択肢を押したとき、quick_reply_responceにこの値が入って、再度イベントが送られる。'
          }
        }
      }
    }
  }
}

このレスポンスを、OAuth認証利用して、TwitterAPIに送る

https://github.com/twitterdev/SnowBotDev/blob/master/app/helpers/api_oauth_request.rb