きっかけ
自身で運用しているLINE公式アカウントについて、GoogleAppsScriptのプログラムコードからメッセージや画像を発信できれば、定期的にメッセージをつぶやいたり、プログラムで計算した値を含めたメッセージを出せたりして便利なので実装しました。
方法
LINE公式が公開しているMessaging APIの該当URLにJSONデータを送信します。(公式リファレンス → Messaging API | LINE Developers )
今回使ったのは、ブロードキャストメッセージを送る の記載の部分です。
ここで定められているAPI仕様に合わせてGoogleAppsScript側でHTTPリクエストを作成し送信します。
作成したコード
以下、完成したコードです。
//テキスト、画像のURLを受け取りLINE公式チャンネルから通知するメソッド
// @param { String } message 通知する文字列
// @param { String } image_url 画像のURL
// @param { String } token LINE公式チャンネルのアクセストークン(APIで発行できる)
function pushLineOfficialAccount(message, image_url, token) {
//LINE APIへ送信する用のデータ形式を作成
let text_data = (message ? { "type": "text", "text": message } : undefined);
let img_data = (image_url ? { "type": "image", "originalContentUrl": image_url, "previewImageUrl": image_url } : undefined);
let data = [text_data, img_data].filter(v => v); //LINEで通知するデータの配列(空要素は除去)
if (data.length == 0) return -1;//データが空なら送信せず終了
let options = {
"method": "post",
"contentType": 'application/json',
"headers": { "Authorization": "Bearer " + token },
"payload": JSON.stringify({ "messages": data })//オブジェクトをJSONに変換
};
UrlFetchApp.fetch("https://api.line.me/v2/bot/message/broadcast", options);//LINEのAPIにPOSTで送信
}
使用例はこんな感じです。
//(1)文字列と画像を通知
pushLineOfficialAccount("通知されるテキストです", "https://.../hoge.jpg", "XXXチャンネルアクセストークンXXX");
//(2)文字列のみ通知
pushLineOfficialAccount("通知されるテキストです", null, "XXXチャンネルアクセストークンXXX");
//(3)画像のみ通知
pushLineOfficialAccount(null, "https://.../hoge.jpg", "XXXチャンネルアクセストークンXXX");
この自作メソッドは、メッセージテキストと画像URLの2個を引数にとっており、両方の引数に有効な値を渡した場合は「テキスト → 画像」の順に通知する仕様です。
ちなみに今回はテキストと画像で多くとも2個のデータを送信していますが、APIリファレンスによると一回のAPI送信で最大5個のデータを同時に送信できるとのことです。
まとめ
GoogleAppsScriptは、スプレッドシート等と連携でき、スケジューラ設定による定期実行もできます。今回作ったメソッドで、GoogleAppsScript側で何かしら定期的な計算を行い、その結果を自動的にLINE公式アカウントから通知、というような応用アプリができると考えています。
今後もGoogleAppsScriptは色々試していき、Tipsを投稿していきたいと思います。