💚

RubyでLINE公式アカウントのフォロワーにメッセージを送信する

に公開4

この記事は

RubyでLINE公式アカウントのフォロワーにメッセージを送信する際に使用したコードを抜粋した。
ここで使用したAPIではユーザーを個別に指定してメッセージを送信できる。

使用するAPI

POST https://api.line.me/v2/bot/message/push
以下は公式ドキュメント
https://developers.line.biz/ja/reference/messaging-api/#send-push-message

送信対象

LINE公式アカウントを友だち追加しているユーザーなど
詳しくはドキュメントを参照

前提

gem 'line-bot-api'

事前にLINEのユーザーIDを取得する。

メッセージを送信する

module LineNotifier
  module_function

  def client
    @client ||= Line::Bot::Client.new do |config|
      config.channel_id = 'メッセージチャンネルのID'
      config.channel_secret = 'メッセージチャネルのシークレット'
      config.channel_token = 'メッセージチャネルのtoken'
    end
  end

  def push(user:, message:)
    line_id = user.line_user_id # LINEのユーザーIDを使用する
    return if line_id.blank?

    client.push_message(line_id, message)
  end
end

使い方

LineNotifier.push(user: user, message: 'hello')

Discussion

sanpeisanpei

LineNotifier.push(user: user, message: 'hello')
のmessageですが。下記の様なtypeをもったハッシュでないと手元では動いていないです。どうでしょうか?
(手元で使っているline-bot-apiは1.2.1です)

message={
            type: 'text',
            text: "hello"
           }

参考にしたページ
https://qiita.com/wadayamada/items/0e90e413adff2023e741
https://github.com/line/line-bot-sdk-ruby/blob/master/README.md?plain=1#L75

sanpeisanpei
def client
   @client ||= Line::Bot::Client.new do |config|
     config.channel_id = 'メッセージチャンネルのID'
     config.channel_secret = 'メッセージチャネルのシークレット'
     config.channel_token = 'メッセージチャネルのtoken'
   end

config.channel_idですが、line-bot-api 1.29.1までは指定してもエラーになりませんが、1.3.0では、以下のエラーとなります。(1.29.1→1.3.0の変更点まで未確認ですが)

: undefined method `channel_id=' for an instance of Line::Bot::Client (NoMethodError)

とりあえず、chnnel_idを指定しなくても、channel_secret, channel_tokenのみで送信は手元では成功しています。

line-bot-apiも2.0.0になって大きくAPIが変わったので(下記参照)。line-bot-api gemのv2対応が必要ですね。
https://github.com/line/line-bot-sdk-ruby/releases/tag/v1.30.0

Google Geminiにエラーで最初聞いて調べたら、「ード内の Line::Bot::Client にスペルミスがないか、今一度確認してください。」とか言われた.....