Google Chat アプリのアーキテクチャを選択する

このページでは、Google Chat アプリの作成に使用される一般的なサービス アーキテクチャのアプローチについて説明します。Google Chat に統合する既存のアプリがある場合は、既存の実装を使用するか、適応させます。新しい Chat アプリを作成する場合は、ユースケースに適したアーキテクチャを選択できるように、このページに同様の情報がいくつかの異なる方法で示されます。

特長と機能別の概要

次の表に、Chat アプリの主な特長と機能と、推奨されるサービス アーキテクチャ スタイル()を示します。場合によっては、これらの機能を使用して別のアーキテクチャ スタイルを開発できる可能性がありますが、他のスタイル()ほどユースケースには適していません。

特長と機能

ウェブサービスまたは HTTP サービス

Pub/Sub

Webhook

Apps Script

AppSheet

Dialogflow

スクリプト

対象読者

ビジネスの改革を加速

あなたの組織

一般の人々

ユーザー インタラクティビティ

自然言語処理を使用する

メッセージング パターン

同期メッセージを送受信する

同期メッセージの送受信と非同期メッセージの送信

非同期メッセージのみを送信する

外部システムから単一の Chat スペースにメッセージを送信する

他のサービスやシステムへのアクセス

他の Google サービスとの統合

ファイアウォールの背後で通信する

Google Workspace のイベントに登録する

コーディングとデプロイのスタイル

コード不要の開発

ローコードで開発

任意のプログラミング言語での開発

DevOps の簡素化

完全な DevOps と CI/CD 管理

サービス アーキテクチャのスタイル

このセクションでは、Chat アプリの作成に使用される最も一般的なアーキテクチャ アプローチについて説明します。

ウェブサービスまたは HTTP サービス

ウェブサービスまたは HTTP サービスは、最も頻繁にデプロイされるアーキテクチャです。デベロッパーがパブリック チャットアプリを柔軟に構築できるからです。このアーキテクチャは、次のユースケースに推奨されます。

  • Chat アプリが Google Workspace Marketplace で一般公開されています。
  • Chat アプリは、すべてのメッセージング パターン(同期メッセージの送受信、非同期メッセージの送信、外部システムからのメッセージの送信)を送受信できます。
  • Chat アプリは、任意のプログラミング言語で開発されています。
  • Chat アプリには、完全な DevOps と CI/CD 管理が必要です。
  • チャットアプリ サービスは、クラウドまたはオンプレミスのサーバーに実装されます。

この設計では、次の図に示すように、HTTP を使用してリモート サービスと統合するように Chat を構成します。

オンプレミス サーバーでウェブサービスを使用する Chat アプリのアーキテクチャ。

上の図では、HTTP チャットアプリを操作するユーザーには、次のような情報の流れがあります。

  1. ユーザーが Chat スペース内のメッセージを Chat アプリに送信します。
  2. HTTP リクエストが、チャットアプリのロジックを含むクラウドまたはオンプレミスのシステムであるウェブサーバーに送信されます。
  3. 必要に応じて、チャットアプリのロジックはプロジェクト管理システムやチケット販売ツールなどの外部のサードパーティ サービスとやり取りできます。
  4. ウェブサーバーは、Chat のチャットアプリ サービスに HTTP レスポンスを戻します。
  5. レスポンスがユーザーに配信されます。
  6. 必要に応じて、Chat アプリは Chat API を呼び出してメッセージを非同期で投稿したり、その他のオペレーションを実行したりできます。

このアーキテクチャでは、さまざまなプログラミング言語でチャットアプリを設計できるため、システムにすでに存在する既存のライブラリやコンポーネントを柔軟に使用できます。このアーキテクチャを実装する方法はいくつかあります。Google Cloud では、Cloud Functions、Cloud Run、App Engine を使用できます。開始するには、Cloud Functions を使用して Google Chat アプリを作成するをご覧ください。

Pub/Sub

Chat アプリがファイアウォールの背後に実装されている場合、Chat はそのアプリに対して HTTP 呼び出しを行うことができません。1 つの方法は、Pub/Sub を使用して、Chat からのメッセージを伝えるトピックにチャットアプリの実装を有効にすることです。Pub/Sub は、メッセージを生成するサービスと処理するサービスと切り離す非同期メッセージ サービスです。このアーキテクチャは、次のユースケースに推奨されます。

  • Chat アプリはファイアウォールの背後で構築されています。
  • Chat アプリは、Chat スペースに関するイベントを受信します。
  • Chat アプリが組織にデプロイされました。
  • Chat アプリでは、同期メッセージの送受信と非同期メッセージの送信が可能です。
  • Chat アプリは、任意のプログラミング言語で開発されています。
  • Chat アプリには、完全な DevOps と CI/CD 管理が必要です。

次の図は、Pub/Sub を使用して構築された Chat アプリのアーキテクチャを示しています。

Pub/Sub を使用して実装された Chat アプリのアーキテクチャ。

上の図では、Pub/Sub Chat アプリを操作するユーザーには次のような情報フローがあります。

  1. ユーザーが Chat から Chat アプリにダイレクト メッセージまたは Chat スペースでメッセージを送信するか、Chat アプリに有効なサブスクリプションがある Chat スペースでイベントが発生します。

  2. Chat が Pub/Sub トピックにメッセージを送信します。

  3. アプリケーション サーバー(チャットアプリのロジックを含むクラウドまたはオンプレミス システム)は、ファイアウォールを介してメッセージを受信するために Pub/Sub トピックにサブスクライブします。

  4. 必要に応じて、Chat アプリは Chat API を呼び出してメッセージを非同期で投稿したり、その他のオペレーションを実行したりできます。

開始するには、Pub/Sub を Chat アプリのエンドポイントとして使用するをご覧ください。

Webhook

Chat Webhook URL の呼び出しを使用して、特定の Chat スペースにのみメッセージを送信できる Chat アプリを作成できます。このアーキテクチャは、次のユースケースに推奨されます。

  • Chat アプリがチームにデプロイされます。
  • Chat アプリは、外部システムから単一の Chat スペースにメッセージを送信します。

次の図に示すように、このアーキテクチャでは、Chat アプリは特定の Chat スペースに制限され、ユーザー操作は許可されません。

着信 Webhook が非同期メッセージを Chat に送信するアーキテクチャ。

上の図では、Chat アプリに次のような情報の流れがあります。

  1. Chat アプリのロジックは、プロジェクト管理システムやチケット販売ツールなどの外部のサードパーティ サービスから情報を受け取ります。
  2. Chat アプリのロジックは、クラウドまたはオンプレミスのシステムでホストされ、Webhook URL を使用して特定の Chat スペースにメッセージを送信できます。
  3. ユーザーは、特定の Chat スペースで Chat アプリからメッセージを受信できますが、Chat アプリを操作することはできません。

このタイプの Chat アプリは、他の Chat スペースや他のチームと共有することはできません。また、Google Workspace Marketplace に公開することもできません。着信 Webhook は、チャットアプリでアラートやステータスを報告する場合や、一部のタイプのチャットアプリのプロトタイピングに推奨されます。

開始するには、Webhook を使用して Chat にメッセージを送信するをご覧ください。

Apps Script

チャットアプリのロジックはすべて JavaScript で作成できます。Google Apps Script は、チャットアプリ用のローコード開発プラットフォームです。Apps Script は、ユーザー認証のために認可フローと OAuth 2.0 トークンを処理します。Apps Script を使用して一般公開の Chat アプリを構築することもできますが、1 日あたりの割り当てと上限があるためおすすめできません。

このアーキテクチャは、次のユースケースに推奨されます。

  • Chat アプリがチームまたは組織にデプロイされます。
  • Chat アプリは、すべてのメッセージング パターン(同期メッセージの送受信、非同期メッセージの送信、外部システムからのメッセージの送信)を送受信できます。
  • Chat アプリでは、DevOps 管理を簡素化する必要があります。

このアーキテクチャは、次の図に示すように、他の Google Workspace や Google サービス(Google スプレッドシート、Google スライド、Google カレンダー、Google ドライブ、Google マップ、YouTube など)とも統合するチャットアプリに役立ちます。

Apps Script で実装された Chat アプリのアーキテクチャ。

上の図では、Apps Script のチャットアプリを操作するユーザーには、次のような情報の流れがあります。

  1. ユーザーがダイレクト メッセージまたは Chat スペースで Chat アプリにメッセージを送信します。
  2. Google Cloud にある Apps Script に実装されているチャットアプリのロジックがメッセージを受信します。
  3. 必要に応じて、チャットアプリのロジックをカレンダーやスプレッドシートなどの Google Workspace サービスや、Google マップや YouTube などの Google サービスと統合できます。
  4. Chat アプリのロジックは、Chat の Chat アプリ サービスにレスポンスを戻します。
  5. レスポンスがユーザーに配信されます。

開始するには、Apps Script を使用して Chat アプリを作成するをご覧ください。

AppSheet

AppSheet を使用すると、ドメイン共有の Chat アプリをコードなしで作成できます。自動構成モードと次のテンプレートを使用して、一般的な Chat アプリのアクションを構築することで、開発プロセスを簡素化できます。ただし、AppSheet ウェブアプリの一部の機能は Chat アプリでは使用できません

このアーキテクチャは、次のユースケースに推奨されます。

  • Chat アプリがチームとチームにデプロイされます。
  • Chat アプリでは、同期メッセージの送受信と非同期メッセージの送信が可能です。
  • Chat アプリでは、DevOps 管理を簡素化する必要があります。

次の図は、AppSheet を使用して構築された Chat アプリのアーキテクチャを示しています。

AppSheet で実装された Chat アプリのアーキテクチャ。

上の図では、AppSheet Chat アプリを操作するユーザーには、次のような情報の流れがあります。

  1. ユーザーが Chat から Chat アプリに(ダイレクト メッセージまたは Chat スペースで)メッセージを送信します。
  2. Google Cloud にある AppSheet に実装されたチャットアプリのロジックがメッセージを受信します。
  3. 必要に応じて、チャットアプリのロジックを Apps Script や Google スプレッドシートなどの Google Workspace サービスと統合できます。
  4. Chat アプリのロジックは、Chat の Chat アプリ サービスにレスポンスを戻します。
  5. レスポンスがユーザーに配信されます。

開始するには、AppSheet を使用して Chat アプリを作成するをご覧ください。

Dialogflow

チャットアプリは、自動化された会話と動的レスポンスのための自然言語プラットフォームである Dialogflow を使用して作成できます。このアーキテクチャは、次のユースケースに推奨されます。

  • Chat アプリは同期メッセージを送受信できます。
  • Chat アプリは、自然言語処理を使用してユーザーに応答し、やり取りします。

次の図は、Dialogflow で構築されたチャットアプリのアーキテクチャを示しています。

Dialogflow で実装されたチャットアプリのアーキテクチャ。

上の図では、Dialogflow チャットアプリを操作するユーザーには、次のような情報の流れがあります。

  1. ユーザーが Chat から Chat アプリに(ダイレクト メッセージまたは Chat スペースで)メッセージを送信します。
  2. Google Cloud にある Dialogflow 仮想エージェントがメッセージを受信して処理し、レスポンスを生成します。
  3. 必要に応じて、チャットアプリのロジックはプロジェクト管理システムやチケット販売ツールなどの外部のサードパーティ サービスとやり取りできます。
  4. Dialogflow エージェントは、Chat のチャットアプリ サービスにレスポンスを返信します。
  5. レスポンスがユーザーに配信されます。

使用方法については、Dialogflow ES Chat の統合または Dialogflow CX Chat の統合をご覧ください。

コマンドライン アプリケーションまたはスクリプト

ユーザーが Chat 内で Chat アプリを直接呼び出したり応答したりせずに、Chat へのメッセージの送信や、スペースの作成、スペース メンバーの管理などの操作を実行するコマンドライン アプリケーションまたはスクリプトを作成できます。このアーキテクチャは、次のユースケースに推奨されます。

  • Chat アプリは、任意のプログラミング言語で開発されています。
  • Chat アプリは非同期メッセージのみを送信できます。

次の図にアーキテクチャを示します。

コマンドライン アプリケーションまたはスクリプトで実装された Chat アプリのアーキテクチャ。

上の図では、Chat アプリに次のような情報の流れがあります。

  1. Chat アプリが Chat API を呼び出して、メッセージの送信などのオペレーションを実行する。
  2. Chat がリクエストされたオペレーションを実行します。
  3. 必要に応じて、Chat アプリから CLI に確認メッセージが出力されます。

チャットアプリのロジックの実装

Chat は、Chat アプリのロジックの実装方法を制限するものではありません。固定構文コマンド パーサーの作成、高度な AI および言語処理ライブラリやサービスの使用、イベントのサブスクライブと応答など、特定の目標に適した内容を行うことができます。

ユーザー操作を処理する

チャットアプリは、さまざまな方法でユーザー操作を受信して応答できます。ユーザー インタラクションとは、Chat アプリを呼び出すか、Chat アプリを操作するためにユーザーが行うあらゆるアクションを指します。

コマンドパーサー

コマンドドリブンの Chat アプリは、チャットアプリのインタラクション イベントのペイロードを調べて、このコンテンツからコマンドとパラメータを抽出します。たとえば、Chat ユーザーとやり取りするためのスラッシュ コマンドを設定するをご覧ください。

また、メッセージをトークン化してコマンドを抽出し、コマンドを各コマンドのハンドラ関数にマッピングする辞書を参照する方法もあります。

ダイアログ ベースのユーザー インターフェース

ダイアログベースのアプリは、チャットアプリのインタラクション イベントに応答して、カードベースのダイアログを表示し、フォームへの入力やアクションのリクエストなど、チャットアプリを操作できるようにします。

ユーザーがダイアログでアクションを実行するたびに、新しいインタラクション イベントが Chat アプリに送信されます。Chat アプリは、ダイアログを更新するかメッセージを送信することで応答できます。

自然言語処理

多くのチャットアプリの実装では、ユーザーが何を求めているかを判断するために自然言語処理(NLP)が使用されます。NLP の実装方法は多数あり、お好みで実装することもできます。

NLP は、Dialogflow ES または Dialogflow CX のチャット統合とチャットアプリの実装で使用できます。これにより、自動化された会話と動的レスポンス用の仮想エージェントを作成できます。

Chat に積極的にリクエストを発行する

Chat アプリは Chat にメッセージやその他のリクエストを送信することもできますが、これらは Chat での直接のユーザー インタラクションによってトリガーされません。これらの Chat アプリは、サードパーティ アプリケーションやユーザーからのコマンドライン呼び出しなどによってトリガーできますが、ユーザーが Chat で直接操作することはできません。

非対話型 Chat アプリは、Chat API を使用して、メッセージやその他のタイプのリクエストを Chat に送信します。

会話のパターン

Chat アプリでユーザーとやり取りする方法を検討する必要があります。以降のセクションでは、Chat アプリで実装できる会話パターンについて説明します。

呼び出しとレスポンス(同期)

同期型の通話とレスポンスのパターンでは、Chat アプリはユーザーからのメッセージに 1 対 1 で返信します。次の図に示すように、ユーザーが Chat アプリに送信すると、Chat アプリからは 1 つのレスポンスが返されます。

同期メッセージのアーキテクチャ。

上の図では、チャットアプリを操作するユーザーには次のような情報の流れがあります。

  1. ユーザーが Chat アプリに同期メッセージ(「次のミーティングは何?」など)を送信します。
  2. Chat アプリがユーザーに同期メッセージ(「2:30 に Silva 博士」など)を送信します。

このタイプの会話パターンでは、ウェブサービス、Pub/Sub、Apps Script、AppSheet、または Dialogflow を使用して Chat アプリのアーキテクチャを実装できます。

複数のレスポンス(非同期)

複数レスポンス パターンには、同期メッセージと非同期メッセージを含めることができます。このパターンの特徴は、ユーザーと Chat アプリの間の双方向通信であり、次の図に示すように、Chat アプリは任意の数の追加メッセージを生成します。

非同期メッセージのアーキテクチャ。

上の図では、チャットアプリを操作するユーザーには次のような情報の流れがあります。

  1. ユーザーが Chat アプリに同期メッセージ(「トラフィックを監視する」など)を送信します。
  2. Chat アプリが、リクエストを確認する同期メッセージをユーザーに送信します(「モニタリング: オン」など)。
  3. その後、Chat アプリは REST API を呼び出して「New traffic」などの非同期メッセージをユーザーに送信します。
  4. ユーザーが追加の同期メッセージ(「トラフィックを無視する」など)を Chat アプリに送信します。
  5. Chat アプリが、リクエストを確認する同期メッセージ(「モニタリング オフ」など)をユーザーに送信します。

このタイプの会話パターンでは、ウェブサービス、Pub/Sub、Apps Script、または AppSheet を使用して Chat アプリのアーキテクチャを実装できます。

イベントに登録する(非同期)

非同期イベント ドリブン パターンでは、Chat アプリは Google Workspace Events API を使用してイベントに登録します。イベント ドリブンの Chat アプリは、Chat サブスクリプション イベントのペイロードを確認し、イベントタイプに応じて応答します。Chat アプリにアクティブなサブスクリプションがある Chat スペースでイベントが発生すると、Chat はイベントを Chat アプリに送信します。Chat アプリでは、必要に応じて任意の数の非同期レスポンスを生成し、Chat API を使用して Chat に返します。

このタイプのロジックを使用して、チケット管理システムなどの外部システムを更新したり、Chat スペースにメッセージを非同期で送信したりできます(たとえば、新しいユーザーが Chat スペースに参加したときにウェルカム メッセージを送信するなど)。

次の図は、イベント ドリブンの会話パターンを示しています。

イベント ドリブン メッセージのアーキテクチャ。

上の図では、Chat と Chat アプリの間の情報の流れは次のようになります。

  1. Chat アプリは Google Chat スペースに登録します。
  2. Chat アプリが登録されるスペースが変更されます。
  3. Chat アプリは、サブスクリプションの通知エンドポイントとして機能する Pub/Sub のトピックにイベントを配信します。このイベントには、リソースの変更点に関するデータが含まれています。
  4. Chat アプリは、イベントを含む Pub/Sub メッセージを処理し、必要に応じてアクションを実行します。

このタイプの会話パターンでは、Pub/Sub を使用してチャットアプリのアーキテクチャを実装できます。

Chat アプリからの一方向メッセージ

Chat アプリからの一方向メッセージを使用すると、Chat アプリは Chat スペースに非同期メッセージを送信できますが、ユーザーが Chat アプリを直接操作することはできません。このパターンは会話型でもインタラクティブでもないものの、次の図に示すように、アラーム レポートなどに便利です。

一方向メッセージのアーキテクチャ。

上の図では、Chat アプリと同じスペース内のユーザーが次のような情報の流れを図っています。

  • Chat アプリは、Chat API を呼び出すか、Webhook URL に投稿することで、ユーザーに非同期メッセージを送信します(「Queue overflow alert」など)。
  • 必要に応じて、Chat アプリが追加の非同期メッセージを送信します。

このタイプの会話パターンでは、ウェブサービス、Webhook、Apps Script、AppSheet、コマンドライン アプリケーション、スクリプトを使用して Chat アプリのアーキテクチャを実装できます。

Chat アプリへの一方向メッセージ

Chat アプリへの一方向メッセージを使用すると、ユーザーは、リクエストを処理しながら、Chat アプリが応答していなくても Chat アプリにメッセージを送信できます。このアーキテクチャは技術的には可能ですが、ユーザー エクスペリエンスが低下するため、このパターンはおすすめしません。