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件/月という制限があるので、単にメッセージを送りたいだけであれば、[応答メッセージ]を無効にしておくことをおすすめします。