#はじめに
linebotの設定とか内容は以下のリンクをかなり参考にしてます。
ありがとう御座いました。
環境設定↓
今更ながらRails5+line-bot-sdk-ruby+HerokuでLineBot作成してみたら、色々詰まったのでまとめました。
ボットの内容↓
Ruby on Rails でlinebot。メンヘラbotを作ってみた。
LINEBOT + RailsでWikipediabotを作ってみました。
#アカウントの作成
line developerでアカウント作成。
サイトのデザインはちょくちょく変わってるみたいです。
詳しくは以下のリンク↓
今更ながらRails5+line-bot-sdk-ruby+HerokuでLineBot作成してみたら、色々詰まったのでまとめました。
#アプリの作成
プロジェクトを作って
$rails new sample_bot -d postgresql
dbを作って
$rails db:create
gemを入れて
gem 'line-bot-api'
$bundle install
#ルートの作成
/callbackにラインからアクセスがあった時にlinebotコントローラーのcallbackアクションで処理を行う。
Rails.application.routes.draw do
post '/callback' => 'linebot#callback'
end
#コントローラーの作成
Postモデルは以下のコマンドで作りました。
サンプルのデーターは以下のサイトをまるっとパクりました。すいません。
Ruby on Rails でlinebot。メンヘラbotを作ってみた。
$rails g scaffold Post name:string
コントローラーは送られてきたメッセージに含まれた文字によって返すメッセージをif文で条件分岐しています。
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
# Postモデルの中身をランダムで@postに格納する
@post=Post.offset( rand(Post.count) ).first
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|
# event.message['text']でLINEで送られてきた文書を取得
if event.message['text'].include?("好き")
response = "んほぉぉぉぉぉぉ!すきすきすきすきすきすきすきすきぃぃぃぃぃ"
elsif event.message["text"].include?("行ってきます")
response = "どこいくの?どこいくの?どこいくの?寂しい寂しい寂しい。。。"
elsif event.message['text'].include?("おはよう")
response = "おはよう。なんで今まで連絡くれなかったの?"
elsif event.message['text'].include?("みーくん")
response = "みーくん!?" * 50
else
response = @post.name
end
#if文でresponseに送るメッセージを格納
case event
when Line::Bot::Event::Message
case event.type
when Line::Bot::Event::MessageType::Text
message = {
type: 'text',
text: response
}
client.reply_message(event['replyToken'], message)
end
end
}
head :ok
end
end
#本番環境の設定
herokuにデプロイして、herokuの環境変数に LINE_CHANNEL_SECRET と LINE_CHANNEL_TOKEN をセットする
$heroku config:set LINE_CHANNEL_SECRET=xxxx #xxxxに自分のLINE_CHANNEL_SECRET
$heroku config:set LINE_CHANNEL_TOKEN=xxxx #xxxxに自分のLINE_CHANNEL_TOKEN
でハマったのがLINE_CHANNEL_TOKENがどこにもない!!
IDとLINE_CHANNEL_SECRETしかない!!ってなったのですが、
結果見ている場所が違いました。どうやら、botの設定のサイトを見ていたみたいです。
###Line official account managerのサイトでなく、
###Line Developerのサイトをみてください!!
そこのTOP > プロバイダーリスト > プロバイダー名 > チャンネル名(ボットの名前) > チャネル基本設定に Channel Secret(LINE_CHANNEL_SECRET)とアクセストークン(LINE_CHANNEL_TOKEN)アクセストークンは再発行を押してください。
###Webhook URLの設定
同じくチャンネル基本設定にあるWebhook送信を利用するにし、
Webhook URL ※SSLのみ対応に自分サイトのurlを登録してください。
https://.herokuapp.com/callback :例
注意:ここに登録したurlにラインのデータが送られるようになります。/callbackにラインからアクセスがあった時にlinebotコントローラーのcallbackアクションで処理を行うようにしてるため、このようなurlになっています。