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 アプリを柔軟に構築できるため、最も一般的にデプロイされるアーキテクチャです。このアーキテクチャは、次のユースケースに推奨されます。

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

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

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

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

  1. ユーザーが Chat スペースで Chat アプリにメッセージを送信します。
  2. HTTP リクエストは、Chat アプリのロジックを含むクラウド システムまたはオンプレミス システムのウェブサーバーに送信されます。
  3. 必要に応じて、Chat アプリのロジックは、プロジェクト管理システムやチケット発行ツールなどの外部のサードパーティ サービスとやり取りできます。
  4. ウェブサーバーは、Chat の 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 からメッセージを伝送するトピックに 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. アプリケーション サーバー(Chat アプリのロジックを含むクラウドまたはオンプレミス システム)は、ファイアウォール経由でメッセージを受信するために、Pub/Sub トピックをサブスクライブします。

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

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

Webhook

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

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

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

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

上の図では、Chat アプリに次の情報フローがあります。

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

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

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

Apps Script

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

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

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

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

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

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

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

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

Dialogflow

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

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

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

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

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

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

開始するには、Dialogflow Google 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 ユーザーとやり取りするためのスラッシュ コマンドを設定するをご覧ください。

もう 1 つの方法は、メッセージをトークン化してコマンドを抽出し、コマンドを各コマンドのハンドラ関数にマッピングする辞書を参照することです。

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

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

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

自然言語処理

多くの Chat アプリの実装では、ユーザーが求めているものを判断するために自然言語処理(NLP)を使用します。NLP を実装する方法は多数あり、好みに合わせて NLP を実装することもできます。

NLP は、Dialogflow ES または Dialogflow CX の Chat インテグレーションと Chat アプリに実装できます。これにより、自動化された会話と動的レスポンス用の仮想エージェントを作成できます。

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

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

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

会話パターン

Chat アプリでユーザーとどのようにやり取りするかを検討する必要があります。以降のセクションでは、Chat アプリに実装される可能性のある会話パターンについて説明します。

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

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

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

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

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

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

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

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

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

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

  1. ユーザーが Chat アプリに同期メッセージ(「トラフィックをモニタリングする」など)を送信します。
  2. Chat アプリは、リクエストを確認するため、同期メッセージをユーザーに送信します(「モニタリング: オン」など)。
  3. その後、Chat アプリは REST API を呼び出して、1 つ以上の非同期メッセージ(「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 アプリは、Chat API を呼び出すか、Webhook URL(「キュー オーバーフロー アラート」など)に送信することで、ユーザーに非同期メッセージを送信します。
  • 必要に応じて、Chat アプリは追加の非同期メッセージを送信します。

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

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

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