RailsのLINE通知機能の概要
RailsのLINE通知機能の概要
はじめに
RailsでLINE Messaging APIを使用してプッシュ通知機能を実装しました。
細かな実装方法等は記載しません。
概要が理解できるような内容にしています。
LINE側の準備
LINEDevelopersの準備
LINEDevelopersは開発者向けのプラットフォームです。
LINEログイン
プロバイダーを作成して新規チャネルでLINEログインを作成します。
チャネルIDとチャネルシークレットキーをRailsのcredentials等に保持します。
私はLINEログインの認証はgemのdeviseを使用しました。
ユーザー情報としてuidを保存してください。
こちらの情報を元にプッシュ通知を送信します。
こちらのuidは先程作成したプロバイダー単位で変わるようです。
同じLINEユーザーでも別のプロバイダーの場合は別のuidになりました。
このuidを取得するためにLINEログイン機能を利用しましたが、
LINEログイン機能が不要な場合は別の方法でuidを取得する必要があります。
LINEMessagingAPI
先程作成したプロバイダーの新規チャネルでMessaging APIを作成します。
※LINE公式アカウントの作成も合わせて行うことになります。
作成できるとLINEログインとは別のチャネルIDとチャネルシークレットキーが採番されますので、
こちらもRailsのcredentials等に保持します。
またメッセージ送信用にチャネルアクセストークンも発行されるため、
こちらもRailsのcredentials等に保持します。
Rails側の実装
プッシュ通知を送信する場合
プッシュ通知の送信にはgem line-bot-apiを使用しました。
# メッセージリクエストを作成
push_request = Line::Bot::V2::MessagingApi::PushMessageRequest.new(
to: uid,
messages: [
Line::Bot::V2::MessagingApi::TextMessage.new(text: message_text)
]
)
# メッセージ送信
response, status_code, headers = client.push_message_with_http_info(
push_message_request: push_request
)
def self.client
@client ||= Line::Bot::V2::MessagingApi::ApiClient.new(
channel_access_token: Rails.application.credentials.dig(:line_message, :channel_access_token)
)
end
LINEからのメッセージをRails側で取得する場合
Webhookを使用することで、ユーザーがLINEで送信した内容を取得することができます。
LINEDevelopersの設定
Messaging APIの設定で、WebhookURLを設定します。
Railsでの受信方法
送信時と同様にgem line-bot-apiを使用します。
def webhook # 先程のWebhookURLのルーティング先
body = request.body.read # LINEから送られたJSONデータ
signature = request.env["HTTP_X_LINE_SIGNATURE"] # LINEが送ってきた署名
begin
# LINEからの生データを検証してオブジェクトに変更
events = webhook_parser.parse(body: body, signature: signature)
events.each do |event|
handle_event(event)
end
head :ok # 待機しているLINE側に成功を通知
rescue Line::Bot::V2::WebhookParser::InvalidSignatureError
logger.error "Invalid signature from LINE"
head :bad_request
end
end
private
def webhook_parser
@webhook_parser ||= Line::Bot::V2::WebhookParser.new(
channel_secret: Rails.application.credentials.dig(:line_message, :channel_secret)
)
end
def handle_event(event)
case event
when Line::Bot::V2::Webhook::PostbackEvent
handle_post_back_event(event) #このメソッド定義してイベントごとに処理内容を実装する
end
end
注意点
APIの利用料金
LINEMessagingAPIのプッシュ通知は2025/07/20時点で以下のプランでした。
※応答メッセージであれば無料です。プッシュ通知に料金がかかります。
| プラン名 | 料金 | 通数 |
|---|---|---|
| コミュニケーションプラン | 0円 | 200通 |
| ライトプラン | 5,000円 | 5,000通 |
| スタンダードプラン | 15,000円 | 30,000通 |
補足
公式アカウント
LINE公式アカウントのチャネルアイコンとチャネル名は、LINE Official Account Managerで変更できます。
実行方法
プッシュ通知はActiveJobとSidekiqの組み合わせて実行しています。
Discussion