LINE Messaging APIを使ってBotからPUSH通知を送る [Python]
こんにちは!
こちらの記事
にある通り初めて自分自身でLINE Messaging APIを使ったbotを作成したので,PUSH通知の送り方について備忘録を残したいと思います!不明点や間違っている点があれば教えてください.
この記事では,APIキーは取得済みであるとし,特定のトークルームにPUSHメッセージを送信するところまでを説明します.
参考にしたサイトは随時記事内に示し,まとめて記事の一番下にも再掲いたします.
この記事でわかること
- LINEのトークルームのIDを取得する方法
- Pythonを使って特定のトークルームにメッセージを送信する方法
おことわり
- 本記事は,あくまでも初心者が書いているため,責任は取れません.(公式ドキュメントや色々なサイト・記事を参考にしてファクトチェックを行いながらお願いします)
- 間違っているところなどはぜひ教えていただけると嬉しいです.
大まかな流れ
本記事は以下の流れになっています.
- 特定のトークルームのIDを取得する
- メッセージを送信する
送信先のトークルームのIDを取得する
LINE Messagin APIを用いてトークルームにメッセージを送信するには,送信先のユーザのユーザIDもしくは送信先のグループIDが必要となります.
取得方法はいろいろあるのですが,今回は,グループIDについて取得する方法の一つをご紹介いたします.
今回は,メッセージ送信対象のトークルームとして,「BOT + 私 + 家族」のグループを作成してみました.グループIDを取得するためには一旦,そのグループに人間がメッセージを送り,そのイベントをサーバで受け取る必要があります.おそらく,Google Apps Scriptで受信するためのサーバを作成してグループIDを受け取るのが簡単そう,ということでその方法を紹介します.
用意するもの
- LINE Channel Access Token (まだ作成していない場合は,メイン記事4章を参考にしてください)
- 適当なGoogle Apps Scriptファイル
- Botを追加したグループ
Google Apps Scriptの準備
まずは,スクリプトプロパティにLINE Channel Access Tokenを登録します.
スクリプトプロパティに登録する様子
GASは以下のように記述します.こうすることで,「メッセージが送られてきたら,ユーザーIDもしくはグループIDを返信する」ということができるようになります.
// スクリプトプロパティからChannel Access Tokenを読み込む.
const LINE_TOKEN = PropertiesService.getScriptProperties().getProperty("LINE_TOKEN");
// LINEの返信を行うためのエンドポイント
const LINE_URL_REPLY = 'https://api.line.me/v2/bot/message/reply';
function doPost(e) {
const event = JSON.parse(e.postData.contents).events[0];
const replyToken = event.replyToken;
const type = event.source.type;
// typeを判定して、idを取得
if (type == 'user') {
var id = event.source.userId;
} else if (type == 'group') {
var id = event.source.groupId;
} else if (type == 'room') {
var id = event.source.roomId;
}
const payload = {
'replyToken': replyToken,
'messages': [
{
'type': 'text',
'text': type + '_id = '+ id // 返信内容
}
]
};
const options = {
'method': 'post',
'headers': {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + ACCESS_TOKEN,
},
'payload' : JSON.stringify(payload)
};
// メッセージを送信
UrlFetchApp.fetch(LINE_URL_REPLY, options)
}
Google Apps Scriptをデプロイする
実際に動かすには,先ほど作成したプログラムをデプロイする必要があります.
GASのエディタの右上にある青い「デプロイ」ボタンをクリックすると以下のような画面が出てきます.
新規デプロイ画面
タイプはWeb App,アクセス権限は Anyone(全員) にしておいてください.
(もし,セキュリティ警告画面が出てきた時は,警告画面下部にある詳細設定を開き,無理やりページにアクセスしてください.)
デプロイが完了すると,URLが発行されます.
LINE BotにGASのURLを登録する
LINE Developersから,使用するBotのMessaging APIの設定ページを開いてください.
Webhook URLとして,先ほど得たGASのURLを登録してください.
Webhook URLの登録
メッセージを送って,グループIDを取得する.
実際に,Botを追加したグループで,適当なメッセージを送信します.
すると,(うまくいっていれば)返信にグループIDが記載されています.
必要となるIDを取得し終わったら,今回のGASの内容は削除もしくは変更し,ID返信機能は無くしましょう.
Pythonからメッセージを送信(PUSH通知)する
それでは実際に取得したグループIDを使って,Python側から通知を送ってみます.
用意するもの
- LINE Channel Access Token
- Botが追加されたLINEグループ
- 上記グループのグループID
- Pythonファイル
Pythonでメッセージを送る
まずは,LINE Channel Access Tokenは環境変数として登録しておきます.
環境変数の登録方法はOSによって異なると思いますが,Linuxの場合は以下のように登録ができます
export LINE_ACCESS_TOKEN="xxxxxx"
Pythonファイルは以下のように記述します.
import os
import requests
LINE_ACCESS_TOKEN = os.getenv('LINE_ACCESS_TOKEN')
LINE_BOT_URL = "https://api.line.me/v2/bot/message/push"
# messageを送信する関数
def push_message(group_id, message=""):
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {LINE_ACCESS_TOKEN}"
}
data = {
"to": group_id,
"messages": [{"type":"text", "text":message}]
}
# 送信
try:
response = requests.post(LINE_BOT_URL, headers=headers, data = json.dumps(data))
if response.status_code == 200:
return True # 成功
print(f"Error: {response}")
return False
except e:
print(e)
return False
# メッセージを送ってみる
GROUP_ID = "XXXXXX" # 実際の送信先のidを記述
push_message("GROUP_ID", message="こんにちは")
このpythonファイルを実行して,目的のグループにメッセージがきたら,成功です.
Discussion