Creare, leggere, aggiornare ed eliminare i messaggi

Con l'API Google Chat puoi creare, leggere, aggiornare o eliminare un messaggio in Google Chat in modo asincrono chiamando i metodi corrispondenti. Questa guida spiega come chiamare i seguenti metodi:

Le app di chat possono rispondere agli eventi di Chat, ad esempio ai messaggi e alla possibilità di essere aggiunti a uno spazio, senza chiamare l'API Chat in modo asincrono. Per creare un'app di Chat che risponda in modo sincrono agli eventi di Chat, vedi Creare un'app di chat. Un'app di Chat può funzionare con l'API Chat in modo sincrono e asincrono.

Per creare in modo asincrono un messaggio in uno spazio di Chat senza un'app di Chat, configura un webhook.

Prerequisiti

Per eseguire gli esempi illustrati in questa guida, sono necessari i seguenti prerequisiti:

Python

Creare un messaggio

Per creare un messaggio in Google Chat in modo asincrono, chiama il metodo create nella risorsa Message. Puoi creare un messaggio di testo o un messaggio. Per avviare o rispondere a un thread, specifica threadKey o thread.name.

Prendi nota della name di un messaggio che crei, in modo da potervi fare riferimento in un secondo momento se devi leggerlo, aggiornarlo o eliminarlo. In alternativa, valuta la possibilità di assegnare un nome ai messaggi.

Creare un SMS

Ecco come creare un messaggio di testo:

Python

  1. Nella tua directory di lavoro, crea un file denominato chat_create_text_message.py.
  2. Includi il seguente codice in chat_create_text_message.py:

    from httplib2 import Http
    from oauth2client.service_account import ServiceAccountCredentials
    from apiclient.discovery import build
    
    # Specify required scopes.
    SCOPES = ['https://www.googleapis.com/auth/chat.bot']
    
    # Specify service account details.
    CREDENTIALS = ServiceAccountCredentials.from_json_keyfile_name(
        'service_account.json', SCOPES)
    
    # Build the URI and authenticate with the service account.
    chat = build('chat', 'v1', http=CREDENTIALS.authorize(Http()))
    
    # Create a Chat message.
    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',
    
        # The message to create.
        body={'text': 'Hello, world!'}
    
    ).execute()
    
    print(result)
    
  3. Nel codice, sostituisci SPACE con un nome di spazio, che puoi ottenere dal metodo spaces.list() nell'API Chat o dall'URL di uno spazio.

  4. Nella directory di lavoro, crea ed esegui l'esempio:

    python3 chat_create_text_message.py
    

Creare un messaggio per la scheda

Ecco come creare un messaggio card come quello mostrato di seguito:

Messaggio della scheda creato con l'API REST di Chat.
Figura 1: un messaggio relativo alla scheda creato con l'API Chat.

Python

  1. Nella tua directory di lavoro, crea un file denominato chat_create_card_message.py.
  2. Includi il seguente codice in chat_create_card_message.py:

    from httplib2 import Http
    from oauth2client.service_account import ServiceAccountCredentials
    from apiclient.discovery import build
    
    # Specify required scopes.
    SCOPES = ['https://www.googleapis.com/auth/chat.bot']
    
    # Specify service account details.
    CREDENTIALS = ServiceAccountCredentials.from_json_keyfile_name(
        'service_account.json', SCOPES)
    
    # Build the URI and authenticate with the service account.
    chat = build('chat', 'v1', http=CREDENTIALS.authorize(Http()))
    
    # Create a Chat message.
    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',
    
        # The message to create.
        body=
        {
          'cardsV2': [{
            'cardId': 'createCardMessage',
            'card': {
              'header': {
                'title': 'A Card Message!',
                'subtitle': 'Created with Chat REST API',
                'imageUrl': 'https://developers.google.com/chat/images/chat-product-icon.png',
                'imageType': 'CIRCLE'
              },
              'sections': [
                {
                  'widgets': [
                    {
                      'buttonList': {
                        'buttons': [
                          {
                            'text': 'Read the docs!',
                            'onClick': {
                              'openLink': {
                                'url': 'https://developers.google.com/chat'
                              }
                            }
                          }
                        ]
                      }
                    }
                  ]
                }
              ]
            }
          }]
        }
    
    ).execute()
    
    print(result)
    
  3. Nel codice, sostituisci SPACE con un nome di spazio, che puoi ottenere dal metodo spaces.list() nell'API Chat o dall'URL di uno spazio.

  4. Nella directory di lavoro, crea ed esegui l'esempio:

    python3 chat_create_card_message.py
    

Avviare o rispondere a un thread di messaggi

Per avviare un thread di messaggi, crea un messaggio e lascia vuoto il campo thread.name; Google Chat lo completerà durante la creazione del thread. (Facoltativo) Per personalizzare il nome del thread, specifica thread.threadKey come nome del thread.

Per rispondere a un thread di messaggi, specifica thread.threadKey o thread.name come nome del thread. I messaggi successivi con lo stesso messaggio thread.threadKey o thread.name nello stesso thread delle risposte.

Ogni thread.threadKey è univoco per l'app Chat o per il webhook che lo imposta. Se due app o webhook diversi impostano lo stesso thread.threadKey, i messaggi non verranno raggruppati. Iniziano invece due thread diversi. Due app o webhook diversi possono pubblicare risposte nello stesso thread, specificando invece thread.name.

Ecco come avviare o rispondere a un thread con thread.threadKey "nameOfThread":

Python

  1. Nella tua directory di lavoro, crea un file denominato chat_create_message_thread.py.
  2. Includi il seguente codice in chat_create_message_thread.py:

    from httplib2 import Http
    from oauth2client.service_account import ServiceAccountCredentials
    from apiclient.discovery import build
    
    # Specify required scopes.
    SCOPES = ['https://www.googleapis.com/auth/chat.bot']
    
    # Specify service account details.
    CREDENTIALS = ServiceAccountCredentials.from_json_keyfile_name(
        'service_account.json', SCOPES)
    
    # Build the URI and authenticate with the service account.
    chat = build('chat', 'v1', http=CREDENTIALS.authorize(Http()))
    
    # Create a Chat message.
    result = chat.spaces().messages().create(
    
        # The space to create the message in.
        #
        # REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD replies to an existing thread
        # if one exists, otherwise it starts a new one.
        #
        # 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',
    
        # Whether to start a thread or reply to an existing one.
        #
        # Required when threading is enabled in a space unless starting a
        # thread.  Ignored in other space types. Threading is enabled when
        # space.spaceThreadingState is THREADED_MESSAGES.
        messageReplyOption='REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD',
    
        # The message body.
        body={
    
            # The message to create.
            'text': 'Start or reply to another message in a thread!',
    
            # The thread to start or reply to.
            'thread': {
                'threadKey': 'nameOfThread'
            }
        }
    
    ).execute()
    
    print(result)
    
  3. Nel codice, sostituisci SPACE con un nome di spazio, che puoi ottenere dal metodo spaces.list() nell'API Chat o dall'URL di uno spazio.

  4. Nella directory di lavoro, crea ed esegui l'esempio:

    python3 chat_create_message_thread.py
    

Creare e denominare un messaggio

Per facilitare le operazioni successive su un messaggio creato, assegnagli un name personalizzato. L'assegnazione di un nome personalizzato consente a un'app di chat di richiamare rapidamente il messaggio senza salvare il messaggio name dal corpo della risposta restituito durante la creazione del messaggio.

L'assegnazione di un nome personalizzato consente a un'app di chat di richiamare il messaggio senza salvarlo name dal corpo della risposta restituito durante la creazione del messaggio.

L'assegnazione di un nome personalizzato non sostituisce il campo name generato, il nome risorsa del messaggio. Invece, imposta il nome personalizzato come il campo clientAssignedMessageId, al quale è possibile fare riferimento durante l'elaborazione delle operazioni successive, come l'aggiornamento o l'eliminazione del messaggio.

Specificare un nome personalizzato utilizzato durante la creazione di un messaggio restituisce un errore, ma altri metodi come update e delete funzionano come previsto.

Requisiti per il nome personalizzato:

  • Inizia con client-. Ad esempio, client-custom-name è un nome personalizzato valido, ma custom-name non lo è.
  • Contenere solo lettere minuscole, numeri e trattini.
  • Non più di 63 caratteri.

Ecco come creare e denominare un messaggio:

Python

  1. Nella tua directory di lavoro, crea un file denominato chat_create_named_message.py.
  2. Includi il seguente codice in chat_create_named_message.py:

    from httplib2 import Http
    from oauth2client.service_account import ServiceAccountCredentials
    from apiclient.discovery import build
    
    # Specify required scopes.
    SCOPES = ['https://www.googleapis.com/auth/chat.bot']
    
    # Specify service account details.
    CREDENTIALS = ServiceAccountCredentials.from_json_keyfile_name(
        'service_account.json', SCOPES)
    
    # Build the URI and authenticate with the service account.
    chat = build('chat', 'v1', http=CREDENTIALS.authorize(Http()))
    
    # Create a Chat message with a custom name.
    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',
    
        # Custom name for the message used to facilitate later operations.
        messageId='client-custom-name',
    
        # The message to create.
        body={'text': 'Hello, world!'}
    
    ).execute()
    
    print(result)
    
  3. Nel codice, sostituisci SPACE con un nome di spazio, che puoi ottenere dal metodo spaces.list() nell'API Chat o dall'URL di uno spazio.

  4. Nella directory di lavoro, crea ed esegui l'esempio:

    python3 chat_create_named_message.py
    

Hai letto un messaggio

Per leggere un messaggio in Google Chat in modo asincrono, chiama il metodo get nella risorsa Message e trasmetti il name del messaggio per leggerlo.

Per leggere un messaggio:

Python

  1. Nella tua directory di lavoro, crea un file denominato chat_read_message.py.
  2. Includi il seguente codice in chat_read_message.py:

    from httplib2 import Http
    from oauth2client.service_account import ServiceAccountCredentials
    from apiclient.discovery import build
    
    # Specify required scopes.
    SCOPES = ['https://www.googleapis.com/auth/chat.bot']
    
    # Specify service account details.
    CREDENTIALS = ServiceAccountCredentials.from_json_keyfile_name(
        'service_account.json', SCOPES)
    
    # Build the URI and authenticate with the service account.
    chat = build('chat', 'v1', http=CREDENTIALS.authorize(Http()))
    
    # Get a Chat message.
    result = chat.spaces().messages().get(
    
        # The message to read.
        #
        # Replace SPACE with a space name.
        # Obtain the space name from the spaces resource of Chat API,
        # or from a space's URL.
        #
        # Replace MESSAGE with a message name.
        # Obtain the message name from the response body returned
        # after creating a message asynchronously with Chat REST API.
        name='spaces/SPACE/messages/MESSAGE'
    
      ).execute()
    
    # Print Chat API's response in your command line interface.
    print(result)
    
  3. Nel codice, sostituisci SPACE con un nome di spazio, che puoi ottenere dal metodo spaces.list() nell'API Chat o dall'URL di uno spazio.

  4. Nel codice, sostituisci MESSAGE con un nome di messaggio, che puoi ottenere dal corpo della risposta restituito dopo la creazione di un messaggio in modo asincrono con l'API Chat o con il nome personalizzato assegnato al messaggio al momento della creazione.

  5. Nella directory di lavoro, crea ed esegui l'esempio:

    python3 chat_read_message.py
    

Aggiorna un messaggio

Per aggiornare in modo asincrono un messaggio esistente in Google Chat, chiama il metodo update nella risorsa Message e trasmetti il name del messaggio da aggiornare, oltre a un updateMask e a un body che specifichi il messaggio aggiornato.

Aggiornare un SMS o anteporre un SMS alla scheda

Per aggiornare un SMS, passa:

  • Il name del messaggio da aggiornare.
  • updateMask='text'
  • Un body che specifica il messaggio aggiornato.

Se il messaggio aggiornato è un messaggio card, il messaggio di testo viene anteposto a quello della scheda (continua a essere visualizzato).

Per aggiornare un SMS messaggio in un messaggio di testo o anteporre un SMS a un messaggio card:

Python

  1. Nella tua directory di lavoro, crea un file denominato chat_update_text_message.py.
  2. Includi il seguente codice in chat_update_text_message.py:

    from httplib2 import Http
    from oauth2client.service_account import ServiceAccountCredentials
    from apiclient.discovery import build
    
    # Specify required scopes.
    SCOPES = ['https://www.googleapis.com/auth/chat.bot']
    
    # Specify service account details.
    CREDENTIALS = ServiceAccountCredentials.from_json_keyfile_name(
      'service_account.json', SCOPES)
    
    # Build the URI and authenticate with the service account.
    chat = build('chat', 'v1', http=CREDENTIALS.authorize(Http()))
    
    # Update a Chat message.
    result = chat.spaces().messages().update(
    
      # The message to update, and the updated message.
      #
      # Replace SPACE with a space name.
      # Obtain the space name from the spaces resource of Chat API,
      # or from a space's URL.
      #
      # Replace MESSAGE with a message name.
      # Obtain the message name from the response body returned
      # after creating a message asynchronously with Chat REST API.
      name='spaces/SPACE/messages/MESSAGE',
      updateMask='text',
      body={'text': 'Updated message!'}
    
    ).execute()
    
    # Print Chat API's response in your command line interface.
    print(result)
    
  3. Nel codice, sostituisci SPACE con un nome di spazio, che puoi ottenere dal metodo spaces.list() nell'API Chat o dall'URL di uno spazio.

  4. Nel codice, sostituisci MESSAGE con un nome di messaggio, che puoi ottenere dal corpo della risposta restituito dopo la creazione di un messaggio in modo asincrono con l'API Chat o con il nome personalizzato assegnato al messaggio al momento della creazione.

  5. Nella directory di lavoro, crea ed esegui l'esempio:

    python3 chat_update_text_message.py
    

Aggiornare un messaggio della scheda o aggiungere un messaggio della scheda a un SMS

Per aggiornare un messaggio card:

  • name del messaggio da aggiornare
  • updateMask='cardsV2'
  • Un body che specifica il messaggio aggiornato.

Se il messaggio aggiornato è un messaggio SMS, viene aggiunta una scheda al messaggio (che continua a essere visualizzato). Se il messaggio aggiornato è una scheda, la scheda visualizzata viene aggiornata.

Per aggiornare un messaggio in un messaggio card:

Python

  1. Nella tua directory di lavoro, crea un file denominato chat_update_card_message.py.
  2. Includi il seguente codice in chat_update_card_message.py:

    from httplib2 import Http
    from oauth2client.service_account import ServiceAccountCredentials
    from apiclient.discovery import build
    
    # Specify required scopes.
    SCOPES = ['https://www.googleapis.com/auth/chat.bot']
    
    # Specify service account details.
    CREDENTIALS = ServiceAccountCredentials.from_json_keyfile_name(
      'service_account.json', SCOPES)
    
    # Build the URI and authenticate with the service account.
    chat = build('chat', 'v1', http=CREDENTIALS.authorize(Http()))
    
    # Update a Chat message.
    result = chat.spaces().messages().update(
    
      # The message to update, and the updated message.
      #
      # Replace SPACE with a space name.
      # Obtain the space name from the spaces resource of Chat API,
      # or from a space's URL.
      #
      # Replace MESSAGE with a message name.
      # Obtain the message name from the response body returned
      # after creating a message asynchronously with Chat REST API.
      name='spaces/SPACE/messages/MESSAGE',
      updateMask='cardsV2',
      body=
      {
        'cardsV2': [{
          'cardId': 'updateCardMessage',
          'card': {
            'header': {
              'title': 'An Updated Card Message!',
              'subtitle': 'Updated with Chat REST API',
              'imageUrl': 'https://developers.google.com/chat/images/chat-product-icon.png',
              'imageType': 'CIRCLE'
            },
            'sections': [
              {
                'widgets': [
                  {
                    'buttonList': {
                      'buttons': [
                        {
                          'text': 'Read the docs!',
                          'onClick': {
                            'openLink': {
                              'url': 'https://developers.google.com/chat'
                            }
                          }
                        }
                      ]
                    }
                  }
                ]
              }
            ]
          }
        }]
      }
    
    ).execute()
    
    # Print Chat API's response in your command line interface.
    print(result)
    
  3. Nel codice, sostituisci SPACE con un nome di spazio, che puoi ottenere dal metodo spaces.list() nell'API Chat o dall'URL di uno spazio.

  4. Nel codice, sostituisci MESSAGE con un nome di messaggio, che puoi ottenere dal corpo della risposta restituito dopo la creazione di un messaggio in modo asincrono con l'API Chat o con il nome personalizzato assegnato al messaggio al momento della creazione.

  5. Nella directory di lavoro, crea ed esegui l'esempio:

    python3 chat_update_card_message.py
    

Eliminare un messaggio

Per eliminare in modo asincrono un messaggio esistente in Google Chat, chiama il metodo delete nella risorsa Message e trasmetti il name del messaggio da eliminare.

Per eliminare un messaggio:

Python

  1. Nella tua directory di lavoro, crea un file denominato chat_delete_message.py.
  2. Includi il seguente codice in chat_delete_message.py:

    from httplib2 import Http
    from oauth2client.service_account import ServiceAccountCredentials
    from apiclient.discovery import build
    
    # Specify required scopes.
    SCOPES = ['https://www.googleapis.com/auth/chat.bot']
    
    # Specify service account details.
    CREDENTIALS = ServiceAccountCredentials.from_json_keyfile_name(
      'service_account.json', SCOPES)
    
    # Build the URI and authenticate with the service account.
    chat = build('chat', 'v1', http=CREDENTIALS.authorize(Http()))
    
    # Delete a Chat message.
    result = chat.spaces().messages().delete(
    
      # The message to delete.
      #
      # Replace SPACE with a space name.
      # Obtain the space name from the spaces resource of Chat API,
      # or from a space's URL.
      #
      # Replace MESSAGE with a message name.
      # Obtain the message name from the response body returned
      # after creating a message asynchronously with Chat REST API.
      name='spaces/SPACE/messages/MESSAGE'
    
    ).execute()
    
    # Print Chat API's response in your command line interface.
    # When deleting a message, the response body is empty.
    print(result)
    
  3. Nel codice, sostituisci SPACE con un nome di spazio, che puoi ottenere dal metodo spaces.list() nell'API Chat o dall'URL di uno spazio.

  4. Nel codice, sostituisci MESSAGE con un nome di messaggio, che puoi ottenere dal corpo della risposta restituito dopo la creazione di un messaggio in modo asincrono con l'API Chat o con il nome personalizzato assegnato al messaggio al momento della creazione.

  5. Nella directory di lavoro, crea ed esegui l'esempio:

    python3 chat_delete_message.py
    

Limiti e considerazioni

  • L'unico modo per ricevere il name di un messaggio in Google Chat è tramite il corpo di risposta restituito durante la creazione del messaggio. Assicurati di prendere nota del messaggio name che crei, in modo da potervi fare riferimento in un secondo momento se devi leggerlo, aggiornarlo o eliminarlo. In alternativa, valuta la possibilità di assegnare un nome ai messaggi.
  • Quando esegui l'autenticazione come app con un account di servizio, le app di chat possono solo leggere, aggiornare ed eliminare i loro messaggi.
  • Anteprima per gli sviluppatori: quando un'app esegue un'azione con autenticazione utente, Google Chat potrebbe mostrare un messaggio di attribuzione che indica il nome dell'app che ha eseguito l'azione per conto dell'utente che l'ha autorizzata.