どうも。つじけ(tsujikenzo)です。このシリーズでは、LINEを使って業務効率化する方法をお送りしています。今日は6回目です。いったん最終回です。
前回までのおさらい
前回は、「ユーザーIDを取得しよう」を、お届けしました。
今回は、「特定のユーザーにメッセージ送信」です。
前回の最後に、テキストメッセージを送信してきたユーザーの、ユーザーIDを取得できました。
他にもユーザーIDを取得する方法があるので、紹介します。
また、ユーザーIDから、いろいろなデータを取得してみましょう。
さいごに、特定のユーザーにメッセージを送信してみます。
お友だち追加時にユーザーIDを取得する
テキストメッセージだけでなく、ユーザーがチャネルをお友だち追加したときにも、LINEは、Webhookイベントオブジェクトを受け取っています。
表の赤枠で囲んだプロパティを、GASで加工します。
GASを書く
メッセージ送信と、フォローやアンフォローを見極めるプロパティは、typeです。
switch文を使って、typeによって、変数textに値を再代入するように、GASを書き換えます。
/** テキストを受信した際に、実行される関数 */
function doPost(e) {
// アクセストークン
const ACCESS_TOKEN = 'アクセストークン';
//LINE Notifyを飛ばす
sendLineNotify(e);
}
/** LINE Notifyを送信する関数
* @param{object} イベントオブジェクト
*/
function sendLineNotify(e) {
const token = "アクセストークン";
//共通プロパティ
const type = JSON.parse(e.postData.contents).events[0].type;
const d = newDate(JSON.parse(e.postData.contents).events[0].timestamp);
const timestamp = Utilities.formatDate(d, "JST", "yyyy/MM/dd HH:mm:DD");
const source = JSON.parse(e.postData.contents).events[0].source;
const userId = source.userId;
//イベントプロパティ
let text = "";
switch (type) {
case"message":
text = JSON.parse(e.postData.contents).events[0].message.text;
break;
case"follow":
text = "フォローされました"break;
case"unfollow":
text = "アンフォローされました"break;
}
const body = `
[ユーザーID]${userId}
[イベント発生時刻]${timestamp}
[イベントタイプ]${type}
[本文]${text}
`;
const options =
{
"method": "post",
"payload": "message=" + body,
"headers": { "Authorization": "Bearer " + token }
};
UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}
保存したら、デプロイを更新して、テキストメッセージを送信してみましょう。
チャネルのフォローとアンフォロー
チャネルは、ブロックするとアンフォローとなります。同様に、ブロックを解除するとフォロー、つまり「お友だち追加」と同じイベントになります。
チャネルをブロックしたり、ブロック解除したりすると、LINE Notifyに通知が飛ぶことを確認しましょう。
プロフィール情報の確認
プロフィール情報を取得するURLは、こちらです。
以下のように、新規関数を作成します。ユーザーIDには、LINE Notifyで確認したユーザーIDを入力しましょう。LINE IDではありません。
/** ユーザー情報を確認する関数 */
function getUserInfo() {
const ACCESS_TOKEN = 'アクセストークン';
const userId = "ユーザーID";
const url = `https://api.line.me/v2/bot/profile/${userId}`;
const options = {
"method": "get",
"headers": {
"contentType": "application/json",
"Authorization": "Bearer " + ACCESS_TOKEN
}
};
const response = UrlFetchApp.fetch(url, options);
const data = JSON.parse(response.getContentText());
console.log(data);
}
実行ログに、このような情報が表示されます。
pictureUrlは、URLから画像を表示できます。将来的に、スプレッドシートでこのようなお友だち管理ができそうです。
特定のユーザーにメッセージ送信
ユーザーIDがわかると、特定のユーザーに向けて、メッセージが送信できます。
以下のようなGASを書いて、関数を実行してみましょう。
/** 特定のユーザーにメッセージを送信する関数 */
function sendPushMesage() {
const ACCESS_TOKEN = 'アクセストークン';
const to = 'ユーザーID';
const message = {
type: "text",
text: "新年あけましておめでとうございます!2023年 元旦"
};
const options = {
"method": "get",
"contentType": "application/json",
"headers": { "Authorization": "Bearer " + ACCESS_TOKEN },
"payload":JSON.stringify({
to,
messages: [message]
})
};
UrlFetchApp.fetch('https://api.line.me/v2/bot/message/push', options);
}
チャンネルから通知が届いていれば、成功です。
まとめ
以上で、「特定のユーザーにメッセージ送信」をお届けしました。
このシリーズでは、以下のようなことができるようになりました。
- 公式LINEアカウントを作成する
- 友だち追加してくれたユーザーIDを取得する
- アンフォローしたユーザーを把握する(送信するムダを省く)
- スプレッドシートなどでプロフィール情報を管理する
- オウム返しや、条件判定による返信bot
- 特定のユーザーIDに対してプッシュメッセージ
まだまだできること、やりたいことはありますが、いったんシリーズを終えたいと思います。
次のシリーズでは、LINE Offial Account Managerの使い方をご紹介します。