🔔

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