背景
- LINEに通知飛ばす〜みたいな機能を実装することになったが、LINE Messaging APIを触ったことがなかったので一旦雑に作ってみた
- その時のメモ
作成したもの
LINE Messaging APIを使用した、簡単な通知アプリ
使い方
- Rails側で表示されているボタンを押す
- 指定した公式アカウントが呟く
作成手順
Messaging APIの準備
LINEビジネスIDに登録する
前提としてLINE Messaging APIを利用するには、公式アカウントが必要
ここではフォームを作成して公式アカウントを作成するところまで行います
作成した公式アカウントのMessaging APIの利用を有効化する
公式アカウントが作成された次は、そのアカウントでMessaging APIの利用を許可する必要がある
Developersコンソールにログイン、チャネルを確認する
チャネルとは、LINEプラットフォームが提供する機能を利用するための通信路のこと
今回は、Messaging APIの利用を許可した公式アカウントのチャネルが確認できるはずです
チャネルアクセストークンの発行
チャネルを選択して、ログインしたらチャネルアクセストークンを発行してください
チャネルアクセストークンとは、Messaging APIを呼び出すときに使用するアクセストークンのことを指します、これがないとAPI通信が行えません
チャネルシークレットの確認
チャネルアクセストークン同様に、チャネルシークレットの確認を行います
アプリからアクセスする際の秘密鍵です
チャネルシークレット、チャネルアクセストークンをRails側で管理
Rails側でチャネルシークレット、チャネルアクセストークンを保存しておきます
今回はcredentialsを使用します
$ EDITOR="vi" bin/rails credentials:edit
line:
channel_secret: チャネルシークレット
channel_token: チャネルアクセストークン
Webhook URLを設定する
Webhook URLを設定します
httpだとWebhookを設定することができないのでngrokなどを使用してhttpsのURLを生成して設定します
公式アカウントを友達追加、テスト用のグループに入れる
ここで作成した公式アカウントを自分のアカウントで友達追加して、テスト用(なんでも良いですが)グループに招待をしておきます
Rails側の処理をする
line-bot-api gemをインストール
gem 'line-bot-api'
Rails側でMessaging APIにリクエストを送る準備
今回はこんな感じで準備をしてみました
Rails.application.routes.draw do
root 'homes#show'
resources :notifications, only: %i[create]
end
class NotificationsController < ApplicationController
def create
client = Line::Bot::Client.new do |config|
config.channel_secret = Rails.application.credentials.dig(:line, :channel_secret)
config.channel_token = Rails.application.credentials.dig(:line, :channel_token)
end
client.push_message('※グループID',
{
"type": "text",
"text": "通知だよ"
})
redirect_to root_path, notice: '通知を送信しました'
end
end
<% #homes/show.html.erb %>
<h1>通知アプリ</h1>
<%= form_with url: notifications_path do |form| %>
<%= form.text_field :name, class: "item-text-field" %>
<%= form.submit "通知を送る", class: "submit-btn" %>
<% end %>
グループIDはどこで入手するのか?
ローカルのサーバーとngrokでhttpsのサーバーを構築した後で、公式LINEを追加したグループ内で実際にメッセージを飛ばしてみてください。
そうすると下記のようなレスポンスが帰ってくると思います
"source": {
"groupId": "group_id",
"type": "group"
},
こいつを※グループIDに指定してあげる感じです
感想
- そもそもLINEにgroup_idがあるんだと思いました
- LINEはいろんなアプリとコラボレートできると思うのでやっておいてよかった
参考