概要
Web APIを学習するために、LINEのBot開発を行いました。
今回は簡単な送られたテキストをそのまま返すechoBotを作成します。
Railsで開発し、Herokuへのデプロイまで行います。
環境
・Ruby 2.6.5
・Rails 6.0.3.2
・PostgreSQL
・Heroku
目次
・LINE Developersでchannelを作成
・Bot本体のプログラムを作成(Ruby/Rails)
・Herokuへのデプロイ
LINE Developersでchannelを作成
まずはLINEデベロッパー登録を行います。 その後にプロバイダーとチャネルを作成し、必要なAPIキーを取得しましょう。
https://developers.line.biz/ja/docs/messaging-api/getting-started/
公式(上記)を参考にBot用channelを作成します。
簡単に作業を箇条書きにしますと、
・LINE Developersコンソールにログイン
・名前とメールアドレスを入力して開発者アカウントを作成
・プロバイダ、チャネルを作成、この時MessagingAPIを指定
・アクセストークンを発行
・応答メッセージをオフ Webhockをオンに設定しておく
Channel secretとChannel access tokenがBot開発に必要なのでここでメモしておきます!
Bot本体のプログラムを作成(Ruby/Rails)
HerokuにデプロイするのでDBはPostgreSQLを使用します。
$ rails new アプリ名 -d postgresql
$ cd アプリ名
$ git init
必要なgemをインストール
line-bot-apiというgemを使用します。
gem 'line-bot-api'
$ bundule install
実装
1. ルーティングの設定
Rails.application.routes.draw do
post '/callback' => 'linebot#callback'
end
2. コントローラーを作成
$ rails g controller linebot
3. コントローラーへの記述
コントローラーへの記述はライン公式SDKのRUBYを参考に(コピペ)しました。
https://github.com/line/line-bot-sdk-ruby/blob/master/examples/echobot/app.rb
class LinebotController < ApplicationController
require 'line/bot' # gem 'line-bot-api'
def client
@client ||= Line::Bot::Client.new { |config|
config.channel_secret = ENV["LINE_CHANNEL_SECRET"]
config.channel_token = ENV["LINE_CHANNEL_TOKEN"]
}
end
post '/callback' do
body = request.body.read
signature = request.env['HTTP_X_LINE_SIGNATURE']
unless client.validate_signature(body, signature)
halt 400, {'Content-Type' => 'text/plain'}, 'Bad Request'
end
events = client.parse_events_from(body)
events.each do |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
end
"OK"
end
end
Herokuへのデプロイ
まずはHerokuへのログインをし、Heroku上にアプリを作成し、デプロイをします。
Heroku側に環境変数を設定します。
$ heroku config:set LINE_CHANNEL_SECRET=ここに先程メモしたChannel Secretを貼り付ける
$ heroku config:set LINE_CHANNEL_TOKEN=ここに先程メモしたアクセストークンを貼り付ける
LINE developersでWebhook settingsの設定をする
デプロイしたアドレスの末尾に/callbackをつけたURLをWebhookに設定する.
これでecho-botの完成です。テキストを送ると同じテキストを返してきます。
まとめ
現状ではコードの変更後、デプロイしなくては反映されないので、
次回はngrokを用いてローカル環境で動かす方法を行います。
https://qiita.com/shizu9d/items/42b2cb209b2e23a9af6d
参考文献
以下の記事を参考にさせていただきました。
https://qiita.com/noriya1217/items/00d6461e9f54900377a3