「[ソニックガーデン 若手プログラマ - Qiita Advent Calendar 2024]」(https://qiita.com/advent-calendar/2024/sonicgarden-junior) 16日目の記事です。
はじめに
以前、既存のRailsアプリにLINE Messaging APIを組み込んでLINE BOTを作成しました。
この記事ではMessaging APIを使って、LINE BOTからメッセージを受け取る、返す、LINE公式アカウントのトーク画面下部に表示されるメニュー(リッチメニュー)の使い方についても簡単に紹介します。
準備
LINE Messaging APIを利用するにはLINE Developersに新規のアカウントを登録する必要があります。登録したらアクセストークンとシークレットを取得しておいてください。これらはRails側で環境変数として設定します。
Railsの環境構築などは省略します。
SDKの利用
LINE Messaging API SDKが用意されているので、今回はこれを利用します。
Gemfileファイルに以下を記述し、bundle install
してください。
gem 'line-bot-api'
ルーティングの設定
LINEプラットフォームからリクエストを受け取る入口をRails側で作ります。
Rails.application.routes.draw do
resource :line_webhooks, only: %i[create]
end
/line_webhooks
を設定のwebhookURLに設定します。
LINEボットの友達追加
設定画面のQRコードからLINEボットを友だち追加しておきます。ここからメッセージを送信したり、受け取ったりします。
LINEからメッセージを受け取る・送信する
上で友達追加したトーク画面からメッセージを送信すると、JSON形式でデータが来ます。それをline_bot_client
のparse_events_from
メソッドでparseしてイベントを取得します。
またreply_message
メソッドで逆にこちらからメッセージを送ることも可能です。
class LineWebhooksController < ApplicationController
def create
body = request.body.read
events = line_bot_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"]
}
line_bot_client.reply_message(event['replyToken'], message)
end
end
end
end
private
def line_bot_client
Line::Bot::Client.new do |config|
config.channel_secret = Rails.application.credentials.LINE_CHANNEL_SECRET
config.channel_token = Rails.application.credentials.LINE_CHANNEL_TOKEN
end
end
リッチメニュー
リッチメニューとはLINEのトーク画面の下部に表示されるメニュー機能のことです。ここにいろいろなアクションを設定することができます。
リッチメニューの作り方は2種類あります。
1つ目はLINEのOfficial Account Manegerから作る方法です。こちらはGUI操作でメニューの分割方法や画像、さらにそこに設定するアクションなどを簡単に設定することができます。
ある程度のメニューであればこちらで設定することができます。
2つ目はMessaging APIで作る方法です。テンプレートに設定したいものがなかったり、日時選択のようなアクションやタブによって切り替えられるメニューを設定する場合は現状ではこちらで設定するしかありません。
やり方としては画像を準備して座標(x, y)でそれぞれの領域にアクションを当てていきます。その際、チャンネルアクセストークンが必要になるので準備しておきましょう。
curl -v -X POST https://api.line.me/v2/bot/richmenu \
-H 'Authorization: Bearer チャンネルアクセストークン' \
-H 'Content-Type: application/json' \
-d \
'{
"size": {
"width": 2500,
"height": 1600
},
"selected": false,
"name": "リッチメニュー",
"chatBarText": "メニューはこちら",
"areas": [
{
"bounds": {
"x": 0,
"y": 0,
"width": 2500,
"height": 800
},
"action": {
"type": "message",
"label": "あいさつ",
"text": "こんにちは"
}
},
{
"bounds": {
"x": 1250,
"y": 0,
"width": 2500,
"height": 800
},
"action": {
"type": "url",
"label": "URL",
"URL": "xxx.com"
}
}
]
}'
おわりに
今回はLINE Messaging APIのほんの一部の機能を紹介しました。ドキュメントを見てもらえればわかるのですがまだまだいろんなことができそうです。
最後までありがとうございました。