はじめに
LINE Messaging APIを使うと、Botからユーザーへ様々な形式でメッセージを送ることができます。
LINE公式アカウントなどを使っていても、単なるテキストや画像、スタンプ以外にも『はい』『いいえ』で答えるボタンが付いたメッセージや、横にスクロールできるタイプのメッセージもあります。
メッセージの送信対象も選択することができ、1対1での送信や、一斉送信、属性で限定して送信などの方法があります。
今回はrequestsを使ってLINE Messaging APIを介してメッセージを送信する方法を簡単にまとめます。
requestsでのメッセージ送信方法
Botの作成、トークン等の取得はこちらで解説していますので参照下さい。
試しにプッシュメッセージを送るプログラムを実装してみます。
プッシュメッセージ
ユーザー、グループトーク、または複数人トークに、任意のタイミングでメッセージを送信するAPIです。
LINE Developers 公式ドキュメントで、プッシュメッセージを送る際のリクエストの例を見てみます。
curl -v -X POST https://api.line.me/v2/bot/message/push \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {channel access token}' \
-d '{
"to": "U4af4980629...",
"messages":[
{
"type":"text",
"text":"Hello, world1"
},
{
"type":"text",
"text":"Hello, world2"
}
]
}'
URL、ヘッダー、リクエストボディ(json)の内容が分かりました。
PythonでrequestsライブラリのPOSTメソッドを使うと以下の様に実装できます。
import requests
headers = {
"Content_Type": "application/json",
"Authorization": "Bearer " + 'YOUR_CHANNEL_ACCESS_TOKEN'
}
def SendMsg(text,uid):
res = requests.post("https://api.line.me/v2/bot/message/push",
headers=headers,
json={
"to": uid,
"messages": [{
"type": "text",
"text": text
}]
}
).json()
if __name__ == "__main__":
SendMsg('Hello World!', 'YOUR_USER_ID')
実行してみると、指定したUserIDを持つユーザーにのみメッセージが送信されました。
その他にも マルチキャストメッセージ、ナローキャストメッセージ、ブロードキャストメッセージ の3種類の送信方法があります。
マルチキャストメッセージ
複数のユーザーに対して同じメッセージを効率よく送信するAPIです。グループトークおよび複数人トークにメッセージを送ることはできません。
ナローキャストメッセージ
複数のユーザーに、任意のタイミングでメッセージを送信します。送信対象は、属性情報(性別や年齢、OSの種類、地域など)やリターゲティング(オーディエンス)を利用して指定できます。グループトークまたは複数人トークにメッセージを送ることはできません。
ブロードキャストメッセージ
LINE公式アカウントと友だちになっているすべてのユーザーに、任意のタイミングでメッセージを送信します。
python実装時は、基本的に公式ドキュメントに従って上記コードのURL、ヘッダー、リクエストボディ(json)を必要に応じて変更するだけです。
様々なメッセージ形式
LINE Messaging APIには主にこれらのメッセージタイプが用意されています。
詳細は下記リンクの公式ドキュメントでご確認下さい。
例えば、ドキュメントの例を参考にスタンプメッセージを実装するとこうなります。
import requests
headers = {
"Content_Type": "application/json",
"Authorization": "Bearer " + infos.CHANNEL_ACCESS_TOKEN
}
UID = 'YOUR_USER_ID'
def PushMsg(messages):
res = requests.post("https://api.line.me/v2/bot/message/push",
headers=headers,
json={
"to": UID,
"messages": messages
}
).json()
def StickerMsg():
messages = [{
"type": "sticker",
"packageId": "446",
"stickerId": "1988"
}]
PushMsg(messages)
if __name__ == "__main__":
StickerMsg()
結局変わるのはmessagesの中身だけなので、公式ドキュメントの例を参考にmessagesの内容を変更するだけで、どのメッセージタイプも扱うことはできます。
ただし使いこなすとなれば、当然jsonの中身も理解する必要があります。