Google Chat API を使用してメッセージを送信する

このガイドでは、Google Chat API の messages.create() メソッドを使用して、次のいずれかを行います。

  • テキスト、カード、インタラクティブなウィジェットを含むメッセージを送信します。
  • 特定の Chat ユーザーに非公開でメッセージを送信します。
  • メッセージ スレッドを開始するか、スレッドに返信します。
  • メッセージに名前を付けて、他の Chat API で指定できるようにする できます。

<ph type="x-smartling-placeholder">

Chat アプリでは、messages.create() メソッドを呼び出すだけでなく、 ユーザーの操作に対するメッセージを作成、送信して、 ユーザーがスペースに Chat 用アプリを追加した後のウェルカム メッセージを 選択します。Chat アプリは、やり取りに応答する際に、他の参加者の メッセージ機能のタイプ(インタラクティブなダイアログ、リンク プレビューなど) インターフェースです。ユーザーに返信する場合、Chat アプリは新しい Chat API を呼び出すことなく、メッセージを同期的に送信できます。学習内容 やり取りへのメッセージの送信については、 Google Chat アプリとのやり取りを受信して応答する

Chat API で作成されたメッセージの表示とアトリビューションの仕組み

messages.create() メソッドは、次のコマンドを使用して呼び出すことができます。 アプリの認証 ユーザー認証があります。 Chat によってメッセージ送信者のアトリビューションが異なる 何を使用するかを選択できます

Chat アプリとして認証すると、 Chat アプリがメッセージを送信します。

<ph type="x-smartling-placeholder">
</ph> アプリ認証を使用して messages.create() メソッドを呼び出す。
図 1: アプリの認証が行われると、Chat アプリは 表示されます。送信者が人間ではないことを示すため、Chat で名前の横に App が表示されます。

ユーザーとして認証すると、Chat アプリは ユーザーの代わりに メッセージを送信できますChat ではさらに、 Chat アプリの名前を表示して、メッセージに追加できます。

<ph type="x-smartling-placeholder">
</ph> ユーザー認証を使用して messages.create() メソッドを呼び出す。
図 2: ユーザー認証により、ユーザーがメッセージを送信すると、Chat に ユーザーの名前の横に Chat 用アプリの名前が表示されている。

また、認証タイプによって、どのメッセージ機能とインターフェースが メッセージに含めることができます。アプリ認証では Chat アプリは、リッチテキスト、 カードベースのインターフェース、 インタラクティブなウィジェットがあります Chat ユーザーはメッセージ内でのみテキストを送信できるため、 ユーザー認証を使用してメールを作成する場合、テキストのみを含めるようにします。 Google Chat 向けの 機能の詳細については、 Google Chat メッセージの概要

このガイドでは、いずれかの認証タイプを使用してメッセージを送信する方法について説明します。 やり取りできます

前提条件

Python

  • Python 3.6 以降
  • pip パッケージ管理ツール
  • 最新の Google クライアント ライブラリ。インストールまたは更新する手順は次のとおりです。 コマンドライン インターフェースで次のコマンドを実行します。
    pip3 install --upgrade google-api-python-client google-auth-oauthlib
    

ユーザーの代わりにテキスト メッセージを送信する

このセクションでは、 ユーザー認証。 ユーザー認証を使用すると、メッセージのコンテンツにテキストしか メッセージ機能は、Google Chat でのみ利用できる カード インターフェースやインタラクティブなウィジェットなどのチャットアプリ。

ユーザー認証で送信されたメッセージ
図 3. Chat アプリは、Google Chat で 使用できます。

ユーザー認証を使用して messages.create() を呼び出すには、 次のフィールドが返されます。

  • 認可スコープ サポートしています。次のサンプルでは、 chat.messages.create スコープ。
  • Space リソース。このリソースには、 選択します。認証されたユーザーは、 選択します。
  • Message 作成します。メッセージの内容を定義するには、 text 表示されます。

必要に応じて、次の情報を含めることができます。

ユーザーの代わりにテキスト メッセージを送信するには、次の手順を行います。

Python

  1. 作業ディレクトリに、先ほど作成した chat_create_message_user.py
  2. chat_create_message_user.py に次のコードを含めます。

    import os.path
    
    from google.auth.transport.requests import Request
    from google.oauth2.credentials import Credentials
    from google_auth_oauthlib.flow import InstalledAppFlow
    from googleapiclient.discovery import build
    from googleapiclient.errors import HttpError
    
    # Define your app's authorization scopes.
    # When modifying these scopes, delete the file token.json, if it exists.
    SCOPES = ["https://www.googleapis.com/auth/chat.messages.create"]
    
    def main():
        '''
        Authenticates with Chat API via user credentials,
        then creates a text message in a Chat space.
        '''
    
        # Start with no credentials.
        creds = None
    
        # Authenticate with Google Workspace
        # and get user authorization.
        flow = InstalledAppFlow.from_client_secrets_file(
                        'client_secrets.json', SCOPES)
        creds = flow.run_local_server()
    
        # Build a service endpoint for Chat API.
        chat = build('chat', 'v1', credentials=creds)
    
        # Use the service endpoint to call Chat API.
        result = chat.spaces().messages().create(
    
            # The space to create the message in.
            #
            # Replace SPACE with a space name.
            # Obtain the space name from the spaces resource of Chat API,
            # or from a space's URL.
            parent='spaces/SPACE',
    
            # Optional. Sets custom ID for the message to use in other requests.
            messageId='client-myfirstusermessage',
    
            # The text message to create.
            body={
              'text': '👋 🌎Hello world! Text messages can contain things like:\n\n'
    
              + '* Hyperlinks 🔗\n'
              + '* Emojis 😄🎉\n'
              + '* Mentions of other Chat users `@` \n\n'
    
              'For details, see the <https://developers.google.com/workspace/chat/format-messages|Chat API developer documentation>.'
          }
    
        ).execute()
    
        # Prints details about the created message.
        print(result)
    
    if __name__ == '__main__':
        main()
    

    SPACE は、スペースの ID に置き換えます。 name 表示されます。ID を取得するには、 spaces.list() メソッド またはスペースの URL から取得できます。

  3. 作業ディレクトリでサンプルをビルドして実行します。

    python3 chat_create_message_user.py
    
  4. URL を求められたら、URL を開いて スペースで使用したスコープに基づいて リクエストできます。

Chat アプリがメッセージを作成し、認証済みの ユーザーがスペースにメッセージを投稿します。コマンドライン インターフェースで、 Chat API は、新しいメッセージの Message リソース。

Chat アプリとしてメッセージを送信する

このセクションでは、テキスト、カード、メッセージが含まれる インタラクティブなアクセサリ ウィジェットを アプリの認証

アプリの認証で送信されたメッセージ
図 4. Chat アプリは、Google Chat で送信された テキスト、カード、アクセサリー ボタンです。

アプリの認証を使用して messages.create() を呼び出すには、 次のフィールドが返されます。

  • chat.bot 認可スコープ
  • Space リソース。このリソースには、 選択します。Chat 用アプリは、 メンバーの追加と削除ができます。
  • Message 作成します。メッセージの内容を定義するには、 リッチテキスト (text), 1 つ以上のカード インターフェース (cardsV2), または両方を選択できます

必要に応じて、次の情報を含めることができます。

メッセージの最大サイズ(テキストやカードを含む)は 32,000 バイトです。 このサイズを超えるメッセージを送信するには、Chat 用アプリで 複数のメッセージを送信する必要があります。

スペースが含まれている Chat アプリとして投稿されたメッセージを送信するには、 カード、メッセージ下部のクリック可能なボタン 手順は次のとおりです。

Python

  1. 作業ディレクトリに、先ほど作成した chat_create_message_app.py
  2. chat_create_message_app.py に次のコードを含めます。

    from apiclient.discovery import build
    from google.oauth2 import service_account
    
    # Specify required scopes.
    SCOPES = ['https://www.googleapis.com/auth/chat.bot']
    
    # Specify service account details.
    CREDENTIALS = service_account.Credentials.from_service_account_file(
        'credentials.json', scopes=SCOPES)
    
    # Build the URI and authenticate with the service account.
    chat = build('chat', 'v1', credentials=CREDENTIALS)
    
    # Specify the Chat space where the message is posted. Obtain the ID
    # from the resource name, or from the space's URL.
    SPACE = 'spaces/SPACE'
    
    # Create a Chat message.
    result = chat.spaces().messages().create(
    
        # The Chat space.
        parent=SPACE,
    
        # Optional. Sets custom ID for the message to use in other requests.
        messageId='client-myfirstappmessage',
    
        # The message to create with text, a card, and a button at the
        # bottom of the message.
        body=
        {
          'text': '👋 🌎Hello world! I created this message by calling the Chat API\'s `messages.create()` method.',
          'cardsV2': [{
            'cardId': 'myCardId',
            'card': {
              'header': {
                'title': 'About this message',
                'imageUrl': 'https://fonts.gstatic.com/s/i/short-term/release/googlesymbols/info/default/24px.svg',
                'imageType': 'CIRCLE'
              },
            "sections": [
                {
                "header": "Contents",
                "widgets": [
                    {
                    "textParagraph": {
                        "text": "🔡 <b>Text</b> which can include hyperlinks 🔗, emojis 😄🎉, and @mentions 🗣️."
                    }},
                    {
                    "textParagraph": {
                        "text": "🖼️ A <b>card</b> to display visual elements and request information such as text 🔤, dates and times 📅, and selections ☑️."
                    }},
                    {
                    "textParagraph": {
                        "text": "👉🔘 An <b>accessory widget</b> which adds a button to the bottom of a message."
                    }},
                  ]
                },
                {
                "header": "What's next",
                "collapsible": True,
                "widgets": [
                    {
                    "textParagraph": {
                        "text": "❤️ <a href='https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.messages.reactions/create'>Add a reaction</a>."
                    }},
                    {
                    "textParagraph": {
                        "text": "🔄 <a href='https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.messages/patch'>Update</a> or  <a href='https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.messages/delete'>delete</a> the message."
                    }},
                    {
                    "textParagraph": {
                        "text": '💡 <b>Pro tip</b>: To specify the message in other API requests, use its custom name: <i>' + SPACE + '/messages/client-myfirstappmessage</i>.'
                    }}
                  ]
                }
              ]}
          }],
          "accessoryWidgets":
          [
              {
                  "buttonList":
                  {
                      "buttons":
                      [
                          {
                              "text": "View documentation",
                              "altText": "Opens a new browser tab and navigates to the Google Chat developer documentation website.",
                              "icon":
                              {
                                  "material_icon":
                                  {
                                      "name": "link"
                                  }
                              },
                              "onClick":
                              {
                                  "openLink":
                                  {
                                      "url": "https://developers.google.com/workspace/chat/create-messages"
                                  }
                              }
                          }
                      ]
                  }
              }
          ]
        }
    
    ).execute()
    
    print(result)
    

    SPACE は、スペースの ID に置き換えます。 name 表示されます。ID を取得するには、 spaces.list() メソッド またはスペースの URL から取得できます。

  3. 作業ディレクトリでサンプルをビルドして実行します。

    python3 chat_create_message_app.py
    

Chat アプリは、メッセージを作成してメッセージを 選択します。コマンドライン インターフェースでは、Chat API が 新しい Pod の Message リソース。

メッセージの下部にインタラクティブなウィジェットを追加する

前のセクションのコードサンプルでは、 Chat 用アプリのメッセージでは、画面上部にクリック可能なボタンが表示され、 これはアクセサリ ウィジェットと呼ばれます。アクセサリ ウィジェット メッセージ内のテキストやカードの後に表示されます。これらのウィジェットを使用して ユーザーがさまざまな方法でメッセージに反応できます。たとえば、次のような方法です。

  • メッセージの正確性または満足度を評価してください。
  • メッセージまたは Chat アプリに関する問題を報告します。
  • ドキュメントなどの関連コンテンツへのリンクを開きます。
  • Chat アプリから類似のメッセージを閉じる、またはスヌーズする 表示されなくなります。

アクセサリ ウィジェットを追加するには、 accessoryWidgets[] フィールドをフィールドに追加して、リクエストするウィジェットを 1 つ以上 追加できます

次の図に、メッセージに ユーザーがエクスペリエンスを評価できるアクセサリ ウィジェットを含むテキスト メッセージ やり取りできます。

<ph type="x-smartling-placeholder">
</ph> アクセサリ ウィジェット。
図 5: テキスト ウィジェット、アクセサリ ウィジェットなどです。

以下は、テキスト メッセージを作成するリクエストの本文を示しています。 2 つのアクセサリ ボタン。ユーザーがボタンをクリックすると、対応する 関数(doUpvote など)がインタラクションを処理します。


 "text": "Rate your experience with this Chat app.",
 "accessoryWidgets": [
   {
     "buttonList": {
       "buttons": [
         {
           "icon": {
             "material_icon": {
               "name": "thumb_up"
             }
           },
           "color": {
             "red": 0,
             "blue": 255,
             "green": 0
           },
           "onClick": {
             "action": {
               "function": "doUpvote",
             }
           }
         },
         {
           "icon": {
             "material_icon": {
               "name": "thumb_down"
             }
           },
           "color": {
             "red": 0,
             "blue": 255,
             "green": 0
           },
           "onClick": {
             "action": {
               "function": "doDownvote",
             }
           }
         }
       ]
     }
   }
 ]

非公開でメッセージを送信する

Chat アプリは非公開でメッセージを送信できるため、 メッセージはスペース内の特定のユーザーのみに表示されます。特定の Chat アプリがプライベート メッセージを送信します。 は、メッセージが自分だけに表示されていることをユーザーに通知するラベルを表示します。

Chat API を使用してメッセージを非公開で送信するには、 privateMessageViewer 必ず指定してください。ユーザーを指定するには、値を User リソース。 Chat ユーザーを表します。また、 name フィールド User リソース。次の例をご覧ください。

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

USER_ID を交換 (例: 12345678987654321)または一意の ID に置き換えます。 hao@cymbalgroup.com。ユーザーの指定について詳しくは、このモジュールの Google Chat ユーザーを特定して指定する

メッセージを非公開で送信するには、リクエストで次の項目を省略する必要があります。

スレッドを開始または返信する

スレッドを使用するスペースの場合: 新しいメッセージがスレッドを開始するか、新しいメッセージが 削除することもできます。

デフォルトでは、Chat API を使用して作成したメッセージからは、 使用します。スレッドを特定して後で返信できるように、 あります。

  • リクエストの本文で、 thread.threadKey 表示されます。
  • クエリ パラメータを指定する messageReplyOption を使用して、鍵がすでに存在する場合にどうなるかを判断します。

既存のスレッドに返信するメッセージを作成するには:

  • リクエストの本文に thread フィールドを含めます。設定すると、 「 threadKey 作成します。それ以外の場合は、 name 表示されます。
  • クエリ パラメータ messageReplyOption を指定します。

次の JSON は、テキスト メッセージのリクエスト本文の例を示しています。 キー helloWorldThread を持つスレッドを開始または返信します。

   {
     'thread': {
      'threadKey': 'helloWorldThread',
     },
     'text': '👋 🌎Hello world!'
   }

メッセージに名前を付ける

今後の API 呼び出しでメッセージを取得または指定するには、メッセージに messages.create() リクエストに messageId フィールドを設定します。 メッセージに名前を付けることで、 メッセージのリソース名からシステムによって割り当てられた ID( name フィールド)。

たとえば、get() メソッドを使用してメッセージを取得するには、 して、取得するメッセージを指定します。リソース名は spaces/{space}/messages/{message} の形式。{message} は以下を表します。 システムによって割り当てられた ID、または 表示されます。

メッセージに名前を付けるには、カスタム ID を messageId 指定する必要があります。messageId フィールドは、次の値を設定します。 clientAssignedMessageId Message リソースのフィールド。

メッセージに名前を付けることができるのは、メッセージの作成時のみです。名前やメールアドレスを 既存のメッセージのカスタム ID を変更できます。カスタム ID は次の条件を満たす必要があります。 要件:

  • client- で始まります。たとえば、client-custom-name は有効なカスタム ID になりますが、custom-name は一致しません。
  • 63 文字以下で、英小文字、数字、 使用できます。
  • スペース内で一意である。Chat アプリでは、 同じカスタム ID を使用する必要があります。

トラブルシューティング

Google Chat アプリまたは card がエラーを返した場合、 Chat のインターフェースに「エラーが発生しました」というメッセージが表示されている。 または「リクエストを処理できません」が表示されます。場合によっては、Chat の UI が エラー メッセージは表示されませんが、Chat 用アプリまたは 予期しない結果が生じた場合たとえば、カード メッセージに 表示されます。

Chat UI にエラー メッセージが表示されない場合がありますが、 エラーの修正に役立つ、わかりやすいエラー メッセージとログデータ Chat 用アプリのエラーロギングが有効になっている場合。表示のヘルプについては、 エラーの修正について詳しくは、このモジュールの Google Chat のエラーのトラブルシューティングと修正