2016年10月19日水曜日

LINE Messaging API をとりあえず試してみた

概要

10.18 に LINE BOT API Trial Account の廃止とともに LINE Messaging API が公開になりました
さっそく Messaging API を試してみたので紹介します

環境

  • LINE@ Manager 2016/10/19 時点の UI
  • LINE Developers 2016/10/19 時点の UI
  • Ruby 2.2.3p173
  • gem 2.4.5.1
    • sinatra 1.4.7
    • line-bot-api 1.0.0
  • Heroku + Fixie

LINE Business Center での作業

まずは、ボット用のアカウントの作成を行います

LINE Business Center へのログイン

LINE Business Center のサービス一覧から Messaging API を選択し Messaging API のトップ画面を表示したら「Messaging API を始める」を選択しましょう
try_line_msging_api_top_page.png

すると LINE Business Center にログインする画面になるのでログインしてください
このアカウントは普段スマホ等で利用している LINE アプリの ID/PW になります
try_line_msging_api_login.png

次に組織を選択する画面になるので組織情報を選択します
会社を登録したい場合には新規で追加しても良いですが、今回は個人で進めるのですでにある下の欄にある個人名義の組織を選択すれば OK です
try_line_msging_api_choise_org.png

ボット用のアカウントの作成

次の画面でボットのアカウントを作成することができます
名前、アイコンを適当に決めたらアカウントの業種を選択しましょう
今回は「個人」「個人 (IT・コンピュータ)」を選択しました
例えばグルメ情報を配信するボットなのであれば「飲食店・レストラン」とかを大業種に選択すると良いと思います
try_line_msging_api_input_bot_info.png

「確認する」をクリックすると確認画面になるので、問題なければ「申し込む」で申し込んでください

LINE@ Manager での作業

作成したアカウントが Messaging API を使えるための設定を行っていきます

Messaging API を有効にする

アカウントの登録が完了した画面から「LINE@ Manager」に移動できるので移動してください
LINE@ Manager は作成したアカウントの設定やメッセージの管理ができる所謂コンパネになります
アカウントごとに準備されているので、アカウントごとに切り替える必要があります

アクセスできたら左メニューから「アカウント設定」->「Bot 設定」と選択します
「API を利用する」というボタンが右ペインに表示されると思うので、選択し Messaging API を利用できるようにします
try_line_msging_api_enable_api.png

ちなみに上記を実施した後、LINE Business Center のアカウントリストを見ると Messaging API がアカウントに追加されていることがわかります
try_line_msging_api_confirm_status.png

リクエスト設定 を有効にする

引き続き LINE@ Manager で作業します
「アカウント設定」->「Bot 設定」を選択します

リクエスト設定という欄があると思うので「利用する」にチェックを入れて「保存」を選択します
try_line_msging_api_enable_webhook.png

これは何の設定かと言うと、ボットに話かけた際に実際に何か処理をするサーバに対して Webhook を送信することで、そちらで具体的な処理が開始できるようにしています
もちろんこの Webhook で送信される情報にボットに話しかけた際のメッセージや誰から話かけれたかなどの情報が含まれています

またこの画面で同時に以下の詳細設定を変更することができます

  • Botのグループトーク参加
  • 自動応答メッセージ
  • 友だち追加時あいさつ

必要であれば変更しましょう
今回はとりあえずデフォルトのまま進めます

LINE Developers での作業

実際にボットが動作するサーバのための設定を行います

Channel Access Token の確認

LINE Business Center のアカウントリストから「LINE Developers」を選択してください
すると LINE Developers という新たな管理画面に移動します
try_line_msging_api_move_developers.png

LINE Developers では主にチャネルと呼ばれる Messaging API を呼び出すために必要なボットの認証情報やサーバの設定を行います

「Basic Information」に「Channel Access Token」という欄があります
そこの「ISSUE」というボタンをクリックすると認証に必要なトークンが表示されるのでメモしておきましょう
try_line_msging_api_issue_token.png

Webhook URL と Server IP Whitelist の設定

ボット用のアプリケーションをデプロイしたサーバの情報を設定する必要があります
先にアプリケーションを作成する必要があるので後述します

アプリケーションの作成

ではボットのアプリケーションを作成していきます
今回は Ruby の line-bot-sdk-ruby を使ってアプリケーションを開発しデプロイ先は Heroku とします

アプリケーションの開発

とりあえずオウム返しするボットアプリケーションを作成してみます

  • cd /path/to/work
  • bundle init
  • vim Gemfile
gem 'sinatra'
gem 'line-bot-api'
  • bundle install
  • vim app.rb
require 'sinatra'
require 'line/bot'

class HTTPProxyClient
  def http(uri)
    proxy_class = Net::HTTP::Proxy(ENV["FIXIE_URL_HOST"], ENV["FIXIE_URL_POST"], ENV["FIXIE_URL_USER"], ENV["FIXIE_URL_PASSWORD"])
    http = proxy_class.new(uri.host, uri.port)
    if uri.scheme == "https"
      http.use_ssl = true
    end

    http
  end

  def get(url, header = {})
    uri = URI(url)
    http(uri).get(uri.request_uri, header)
  end

  def post(url, payload, header = {})
    uri = URI(url)
    http(uri).post(uri.request_uri, payload, header)
  end
end

def client
  @client ||= Line::Bot::Client.new { |config|
    config.httpclient = HTTPProxyClient.new
    config.channel_secret = ENV["LINE_CHANNEL_SECRET"]
    config.channel_token = ENV["LINE_CHANNEL_TOKEN"]
  }
end

get '/' do
  "Hello, world"
end

post '/callback' do
  body = request.body.read

  signature = request.env['HTTP_X_LINE_SIGNATURE']
  unless client.validate_signature(body, signature)
    error 400 do 'Bad Request' end
  end

  events = client.parse_events_from(body)
  events.each { |event|
    case event
    when Line::Bot::Event::Message
      case event.type
      when Line::Bot::Event::MessageType::Text
        message = {
          type: 'text',
          text: event.message['text']
        }
        client.reply_message(event['replyToken'], message)
      when Line::Bot::Event::MessageType::Image, Line::Bot::Event::MessageType::Video
        response = client.get_message_content(event.message['id'])
        tf = Tempfile.open("content")
        tf.write(response.body)
      end
    end
  }
  "OK"
end
  • vim config.ru
require 'bundler'
Bundler.require

require './app'
run Sinatra::Application
$stdout.sync = true

でアプリケーションの開発は OK です
IP を固定化して動作させる必要があるためローカルでは動作しません
今回は Heroku 上で動作させるので Heroku にデプロイしていきます

アプリケーションのデプロイ

ターミナルから Heroku にデプロイしていきます

  • cd /path/to/work/
  • git init
  • git add .
  • git commit -m "Initial Commit"
  • heroku create --app your-line-bot
  • heroku git:remote --app your-line-bot
  • git push heroku master
  • heroku config:set LINE_CHANNEL_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx LINE_CHANNEL_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --app your-line-bot

でデプロイできます
今回は新規で Heroku 上にアプリケーションをデプロイしています

Fixie アドオンの有効化

過去 に Heroku + Fixie を紹介したのでそれと全く同じ手順で有効にしてください

heroku config で設定する項目も同じなので Fixie を有効後に Fixie の Host と ID/PW を設定してください
有効時に Fixie から払い出された IP アドレスをメモしておいてください

再び Webhook URL と Server IP Whitelist の設定

アプリケーションをデプロイできれば、LINE Developers で Webhook URL と Server IP Whitelist の設定ができます

まず Webhook URL は Heroku にデプロイしたアプリの /callback にアクセスする URL を設定してください
一番下に「Edit」ボタンがあるのでクリックします
Webhook URL の欄にデプロイしたアプリケーションの URL を入力し「Save」します
try_line_msging_api_config_webhook.png

次に Server IP Whitelist を登録します
左メニューから「Server IP Whitelist」を選択し Fixie から払い出された IP アドレスを設定していきます
try_line_msging_api_config_white_ips.png

Fixie の IP アドレスはコマンドラインでアドオンを追加したときに確認できます
もし、忘れてしまった場合は https://dashboard.usefixie.com/#/account で確認することができます

動作確認

まずは今回作成したボット用のアカウントと LINE アプリで友達になりましょう
QR コードを読み込むなり適当に友達になるボタンをサイトに配置してスマホでアクセスして友達になってください

今回のボットの場合友達になった瞬間メッセージが届くと思います
これは今回の Messaging API で新たに追加になった「友だち追加時あいさつ」の機能を ON にしているためです

適当にメッセージを送信してみましょう
するとボットがオウム返ししてくると思います
しかもそのときにまた謎のメッセージが返ってくると思いますがこれは「自動応答メッセージ」機能を無期限で ON にしているためどんなメッセージに対しても必ず返してしまいます

この辺の「友だち追加時あいさつ「自動応答メッセージ」を OFF にしたい場合は先ほど紹介した LINE@ Manager から Bot 設定で詳細設定を変更できるので試してみたください
try_line_msging_api_test_bot.png

最後に

新しくなった LINE Messaging API を試してみました

前回の BOT API Trial Account に比べて機能が拡充したのと LINE@ Manager なる管理画面が増えたおかげで、自動応答のメッセージや定期配信などがプログラミングなしで行えるようになったのは、嬉しい点だと思います
導入障壁が低くなったという感じも少し感じました

ただ、API の互換性やイベント名前などプログラミングレベルでは結構互換性が崩れていたので、前のボットをそのまま利用するのは厳しいと思います

一番自分が厄介だなと感じたのは、機能うんぬんよりも「LINE Business Center」とか「LINE@ Manager」とか「LINE Developers」とか「Messaging API」とか「Channels」とか言葉がたくさん出てくるところでした
要するにそれらの概念が非常にイメージしにくかったです
試してみるとそれぞれがどういう意味でどういう機能を持っているかわかるのですが、初見だと言葉だけで意味や概念を理解するのは少し大変なんじゃないかなと思いました

とりあえず基本の動作方法はわかったので、この後は新しく追加になったグループ投稿やリッチコンテンツ作成などを試してみたいと思います
そして、せっかくなので LINE BOT AWARDS 2016 にも参加してみたいと思います

参考サイト

0 件のコメント:

コメントを投稿