はじめまして。
株式会社エイチームライフデザイン、 カスタマーマーケティング本部のCRE推進部に所属しております、奥山 聡です。
今回はLINE Messaging APIの活用方法についてお届けしたいと思います。
LINEグループにプログラムからメッセージを送りたい、と思ったことはありませんか?
SlackやChatworkに比べると手順がやや複雑で手間がかかったので、備忘も兼ねて設定手順を記事に残します。
もし何かの参考になれば幸いです!
完成形
import os from linebot import LineBotApi from linebot.models import TextSendMessage channel_access_token = os.getenv('LINE_CHANNEL_ACCESS_TOKEN') group_id = os.getenv('LINE_GROUP_ID') msg = 'Hello World!' line_bot_api = LineBotApi(channel_access_token) line_bot_api.push_message(group_id, TextSendMessage(text=msg))
pythonでメッセージ送信する一例です。
チャネルアクセストークン
と送信先のグループのID
があればメッセージ送信できます。
チャネル = メッセージのを送信するアカウント = Botと捉えて構いません。
これらを取得しメッセージ送信できることをゴールにします。
実装
Botのチャネルアクセストークンを取得する
チャネルアクセストークンはLINE Developersコンソール内で発行できます。
まずはチャネル(Botアカウント)を用意します。
LINEビジネスIDを取得
チャネルの作成にはLINEビジネスIDが必要です。無い場合は作成します。
https://www.linebiz.com/jp/login/
ここからアカウントを作成しログインします。
個人のLINEアカウントでも登録できますが、私はメールアドレスで登録しました。
LINE Official Account Managerにログイン
上記の画面にログインすると、その中でLINE公式アカウントを作成できます。
アカウントを作っていきなり更にアカウントを作る??とこの時点で少々面食らいましたが、
要するに1つLINEビジネスIDがあれば複数のLINE公式アカウントを持つことができます。
LINE公式アカウント = チャネル = Botと考えて良いと思います
(厳密には違いますが今回は触れません)
メッセージ投稿のための設定
公式アカウントを作ったら、メッセージ投稿のための設定を行います。
画面右端の「設定」メニューを開きます。
Messaging API
サイドメニュー「Messaging API」を開き「Messaging APIを利用する」を実行します。
更に「プロバイダ」の設定も求められます。
個人利用なら個人名で良いと思います。
また、画面の下部のリンクからLINE Developersコンソールに入ることができます。
Developersコンソールに移動し、アクセストークンを発行
LINE Developersコンソールに入ります。
先ほど作った「プロバイダ」と、それに紐づく形で「チャネル」が作成されているのがわかります。
チャネルを開いたら、
「Messaging API」メニュー下部の「Channel access token」という項目を探します。
「issue」を選択し、アクセストークンを発行します。
これでチャネルの作成及び、メッセージの投稿を行うための
アクセストークンを取得できました!
LINEグループのIDを取得する
ここからが手間がかかるところです。
投稿先のLINEグループのIDを知りたいのですが、グループの詳細画面を開いてもIDらしきものが載っていません☹
SlackのチャンネルIDのようにはいきませんでした…
LINEグループのIDを確かめる手順
以下の手順を踏む必要がありました。
1. BotにWebhookのURLを登録
2. IDを知りたいLINEグループに参加させる
3. 参加時に発行されるイベントを取得
つまりWebhookの受信サーバを(一時的にでも)用意する必要があります。
Messaging APIのWebhookとは
友だちのメッセージ投稿やグループへの参加など、Botに対し「イベント」が発生するたび、それを受信することができます。
企業などのLINE公式アカウントのチャットBotはこれを使って実装してるんですね。
Webhook受信先を用意する
イベント受信のための一時的なサーバを作ります。
今回はAWS lambdaを使用しました。
他は全て初期設定で構いません。
イベントをログに出力するように修正
import json def lambda_handler(event, context): print(event['body']) # 追加行 return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!') }
初期コードに1行追加し、Deployします。
受信したパラメータをログに出すようにしました。
URL発行
「設定」→「関数 URL」より関数URLを作成します。
認証タイプはNONEで作成しました。
終わったらURLの削除を忘れないようにします。
Webhook受信のための設定
先ほど作成したURLをLINE Official Account Manager内
「Messaging API」の「Webhook URL」に保存します。
更に、「応答設定」メニューの詳細設定からWebhookをオンにします。
LINEグループにBotを招待する
Botをグループに招待するために、もう一つ設定を変更しておきます。
サイドメニュー「アカウント設定」の中から「トークへの参加」項目を探し、
「グループ・複数人トークへの参加を許可する」に切り替えます。
Botを友だち追加
ここからは個人のLINEアカウントを使います。
まずはBot(LINEアカウント)と友だちになります。
「ホーム」メニューの「友だち追加ガイド」を参考に、URLやQRコードで友だち追加してください。
友だち追加後にサーバーのログを見ると、何かが実行されていることがわかります。
これは「友だち追加」のイベントを受信したためです。
LINEグループにBotを招待し、イベントの中身を確認
あと少しです!
LINEグループにBotを招待するとイベントが発行されるので、ログを確認します。
type
がjoin
なのはグループへの参加イベントであることを表します。
source
内のgroupId
がお目当てのLINEグループIDです😆
これを控えておきます。
終わったら忘れないようにlambda関数のURLを削除します。
Webhookの設定も無効化しておきます。
(余談)グループID確認手段について
サーバはイベントの中身が確認できればなんでも良いです(ただしhttpsである必要はあります)
本格的なアプリを組む場合は別ですが、今回のような用途であればGASやLambdaで良いでしょう。
調べるとGASで同じことをやる記事がいくつか出てきました。そちらの方が手軽で良さそうです。
もし、もっと手っ取り早くIDを確認する手段をご存知の方がいれば、
ぜひ教えてください🙏
いよいよメッセージ送信
冒頭のソースにチャネルアクセストークン
とグループのID
を入れてやれば完成です。
実行するとグループにメッセージが送信されます!
公式SDKについて
実装には公式のSDKを使いました。
$ pip install line-bot-sdk
GoやRubyなど他言語にも提供されているので、チェックしてみてください。
まとめ
- アクセストークンはDeveloperコンソール内で発行できる
- LINEグループIDの取得はWebhookイベントを参照するしかなく、サーバが必要
SlackやChatworkは便利ですが、家族や友人に入れてもらうのはちょっと無理があります。
LINEで自由にメッセージ投稿できるのであれば、有力なツールになるのではないでしょうか。私はサークルのイベントのリマインドに使っています。
ぜひぜひお試しください!