ENGINEER BLOG

ENGINEER BLOG

HangoutChatでチャットボットを作ってみる

こんにちは。ソリューションC&I本部の後藤です。

チャットボットって使ったことありますか?

「チャットボット」という言葉が出てから数年たちました。

いまでは企業Webページなどでチャットボットを利用したサポートサービスも見られます。

利用したことのある人も多いでしょう。質問を投げるとそれに見合うような答えを返してくれます。

ユーザーサポートなどで使われるのは見ても、自分たちの仕事などにチャットボットが使えるか、ということはあまり考えたことはないのではないでしょうか?

今回は弊社内でチャットボットを使った事例とその作成手順をご紹介します。

チャットボット=AIというわけではない

「チャットボット」というと、

ユーザーの質問に対して、AIが質問を解釈して適切な答えを返してくれるもの

と、思われている方も多いでしょう。

それもチャットボットの一つの種類なのですが、すべてがそうではありません。

チャットボットには大きく「AI(機械学習)型」と「ルールベース型」に分けられます。

「AI型」は、その名の通りAIなどを応用し、質問の表記ゆれを補完してくれたり、学習されたデータから自動で回答を導いたりすることができます。

かたや「ルールベース型」は、決められた質問に対して決められた回答を返す、というものです。

難しいことはやらない

今回はルールベース型のチャットボット作成をご紹介します。ポイントは

  • 役に立つこと(当然ですが、何かの役に立たないと意味ない)
  • 難しすぎないこと(AI型はできることが多いけど、ボット本体とは違う話(データ分析とか機械学習とか)を考える必要がある)

単純だけど役に立つことがないかと考えました。

社内で作成したのはチャットボットにキーワードを投げると、GSuiteのスプレッドシートから該当するメッセージを投げ返してくれるチャットボットです。

システムでエラーが発生したときに、処理名やエラーメッセージが出力されずに、IDだけが表示されたりすることがあります。

監視ツールなどでは、処理名ではなく登録されたIDが表示されたりします。

通常はここで対応表のEXCELなりスプレッドシートを開いて・・・検索して・・・フィルタかけて・・・などをして処理名を調べるのですが

こういう細かい動作ってストレスになりませんか?

けどIDだけでなく処理名が出るようにアプリケーション改修して作りこみますか?

パッケージソフトの仕様であればそれも無理。

ということでチャットボットに聞くと教えてもらうようにしました。

image01

IDをボットに話しかけると詳細を教えてくれます!!

GSuiteのHangoutChatを用いて実装

では作ってみましょう。

今回はGSuiteのChatAPIを利用して、Google Chatで動作するボットを作成します。

なお、botの作成に当たっては2019年4月のGoogle側の仕様変更により、いくつか変更点があります。

GCP(Google Cloud Platform)のプロジェクト作成が制限されている場合、ボットの作成も行えないのでご注意ください。

初めに、バックエンド処理を作ります。

(今回は、バックエンド処理の詳細ロジックは割愛します)

GAS(Google Apps Script)のプロジェクトを作ります。

チャットボット用のテンプレートが用意されているので、それを使いましょう。

https://script.google.com/create?template=hangoutsChat

capture11

実際には受け取りパラメータをもとにメッセージの解析をして戻す処理を記述します。

プロジェクトを保存しましょう。今回は「NT_Sample_Bot01」として保存します。

「デプロイID」を控えておきましょう。

公開→マニフェストから配置 から取得します。

capture12

GetID → DeploymentID を控えておきます。

capture13

なお、チャットボットの実行者はGASプロジェクトの閲覧権限がないとボットを動作させられません。

次に、インターフェース処理を作ります。

GCPでプロジェクトを作成します。

https://developers.google.com/hangouts/chat/how-tos/bots-publish?hl=ja#enabling_the_hangouts_chat_api

リンクページ内に、「enable the API」というボタンがあるのでクリックします。

GCPプロジェクトを作成します。

capture14

関連するサービスアカウントが自動的に作成されます。

capture15

作成したGCPプロジェクトを開きます。

https://console.cloud.google.com/getting-started?hl=ja

「IAMと管理」→「サービスアカウント」から、サービスアカウントを確認します。

capture16

サービスアカウントに、GCPプロジェクトのオーナー権限を付与します。

capture17

capture18

次に、Hangouts Chat APIの設定を行います。

capture19

「APIとサービス」→「ダッシュボード」から、「APIとサービスを有効化」を選択します。

「Hangouts Chat API」を選択し、有効にします。

「設定」からボットの設定を行います。

capture20

「ボット名」「説明」は、ボットを検索したときに表示される名称です。

capture21

「接続設定」で、実際に動作するGASプロジェクトを指定します。

ここで、GASプロジェクトのデプロイIDを指定します。

権限を適宜付与して保存すると、ボットとしてデプロイされます。

capture22

ボットとして機能させることができました!

おわりに チャットボットの構成まとめ

最後に、大まかにルールベース型のチャットボットがどのように動くかをご説明しておきます。

  1. ユーザー → [インターフェース]
    • ユーザーがメッセージを送信します。
  2. [インターフェース] → 【バックエンド処理】
    • バックエンド処理にて送信されたメッセージを解析します。必要なキーワードをメッセージから抽出します。
  3. (A) 質問に対して応答を返す処理の場合
    • 【バックエンド処理】 → 『データベース検索』etc
    • キーワードを元にデータベース検索を行い、応答内容メッセージや選択肢を用意します。
  4. (B) データ更新などの処理をする場合
    • 【バックエンド処理】 → 『データベース更新』 『カレンダー更新』 『メール送信』
    • キーワードを元にデータベース更新(例えば、出退勤処理ボットとか)、カレンダー更新(自動会議セットボット)、メール送信(定型メール送信ボット)などの処理を行う。
  5. 【バックエンド処理】 → [インターフェース] → ユーザー
    • 応答メッセージや完了メッセージを返答します。

インターフェースとバックエンド処理が必要になります。

  • インターフェース

    • バックエンド処理にメッセージを送信する
    • リアルタイムにバックエンド処理からの返答を受け付ける
    • ユーザーとのインターフェースはメッセージングアプリのプラットフォームを利用することが簡単。(LINEbotやGoogleChatAPIなど)
  • バックエンド処理

    • 送られたメッセージを解析
    • メッセージを元に何か答えを返す(過去データから最適な回答を選んで教える、カレンダーを検索して空き時間を教える、etc)
    • 何かの処理をする(カレンダーに予定を作成する、データベースに更新する、etc)
      • → ここが無尽蔵に難しくも出来るし、簡単にもできる。

作成しての感想ですが、お手軽な問合せインターフェースとしてチャットボットはありかな、と思います。難しく考えず、単独の目的に絞って作るとよいかもしれません。

ということで、今回はチャットボットの作成手順についてご説明しました。