Share
Embed
GoogleツールでLINEBotを作ってみよう~実践編~
GoogleツールでLINEBotを作ってみよう~実践編~で使用したスライド資料です。
YouTubeに当日のイベントの様子もありますので、併せてご利用ください。
https://www.youtube.com/watch?v=LkiEMOQi0Y4
EngineerCafe
December 27, 2023
Transcript
48 slides
-
皆さんはどこかのお店や企業の公式 LINEと友達登録をされたことがありますか? 公式LINEの仕組みはとても簡単で、誰でも気軽に導入することができるものとなっています。 公式LINEの運用にはLINEDevelopersを利用します。 自分のLINEアカウントで登録し、お店や企業としてのアカウント作成を行います。 公式LINEを動かすための仕組みも、 LINEDevelopersに集約しています。 「友達登録の申請があった時の処理」「最初のあいさつ文を返す」「お知らせを送信する」 「相手(ユーザー)からの問い合わせなど文章の受信があった時の自動返信」など、 便利な仕組みが全て用意されています。
ここにGASを組み込むことで、もっと便利に、もっと自由にカスタマイズすることができるようになります。 今回はその仕組みのひとつ、「自動返信」について少しだけ掘り下げ、 自動的に答えてくれる「ボット」を組み込んでみます。 仕組みの話 -
準備はこの辺にして、次は仕組みの話の続きです。 通常、ユーザー(LINEアプリ利用者)は公式LINEに友達登録(追加)したうえで、 チャットボットとのやりとりを行いますね。 ということは、まず友達登録が先になります。 開発者も一旦は自分のアカウントで友達登録し、 チャットボットが正常に動いているかを確かめます。 確かめるためのテストとして、試しにオウム返しするスクリプトを組んでみます。 ということでまずは第一段階。 ユーザー(利用者)がチャネル(公式LINE)に友達登録を申請します。 承認やIDの発行等は公式LINE側で行われます。
あいさつ返しなどの設定の他は特にすることはありません。 ユーザー QRコードから 友達登録の リクエスト 承認 公式LINE ここでの動きはユーザーから見た画面と同じですので、 分かりにくい部分がないかもチェックしてみましょう。 -
ユーザー 公式LINEには、予め設定したキーワードに応じて自動返信を設定できるなど、 公式LINEを運営するうえで必要な機能はほとんど揃っています。 【例】 「住所を知りたい」→(送信)→「住所」でワードを検知 →「〇〇市〇〇-〇〇」と返信 メッセージ (予め設定しておいたものを自動返信 ) 公式LINE
お店の住所は どこ? 住所 検知 〇〇市〇〇-〇〇です。 ご来店をお待ちしております! メッセージ (リクエスト) 予め登録したワード が、今回はこの仕組みを GASで手作りします。 -
ユーザー (クライアント) メッセージ (設定した内容を返す ) 公式LINE 通常のやりとりを図解するとこのようなイメージです。 公式LINEにユーザーがメッセージを送信 (リクエスト)します。 公式LINEはそれを受け取り、設定した内容を探して、適した内容をレスポンスとして返します。
ユーザー(クライアント)がそれを受け取ります。 この時に使われる通信プロトコルを「 HTTP」と呼びます。 通信プロトコルを掘り下げると時間が足りませんので省略します。 要は、環境に左右されることなく通信を円滑に行うための規格と捉えてください。 リクエスト レスポンス -
ユーザー (クライアント) メッセージ (受信したものと同一のもの ) 公式LINE GASを組み込んで、ユーザーからメッセージが送られてきたらそれをコピーしてそのまま返す仕組みは、 公式LINE側で、Webhookという設定ができます。 これは外部のアプリケーションなどと連携するための機能です。 この時のWebhookは、GASのトリガーを起動します。
トリガーが動き出すと、受け取ったメッセージを GASへ渡します。 GAS側では、受信したメッセージをコピーしてレスポンスとして返します。 あとは通常と同じく、ユーザーがそれを受け取る仕組みです。 リクエスト レスポンス -
と、いうわけで、ここからスクリプトを記述していくためのアレコレを履修します。 まずは大事なメソッドから。 「doPostメソッド」が存在します。 これはHTTP POST リクエストを処理するためのメソッドです。 HTTP POSTとは、 URLで指定したプログラムに対してクライアントからデータを送信するためのものです。 今回で言えば、URLで指定するのは公式
LINEのリプライ。 そこに、送信されてきたメッセージ (テキスト)をそのまま返答用トークンとして返します。 この時、返答するための場所 (チャネルアクセストークン )の設定が必要になってきます。 -
中身には、以下を記述します。 これはJSON.parse(e.postData.contents)という関数を呼び出し、 その情報をjsonという変数に格納しています。 JSON(ジェイソン)とは組み込みオブジェクトのひとつで、 JavaScript Object Notationの略称です。 JSONはデータを表現するための記法のひとつで、様々なプログラミング言語で使用されます。 アプリケーション間のデータのやりとりを行うために使用される文字列データを指し、 その表記方法が、JavaScriptのオブジェクトリテラルと配列リテラルの構造をベースとしていることから、
JavaScriptとの親和性が高く、Webアプリケーション間のデータ交換用フォーマットとして よく使用されています。 GASでも外部アプリケーションとのデータのやりとりの際に JSON形式を使用することが多くあります。 -
リテラルとは、文字列や数字などの値のことを指しますので、オブジェクトの値、という意味と捉えて問題ないで しょう。 簡単に言えば、ゲームのセーブデータのようなものです。 ゲーム自体は、ゲーム機の本体の電源を入れると起動し、ソフトウェアデータを読み込んで ゲームを始めますが、それは大抵「初めから」です。 途中までやった、あるいはクリアした情報はセーブデータとして保存しますね。 そして再開する時はそれを読み込みます。 その読み込む情報とは、一体何を指すのでしょうか? レベル?マップの場所?装備?アイテムの種類や数?どこまで進めたかのストーリー部分? 全部です。
その保存形式というのは様々ありますが、そのゲームにとって読み込みやすい、そして書き出しやすい形式という ものがあります。 ゲームは例え話ですので置いておいて、そういった「保存形式」が JSONと置き換えて考えてみて下さい。 -
まずはここから。 変数option(配列型)にはヘッダー情報をキーと値にして格納し、オプションとして設定しています。 Content-TypeはHTTPリクエストのコンテンツのタイプを指定しています。 アプリケーションがJSON形式のデータであること、文字エンコーディングが UTF-8であることが条件となっていま す。 ※UTF-8とは文字コードのひとつ。非常に互換性が高く幅広く使用されています。 文字コードが異なると文字化けするほか、プログラムを壊してしまう可能性などがあります。 Authorizationは認証トークンの指定をしています。今回は Bearerを使用して、正当な認証であること、
不正なアクセスを防ぐ目的があります。 LINE_TOKENはさきほど格納した情報です。 -
中身はHTTPリクエストの本文となる JSONデータです。 LINE Messaging APIへの応答メッセージを構築しています。 replyToken にはLINEからのイベントに対する返信用トークンが、 messages には送信するメッセージの情報が含まれています。 メッセージタイプがテキストであった時、
MESSAGE_TEXTに格納した内容をコピーして 返答テキストとして返す、という動きです。 -
今回は時間が足りず、一斉自動送信のスクリプトを組むには至りませんでしたが、 いかがでしたでしょうか? 一斉自動送信についてはまたいつか、イベントの中でご紹介できたらと思います。 一応、スクリプト全文だけ資料に上げておきますので、ご自由にお使いください。 ただし、スクリプトを使うとIDを吸い上げて格納する動きがあります。 そのIDを公開することが絶対にないようご注意ください。 また、自分以外のIDを格納することがないようにもご注意ください。 (他の人に友達追加を勧めないでください ) スクリプトを利用して何か事故が起こったとしても、
いかなる場合においても、責任を負うことはできませんので、あらかじめご了承ください。 全て自己責任にてご利用ください。