[LINE]#6 特定のユーザーにメッセージ送信

line6LINE

どうも。つじけ(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の使い方をご紹介します。

参考資料

このシリーズの目次

タイトルとURLをコピーしました