LINE Message APIでRailsを使っておうむ返し
こんにちは! 今LINE Message APIでRailsを使ってちょこっと作りたいものがあるので
その前哨戦としてまずはおうむ返しをしてみたのでメモ!
まずは携帯にはラインはあるけどパソコンにはラインはまだインストールしていなかったので
まずはインストール。
そしてLINE developersアカウントを下記のサイトから登録を行います。
https://developers.line.me/ja/
こちらの記事を参照
LINE developersアカウントの登録とMessaging APIの基本設定 - Symfoware
次にherokuアカウントの準備
$ rails new sample_bot
本当はここで
$ rails new sample_bot --database=postgresql
をしたかった。 herokuはSQLiteが使えないのでPostgreSQLを使う為に上記の様にしたかった
そしたらローカル環境でも本番環境でもちょっとだけめんどくさくなくなるみたい
必死こいてググって色々やってみたがなぜか出来なくて
今回はローカルではSQLite、本番ではPostgreSQLで進む
その時にGemfileにgem 'sqlite3'も生成されるからそれをローカル環境に移動してあげる
group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] gem 'sqlite3' end
本番環境ではPostgreSQLで実行するからGemfileに追加してあげる
group :production do gem 'pg', '0.20.0' end
そして
$ bundle install --without production $ rails s
で、いつものやつが出たら成功!!
次にLINE botを使うためのgemをいれる
Gemfileに
gem 'line-bot-api'
を追加
忘れる事なく
$ bundle install --without production
次に今回作るおうむ返し用のアプリをherokuで作成する
$ heroku create sample-line-bot20001211
heroku側の動作確認用にroutingの設定を実施
app/controllers/application_controller.rbを以下の定義を追加
def hello render html: "hello, world!" end
app/config/routes.rbを以下の定義を追加
root 'application#hello'
commitしてからherokuにデプロイ
$ git add . $ git commit -m 'first commit' $ git push heroku master $ heroku open
heroku openした時にエラー発生!!
Gemfileみたりコードが間違えていないか色々検証したが
この時点でほとんどまだコードを書いてないのにエラーになった
herokuのアプリを消去してからもう1回作成してremoteのurlを変更してから
再度heroku openしたらしっかりと表示された!!
LINEからのrequestを受け取るcontrollerの作成
$ rails g controller linebot
LINEbotの認証情報をセキュアに利用できるようにdotenv-railsを導入
gem 'dotenv-rails'
gem 'dotenv-rails' とは?下記参照
環境によって変わる設定値はdotenvを使うと便利 - Qiita
忘れる事なく
$ bundle install --without production
heroku側で、値を参照できるようにLINE developersアカウントを作成した時に
Channel Secret、アクセストークンをsetしておきます。
$ heroku config:set LINE_CHANNEL_SECRET=xxxx $ heroku config:set LINE_CHANNEL_TOKEN=xxxx
xxxxにコピペして貼り付け
routingの定義を追加
config/routes.rbを編集します
post '/callback' => 'linebot#callback'
controllerの実装
app/controllers/linebot_controller.rbを編集します
class LinebotController < ApplicationController require 'line/bot' # gem 'line-bot-api' # 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) 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) end end } head :ok end end
そしてデプロイ
$ git add . $ git commit -m 'setup reply' $ git push heroku master
LINE Botの設定画面にherokuのappのURLを設定 LINE botの管理画面に戻って、Webhook URLという部分を編集
URLは先ほど追加したLINE Botのリクエストの受け口である/callbackの指定を忘れない
投稿に応じてWebhookイベントを発生をONにする
Webhook URL設定の上の欄です。 編集して、利用するにチェックして更新する
(任意)LINE Bot デフォルトの自動返信を削除する
以下の自動応答メッセージを削除しておくと、おうむ返しの確認がしやすいです
検証
LINE developerのページに戻りQRコードから友達追加
なんでも良いから送っておうむ返し出来たら成功!!