LINEbotでメッセージおうむ返しアプリケーションを作成
LINEbotにチャットでテキストを送信すると、同じ内容のテキストを返信してくれるアプリケーションを作成していきます。
やることリスト
LINE Developersの登録と設定
LINE Developersで開発者として登録します。
新規プロバイダーを作成します。
チャンネルを作成します。
Ngrokをインストールしてローカル開発環境を構築
Ngrokとは、手元のPC内に立ち上げたローカルサーバを簡単に外部に公開することができるサービスです。LINE Bot開発で、ちょっとした動作確認行うために、毎回Herokuなどにデプロイしてログを確認するという作業をしなくてもいいので作業効率が上がります。
$ brew install ngrok $ ngrok —version $ ngrok http 3000
※サーバーを起動した時に発行される赤線を引いた下記のURLが後々必要になります。
LINEbotの実装
- Railsアプリケーションを作成します。
$ rails new hoge
- LINEbotを使うためのgemを追加して
bundle install
します。
gem 'line-bot-api'
- コントローラを作成します。
$ rails g controller linebot
※コントローラは公式のコードやQiitaの記事を参考にしました。
GitHub - line/line-bot-sdk-ruby: LINE Messaging API SDK for Ruby
Rails+heroku+LINE Messager APIで秘書的なLINEbotを作ってみた(ゴミ出しの通知編) - Qiita
class LinebotController < ApplicationController require 'line/bot' # callbackアクションのCSRFトークン認証を無効 protect_from_forgery :except => [:callback] def client @client ||= Line::Bot::Client.new { |config| config.channel_secret = ENV["LINE_CHANNEL_SECRET"] config.channel_token = ENV["LINE_CHANNEL_TOKEN"] } end def callback body = request.body.read signature = request.env['HTTP_X_LINE_SIGNATURE'] unless client.validate_signature(body, signature) head :bad_request 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) end end } head :ok end end
- linebotコントローラのcallbackメソッドを出力するためにルーティングを設定します。
Rails.application.routes.draw do post '/callback', to: 'linebot#callback' end
dotenvを使ってenvファイル環境変数を設定
- Gemfileにdotenvを追加して
bundle install
します。
gem 'dotenv-rails'
dotenvとは環境変数を管理する事が出来るgemです。 アプリケーションの中で「DBの情報」や「サーバーの情報」「外部APIの連携情報」など第三者に見せたくない機密情報をコードとは別に環境変数として情報を保存します。保存先は.envファイル という機密情報をまとめたファイルを作成し、情報を管理します。.envファイル はgitにそのまま載せると機密情報がgitに乗ってしまうため、 .gitignore に .envファイル を追加することで情報漏洩を回避します。
- アプリケーションのルート直下にenvファイルを作成します。
$ touch .env
- 作成したファイルの中に
LINE_CHANNEL_SECRET
とLINE_CHANNEL_TOKEN
を管理します。
LINE_CHANNEL_SECRET=Channel secretを貼り付ける LINE_CHANNEL_TOKEN=Channel access tokenを貼り付ける
※Channel secretはLINE Developersの指定チャンネル内、Basic settingに記載されています。
※Channel access tokenはLINE Developersの指定チャンネル内、Messaging APIに記載されています。
- gitignoreに.envファイルを追加します
/.env
Webhook URLを設定
- ngrokでサーバーを起動した時に発行されたURLに/callbackをつけて、LINE Developers内のMessaging APIのWebhook settingsに設定します。
これで作成したLINEbotをQRコードで追加することで、チャットをおうむ返しするアプリケーションが完成しました。
ngrokでサーバーを起動してローカル環境でアプリケーションを動かしているので、ngrokのセッションが切れたらその都度Webhook URLを変更しなくてはいけません。