Modifier un message

Ce guide explique comment utiliser la update méthode sur la ressource Message de l'API Google Chat pour mettre à jour un message texte ou une carte dans un espace. Mettez à jour un message pour modifier ses attributs, par exemple son contenu ou celui d'une carte. Vous pouvez également ajouter un message texte avant un message carte ou ajouter une carte à un message texte.

Dans l'API Chat, un message Chat est représenté par la Message ressource. Alors que les utilisateurs de Chat ne peuvent envoyer que des messages contenant du texte, les applications Chat peuvent utiliser de nombreuses autres fonctionnalités de messagerie, y compris afficher des interfaces utilisateur statiques ou interactives, collecter des informations auprès des utilisateurs et envoyer des messages privés. Pour en savoir plus sur les fonctionnalités de messagerie disponibles pour l'API Chat, consultez la présentation des messages Google Chat.

Prérequis

Node.js

Python

Java

Apps Script

Mettre à jour un message au nom d'un utilisateur

Avec l'authentification de l'utilisateur, seul le texte d'un message peut être mis à jour.

Pour mettre à jour un message avec l'authentification de l'utilisateur, transmettez les éléments suivants dans votre requête :

  • Spécifiez l'autorisation chat.messages.
  • Appelez la UpdateMessage méthode.
  • Transmettez message en tant qu'instance de Message avec les éléments suivants :
    • Le champ name défini sur le message à mettre à jour, qui inclut un ID d'espace et un ID de message.
    • Le champ text défini avec le nouveau texte.
  • Transmettez updateMask avec la valeur text.

Si le message mis à jour est un message carte, le texte est ajouté avant les cartes (qui continuent de s'afficher).

Voici comment mettre à jour un message ou ajouter un message texte avant un message carte avec l'authentification de l'utilisateur :

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);
}

await main();

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);
}

Pour exécuter cet exemple, remplacez les éléments suivants :

  • SPACE_NAME : ID du name de l'espace. Vous pouvez obtenir l'ID en appelant la ListSpaces méthode ou à partir de l'URL de l'espace.
  • MESSAGE_NAME : ID du message's name. Vous pouvez obtenir l'ID à partir du corps de la réponse renvoyée après la création d'un message asynchrone avec l'API Chat ou avec le nom personnalisé attribué au message lors de sa création.

L'API Chat renvoie une instance de Message qui détaille le message mis à jour.

Mettre à jour un message en tant qu'application Chat

Avec l'authentification de l'application, le texte et les cartes d'un message peuvent être mis à jour.

Pour mettre à jour un message avec l'authentification de l'application, transmettez les éléments suivants dans votre requête :

  • Spécifiez l'autorisation chat.bot.
  • Appelez la UpdateMessage méthode.
  • Transmettez message en tant qu'instance de Message avec les éléments suivants :
    • Le champ name défini sur le message à mettre à jour, qui inclut un ID d'espace et un ID de message.
    • Le champ text défini avec le nouveau texte s'il doit être mis à jour.
    • Le champ cardsV2 défini avec les nouvelles cartes si elles doivent être mises à jour.
  • Transmettez updateMask avec la liste des champs à mettre à jour, tels que text et cardsV2.

Si le message mis à jour est un message carte et que le texte est mis à jour, le texte mis à jour est ajouté avant les cartes (qui continuent de s'afficher). Si le message mis à jour est un message texte et que les cartes sont mises à jour, les cartes mises à jour sont ajoutées après le texte (qui continue de s'afficher).

Voici comment mettre à jour le texte et les cartes d'un message avec l'authentification de l'application :

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);
}

await main();

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);
}

Pour exécuter cet exemple, remplacez les éléments suivants :

  • SPACE_NAME : ID du name de l'espace. Vous pouvez obtenir l'ID en appelant la ListSpaces méthode ou à partir de l'URL de l'espace.
  • MESSAGE_NAME : ID du message's name. Vous pouvez obtenir l'ID à partir du corps de la réponse renvoyée après la création d'un message asynchrone avec l'API Chat ou avec le nom personnalisé attribué au message lors de sa création.

L'API Chat renvoie une instance de Message qui détaille le message mis à jour.

Mettre à jour les cartes de manière asynchrone

Dans la preview développeur, vous pouvez mettre à jour de manière asynchrone les cartes d'un message à l'aide de la replaceCards méthode. Cela est utile pour mettre à jour le contenu d'une carte sans interaction de l'utilisateur, par exemple pour actualiser un aperçu de lien ou mettre à jour l'état d'une tâche. Cette méthode fonctionne pour les messages créés par l'application, y compris ceux créés au nom d'un utilisateur.

Pour en savoir plus, consultez Créer et mettre à jour des cartes.