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:
- Crea un messaggio con
spaces.messages.create
. - Leggi un messaggio con
spaces.messages.get
. - Aggiorna un messaggio con
spaces.messages.update
. - Eliminare un messaggio con
spaces.messages.delete
.
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
- Python 3.6 o versioni successive
- Strumento di gestione dei pacchetti pip
Le librerie client di Google per Python. Per installarli, esegui questo comando nell'interfaccia a riga di comando:
pip3 install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib oauth2client
Un'app di Chat pubblicata con un'iscrizione in uno spazio di Chat:
- Per creare e pubblicare un'app di chat, vedi Creare un'app di Google Chat con Cloud Functions.
- Per aggiungere un'app di chat a uno spazio di Chat, vedi Aggiungere app a spazi o conversazioni in Google Chat.
Autorizzazione configurata per l'app Chat:
- L'autenticazione dell'account di servizio è completamente supportata. Per configurare un account di servizio, vedi Autentica e autorizza come account di servizio.
- Programma Anteprima per gli sviluppatori di Google Workspace, che concede l'accesso in anteprima a determinate funzionalità. Per configurare l'autenticazione degli utenti, vedi Autenticare e autorizzare gli utenti (anteprima per gli sviluppatori). Il metodo
spaces.messages.update
non supporta ancora l'autenticazione degli utenti.
Anteprima per gli sviluppatori:l'autenticazione degli utenti è supportata nell'ambito del
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
- Nella tua directory di lavoro, crea un file denominato
chat_create_text_message.py
. 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)
Nel codice, sostituisci
SPACE
con un nome di spazio, che puoi ottenere dal metodospaces.list()
nell'API Chat o dall'URL di uno spazio.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:

Python
- Nella tua directory di lavoro, crea un file denominato
chat_create_card_message.py
. 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)
Nel codice, sostituisci
SPACE
con un nome di spazio, che puoi ottenere dal metodospaces.list()
nell'API Chat o dall'URL di uno spazio.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
- Nella tua directory di lavoro, crea un file denominato
chat_create_message_thread.py
. 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)
Nel codice, sostituisci
SPACE
con un nome di spazio, che puoi ottenere dal metodospaces.list()
nell'API Chat o dall'URL di uno spazio.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, macustom-name
non lo è. - Contenere solo lettere minuscole, numeri e trattini.
- Non più di 63 caratteri.
Ecco come creare e denominare un messaggio:
Python
- Nella tua directory di lavoro, crea un file denominato
chat_create_named_message.py
. 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)
Nel codice, sostituisci
SPACE
con un nome di spazio, che puoi ottenere dal metodospaces.list()
nell'API Chat o dall'URL di uno spazio.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
- Nella tua directory di lavoro, crea un file denominato
chat_read_message.py
. 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)
Nel codice, sostituisci
SPACE
con un nome di spazio, che puoi ottenere dal metodospaces.list()
nell'API Chat o dall'URL di uno spazio.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.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
- Nella tua directory di lavoro, crea un file denominato
chat_update_text_message.py
. 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)
Nel codice, sostituisci
SPACE
con un nome di spazio, che puoi ottenere dal metodospaces.list()
nell'API Chat o dall'URL di uno spazio.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.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 aggiornareupdateMask='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
- Nella tua directory di lavoro, crea un file denominato
chat_update_card_message.py
. 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)
Nel codice, sostituisci
SPACE
con un nome di spazio, che puoi ottenere dal metodospaces.list()
nell'API Chat o dall'URL di uno spazio.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.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
- Nella tua directory di lavoro, crea un file denominato
chat_delete_message.py
. 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)
Nel codice, sostituisci
SPACE
con un nome di spazio, che puoi ottenere dal metodospaces.list()
nell'API Chat o dall'URL di uno spazio.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.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 messaggioname
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.
- 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. Anteprima per gli sviluppatori: quando un'app esegue un'azione con