【LINE Messaging APIの使い方解説(その2)】LINE APIでメッセージ送信(GAS,VBA,Pythonサンプルコードあり)

こんにちは、くのへです!
LINEのMessaging APIを使おう!というテーマで記事を書いて行きます。
前回の記事ではLINE Developerコンソールにアクセスし、公式アカウントを作成するまでの手順を詳しく解説しました。
この記事では、さっそくLINEのMessaging APIを使ってLINEに「プッシュメッセージ」と呼ばれる方法でメッセージを送信したいと思います。

なお、次回の記事で、チャンネルの友達登録者全員に一斉にメッセージを送る「ブロードキャストメッセージ」を解説したいと思います。

まずは状況を確認しよう

LINE Developerコンソールを開きましょう。
次の画面になり、前回の記事で作成したプロバイダとチャンネルを選択しましょう。

↓このサイトに行って、右上の「コンソールにログイン」です。
https://developers.line.biz/ja

LINEのIDでアクセスすると、次の画面が出ますので、前回の記事で作成したプロバイダとチャンネルを選択しましょう。(下図②③)

なお、前回までの操作で、LINE公式アカウントで「LINE Messaging APIを利用する」のボタンをONにしており、LINE Messaging APIを利用できる状態になっています。
この操作を行わないと、LINE Developersでは表示されません。つまり、表示されていれば準備は出来てます!

ユーザIDを取得する

チャンネルをクリックすると、次の画面になります。
もしも、なっていなかったら、下図の赤枠に示す「チャネル基本設定」をクリックしましょう

一番下までスライドすると「あなたのユーザID」という表示された文字列が見えるはずです。(下図②)
これが、このチャンネルにおける、あなたのユーザIDです。後で使いますので、ここに「ユーザIDがある」と覚えて下さい。

アクセストークンを取得する

次に「アクセストークン」を取得します。
このアクセストークンというのは、このチャンネルにアクセスするための合言葉や鍵みたいなものだと思ってOKです。

先ほどの画面を一番上まで戻り、「Messaging API設定」タブをクリックしましょう。

ちょっと下に行くと、このチャンネルのIDやQRコードが表示されていますね。
このQRコードを他の人がLINEのQR読み取りで読み込むと、このチャンネルを友達登録出来ます。(チャンネルIDを打ちこんでも友達登録出来ます。)

さらに下に進むと、チャネルアクセストークン(長期)という欄が表示されますので、これを発行しましょう。

これで、このチャンネルにアクセスするための鍵であるアクセストークンが発行されます。(下図赤枠)
これは誰にも見られないようにしましょう。これを使われると、他の人があなたのチャンネルを操れるようになってしまいます。
右にコピーボタンがありますので、コピーしましょう。(下図①)

これで準備は万端です。プログラミングしていきましょう。

LINEにメッセージを送る(GoogleAppsScript)

LINEにメッセージを送るプログラム(GoogleAppsScript)は、ずばりこちらです。
コードの解説はこの記事の下の方をご覧ください。
「ACCESS_TOKEN」「USER_ID」の値は、前述のアクセストークンとユーザIDの値を書いて下さい(クオーテーションの間のXXXXXの部分を書き換え。クオーテーションは消さないでね)。

function messageToLine() {
  const ACCESS_TOKEN = 'XXXXX';
  const USER_ID = 'XXXXX';


  var url = 'https://api.line.me/v2/bot/message/push';

  var headers = {
    'Content-Type': 'application/json; charset=UTF-8',
    'Authorization': 'Bearer ' + ACCESS_TOKEN
  };

  var message = "Hello Line";

  var data = {
    'to': USER_ID,
    'messages': [
      {
        'type': 'text',
        'text': message
      }
    ]
  };


  var options = {
    'method': 'post',
    'headers': headers,
    'payload': JSON.stringify(data)
  };

  UrlFetchApp.fetch(url, options);

}

(ちなみに、スクリプトプロパティが使える方は、ACCESS_TOKENやUSER_IDはスクリプトプロパティに登録して呼び出した方が良いと思います。)

さて、これを実行してみましょう。
実行すると、、、「Hello Line」というメッセージが届くはずです!!

キターー!!!
コードの中央の「Hello Line」を書き換えると、メッセージが変わります。

LINEにメッセージを送る(VBA)

なお、ExcelVBAで同じことをやってみると、次のコードになります。
これもACCESS_TOKENとUSER_IDの値は、前項で取得した値をコピペしましょう。

Sub MessageToLine()

    ' LINEのアクセストークンとユーザーIDを設定
    Dim ACCESS_TOKEN As String
    Dim USER_ID As String
    ACCESS_TOKEN = "XXXXX"
    USER_ID = "XXXXX"
    
    ' URLの設定
    Dim url As String
    url = "https://api.line.me/v2/bot/message/push"
    
    ' メッセージの内容
    Dim message As String
    message = "Hello Line from VBA"
    
    ' JSONデータを作成
    Dim data As String
    data = _
    "{" & vbCrLf & _
    """to"": """ & USER_ID & """," & vbCrLf & _
    """messages"": [" & vbCrLf & _
        "{" & vbCrLf & _
          """type"": ""text""," & vbCrLf & _
          """text"": """ & message & """" & vbCrLf & _
        "}" & vbCrLf & _
      "]" & vbCrLf & _
    "}"


    Dim xmlhttp As Object
    ' HTTPリクエストの設定
    Set xmlhttp = CreateObject("MSXML2.XMLHTTP.6.0")
    With xmlhttp
        .Open "POST", url, False
        .setRequestHeader "Content-Type", "application/json; charset=UTF-8"
        .setRequestHeader "Authorization", "Bearer " & ACCESS_TOKEN
        .send data
    End With

    ' レスポンスの確認
    If xmlhttp.Status = 200 Then
        MsgBox "メッセージが送信されました。"
    Else
        MsgBox "送信エラー: " & xmlhttp.Status & " - " & xmlhttp.responseText
    End If

    Set xmlhttp = Nothing
End Sub

これで実行すると、、、

LINEにキターーー!!!
VBAでWebAPIを操ると、何か感動するw

LINEにメッセージを送る(Python)

Pythonだとこうなります。(これもACCESS_TOKENとUSER_IDの値は、前項で取得した値をコピペしましょう。)

import requests
import json

def message_to_line():
    ACCESS_TOKEN = "XXXXX"
    USER_ID = "XXXXX"
    
    url = "https://api.line.me/v2/bot/message/push"
    
    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Bearer {ACCESS_TOKEN}"
    }
    
    message = "Hello Line from Python"
    
    data = {
        "to": USER_ID,
        "messages": [
            {
                "type": "text",
                "text": message
            }
        ]
    }
    
    response = requests.post(url, headers=headers, data=json.dumps(data))
    
    if response.status_code == 200:
        print("メッセージが送信されました。")
    else:
        print(f"送信エラー: {response.status_code} - {response.text}")

# 関数を実行
message_to_line()

これを実行すると、、、

キターーー!!

このようにPostリクエストを行い、メッセージを送りことが出来ました

コードの解説

WebAPIを使ってPostリクエストを行っています。
WebAPIの基本構成の記事はこちらをご参照ください。

Postリクエストをシンプルに書くと、こんな感じです。

Option
 Method:Post
 Headers:
  Content-Type:application/json
  Authorization:Bearer アクセストークン
 Payload:{
  key1:value1
  key2:value2
 }

上記のOptionをエンドポイント(送付先のURL)に投げると、先方のシステムに対してPostリクエストが飛ぶという仕組みです。(GASでいうFetch!!)

所定のURL、Headers、Payloadに、それぞれ何を書けば期待する動きをしてくれるのかというと、LINEの公式ドキュメントに書いています。
LINE Developersの一番上の「ドキュメント」をクリックしましょう。

MessagingAPIの機能を確認したいので、MessagingAPIをクリックしましょう。

ちょっと下に行くと、「メッセージを送信する」というボタンが出てきますので、これをクリック。

メッセージを送信する機能について詳しく書かれたページが表示されます。

今回は「プッシュメッセージを送る」という記事なので、ちょっと下に行って「プッシュメッセージ」を見つけてこれをクリックしましょう。

すると次のような画面になります。
ここに、エンドポイント(リクエストを送る先のURL)や、Headers、Payloadに何を書けばいいかが書かれています。
例えば、下図の①がエンドポイントであり、Postリクエストで送ることが示されています。

もうちょっと下に行くと、ヘッダーには次のようにContent-Typeをapplication/jsonにして、AuthorizationをBearer+アクセストークンにするように書いてますね。

リクエストボディ(Payload)に、to:ユーザID、messages:メッセージオブジェクト、を書くと記載されています。
メッセージオブジェクトの欄をクリックすると、更に詳しく説明されていますが、テキストデータの他にLINEのアイコンなどを送れることが示されています。
ちなみに、下図の③のように「配列」で送るという所がミソです。送るメッセージデータは鍵カッコ[ ]で囲んで送る必要があります。

ということで、これらを踏まえて、コードを書いたのがこちらです。
エンドポイント(url)はこちらですね。

  var url = 'https://api.line.me/v2/bot/message/push';

headersにはContent-TypeとAuthorizationを書き、Authorizationに「Bearer 」と書いた上でアクセストークンを書きます。

  var headers = {
    'Content-Type': 'application/json; charset=UTF-8',
    'Authorization': 'Bearer ' + ACCESS_TOKEN
  };

payloadはtoとmessagesを書き、messagesは配列でメッセージオブジェクトを書きます。
これで、optionの出来上がり!!

  var data = {
    'to': USER_ID,
    'messages': [
      {
        'type': 'text',
        'text': message
      }
    ]
  };


  var options = {
    'method': 'post',
    'headers': headers,
    'payload': JSON.stringify(data)
  };

最後に所定のURLにPostリクエストとして送れば動きます!!ヨシ!!

  UrlFetchApp.fetch(url, options);

これでLINE Messaging API、完璧だ!!!
お疲れ様でした。

プッシュメッセージの注意事項

プッシュメッセージは、所定のユーザに対して送るメッセージです。
今回はチャンネルのユーザIDに対してメッセージ送る仕組みを使いました。

この「チャンネルのユーザID」ですが、これはオーナーである、あなたのLINEと紐ついています。
つまり、何を言いたいかというと、今回の仕組みのプッシュメッセージで送ると、あなたのLINEにはメッセージが届きますが、このチャンネルを友達登録した他の人には届きません

もしもチャンネルの友達登録全員に送ろうと思ったら、「ブロードキャストメッセージ」を使います。

ブロードキャストメッセージは、ぶっちゃけエンドポイントが違うだけです。
次の記事にブロードキャストメッセージを送る方法も解説しようと思います。

おわりに

本当にお疲れ様でした。ちょっと大変でしたね💦
しかし、プログラムでLINEにメッセージが届くと、なんか感動します。

このメッセージの部分を生成AI(例えばGemini)などのテキストに置き換えると、本当に人間がメッセージを送ってきたかのような気分になります。

LINEは人とのインターフェースに非常に有効なツールですので、是非LINE Messaging APIを使って、面白い仕組みを作ってください!

関連記事

【LINE Messaging APIの使い方解説(その1)】LINE Developerコンソールへのアクセスと公式アカウントの作成方法

【LINE Messaging APIの使い方解説(その3)】チャンネル登録者全員に一斉にメッセージ配信

【LINE Messaging APIの使い方解説(その4)】メッセージオブジェクトの使い方

【LINE Messaging APIの使い方解説(その5)】プロ仕様のメッセージ(テンプレートメッセージ)の使い方

【LINE Messaging APIの使い方解説(その6)】チャンネル登録者数などの情報を取得しよう

【LINE Messaging APIの使い方解説(その7)】LINE公式アカウントの使い方 その①

【LINE Messaging APIの使い方解説(その8)】LINE公式アカウントの使い方 その②

【LINE Messaging APIの使い方解説(その9)】LINE公式アカウントの使い方 その③

【LINE Messaging APIの使い方解説(その10)】Webhookの解説(応答システム)

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
Contents