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を利用する」を実行します。
ここで開発者情報を登録します。改めて開発者のメールアドレスと名前を登録する必要があります。
更に「プロバイダ」の設定も求められます。
ここには開発元企業や団体名を入れます。
個人利用なら個人名で良いと思います。
Channel IDとChannel secretが発行されました(が、今回は使いませんでした)
また、画面の下部のリンクからLINE Developersコンソールに入ることができます。
Developersコンソールに移動し、アクセストークンを発行
LINE Developersコンソールに入ります。
先ほど作った「プロバイダ」と、それに紐づく形で「チャネル」が作成されているのがわかります。
チャネルを開いたら、
「Messaging API」メニュー下部の「Channel access token」という項目を探します。
「issue」を選択し、アクセストークンを発行します。
これでチャネルの作成及び、メッセージの投稿を行うための
アクセストークンを取得できました!
LINEグループのIDを取得する
ここからが手間がかかるところです。
投稿先のLINEグループのIDを知りたいのですが、グループの詳細画面を開いてもIDらしきものが載っていません
SlackのチャンネルIDのようにはいきませんでした…
LINEグループのIDを確かめる手順
以下の手順を踏む必要がありました。
- BotにWebhookのURLを登録
- IDを知りたいLINEグループに参加させる
- 参加時に発行されるイベントを取得
つまりWebhookの受信サーバを(一時的にでも)用意する必要があります。
Messaging APIのWebhookとは
友だちのメッセージ投稿やグループへの参加など、Botに対し「イベント」が発生するたび、それを受信することができます。
企業などのLINE公式アカウントのチャットBotはこれを使って実装してるんですね。
Webhook受信先を用意する
イベント受信のための一時的なサーバを作ります。
今回はAWS lambdaを使用しました。
ランタイムはpythonを選択しました。
他は全て初期設定で構いません。
イベントをログに出力するように修正
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をオンにします。
これでWebhook受信の準備が整いました。
LINEグループにBotを招待する
Botをグループに招待するために、もう一つ設定を変更しておきます。
サイドメニュー「アカウント設定」の中から「トークへの参加」項目を探し、
「グループ・複数人トークへの参加を許可する」に切り替えます。
これを行わないとBotをグループに招待してもすぐに退出してしまいます。
Botを友だち追加
ここからは個人のLINEアカウントを使います。
まずはBot(LINEアカウント)と友だちになります。
「ホーム」メニューの「友だち追加ガイド」を参考に、URLやQRコードで友だち追加してください。
(設定したプロバイダ名はここで公開されることになります)
友だち追加後にサーバーのログを見ると、何かが実行されていることがわかります。
これは「友だち追加」のイベントを受信したためです。
(lambdaのメニュー「モニタリング」→CloudWatchのログより確認)
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で自由にメッセージ投稿できるのであれば、有力なツールになるのではないでしょうか。私はサークルのイベントのリマインドに使っています。
ぜひぜひお試しください!