3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[python]LINE Messaging API + requests で メッセージを送信する

Last updated at Posted at 2023-11-04

はじめに

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メソッドを使うと以下の様に実装できます。

pushMsg.py
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には主にこれらのメッセージタイプが用意されています。
詳細は下記リンクの公式ドキュメントでご確認下さい。

例えば、ドキュメントの例を参考にスタンプメッセージを実装するとこうなります。

pushMsg.py
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の中身も理解する必要があります。

3
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?