LINE BOTを短時間で試す方法

line Line
bot bot

参考にした記事
Line Messaging API オウム返しBot(rails × heroku)

  • オウム返しをしてくれるBOTを最速で作成しましょう!
  • 所要時間目安30〜60分

環境構築

アカウント

まずはLINEのアカウントを作成しましょう
下記を参考に
https://developers.line.me/messaging-api/getting-started

LINE認証情報について

アカウント作成が完了したら以下にアクセス
https://business.line.me/ja/

LINE developersのBasic Informationに以下の記載があります

  • Channel ID
  • Channel Secret
  • Channel Access Token

上記を控えておいて下さい

Heroku

fixieインストール

以下を参考に
LINE BOT をとりあえずタダで Heroku で動かす

こちらはHerokuの操作コマンドもまとめて掲載されています
LINE BOTを動かす環境を調べてみた

herokuアカウント作成後、fixieをインストール

heroku addons:create fixie:tricycle

アカウント設定を確認

  • Proxy URL
  • Outbound IPs

上記を控えておいて下さい

LINE developersでServer IP Whitelist設定

https://business.line.me/ja/
アカウントリストから対象のアカウントのLINE developersへアクセスして下さい

画面左のタブからServer IP Whitelistをクリック
上記で控えたOutbound IpsをIP addressに設定して下さい
(/ 以降は一旦気にしないでください)

LINE developersでWebhook URL設定

LINE developersでServer IP Whitelist設定と同様に画面左のタブのBasic Informationクリック

Webhook URL

下記を追記してください

https://{ご自身のherokuアプリ名}.herokuapp.com:443/callback

Herokuのキー設定

herokuに環境変数の設定を行います

heroku config:add OUTBOUND_PROXY = '先ほどメモした設定値'
heroku config:add CHANNEL_SECRET = '先ほどメモした設定値'
heroku config:add CHANNEL_ACCESS_TOKEN = '先ほどメモした設定値'

実装

rails

gem

gem 'dotenv-rails'
gem 'faraday'
gem 'faraday_middleware'

// heroku用
group :production do
  gem 'rails_12factor'
end

上記を追記して下さい

line_client

lib/line_client.rb

line_client.rbには主にLINEからの返信内容に関する、実装がされています

class LineClient
  END_POINT = "https://api.line.me"

  def initialize(channel_access_token, proxy = nil)
    @channel_access_token = channel_access_token
    @proxy = proxy
  end

  def post(path, data)
    client = Faraday.new(:url => END_POINT) do |conn|
      conn.request :json
      conn.response :json, :content_type => /\bjson$/
      conn.adapter Faraday.default_adapter
      conn.proxy @proxy
    end

    res = client.post do |request|
      request.url path
      request.headers = {
        'Content-type' => 'application/json',
        'Authorization' => "Bearer #{@channel_access_token}"
      }
      request.body = data
    end
    res
  end

  def reply(replyToken, text)

    messages = [
      {
        "type" => "text" ,
        "text" => text
      }
    ]

    body = {
      "replyToken" => replyToken ,
      "messages" => messages
    }
    post('/v2/bot/message/reply', body.to_json)
  end

end

上記の def reply(replyToken, text) のtextにBotに対して入力した
文字列情報が格納されていて、Json型式で内容をそのまま返却する実装です

コントローラ

webhook_controller.rb

class WebhookController < ApplicationController
  // Lineからのcallbackか認証
  protect_from_forgery with: :null_session

  CHANNEL_SECRET = ENV['CHANNEL_SECRET']
  OUTBOUND_PROXY = ENV['OUTBOUND_PROXY']
  CHANNEL_ACCESS_TOKEN = ENV['CHANNEL_ACCESS_TOKEN']

  def callback
    unless is_validate_signature
      render :nothing => true, status: 470
    end

    event = params["events"][0]
    event_type = event["type"]
    replyToken = event["replyToken"]

    case event_type
    when "message"
      input_text = event["message"]["text"]
      output_text = input_text
    end

    client = LineClient.new(CHANNEL_ACCESS_TOKEN, OUTBOUND_PROXY)
    res = client.reply(replyToken, output_text)

    if res.status == 200
      logger.info({success: res})
    else
      logger.info({fail: res})
    end

    render :nothing => true, status: :ok
  end

  private
  # verify access from LINE
  def is_validate_signature
    signature = request.headers["X-LINE-Signature"]
    http_request_body = request.raw_post
    hash = OpenSSL::HMAC::digest(OpenSSL::Digest::SHA256.new, CHANNEL_SECRET, http_request_body)
    signature_answer = Base64.strict_encode64(hash)
    signature == signature_answer
  end
end

res = client.reply(replyToken, output_text, user)
先程作成した line_client.rb に入力値 output_text を渡しています

ルート設定

config/routes.rb

Rails.application.routes.draw do
  post '/callback' => 'webhook#callback'
end

デプロイ

一応Herokuのコマンドについては以下を参考に
Heroku コマンド・設定 メモメモ

git add .
git commit -m "任意のコメント"
git push heroku master

試してみよう

作成したLINE BOTを友だち追加してテストしてみましょう

うまく動かない場合は heroku logs -t でエラー内容を確認しましょう

最後に

ここまでできてしまえば後は
https://devdocs.line.me/ja/#webhooks
上記のリファレンスを参考に
スクリーンショット 2017-02-04 20.02.14.png

スクリーンショット 2017-02-04 20.01.31.png

リファレンスには上記の実装方法など詳細に記載がありますのでいろいろなことを試してみましょう

わたしも先月はじめてLINE BOT作ってみましたが、
結構な時間を環境構築にかけてしまいました
わたしのように時間をかけないでいただけたら幸いです

つくってみて正直とってもおもしろかったですね
わたしはgoogleの検索エンジンと連携してCarouselで
表示することまでやってみました
まだまだできることが盛り沢山なのでいろいろ試したいですね

googleとの連携はこちらを参考に