LINE, Messaging API

LINE BOTを作ってMessaging API でグループにメッセージを送る

BOT用のLINEアカウントを作成し、API経由でメッセージを送信する方法の紹介です。
今回は、グループ宛にメッセージを送信します。

動作環境(利用サービス)

  • LINE Messaging API(PUSH_MESSAGE)
    →メッセージの送信

  • Google Apps Script
    →メッセージを送信するLINEグループのID取得

目次

1.BOT用のLINEアカウントを作成する
2.自動投稿したいLINEグループのグループIDを取得する
3.API経由でメッセージを送信する

1.BOT用のLINEアカウントを作成する

https://account.line.biz/login
上記URLより、LINE Bussiness ID(デベロッパー用のサイト)へログインします。

ログイン後、まずはプロバイダーを作成します。
入力規則に従って、プロバイダー名を入力、作成してください。

Messaging APIを選択します。

Messaging API用のチャネルを作成します。

  • チャネルの種類:Messaging APIを選択
  • プロバイダー:先程作成したプロバイダー

その他の項目は、下記公式サイトのチュートリアルに説明の記載があります。
https://developers.line.biz/ja/docs/clova-extensions-kit/create-messaging-api-channel-t4/

作成できると、チャネルの管理画面に遷移するので、Messaging API設定タブを選択します。

ここまでくると、作成したチャネルをボットのベーシックIDでID検索、もしくはQRコードの読み取りで友達追加できるようになります。

Messaging API呼び出し時の認証に、チャネルアクセストークン を使用するので、発行しておきます。
また、BOTをLINEグループで使用したい場合は「グループ・複数人チャットへの参加を許可する」が有効になっていなければいけないので、必要に応じて変更してください。

チャネルアクセストークン が発行できれば、Messaging API経由でメッセージを送る準備は完了です。

2.自動投稿したいLINEグループのグループIDを取得する

先程作成したチャネル(LINEアカウント)を友だち追加し、グループに招待すれば参加させることができます。
今回、メッセージを送信するにあたって、PUSH_MESSAGE APIを利用します。
https://developers.line.biz/ja/reference/messaging-api/#send-push-message

リファレンスを見ていただくとわかる通り、送信先を明示的にID指定する必要があります。
ただ、このIDについてはどこかの画面から取得するとかではなく、Webhookを利用してイベントの通知を受けなければいけません。
また、Webhookに設定するURLはhttpsでなければならず、ドメインやらSSL証明書やらを用意する必要がある?という問題が発生します。
検討した結果「Google Apps Script」を活用するのが、お手頃かつサーバレスで実現できたので、その方法を紹介します。

作成したチャネルはお友だち登録および、必要に応じてグループへの参加などしておいてください。

まずは、Googleドライブからスプレッドシートを新たに作成します。
作成したら、[ツール]>[スクリプトエディタ]を選択します。

以下のようにソースコードを書き換えます。

function doPost(e){
  var json = JSON.parse(e.postData.contents);
  var UID = json.events[0].source.userId;
  var GID = json.events[0].source.groupId;

  var sheet = SpreadsheetApp.openById('スプレッドシートのID').getSheetByName('シート1');
  sheet.getRange(1,1).setValue(UID);
  sheet.getRange(1,2).setValue(GID);
}

コードはjavascriptで書きます。
[スプレッドシートのID]の部分は、以下のようなスプレッドシートのURLのxxxxxの部分です。
https://docs.google.com/spreadsheets/d/xxxxx/edit#gid=0

ソースコードが書けたら保存し、公開します。
このとき、プロジェクト名は適当なものをつけておいてください。

[公開]>[ウェブアプリケーションとして導入]を選択します。

アプリケーションのデプロイ設定画面が表示されます。
私は以下の設定で上手くいきました。

このあと、アプリケーションを使用するための認証手続きに進みますが、警告メッセージが表示されちょっとびっくりしました。
ただこれで問題ないようなので、詳細を開き、テストプロジェクトへ移動をクリックします。
(ブラウザによって少し画面が異なるかもしれません。)

あとはプロジェクトへのアクセスを許可してあげると、作成したアプリケーションの公開URLが発行されます。
URLをコピーしておき、LINEのチャネルのMessaging API設定画面に戻り、WebhookのURLとして設定します。

Webhookの利用はONにしておきます。
検証ボタンを押して、「成功」と表示されれば完了です。

作成したBOTが参加しているグループにメッセージを送信します。
このとき、先程設定したWebhookのURLにPOSTリクエストが送信されます。

リクエストが無事処理されれば、スクリプトを設定したスプレッドシートにIDが書き込まれます。

A1セルに書き込まれたのが、メッセージ送信者のuserId(今回は自分)、B1セルに書き込まれたのがメッセージ送信先のgroupIdです。
今回はB1のgroupIdを使用します。

3.API経由でメッセージを送信する

ここまででLINE Messaging API(PUSH_MESSAGE)にリクエストを送る情報が揃いました。
curlコマンドや、REST APIを使用するブラウザの拡張機能などを使用し、リクエストを送信してみましょう。

curlコマンドでリクエストを送信してみます。

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": "Cae9616d1ec1f9ff0affe3142ef46d92d",
    "messages":[
        {
            "type":"text",
            "text":"Hello, world!"
        }
    ]
}'

無事メッセージを送信できました。

おわりに

APIでメッセージ送信できるので、shellをcronで定期実行したり、いろいろな手段でメッセージを送信することができます。
私はこれで、草野球チームのLINEグループに試合予定を定期的にメッセージで流すようにしています。

注意点

Messaging API設定の[応答メッセージ] が有効になっていると、メッセージ受信時に自動応答してしまいます。
フリープランでは、BOTのメッセージ送信数が1,000件/月という制限があるので、単にメッセージを送りたいだけであれば、[応答メッセージ]を無効にしておくことをおすすめします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です