どうも。つじけ(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イベントオブジェクトから、メッセージの送信時刻や、メッセージ本文も抜き出しました。
次回は、「特定のユーザーにメッセージ送信」をお届けします。