LINEのメッセージングAPIがオープン化されるようで、その一歩としてボットアカウント用の開発APIである「BOT API Trial Account」が公開されたみたいです。
2016年4月7日現在、先着10000アカウント分のBOTアカウント(TRIAL_BOT)が無償で提供されています。
BOT API Trial Account の取得は LINE BUSINESS CENTER から登録することで利用できるようになります。
本日登録したところ、BOT API Trial Accountを作成できたので Ruby / Rails でEchoボットを作ってみました。
API呼び出しを試してみる
BOT API Trial Account を作成すると、LINE Developers の管理画面からBOT APIのトークン等が取得できます。また Callback URL を設定することで、BOTがメッセージを受信したときに、HTTPS POSTで任意のURLを呼び出してくれます。
とりあえず、BOTアカウントが作成できているか確認するには、BOT自身のプロフィールを取得するAPIを叩いてみるとよいかもです。
$ curl -H "X-Line-ChannelID: {Channel ID}" \ -H "X-Line-ChannelSecret: {Channel Secret}" \ -H "X-Line-Trusted-User-With-ACL: {MID}" \ -XGET https://trialbot-api.line.me/v1/profiles?mids={MID}
正しくAPIが呼べると下のようなレスポンスが得られます。
{ "contacts":[ { "displayName":"tricolore", "mid":"{MID}", "pictureUrl":"http://dl.profile.line-cdn.net/0m01541c4d725102ba8dc4186ec8d2f1818c16fd2c19f9", "statusMessage":"" } ], "count":1, "display":1, "pagingRequest":{ "start":1, "display":1, "sortBy":"MID" }, "start":1, "total":1 }
APIの呼び出し元のIPアドレスはServer IP Whitelistで事前に設定しておく必要がある点に注意が必要です。
EchoボットをRailsアプリとして作る
module LineBotApi class Client TO_CHANNEL = 1383378250 EVENT_TYPE = "138311608800106203" EVENT_URL = 'https://trialbot-api.line.me/v1/events' attr_accessor :channel_id, :channel_secret, :channel_mid, :proxy def initialize(options = {}) options.each do |key, value| instance_variable_set("@#{key}", value) end end def credentials { "X-Line-ChannelID": channel_id, "X-Line-ChannelSecret": channel_secret, "X-Line-Trusted-User-With-ACL": channel_mid, } end def send_text_message(to, message) RestClient.proxy = proxy unless proxy.nil? request_headers = credentials.merge({ "Content-Type": "application/json", }) request_params = { to: [to], toChannel: TO_CHANNEL, eventType: EVENT_TYPE, content: { contentType: 1, toType: 1, text: message, } } RestClient.post EVENT_URL, request_params.to_json, request_headers end end end
class MessageReceivesController < ApplicationController protect_from_forgery with: :null_session before_action :get_client def callback params[:result].each do |result| from = result[:content][:from] text = result[:content][:text] @client.send_text_message(from, text) if text.present? end render json: [], status: :ok end private def get_client options = { channel_id: ENV['LINE_CHANNEL_ID'], channel_secret: ENV['LINE_CHANNEL_SECRET'], channel_mid: ENV['LINE_CHANNEL_MID'], proxy: ENV['FIXIE_URL'], } @client = LineBotApi::Client.new(options) end end
こんな感じでコントローラとLINE BOT API呼び出し部分を作って、Herokuにデプロイしてみました。
Callback URLの設定
Callback URL に設定できるのは、https のみのようです。さらに、 https://example.com:443/callback
のようにポート番号も含めないと登録できませんでした。
また、利用するSSL証明書によってはCallback URLが呼び出されないようです。(Rapid SSL はダメな模様)
今回Herokuにデプロイしたので、最初から有効になっている https://{app-name}.herokuapp.com
を使いました。
Server IP Whitelist の設定
BOT API の呼び出し元IPアドレスを予め登録して置かなければなりませんが、Herokuの場合IPアドレスが変わってしまうので、Fixie アドオンを使います。 Fixieを経由することでアウトバウンドのIPアドレスを固定することができます。
2種類のアウトバウンドIPアドレスが発行されるので2つともWhitelistに登録しておきます。
試してみる
LINE Developers の管理画面に表示されているQRコードから友達追加をして、トーク画面を開きます。
適当にメッセージを送るとそのままオウム返しするボットが出来上がりました。
単純なテキストメッセージのみ試してみましたが、画像、動画、スタンプの送信、リッチメッセージの送信等いろいろできるみたいです。
正式にメッセージングAPIがオープン化されるまで、トライアルアカウントはきっと使えると思うのでいろいろ試してみようと思います。 ちなみに、トライアルアカウントは友だち登録可能なユーザー数が50名までに制限されているのであくまでお試し用途ですね。