メッセージを更新する

このガイドでは、Google Chat API の Message リソースの update() メソッドを使用して、スペース内のテキスト メッセージまたはカード メッセージを更新する方法について説明します。メッセージを更新して、メッセージ属性( テキスト、またはカードのコンテンツです。カード メッセージの前にテキスト メッセージを追加したり、テキスト メッセージの後にカードを追加したりすることもできます。

Chat API では、Chat メッセージは Message リソースで表されます。Chat ユーザーはテキストを含むメッセージしか送信できませんが、 Chat アプリでは、他にもさまざまなメッセージ機能を使用できます。 静的またはインタラクティブなユーザー インターフェースを表示し、 ユーザー、 プライベートでのメッセージの配信などですGoogle Chat 向けの 機能の詳細については、 Google Chat メッセージの概要

前提条件

Node.js

Python

Java

Apps Script

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

ユーザーに代わってメッセージを更新する

ユーザー認証では、メッセージのテキストのみを更新できます。

ユーザー認証を使用してメッセージを更新するには、 request:

  • chat.messages 認可スコープを指定します。
  • UpdateMessage() メソッドを呼び出します。
  • message を次のインスタンスとして渡します。 Message 次のように置き換えます。 <ph type="x-smartling-placeholder">
      </ph>
    • スペース ID を含む、更新するメッセージに設定された name フィールド メッセージ ID などがあります。
    • 新しいテキストが設定された text フィールド。
  • updateMask と値 text を渡します。

更新されたメッセージがカード メッセージの場合、テキストはカードの前に追加されます(カードは引き続き表示されます)。

メッセージを更新する方法、またはカード メッセージの先頭にテキスト メッセージを追加する方法は次のとおりです。 ユーザー認証を使用する場合:

Node.js

chat/client-libraries/cloud/update-message-user-cred.js
import {createClientWithUserCredentials} from './authentication-utils.js';

const USER_AUTH_OAUTH_SCOPES = ['https://www.googleapis.com/auth/chat.messages'];

// This sample shows how to update a message with user credential
async function main() {
  // Create a client
  const chatClient = await createClientWithUserCredentials(USER_AUTH_OAUTH_SCOPES);

  // Initialize request argument(s)
  const request = {
    message: {
      // Replace SPACE_NAME and MESSAGE_NAME here
      name: 'spaces/SPACE_NAME/messages/MESSAGE_NAME',
      text: 'Updated with user credential!'
    },
    // The field paths to update. Separate multiple values with commas or use
    // `*` to update all field paths.
    updateMask: {
      // The field paths to update.
      paths: ['text']
    }
  };

  // Make the request
  const response = await chatClient.updateMessage(request);

  // Handle the response
  console.log(response);
}

main().catch(console.error);

Python

chat/client-libraries/cloud/update_message_user_cred.py
from authentication_utils import create_client_with_user_credentials
from google.apps import chat_v1 as google_chat

SCOPES = ["https://www.googleapis.com/auth/chat.messages"]

# This sample shows how to update a message with user credential
def update_message_with_user_cred():
    # Create a client
    client = create_client_with_user_credentials(SCOPES)

    # Initialize request argument(s)
    request = google_chat.UpdateMessageRequest(
        message = {
            # Replace SPACE_NAME and MESSAGE_NAME here
            "name": "spaces/SPACE_NAME/messages/MESSAGE_NAME",
            "text": "Updated with user credential!"
        },
        # The field paths to update. Separate multiple values with commas or use
        # `*` to update all field paths.
        update_mask = "text"
    )

    # Make the request
    response = client.update_message(request)

    # Handle the response
    print(response)

update_message_with_user_cred()

Java

chat/client-libraries/cloud/src/main/java/com/google/workspace/api/chat/samples/UpdateMessageUserCred.java
import com.google.chat.v1.ChatServiceClient;
import com.google.chat.v1.UpdateMessageRequest;
import com.google.chat.v1.Message;
import com.google.protobuf.FieldMask;

// This sample shows how to update message with user credential.
public class UpdateMessageUserCred {

  private static final String SCOPE =
    "https://www.googleapis.com/auth/chat.messages";

  public static void main(String[] args) throws Exception {
    try (ChatServiceClient chatServiceClient =
        AuthenticationUtils.createClientWithUserCredentials(
          ImmutableList.of(SCOPE))) {
      UpdateMessageRequest.Builder request = UpdateMessageRequest.newBuilder()
        .setMessage(Message.newBuilder()
          // replace SPACE_NAME and MESSAGE_NAME here
          .setName("spaces/SPACE_NAME/messages/MESSAGE_NAME")
          .setText("Updated with user credential!"))
        .setUpdateMask(FieldMask.newBuilder()
          // The field paths to update.
          .addPaths("text"));
      Message response = chatServiceClient.updateMessage(request.build());

      System.out.println(JsonFormat.printer().print(response));
    }
  }
}

Apps Script

chat/advanced-service/Main.gs
/**
 * This sample shows how to update a message with user credential
 * 
 * It relies on the OAuth2 scope 'https://www.googleapis.com/auth/chat.messages'
 * referenced in the manifest file (appsscript.json).
 */
function updateMessageUserCred() {
  // Initialize request argument(s)
  // TODO(developer): Replace SPACE_NAME and MESSAGE_NAME here
  const name = 'spaces/SPACE_NAME/messages/MESSAGE_NAME';
  const message = {
    text: 'Updated with user credential!'
  };
  // The field paths to update. Separate multiple values with commas or use
  // `*` to update all field paths.
  const updateMask = 'text';

  // Make the request
  const response = Chat.Spaces.Messages.patch(message, name, {
    updateMask: updateMask
  });

  // Handle the response
  console.log(response);
}

このサンプルを実行するには、次のように置き換えます。

  • SPACE_NAME: スペースの name の ID。ID は、ListSpaces() メソッドを呼び出すか、スペースの URL から取得できます。
  • MESSAGE_NAME: メッセージの ID name。 ID は、Chat API を使用してメッセージを非同期で作成した後に返されたレスポンス本文から取得できます。また、作成時にメッセージに割り当てられたカスタム名から取得することもできます。

Chat API は、更新されたメッセージの詳細を示す Message のインスタンスを返します。

Chat アプリとしてメッセージを更新する

アプリ認証では、メッセージのテキストとカードの両方を更新できます。

アプリの認証を使用してメッセージを更新するには、リクエストで次の要素を渡します。

  • chat.bot 認可スコープを指定します。
  • UpdateMessage() メソッドを呼び出します。
  • 次のように、messageMessage のインスタンスとして渡します。
    • スペース ID を含む、更新するメッセージに設定された name フィールド メッセージ ID などがあります。
    • 更新が必要な場合は、新しいテキストが設定された text フィールド。
    • 更新が必要な場合、新しいカードに設定された cardsV2 フィールド。
  • updateMask に、更新するフィールドのリスト(textcardsV2 など)を渡します。

更新されたメッセージが カード メッセージとテキストが更新されたら、 その後、更新されたテキストがカードの先頭に追加されます(カードは引き続き表示されます)。 更新されたメッセージがテキスト メッセージで、カードが更新された場合、更新されたカードはテキストに追加されます(テキストは引き続き表示されます)。

アプリ認証を使用してメッセージのテキストとカードを更新する方法は次のとおりです。

Node.js

chat/client-libraries/cloud/update-message-app-cred.js
import {createClientWithAppCredentials} from './authentication-utils.js';

// This sample shows how to update a message with app credential
async function main() {
  // Create a client
  const chatClient = createClientWithAppCredentials();

  // Initialize request argument(s)
  const request = {
    message: {
      // Replace SPACE_NAME and MESSAGE_NAME here
      name: 'spaces/SPACE_NAME/messages/MESSAGE_NAME',
      text: 'Text updated with app credential!',
      cardsV2 : [{ card: { header: {
        title: 'Card updated with app credential!',
        imageUrl: 'https://fonts.gstatic.com/s/i/short-term/release/googlesymbols/info/default/24px.svg'
      }}}]
    },
    // The field paths to update. Separate multiple values with commas or use
    // `*` to update all field paths.
    updateMask: {
      // The field paths to update.
      paths: ['text', 'cards_v2']
    }
  };

  // Make the request
  const response = await chatClient.updateMessage(request);

  // Handle the response
  console.log(response);
}

main().catch(console.error);

Python

chat/client-libraries/cloud/update_message_app_cred.py
from authentication_utils import create_client_with_app_credentials
from google.apps import chat_v1 as google_chat

# This sample shows how to update a message with app credential
def update_message_with_app_cred():
    # Create a client
    client = create_client_with_app_credentials()

    # Initialize request argument(s)
    request = google_chat.UpdateMessageRequest(
        message = {
            # Replace SPACE_NAME and MESSAGE_NAME here
            "name": "spaces/SPACE_NAME/messages/MESSAGE_NAME",
            "text": "Text updated with app credential!",
            "cards_v2" : [{ "card": { "header": {
                "title": 'Card updated with app credential!',
                "image_url": 'https://fonts.gstatic.com/s/i/short-term/release/googlesymbols/info/default/24px.svg'
            }}}]
        },
        # The field paths to update. Separate multiple values with commas or use
        # `*` to update all field paths.
        update_mask = "text,cardsV2"
    )

    # Make the request
    response = client.update_message(request)

    # Handle the response
    print(response)

update_message_with_app_cred()

Java

chat/client-libraries/cloud/src/main/java/com/google/workspace/api/chat/samples/UpdateMessageAppCred.java
import com.google.apps.card.v1.Card;
import com.google.apps.card.v1.Card.CardHeader;
import com.google.chat.v1.CardWithId;
import com.google.chat.v1.ChatServiceClient;
import com.google.chat.v1.UpdateMessageRequest;
import com.google.chat.v1.Message;
import com.google.protobuf.FieldMask;

// This sample shows how to update message with app credential.
public class UpdateMessageAppCred {

  public static void main(String[] args) throws Exception {
    try (ChatServiceClient chatServiceClient =
        AuthenticationUtils.createClientWithAppCredentials()) {
      UpdateMessageRequest.Builder request = UpdateMessageRequest.newBuilder()
        .setMessage(Message.newBuilder()
          // replace SPACE_NAME and MESSAGE_NAME here
          .setName("spaces/SPACE_NAME/messages/MESSAGE_NAME")
          .setText("Text updated with app credential!")
          .addCardsV2(CardWithId.newBuilder().setCard(Card.newBuilder()
            .setHeader(CardHeader.newBuilder()
              .setTitle("Card updated with app credential!")
              .setImageUrl("https://fonts.gstatic.com/s/i/short-term/release/googlesymbols/info/default/24px.svg")))))
        .setUpdateMask(FieldMask.newBuilder()
          // The field paths to update.
          .addAllPaths(List.of("text", "cards_v2")));
      Message response = chatServiceClient.updateMessage(request.build());

      System.out.println(JsonFormat.printer().print(response));
    }
  }
}

Apps Script

chat/advanced-service/Main.gs
/**
 * This sample shows how to update a message with app credential
 * 
 * It relies on the OAuth2 scope 'https://www.googleapis.com/auth/chat.bot'
 * used by service accounts.
 */
function updateMessageAppCred() {
  // Initialize request argument(s)
  // TODO(developer): Replace SPACE_NAME and MESSAGE_NAME here
  const name = 'spaces/SPACE_NAME/messages/MESSAGE_NAME';
  const message = {
    text: 'Text updated with app credential!',
    cardsV2 : [{ card: { header: {
      title: 'Card updated with app credential!',
      imageUrl: 'https://fonts.gstatic.com/s/i/short-term/release/googlesymbols/info/default/24px.svg'
    }}}]
  };
  // The field paths to update. Separate multiple values with commas or use
  // `*` to update all field paths.
  const updateMask = 'text,cardsV2';

  // Make the request
  const response = Chat.Spaces.Messages.patch(message, name, {
    updateMask: updateMask
  }, getHeaderWithAppCredentials());

  // Handle the response
  console.log(response);
}

このサンプルを実行するには、次のように置き換えます。

  • SPACE_NAME: スペースの ID name。 ID は、ListSpaces() メソッドを呼び出すか、スペースの URL から取得できます。
  • MESSAGE_NAME: メッセージの name の ID。ID は、レスポンスの作成後に返されるレスポンスの本文から取得できます。 Chat API を使用してメッセージを非同期で送信したり、 カスタム名 自動的に割り当てられます。

Chat API は、更新されたメッセージの詳細を示す Message のインスタンスを返します。