Google Chat ユーザーにプライベート メッセージを送信する

このページでは、Google Chat アプリとしてプライベート メッセージを作成して送信する方法について説明します。

プライベート メッセージは、指定した Chat ユーザーにのみ表示される Chat アプリ メッセージです。複数のユーザーがいるスペースでプライベート メッセージを使用すると、各ユーザーは非公開で Chat アプリを操作できます。たとえば、Chat アプリでは、メッセージを非公開で送信して次のことができます。

  • スラッシュ コマンドに応答します。たとえば、ユーザーがスペースで Chat アプリの /about スラッシュ コマンドを呼び出すと、Chat アプリは、そのアプリの機能と使い方を説明するプライベート メッセージで返信できます。
  • 1 人のユーザーのみに関連する情報を通知または送信します。たとえば、タスクが割り当てられたことをユーザーに通知したり、タスクの完了を通知したりできます。
  • エラー メッセージを送信します。たとえば、ユーザーがスラッシュ コマンドに必要な引数テキストを省略した場合、Chat アプリは、プライベート メッセージを送信してエラーを説明し、ユーザーがコマンドをフォーマットできるようサポートできます。

Chat アプリがプライベート メッセージを送信すると、メッセージは自分にしか表示されないことをユーザーに通知するラベルがメッセージに表示されます。

Cymbal Labs チャットアプリへのプライベート メッセージです。このメッセージは、Chat アプリが Cymbal Labs によって作成されたことを示し、ドキュメントへのリンクとサポートチームへの問い合わせリンクが共有されます。
図 1: Chat アプリがプライベート メッセージを送信すると、Only visible to you というラベルの付いたメッセージがユーザーに表示されます。

前提条件

Node.js

  • Google Chat API が有効で構成された Google Cloud プロジェクト。手順については、Google Chat アプリを作成するをご覧ください。
  • スラッシュ コマンドに非公開で応答するには、Chat アプリ用に構成されたスラッシュ コマンドを作成します。ビルドするには、スラッシュ コマンドに応答するをご覧ください。
  • messages.create() メソッドを使用してプライベート メッセージを送信するには、アプリ認証を使用する必要があります。

注: このガイドの Node.js コードサンプルは、Google Cloud Functions として実行するように作成されています。

Python

  • Google Chat API が有効で構成された Google Cloud プロジェクト。手順については、Google Chat アプリを作成するをご覧ください。
  • スラッシュ コマンドに非公開で応答するには、Chat アプリ用に構成されたスラッシュ コマンドを作成します。ビルドするには、スラッシュ コマンドに応答するをご覧ください。
  • messages.create() メソッドを使用してプライベート メッセージを送信するには、アプリ認証を使用する必要があります。

注: このガイドの Python コードサンプルは、Python 3.10 を使用して Google Cloud Functions として実行するように作成されています。

Apps Script

  • Chat アプリ。Chat アプリを作成するには、このquickstartに従ってください。
  • スラッシュ コマンドに非公開で応答するには、Chat アプリ用に構成されたスラッシュ コマンドを作成します。ビルドするには、スラッシュ コマンドに応答するをご覧ください。
  • messages.create() メソッドを使用してプライベート メッセージを送信するには、アプリ認証を使用する必要があります。

プライベート メッセージの送信機能

Chat アプリとして非公開でメッセージを送信するには、メッセージの作成時に privateMessageViewer フィールドを指定します。プライベート メッセージは、メッセージの作成と同じように、ユーザー操作に応答するか、Message リソースで Google Chat API の create() メソッドを呼び出して非同期で作成します。テキスト メッセージまたはカード メッセージを送信する手順については、メッセージを送信するをご覧ください。

次の例は、Hello private world! という非公開テキスト メッセージの JSON を示しています。

{
    "text": "Hello private world!",
    "privateMessageViewer": "USER"
}

この例の USER は、メッセージを User リソース形式で表示できる Chat ユーザーを表します。ユーザー操作に応答する場合は、操作イベントから User オブジェクトを指定できます。例については、次のスラッシュ コマンドに非公開で応答するをご覧ください。

それ以外の場合は、プライベート メッセージの閲覧者を指定するには、User リソースの name フィールドを使用します。

{
    "text": "Hello private world!",
    "privateMessageViewer": {
      "name": "users/USER_ID"
    }
}

この例では、name フィールドを使用して、Google Chat で閲覧者の User リソース名を指定しています。USER_ID は、ユーザーの一意の ID(12345678987654321hao@cymbalgroup.com など)に置き換えます。

ユーザーの指定の詳細については、Google Chat ユーザーの識別と指定をご覧ください。

スラッシュ コマンドに非公開で応答する

次のコードは、スラッシュ コマンドにプライベート メッセージで応答する Chat アプリの例を示しています。

Chat アプリは MESSAGE インタラクション イベントを処理し、使用方法を説明するプライベート テキスト メッセージで /help スラッシュ コマンドに応答します。

Node.js

/**
* Responds to a MESSAGE event in Google Chat.
*
* @param {!Object} req Request sent from Google Chat app
* @param {!Object} res Response to send back
*
* @return {!Object} respond to slash command
*/
exports.onMessage = function onMessage(req, res) {
  if (req.method === 'GET' || !req.body.message) {
    return res.send('Hello! This function is meant to be used in Google Chat app.');
  }

  const event = req.body;

  // Checks for the presence of event.message.slashCommand.
  // If the slash command is "/help", responds with a private text message.
  if (event.message.slashCommand) {
    switch (event.message.slashCommand.commandId) {
      case '1':  // /help
        return res.json({
          privateMessageViewer: event.user,
          text: 'This Chat app was created by Cymbal Labs. To get help with this app, <https://cymbalgroup.com/docs|see our documentation> or <https://cymbalgroup.com/support|contact our support team>.'
        });
    }
  }

  // If the Chat app doesn't detect a slash command, it responds
  // with a private text message
  return res.json({
    privateMessageViewer: event.user,
    text: 'Try a slash command.'
  });
};

Apps Script

/**
* Responds to a MESSAGE event in Google Chat.
*
* @param {Object} event the event object from Google Chat
*/
function onMessage(event) {
  if (event.message.slashCommand) {
    switch (event.message.slashCommand.commandId) {
      case 1: // Responds to /help
        return {
          "privateMessageViewer": event.user,
          "text": "This Chat app was created by Cymbal Labs. To get help with this app, <https://cymbalgroup.com/docs|see our documentation> or <https://cymbalgroup.com/support|contact our support team>."
        };
    }
  }
  else {
    return { "text": "Try a slash command.", "privateMessageViewer": event.user };
  }
}

Python

from typing import Any, Mapping

import flask
import functions_framework

@functions_framework.http
def main(req: flask.Request) -> Mapping[str, Any]:
  """Responds to a MESSAGE event in Google Chat.

  Args:
      req (flask.Request): the event object from Chat API.

  Returns:
      Mapping[str, Any]: open a Dialog in response to a card's button click.
  """
  if req.method == 'GET':
    return 'Hello! This function must be called from Google Chat.'

  request = req.get_json(silent=True)

  # Checks for the presence of event.message.slashCommand.
  # If the slash command is "/help", responds with a private text message.
  if request.get('message', {}).get('slashCommand'):
    command_id = request.get('message', {}).get('slashCommand').get('commandId')
    if command_id == '1':  # /help
      return {
          'privateMessageViewer': request.get('user'),
          'text': (
              'This Chat app was created by Cymbal Labs. To get help with this'
              ' app, <https://cymbalgroup.com/docs|see our documentation> or'
              ' <https://cymbalgroup.com/support|contact our support team>.'
          ),
      }

  return {
      'privateMessageViewer': request.get('user'),
      'text': 'Try a slash command.',
  }

制限事項

プライベート メッセージを送信する場合、メッセージに次の要素を含めたり、使用したりすることはできません。

  • 添付ファイル
  • アクセサリの操作:
  • 部分的に非公開のメッセージ。たとえば、Chat アプリでは、テキストを含むメッセージを送信できません。また、テキストは 1 人のユーザーにのみ表示され、カードはスペース内の全員が表示できるカードは送信できません。
  • ユーザー認証。プライベート メッセージを送信できるのは Chat アプリのみです。そのため、Chat アプリは、メッセージを非公開で送信するためのユーザーとして認証できません。

プライベート メッセージを更新または削除する

Google Chat メッセージを更新または削除するには、Chat API を呼び出す必要があります。非公開メッセージの閲覧者の変更や、メッセージの公開はできません。したがって、プライベート メッセージを更新する場合は、API 呼び出しの privateMessageViewer フィールドを省略する必要があります(このフィールドは出力のみ)。

プライベート メッセージを更新するには、メッセージを更新するをご覧ください。プライベート メッセージを削除するには、メッセージを削除するをご覧ください。