[LINE]#5 ユーザーIDを取得しよう

line5LINE

どうも。つじけ(tsujikenzo)です。このシリーズでは、LINEを使って業務効率化する方法をお送りしています。今日は5回目です。

前回までのおさらい

前回は、「Messaging APIでオウム返しBot」を、お届けしました。

今回は、「ユーザーIDを取得しよう」です。

復習もかねて、新規チャネルを作成しましょう。一度動いたものを慎重に改造するより、新規作成を何度も経験することをオススメします。

もちろん、本番のLINEアカウントで作成しても構いません。

新規チャネルの作成(復習)

LINE Developerコンソールで、下記の運用例を参考に、プロバイダーとチャネルを作成しましょう。

チャネルの種類プロバイダー名チャネル名
Messaging API株式会社ノンプロ商店株式会社ノンプロ商店公式
Messaging API会社用_営業部[ノンプロ商会]営業アシスタント君
Messaging API会社用_経理部[ノンプロ商会]経理君

今後、LINE Offial Account Managerという管理画面で、LINE公式アカウントの管理を行うときがあります。

その際は、チャネル名=アカウント名になりますので、プロバイダーはあくまで「整理するためのフォルダ」という位置づけでもいいと思います。

ただし、LINE Offial Account Managerのアカウント名では、プロバイダー名が表示されませんので、パッとみて何用のチャネルなのか、わかりやすい命名がいいでしょう。 

チャネルアイコンの設定

今回は、チャネルにアイコンを設定しましょう。

もし、チャネルを作成済みの場合は、チャネルアイコンとチャネル名は、LINE Official Account Managerで変更できます。

アイコンは一度変更すると、1時間変更できないので、ご注意ください。

その他設定

以下の手順を、確認しましょう。

  • チャンネルアクセストークンの発行
  • オウム返しアプリ作成とデプロイ
  • Webhook URLの追加と検証
  • Webhookの利用をON
  • 応答機能の「応答メッセージ」をオフ
  • スマホでQRコードを読み込んで友だち追加
  • オウム返しを確認

LINE Notifyに通知を飛ばす

こちらも復習です。以下の記事を参考に、1:1型のアクセストークンを発行して、LINE Notifyに通知を飛ばすGASを準備しましょう。

新規スクリプトエディタを開いて、下記ソースコードを書きます。

/** LINE Notifyを送信する関数 */
  function sendLineNotify() {

  const token = "アクセストークン";

  const body = "テストです"
  const options =
  {
    "method": "post",
    "payload": "message=" + body,
    "headers": { "Authorization": "Bearer " + token }
  };

  UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}

sendLineNotify関数を実行すると、スマホのLINE Notifyアカウントから通知が来ることを確認しましょう。 

テキストが送信されたら、LINE Notifyに通知を飛ばす

では、オウム返しをするGASを書き換えて、テキストメッセージを受け取ったら、LINE Notifyを送信するようにします。

/** テキストを受信した際に、実行される関数 */
  function doPost(e) {

  // アクセストークン
  const ACCESS_TOKEN = 'アクセストークン';

  //LINE Notifyを飛ばす
  sendLineNotify(e);

}


/** LINE Notifyを送信する関数
 * @param{object} イベントオブジェクト
 */
  function sendLineNotify(e) {

  const token = "アクセストークン";

  const body = "テストです"
  const options =
  {
    "method": "post",
    "payload": "message=" + body,
    "headers": { "Authorization": "Bearer " + token }
  };

  UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}

デプロイの更新

Webhook URLに指定したウェブアプリの中身(オウム返しをするGAS)を変更していますので、デプロイを更新する必要があります。

スクリプトエディタの右上の「デプロイ」をクリックして、「デプロイを管理」をクリックします。 

デプロイを管理ウィンドウの右上にある「編集」をクリックします。

バージョンを「新バージョン」を選択して、最後に「デプロイ」をクリックします。

「デプロイを更新しました」と表示され、バージョンの数字があがったら完成です。

URLの変更はされていません。GASを書き換えたときは、毎回必ずデプロイを更新しましょう。 

テキスト送信の確認

チャネルにテキストを送信すると、LINE Notifyに「テストです」が届くことを確認しましょう。 

ユーザーIDの取得

ユーザーから「友だち追加」や「テキスト送信」などのアクションが起きると、LINEは「リクエストボディ」を受け取ります。

リクエストボディの中には、Webhookイベントオブジェクトという、さまざまな情報の配列が格納されています。

Webhookイベントオブジェクトの配列には、イベントの種類によって、さまざまなプロパティが格納されています。 

また、Object型(表の赤字で示したプロパティ)には、それぞれのプロパティに、さまざまな情報が入っています。 

それでは、Webhookイベントオブジェクトの配列を取得してみましょう。 

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 = new Date(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;

  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に通知がくることを確認しましょう。 

まとめ

以上で、「ユーザーIDを取得しよう」をお届けしました。

無事に、ユーザーIDの取得ができましたね。

ついでに、Webhookイベントオブジェクトから、メッセージの送信時刻や、メッセージ本文も抜き出しました。

次回は、「特定のユーザーにメッセージ送信」をお届けします。

参考資料

Webhookイベントオブジェクト

このシリーズの目次

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