こんにちは!
Yuki (@yukibnb) です。
LINE Messaging APIとGoogle Apps Script(GAS)を使用してスプレッドシートに記載された語句を返信するBOTを作成する方法シリーズ記事の第5話です。
実装は前回の第4話(以下記事)で完結しました。今回第5話ではLINE Messaging APIとGASを取り巻く全体像を解説します。そして次回第6話でGASの細かい処理について解説します。
第4話のGAS内のコメントを読んで理解できた方や、「動いたら細かいことは気にしない」という方は今回と次回第6話を飛ばして頂いて大丈夫です。
「全体像が気になる」、「カスタマイズして別のGASを作りたい」という方の参考になればうれしいです。
では見ていきましょう!
LINE Messaging APIとGASの全体像
ユーザーがLINEで「チェックアウト」というメッセージを送信し、LINE BOTから「チェックアウトは....お願いいたします。」という返信を受け取るまで、大きく分けて5つのステップがあります。
ひとつひとつ区切って見ていくと理解がしやすく、全く別のLINE BOTを作成する時にも役に立ちます。
1. ユーザーがメッセージを送信する
ユーザーがLINE BOTに対してメッセージを送信すると、LINE Messaging APIにそのメッセージが届きます。
ここはシンプルなのでわかりやすいですね。
2. LINE Messaging APIからGASにメッセージ情報を送信する
(1)でLINE Messaging APIはユーザーからメッセージを受け取りました。
この(2)では、LINE Messaging APIがそのメッセージをGASに送信します。
ただ「GASに送信」とは言うものの世の中にはGASは多くあります。全然関係のない人のGASにメッセージが送信されると困りますよね。
「ユーザーからメッセージを受信したら、私が作った○○というGASにメッセージを送信して」とLINE Messaging APIに指示する必要があります。
それを実現するのがWebhookです。WebhookとはGASの住所のようなイメージです。
上記第4話でGASのWebhook URLを発行し、LINE Developersコンソール内でそのWebhook URLを登録しました。
これにより、LINE Messaging APIはユーザーからメッセージを受信すると、自動的にそのメッセージを登録されたGASに送信することができます。
3. GASで処理を行う
記述したGASの細かい内容については次回第6話で解説します。
ここでは「こういう流れで処理を行っている」ということだけイメージできれば大丈夫です。
LINE Messaging APIから受信したメッセージに対してGASで処理を行います。
一言でメッセージと言っても、GASに送られる情報はユーザーが送信した「チェックアウト」という一語だけではありません。
この「チェックアウト」というメッセージの裏側には誰が、いつ、どのような種類のメッセージを送ったか。そのユーザーに返信する場合の宛先情報など、非常に多くの情報が含まれています。
これらの情報に対してGASでは大きく3つの処理を行います。
- a. メッセージ情報を解析
- b. 返信語句・宛先を決定
- c. メッセージ形式を変換
第4話で記述したGASはこれらの3つポイントを押さえると理解しやすいです。
※細かい解説は第6話で行います
a. メッセージ情報を解析する
LINE Messaging APIからGASには、JSON(ジェイソン)文字列という形式でメッセージが送信されます。
そのままではGASにとってただの長い文字列にしか見えないため処理できません。
GASが取り扱える形式に解析してあげる必要があります。
JSON文字列をGASが取り扱える形式に解析することを「JSONをパースする」と言います。JSON.parse
メソッドを使用します。
パース(Parse)は「解析」という意味です。
JSONをパースすることで、LINE Messaging APIから受け取ったメッセージがGASにとって意味を持つものとなります。
b. 返信語句・宛先を決定する
JSONをパースすることで、LINE Messaging APIから受け取った数多くの情報の中からほしい情報を抽出できるようになります。
今回ほしい情報は「返信用の宛先」と「ユーザーが送信した語句」の二つです。
「返信用の宛先」とはLINE Messaging APIの専門用語でreply token(応答トークン)と言います。
reply tokenは1回限りの宛先メールアドレスのようなイメージです。
reply tokenを抽出しておくことで、正しいユーザーに返信することができます。
そして二つ目は「ユーザーが送信した語句」、つまり今回の例だと「チェックアウト」です。
「チェックアウト」という語句が抽出できれば、スプレッドシートの受信語句の列から「チェックアウト」を検索し、それの対となる返信語句「チェックアウトは....お願いいたします。」を決定することができます。
c. メッセージ形式を変換する
返信用の宛先であるreply tokenと、返信語句「チェックアウトは....お願いいたします。」が決まりました。
後はユーザーに返信するだけです。
ですがGASがLINE Messaging APIのメッセージをそのまま処理できなかったように、LINE Messaging APIもGASのメッセージをそのまま処理できません。
LINE Messaging APIが処理できる形式、つまりJSON文字列に変換する(戻す)必要があります。
JSON文字列に戻すにはJSON.stringify
メソッドを使用します。
stringは「文字列」という意味の名詞で、(i)fyは名詞を動詞化する接尾辞です。つまりstringifyで「文字列化する」という動詞になります。
JSON.stringify
メソッドを使うことで、LINE Messaging APIが処理できる形式に戻すことができました。
4. 返信語句・宛先をMessaging APIに送信する
(3)で返信語句・宛先の準備ができました。
GASからユーザーに直接メッセージは送信できませんので、LINE Messaging APIに返信語句・宛先情報を送信します。
この時どのLINE Messaging API(どのLINE BOT)かを指定する必要があります。
どうやって指定するかと言うと、第2話で発行したチャネルアクセストークンを使って指定します。
チャネルアクセストークンを使うことで、どのLINE BOTからユーザーにメッセージを返信するか指定できます。
GASを指定するためにWebhookを使ったのと同じようなイメージです。
5. 返信語句をユーザーに送信する
LINE Messaging APIがGASから受け取った情報の中に返信語句と宛先(reply token)がありますので、LINE Messaging APIは指定された宛先(ユーザー)に返信語句を送信します。
ユーザーは無事に「チェックアウトは....お願いいたします。」という返信を受信することができました。
まとめ
送信先の特定方法
今回紹介した5つのステップのうち、(3)以外では一方から他方に情報を送信しています。
人間同士であれば名前や住所、メールアドレス、電話番号などで相手を特定できます。
コンピューターの世界でも相手を特定する方法が様々あり、今回使用されている方法が上記画像の赤字のものです。
次回に向けて
今回はLINE Messaging APIとGASを取り巻く全体像を解説しました。
GASの処理内容については大まかにしか触れていないため、次回第6話では第4話で記述したGASの詳しい解説を行います!
次回もおたのしみに!
【次回記事はこちら!】
www.yukibnb.com
【シリーズ目次】
《基本編》
・【シリーズ第1話】LINE Messaging APIのプロバイダーとチャネルを作成する方法
・【シリーズ第2話】LINE Messaging APIのチャネルアクセストークンを発行しよう
・【シリーズ第3話】LINE BOTに返信させる語句をスプレッドシートに入力する
・【シリーズ第4話】コピペでOK!スプレッドシートの語句を返信するLINE BOTをGASで作成する方法(実践編)
・※本記事※【シリーズ第5話】スプレッドシートの語句を返信するLINE BOTをGASで作成する方法(解説編: 全体像)
・【シリーズ第6話】スプレッドシートの語句を返信するLINE BOTをGASで作成する方法(解説編: GAS)
《応用編》
・【応用編第1話】スプレッドシートを使ってLINE BOTにスタンプや画像を返信させる方法 (シート準備編)
・【応用編第2話】コピペでOK!スプレッドシートを使ってLINE BOTにスタンプや画像を返信させる方法 (実践編)
・【応用編第3話】コピペでOK!スプレッドシートを使ってLINE BOTにスタンプや画像を返信させる方法 (解説編: GAS)