LINE bot の Messaging API で LINE通知
Messaging APIを使って、LINE bot を使ったpush通知を実装する。
LINE Developers登録
LINE Business ID に LINEアカウントでログインする。
個人のLINEアカウントに紐づくLINEビジネスIDが作成される。
LINE Developers Console のサインアップページで、以下の情報を入力。
- Developer name
- メールアドレス
プロバイダーとチャネル作成
Messaging APIのページで「今すぐはじめよう」をクリックすると、新規チャネル作成のページになるので、適当に入力していく。
- チャネルの種類:Messaging API
- プロバイダー:新規プロバイダー作成
- プロバイダー名を適当に入力
- プロバイダー=LINE Botの開発元組織となる単位らしい
- 事業者の所在地:日本
- チャネルアイコン:とりあえず未設定
- チャネル名:適当に
- チャネル=アプリの単位?
- チャネル説明:適当に
- 大業種:なんだろう、、個人にした
- 小業種:なんだろう、、その他、、
- メールアドレス
- プライバシーポリシーURL:空欄
- サービス利用規約URL:空欄
LINE公式アカウント料金体系
2023年6月頃から料金体系が変更になるらしい。
上部に「チャット活用」「メッセージ配信活用」という記載があるのがよくわからないが、Pushでのメッセージ送信を行う場合も200通までは無料という理解でいいのだろうか。
そのつもりで進める。
アカウントの確認
LINE Official Account Managerに、プロバイダーと同名のアカウントができていることを確認する。
また、Business ID作成時に連携した個人アカウントに勝手に友達追加されているらしいので、LINE個人アカウントのほうで確認する。
⇒なぜか追加されていない…。
とりあえず、LINE Official Account Manager の ホーム>友だちを増やす>URLを作成 で友達追加用のURLを取得できるので、ここから手動で友達に追加しておく。
検索で見つけられるようにするためにはアカウント申請が必要。
今回は公開したいわけじゃないので申請しない。
LINE Botのデプロイについて
公式には、LINE Botのデプロイ先としてHerokuなどのサーバを用意しろとあるが、GAS(Google Apps Script)を使う場合はGoogleのサーバをそのままデプロイ先として使える。
そしてそもそも、今回はとりあえずユーザーメッセージへの応答は考えず、任意のタイミングで一方的にpushできればいいので、Botスクリプトをサーバ側に配備することは考えず、単にPush APIのURLをたたければ良い。
※ただし、メッセージの送信先として userId/groupId/roomId を指定する必要があり、それを事前に取得する手段が基本的には webhook の URL になるっぽい。以下詳細。
送信先 userId/groupId/roomId の取得
メッセージの送信先が自分だけで良い場合、自分のuserIdはLINE Developersのコンソールから確認できる。
※LINEで表示されるIDとは異なるので注意。
自分のuserIdは、コンソールのTOPから、プロバイダー>チャネル と選択した先の「チャネル基本設定」タブ>「あなたのユーザーID」にある。
他の人のuserIdや、groupId/roomId を取りたい場合、ユーザーメッセージ送信時や友達追加時のコールバックとしてwebhookのURLで待ち構えたところで取得するのが正攻法っぽい。
GASでやるときはこちらの記事などが参考になりそう。未検証。
GAS で LINE Bot 使用時のユーザー ID、グループ ID を簡単に取得する(ついでにユーザー名も)
あるいは、LINEの通信をトレースすればリクエストbodyからとることもできそう。
このへん参照。
ユーザー側でroomIdを取得する方法
チャネルアクセストークン発行
推奨は、任意の有効期間を指定できる「チャネルアクセストークンv2.1」。
しかし今回は別にセキュリティはあまり気にせずとりあえず長期有効でいいので、「長期のチャネルアクセストークン」というほうを使う。
LINE Developersコンソールの「Messaging API設定」>「チャネルアクセストークン」から発行。
プッシュメッセージのAPIを試す
APIドキュメントのとおり、postmanとか使ってAPIをたたいてみる。
リクエストヘッダの Authorization
に Bearer [TOKEN]
の形で先ほどのチャネルアクセストークンを設定する。
bodyは非常にシンプル。
{
"to":"[ユーザーID]",
"messages":[
{
"type":"text",
"text":"ほげほげ"
}
]
}
自分のLINEでbotとのトークに投稿されれば成功。
あとは自分のクライアントアプリなりから上記APIをたたくようにするだけなので、一応目的は達成。
メッセージの通知相手が一人のときはプッシュメッセージ、複数人のときはマルチキャストメッセージのAPIを使うようだ。
プッシュメッセージ POST https://api.line.me/v2/bot/message/push
{
// toはユーザーIDの文字列
"to": "U4af4980629...",
"messages":[
{
"type":"text",
"text":"Hello, world1"
},
{
"type":"text",
"text":"Hello, world2"
}
]
}
マルチキャストメッセージ POST https://api.line.me/v2/bot/message/multicast
{
// toはユーザーID文字列の配列
"to": ["U4af4980629...","U0c229f96c4..."],
"messages":[
{
"type":"text",
"text":"Hello, world1"
},
{
"type":"text",
"text":"Hello, world2"
}
]
}
続き。