Après avoir reçu un message d'un utilisateur, vous pouvez lui envoyer une réponse pour poursuivre la conversation. Vous pouvez envoyer des messages à un utilisateur jusqu'à 30 jours après son dernier message.
Les agents communiquent avec les utilisateurs en envoyant et en recevant des messages. Pour envoyer des messages aux utilisateurs, votre agent envoie des demandes de message à Business Messages.
Pour envoyer un message, vous devez envoyer à l'API Business Messages une requête HTTP POST qui inclut
- un identifiant de message unique
- l'ID de la conversation ;
- le contenu du message ;
Lorsque l'API Business Messages envoie votre message à l'utilisateur, elle renvoie un 200 OK
. S'il manque des valeurs obligatoires dans votre message, l'API renvoie une erreur 400
. Si le message utilise des identifiants non valides, l'API renvoie une erreur 401
.
Utilisez la page des journaux de la console pour les développeurs Business Communications pour déboguer les problèmes de distribution des messages.
Stratégie de remplacement
Si l'appareil d'un utilisateur n'est pas compatible avec un message que vous tentez d'envoyer (par exemple, si un utilisateur n'accepte pas les réponses suggérées), l'API renvoie une erreur 400 (FAILED
PRECONDITION)
. Toutefois, vous pouvez contourner les types de messages non compatibles en spécifiant un texte fallback
pour chaque message que vous envoyez. Si vous spécifiez du texte fallback
, l'API renvoie une réponse 200 OK
, même si l'appareil de l'utilisateur n'est pas compatible avec le type de message.
Si un utilisateur reçoit un message non compatible avec son appareil, mais qui inclut du texte fallback
, son appareil affiche le texte fallback
à la place. Ce comportement vous permet de poursuivre la conversation de manière proactive sans interrompre son flux ni prendre le temps de traiter une erreur 400
(FAILED PRECONDITION)
et d'identifier un autre message.
Le texte fallback
d'un message donné doit refléter sa fonction.
Par exemple,
- Pour les messages contenant des suggestions de réponses ou d'actions, incluez le texte du message dans le texte
fallback
et incluez des indications sur les options dont les utilisateurs disposent pour poursuivre la conversation. - Pour les cartes enrichies ou les carrousels, incluez le titre et la description dans le texte
fallback
, et incluez des liens vers des images ou des sites Web.
Pour insérer des sauts de ligne dans le texte fallback
, utilisez \n
ou \r\n
.
Tester le texte de remplacement
Avant de lancer un agent, vous pouvez tester l'apparence du texte de remplacement dans une conversation en envoyant un message dont le paramètre d'URL forceFallback
est défini sur true
. Lorsque vous forcez le texte de remplacement, la conversation ignore le contenu du message principal (texte et suggestion d'URL d'ouverture dans l'exemple suivant) et affiche le texte de remplacement à la place.
cURL
# Copyright 2021 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # https://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # This code sends a text message to the user with a fallback text. # Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#fallback_strategy # Replace the __CONVERSATION_ID__ with a conversation id that you can send messages to # Make sure a service account key file exists at ./service_account_key.json curl -X POST \ "https://businessmessages.googleapis.com/v1/conversations/__CONVERSATION_ID__/messages?forceFallback=true" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/business-messages" \ -H "$(oauth2l header --json ./service_account_key.json businessmessages)" \ -d "{ 'messageId': '$(uuidgen)', 'text': 'Hello world!', 'fallback': 'Hello, world!\n\nSay \"Hello\" at https://www.growingtreebank.com', 'suggestions': [ { 'action': { 'text': 'Hello', 'postbackData': 'hello-formal', 'openUrlAction': { 'url': 'https://www.growingtreebank.com', } }, }, ], 'representative': { 'avatarImage': 'https://developers.google.com/identity/images/g-logo.png', 'displayName': 'Chatbot', 'representativeType': 'BOT' } }"
Node.js
/** * This code sends a text message to the user with a fallback text. * Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#fallback_strategy * * This code is based on the https://github.com/google-business-communications/nodejs-businessmessages Node.js * Business Messages client library. */ /** * Edit the values below: */ const PATH_TO_SERVICE_ACCOUNT_KEY = './service_account_key.json'; const CONVERSATION_ID = 'EDIT_HERE'; const businessmessages = require('businessmessages'); const uuidv4 = require('uuid').v4; const {google} = require('googleapis'); // Initialize the Business Messages API const bmApi = new businessmessages.businessmessages_v1.Businessmessages({}); // Set the scope that we need for the Business Messages API const scopes = [ 'https://www.googleapis.com/auth/businessmessages', ]; // Set the private key to the service account file const privatekey = require(PATH_TO_SERVICE_ACCOUNT_KEY); /** * Posts a message to the Business Messages API defaulting to the fallback text. * * @param {string} conversationId The unique id for this user and agent. * @param {string} message The message text to send the user. * @param {string} representativeType A value of BOT or HUMAN. */ async function sendMessage(conversationId, message, representativeType) { const authClient = await initCredentials(); // Create the payload for sending a message const apiParams = { auth: authClient, parent: 'conversations/' + conversationId, forceFallback: true, // Force usage of the fallback text resource: { messageId: uuidv4(), representative: { representativeType: representativeType, }, text: message, fallback: 'This is the fallback text' }, }; // Call the message create function using the // Business Messages client library bmApi.conversations.messages.create(apiParams, {auth: authClient}, (err, response) => { console.log(err); console.log(response); }); } /** * Initializes the Google credentials for calling the * Business Messages API. */ async function initCredentials() { // configure a JWT auth client const authClient = new google.auth.JWT( privatekey.client_email, null, privatekey.private_key, scopes, ); return new Promise(function(resolve, reject) { // authenticate request authClient.authorize(function(err, tokens) { if (err) { reject(false); } else { resolve(authClient); } }); }); } sendMessage(CONVERSATION_ID, 'BOT');
Java
import com.google.api.client.googleapis.services.AbstractGoogleClientRequest; import com.google.api.client.http.HttpBackOffUnsuccessfulResponseHandler; import com.google.api.client.http.HttpRequest; import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpTransport; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.client.util.ExponentialBackOff; import com.google.api.services.businessmessages.v1.Businessmessages; import com.google.api.services.businessmessages.v1.model.*; import java.io.FileInputStream; import java.util.Arrays; import java.util.UUID; class TestFallbackTestSnippet { /** * Initializes credentials used by the Business Messages API. */ private static Businessmessages.Builder getBusinessMessagesBuilder() { Businessmessages.Builder builder = null; try { GoogleCredential credential = GoogleCredential .fromStream(new FileInputStream("PATH_TO_SERVICE_ACCOUNT_KEY")); credential = credential.createScoped(Arrays.asList( "https://www.googleapis.com/auth/businessmessages")); credential.refreshToken(); HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); JacksonFactory jsonFactory = JacksonFactory.getDefaultInstance(); // Create instance of the Business Messages API builder = new Businessmessages .Builder(httpTransport, jsonFactory, null) .setApplicationName("Sample Application"); // Set the API credentials and endpoint builder.setHttpRequestInitializer(credential); } catch (Exception e) { e.printStackTrace(); } return builder; } public static void main(String args[]) { try { String conversationId = "CONVERSATION_ID"; // Create client library reference Businessmessages.Builder builder = getBusinessMessagesBuilder(); // Create a basic text message with fallback text BusinessMessagesMessage message = new BusinessMessagesMessage() .setMessageId(UUID.randomUUID().toString()) .setFallback("This is the fallback text") .setText("MESSAGE_TEXT") .setRepresentative(new BusinessMessagesRepresentative() .setRepresentativeType("TYPE")); // Create message request Businessmessages.Conversations.Messages.Create messageRequest = builder.build().conversations().messages() .create("conversations/" + conversationId, message); // Force usage of the fallback text messageRequest.setForceFallback(true); // Setup retries with exponential backoff HttpRequest httpRequest = ((AbstractGoogleClientRequest) messageRequest).buildHttpRequest(); httpRequest.setUnsuccessfulResponseHandler(new HttpBackOffUnsuccessfulResponseHandler( new ExponentialBackOff())); // Execute request httpRequest.execute(); } catch (Exception e) { e.printStackTrace(); } } }
Python
"""This code sends a text message to the user with a fallback text. Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#fallback_strategy This code is based on the https://github.com/google-business-communications/python-businessmessages Python Business Messages client library. """ import uuid from businessmessages import businessmessages_v1_client as bm_client from businessmessages.businessmessages_v1_messages import BusinessmessagesConversationsMessagesCreateRequest from businessmessages.businessmessages_v1_messages import BusinessMessagesMessage from businessmessages.businessmessages_v1_messages import BusinessMessagesRepresentative from oauth2client.service_account import ServiceAccountCredentials # Edit the values below: path_to_service_account_key = './service_account_key.json' conversation_id = 'EDIT_HERE' credentials = ServiceAccountCredentials.from_json_keyfile_name( path_to_service_account_key, scopes=['https://www.googleapis.com/auth/businessmessages']) client = bm_client.BusinessmessagesV1(credentials=credentials) representative_type_as_string = 'BOT' if representative_type_as_string == 'BOT': representative_type = BusinessMessagesRepresentative.RepresentativeTypeValueValuesEnum.BOT else: representative_type = BusinessMessagesRepresentative.RepresentativeTypeValueValuesEnum.HUMAN # Create message with fallback text message = BusinessMessagesMessage( messageId=str(uuid.uuid4().int), fallback='This is the fallback text', representative=BusinessMessagesRepresentative( representativeType=representative_type ), text='This is a sample text') # Create the message request, force usage of the fallback text create_request = BusinessmessagesConversationsMessagesCreateRequest( businessMessagesMessage=message, forceFallback=True, parent='conversations/' + conversation_id) # Send the message bm_client.BusinessmessagesV1.ConversationsMessagesService( client=client).Create(request=create_request)
Pour plus d'informations, consultez Message
.
Représentants
Lorsque votre agent envoie un message, vous spécifiez un représentant: l'humain ou l'automatisation qui a composé le message. Business Messages est compatible avec les représentants HUMAN
et BOT
.
Spécifiez un représentant BOT
lorsqu'une automatisation compose un message, qu'il s'agisse d'un répondeur automatique indiquant aux utilisateurs leur place dans une file d'attente, d'un agent de compréhension du langage naturel complexe disposant d'un accès dynamique aux informations sur les utilisateurs, ou d'autres éléments intermédiaires. Les messages avec des représentants BOT
s'affichent avec une petite icône qui permet de définir les attentes des utilisateurs concernant les types d'interactions qu'ils pourraient avoir.
Ne spécifiez un représentant HUMAN
que lorsqu'un agent rédige un message.
Avant d'envoyer des messages d'un représentant HUMAN
, envoyez un événement REPRESENTATIVE_JOINED
pour indiquer aux utilisateurs qu'ils peuvent envoyer des messages plus libres ou complexes. Après avoir envoyé votre dernier message d'un représentant HUMAN
, envoyez un événement REPRESENTATIVE_LEFT
pour définir à nouveau les attentes des utilisateurs.
Par exemple, si un utilisateur entame une conversation avec votre agent et que vous lui envoyez un message automatique indiquant qu'il devrait s'attendre à recevoir un agent en direct dans un délai de deux minutes, ce message doit être envoyé par un représentant BOT
. Avant que l'agent en direct ne rejoigne le groupe, envoyez un événement REPRESENTATIVE_JOINED
. Tous les messages de l'agent en direct doivent être marqués comme provenant d'un représentant HUMAN
. Lorsque l'agent en direct quitte la conversation, envoyez un événement REPRESENTATIVE_LEFT
. Tous les messages suivants doivent provenir d'un représentant BOT
, sauf si un autre agent en direct rejoint la conversation.
Consultez la section Passer du bot à l'agent en direct pour obtenir un exemple de conversation et de code permettant de passer d'un représentant BOT
à un représentant HUMAN
.
Si le représentant est BOT
ou HUMAN
, vous pouvez spécifier un nom à afficher et un avatar représentatifs. Les noms à afficher et les avatars sont visibles par les utilisateurs.
Les images d'avatar doivent être de 1 024 x 1 024 px et ne pas dépasser 50 Ko. Elles doivent être définies en tant qu'URL accessibles au public. Si vous ne fournissez pas d'image d'avatar, le logo de l'agent est utilisé pour l'avatar du représentant.
Texte
Les messages les plus simples sont composés de texte. Les SMS sont les mieux adaptés pour communiquer des informations sans nécessiter d'éléments visuels, d'interactions complexes ou de réponses.
Exemple
Le code suivant envoie un SMS simple. Pour en savoir plus, consultez conversations.messages.create
.
cURL
# Copyright 2021 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # https://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # This code sends a text message to the user. # Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#text # Replace the __CONVERSATION_ID__ with a conversation id that you can send messages to # Make sure a service account key file exists at ./service_account_key.json curl -X POST "https://businessmessages.googleapis.com/v1/conversations/__CONVERSATION_ID__/messages" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/business-messages" \ -H "$(oauth2l header --json ./service_account_key.json businessmessages)" \ -d "{ 'messageId': '$(uuidgen)', 'text': 'Hello world!', 'representative': { 'avatarImage': 'https://developers.google.com/identity/images/g-logo.png', 'displayName': 'Chatbot', 'representativeType': 'BOT' } }"
Node.js
/** * This code sends a text message to the user. * Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#text * * This code is based on the https://github.com/google-business-communications/nodejs-businessmessages Node.js * Business Messages client library. */ /** * Edit the values below: */ const PATH_TO_SERVICE_ACCOUNT_KEY = './service_account_key.json'; const CONVERSATION_ID = 'EDIT_HERE'; const businessmessages = require('businessmessages'); const uuidv4 = require('uuid').v4; const {google} = require('googleapis'); // Initialize the Business Messages API const bmApi = new businessmessages.businessmessages_v1.Businessmessages({}); // Set the scope that we need for the Business Messages API const scopes = [ 'https://www.googleapis.com/auth/businessmessages', ]; // Set the private key to the service account file const privatekey = require(PATH_TO_SERVICE_ACCOUNT_KEY); /** * Posts a text message to the Business Messages API. * * @param {string} conversationId The unique id for this user and agent. * @param {string} message The message text to send the user. * @param {string} representativeType A value of BOT or HUMAN. */ async function sendMessage(conversationId, message, representativeType) { const authClient = await initCredentials(); // Create the payload for sending a message const apiParams = { auth: authClient, parent: 'conversations/' + conversationId, resource: { messageId: uuidv4(), representative: { representativeType: representativeType, }, text: message, }, }; // Call the message create function using the // Business Messages client library bmApi.conversations.messages.create(apiParams, {auth: authClient}, (err, response) => { console.log(err); console.log(response); }); } /** * Initializes the Google credentials for calling the * Business Messages API. */ async function initCredentials() { // configure a JWT auth client const authClient = new google.auth.JWT( privatekey.client_email, null, privatekey.private_key, scopes, ); return new Promise(function(resolve, reject) { // authenticate request authClient.authorize(function(err, tokens) { if (err) { reject(false); } else { resolve(authClient); } }); }); } sendMessage(CONVERSATION_ID, 'This is a test message', 'BOT');
Java
import com.google.api.client.googleapis.services.AbstractGoogleClientRequest; import com.google.api.client.http.HttpBackOffUnsuccessfulResponseHandler; import com.google.api.client.http.HttpRequest; import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpTransport; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.client.util.ExponentialBackOff; import com.google.api.services.businessmessages.v1.Businessmessages; import com.google.api.services.businessmessages.v1.model.*; import java.io.FileInputStream; import java.util.Arrays; import java.util.UUID; class SendTextMessageSnippet { /** * Initializes credentials used by the Business Messages API. */ private static Businessmessages.Builder getBusinessMessagesBuilder() { Businessmessages.Builder builder = null; try { GoogleCredential credential = GoogleCredential .fromStream(new FileInputStream("PATH_TO_SERVICE_ACCOUNT_KEY")); credential = credential.createScoped(Arrays.asList( "https://www.googleapis.com/auth/businessmessages")); credential.refreshToken(); HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); JacksonFactory jsonFactory = JacksonFactory.getDefaultInstance(); // Create instance of the Business Messages API builder = new Businessmessages .Builder(httpTransport, jsonFactory, null) .setApplicationName("Sample Application"); // Set the API credentials and endpoint builder.setHttpRequestInitializer(credential); } catch (Exception e) { e.printStackTrace(); } return builder; } public static void main(String args[]) { try { String conversationId = "CONVERSATION_ID"; // Create client library reference Businessmessages.Builder builder = getBusinessMessagesBuilder(); // Create a basic text message BusinessMessagesMessage message = new BusinessMessagesMessage() .setMessageId(UUID.randomUUID().toString()) .setText("MESSAGE_TEXT") .setRepresentative(new BusinessMessagesRepresentative() .setRepresentativeType("TYPE")); // Create message request Businessmessages.Conversations.Messages.Create messageRequest = builder.build().conversations().messages() .create("conversations/" + conversationId, message); // Setup retries with exponential backoff HttpRequest httpRequest = ((AbstractGoogleClientRequest) messageRequest).buildHttpRequest(); httpRequest.setUnsuccessfulResponseHandler(new HttpBackOffUnsuccessfulResponseHandler( new ExponentialBackOff())); // Execute request httpRequest.execute(); } catch (Exception e) { e.printStackTrace(); } } }
Python
"""This code sends a text message to the user. Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#text This code is based on the https://github.com/google-business-communications/python-businessmessages Python Business Messages client library. """ import uuid from businessmessages import businessmessages_v1_client as bm_client from businessmessages.businessmessages_v1_messages import BusinessmessagesConversationsMessagesCreateRequest from businessmessages.businessmessages_v1_messages import BusinessMessagesMessage from businessmessages.businessmessages_v1_messages import BusinessMessagesRepresentative from oauth2client.service_account import ServiceAccountCredentials # Edit the values below: path_to_service_account_key = './service_account_key.json' conversation_id = 'EDIT_HERE' credentials = ServiceAccountCredentials.from_json_keyfile_name( path_to_service_account_key, scopes=['https://www.googleapis.com/auth/businessmessages']) client = bm_client.BusinessmessagesV1(credentials=credentials) representative_type_as_string = 'BOT' if representative_type_as_string == 'BOT': representative_type = BusinessMessagesRepresentative.RepresentativeTypeValueValuesEnum.BOT else: representative_type = BusinessMessagesRepresentative.RepresentativeTypeValueValuesEnum.HUMAN # Create a text message message = BusinessMessagesMessage( messageId=str(uuid.uuid4().int), representative=BusinessMessagesRepresentative( representativeType=representative_type ), text='This is a sample text') # Create the message request create_request = BusinessmessagesConversationsMessagesCreateRequest( businessMessagesMessage=message, parent='conversations/' + conversation_id) # Send the message bm_client.BusinessmessagesV1.ConversationsMessagesService( client=client).Create(request=create_request)
Texte enrichi
Les messages texte avec containsRichText
défini sur true
peuvent inclure la mise en forme Markdown de base. Vous pouvez inclure des hyperliens ou mettre du texte en gras ou en italique. Voici quelques exemples valides dans le tableau:
Mise en forme | Caractères | Texte brut | Affichage du texte |
---|---|---|---|
Gras | ** |
**Some text** |
Texte |
Italique | * |
*Some text* |
Texte |
Lien hypertexte | []() |
[Click here](https://www.example.com) |
Cliquez ici |
Saut de ligne | \n
|
Line one\nLine two
|
Ligne 1 Ligne 2 |
La mise en forme doit respecter quelques règles supplémentaires:
- Tous les liens doivent commencer par
https://
ouhttp://
- Différents types de mise en forme peuvent être imbriqués sans se chevaucher.
- Les sauts de ligne avec
\n
sont autorisés n'importe où dans votre message, mais ils ne s'affichent pas à la fin. - Pour afficher normalement l'un des caractères réservés (
*
,\
,[
ou]
), vous devez le faire précéder d'une barre oblique inverse (\
).
Les messages dont le formatage n'est pas valide ne peuvent pas être envoyés avec un message d'erreur concernant une note Markdown non valide. Le tableau présente d'autres exemples valides et non valides en fonction des règles ci-dessus:
Texte brut | Validité | Affichage du texte |
---|---|---|
[Click here](www.example.com) |
Non valide. Le lien ne commence pas par http:// ni par https:// |
Ne s'affiche pas. |
[**Click here**](https://www.example.com) |
Valide. L'imbrication est autorisée. | Cliquez ici |
**This is [not** valid](https://www.example.com) |
Non valide. Le chevauchement de format n'est pas autorisé. | Ne s'affiche pas. |
** Some bold text ** |
Non valide. Aucun espace blanc de fin n'est autorisé dans ** . |
Ne s'affiche pas. |
Citation below\* |
Valide. Le caractère * est échappé. |
Citation ci-dessous : * |
Exemple
Le code suivant envoie un message en texte enrichi. Pour en savoir plus, consultez conversations.messages.create
.
cURL
# Copyright 2021 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # https://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # This code sends a rich text to the user with a fallback text. # Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#rich_text # Replace the __CONVERSATION_ID__ with a conversation id that you can send messages to # Make sure a service account key file exists at ./service_account_key.json curl -X POST "https://businessmessages.googleapis.com/v1/conversations/__CONVERSATION_ID__/messages" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/business-messages" \ -H "$(oauth2l header --json ./service_account_key.json businessmessages)" \ -d "{ 'messageId': '$(uuidgen)', 'fallback': 'Hello, check out this link https://www.google.com.', 'text': 'Hello, here is some **bold text**, *italicized text*, and a [link](https://www.google.com).', 'containsRichText': 'true', 'representative': { 'avatarImage': 'https://developers.google.com/identity/images/g-logo.png', 'displayName': 'Chatbot', 'representativeType': 'BOT' } }"
Node.js
/** * This code sends a rich text to the user with a fallback text. * Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#rich_text * * This code is based on the https://github.com/google-business-communications/nodejs-businessmessages Node.js * Business Messages client library. */ /** * Edit the values below: */ const PATH_TO_SERVICE_ACCOUNT_KEY = './service_account_key.json'; const CONVERSATION_ID = 'EDIT_HERE'; const businessmessages = require('businessmessages'); const uuidv4 = require('uuid').v4; const {google} = require('googleapis'); // Initialize the Business Messages API const bmApi = new businessmessages.businessmessages_v1.Businessmessages({}); // Set the scope that we need for the Business Messages API const scopes = [ 'https://www.googleapis.com/auth/businessmessages', ]; // Set the private key to the service account file const privatekey = require(PATH_TO_SERVICE_ACCOUNT_KEY); /** * Posts a rich text message using markdown to the Business Messages API. * * @param {string} conversationId The unique id for this user and agent. * @param {string} representativeType A value of BOT or HUMAN. */ async function sendMessage(conversationId, message, representativeType) { const authClient = await initCredentials(); // Create the payload for sending a rich text message const apiParams = { auth: authClient, parent: 'conversations/' + conversationId, resource: { messageId: uuidv4(), representative: { representativeType: representativeType, }, containsRichText: true, // Force this message to be processed as rich text text: 'Hello, here is some **bold text**, *italicized text*, and a [link](https://www.google.com).', fallback: 'Hello, check out this link https://www.google.com.' }, }; // Call the message create function using the // Business Messages client library bmApi.conversations.messages.create(apiParams, {auth: authClient}, (err, response) => { console.log(err); console.log(response); }); } /** * Initializes the Google credentials for calling the * Business Messages API. */ async function initCredentials() { // configure a JWT auth client const authClient = new google.auth.JWT( privatekey.client_email, null, privatekey.private_key, scopes, ); return new Promise(function(resolve, reject) { // authenticate request authClient.authorize(function(err, tokens) { if (err) { reject(false); } else { resolve(authClient); } }); }); } sendMessage(CONVERSATION_ID, 'BOT');
Java
import com.google.api.client.googleapis.services.AbstractGoogleClientRequest; import com.google.api.client.http.HttpBackOffUnsuccessfulResponseHandler; import com.google.api.client.http.HttpRequest; import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpTransport; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.client.util.ExponentialBackOff; import com.google.api.services.businessmessages.v1.Businessmessages; import com.google.api.services.businessmessages.v1.model.*; import java.io.FileInputStream; import java.util.Arrays; import java.util.UUID; class SendRichTextMessageSnippet { /** * Initializes credentials used by the Business Messages API. */ private static Businessmessages.Builder getBusinessMessagesBuilder() { Businessmessages.Builder builder = null; try { GoogleCredential credential = GoogleCredential .fromStream(new FileInputStream("PATH_TO_SERVICE_ACCOUNT_KEY")); credential = credential.createScoped(Arrays.asList( "https://www.googleapis.com/auth/businessmessages")); credential.refreshToken(); HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); JacksonFactory jsonFactory = JacksonFactory.getDefaultInstance(); // Create instance of the Business Messages API builder = new Businessmessages .Builder(httpTransport, jsonFactory, null) .setApplicationName("Sample Application"); // Set the API credentials and endpoint builder.setHttpRequestInitializer(credential); } catch (Exception e) { e.printStackTrace(); } return builder; } public static void main(String args[]) { try { String conversationId = "CONVERSATION_ID"; // Create client library reference Businessmessages.Builder builder = getBusinessMessagesBuilder(); // Create a rich text message BusinessMessagesMessage message = new BusinessMessagesMessage() .setMessageId(UUID.randomUUID().toString()) .setContainsRichText(true) // Force this message to be processed as rich text .setText("Hello, here is some **bold text**, *italicized text*, and a [link](https://www.google.com).") .setFallback("Hello, check out this link https://www.google.com.") .setRepresentative(new BusinessMessagesRepresentative() .setRepresentativeType("TYPE")); // Create message request Businessmessages.Conversations.Messages.Create messageRequest = builder.build().conversations().messages() .create("conversations/" + conversationId, message); // Setup retries with exponential backoff HttpRequest httpRequest = ((AbstractGoogleClientRequest) messageRequest).buildHttpRequest(); httpRequest.setUnsuccessfulResponseHandler(new HttpBackOffUnsuccessfulResponseHandler( new ExponentialBackOff())); // Execute request httpRequest.execute(); } catch (Exception e) { e.printStackTrace(); } } }
Python
"""This code sends a rich text to the user with a fallback text. Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#rich_text This code is based on the https://github.com/google-business-communications/python-businessmessages Python Business Messages client library. """ import uuid from businessmessages import businessmessages_v1_client as bm_client from businessmessages.businessmessages_v1_messages import BusinessmessagesConversationsMessagesCreateRequest from businessmessages.businessmessages_v1_messages import BusinessMessagesMessage from businessmessages.businessmessages_v1_messages import BusinessMessagesRepresentative from oauth2client.service_account import ServiceAccountCredentials # Edit the values below: path_to_service_account_key = './service_account_key.json' conversation_id = 'EDIT_HERE' credentials = ServiceAccountCredentials.from_json_keyfile_name( path_to_service_account_key, scopes=['https://www.googleapis.com/auth/businessmessages']) client = bm_client.BusinessmessagesV1(credentials=credentials) representative_type_as_string = 'BOT' if representative_type_as_string == 'BOT': representative_type = BusinessMessagesRepresentative.RepresentativeTypeValueValuesEnum.BOT else: representative_type = BusinessMessagesRepresentative.RepresentativeTypeValueValuesEnum.HUMAN # Create a rich text message with fallback text message = BusinessMessagesMessage( messageId=str(uuid.uuid4().int), fallback='Hello, check out this link https://www.google.com.', containsRichText=True, # Force this message to be processed as rich text representative=BusinessMessagesRepresentative( representativeType=representative_type ), text='Hello, here is some **bold text**, *italicized text*, and a [link](https://www.google.com).') # Create the message request create_request = BusinessmessagesConversationsMessagesCreateRequest( businessMessagesMessage=message, parent='conversations/' + conversation_id) # Send the message bm_client.BusinessmessagesV1.ConversationsMessagesService( client=client).Create(request=create_request)
Images
Envoyez une image à un utilisateur dans un message.
Vous pouvez envoyer un message avec image contenant les URL de l'image et sa vignette.
Exemple
Le code suivant envoie une image. Pour en savoir plus sur les options de mise en forme et de valeur, consultez conversations.messages.create
et Image
.
cURL
# Copyright 2021 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # https://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # This code sends an image to the user with a fallback text. # Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#images # Replace the __CONVERSATION_ID__ with a conversation id that you can send messages to # Make sure a service account key file exists at ./service_account_key.json curl -X POST "https://businessmessages.googleapis.com/v1/conversations/__CONVERSATION_ID__/messages" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/business-messages" \ -H "$(oauth2l header --json ./service_account_key.json businessmessages)" \ -d "{ 'messageId': '$(uuidgen)', 'representative': { 'avatarImage': 'https://developers.google.com/identity/images/g-logo.png', 'displayName': 'Chatbot', 'representativeType': 'BOT' }, 'fallback': 'Hello, world!\nAn image has been sent with Business Messages.', 'image': { 'contentInfo':{ 'altText': 'Image alternative text', 'fileUrl': 'https://storage.googleapis.com/kitchen-sink-sample-images/cute-dog.jpg', 'forceRefresh': 'false' } }, }"
Node.js
/** * This code sends an image to the user with a fallback text. * Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#images * * This code is based on the https://github.com/google-business-communications/nodejs-businessmessages Node.js * Business Messages client library. */ /** * Edit the values below: */ const PATH_TO_SERVICE_ACCOUNT_KEY = './service_account_key.json'; const CONVERSATION_ID = 'EDIT_HERE'; const businessmessages = require('businessmessages'); const uuidv4 = require('uuid').v4; const {google} = require('googleapis'); // Initialize the Business Messages API const bmApi = new businessmessages.businessmessages_v1.Businessmessages({}); // Set the scope that we need for the Business Messages API const scopes = [ 'https://www.googleapis.com/auth/businessmessages', ]; // Set the private key to the service account file const privatekey = require(PATH_TO_SERVICE_ACCOUNT_KEY); /** * Posts an image message to the Business Messages API. * * @param {string} conversationId The unique id for this user and agent. * @param {string} representativeType A value of BOT or HUMAN. */ async function sendMessage(conversationId, representativeType) { const authClient = await initCredentials(); if (authClient) { // Create the payload for sending an image message const apiParams = { auth: authClient, parent: 'conversations/' + conversationId, resource: { messageId: uuidv4(), representative: { representativeType: representativeType, }, fallback: 'Hello, world!\n An image has been sent with Business Messages.', image: { contentInfo: { altText: 'Some alternative text', fileUrl: 'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png', forceRefresh: true, }, }, }, }; // Call the message create function using the // Business Messages client library bmApi.conversations.messages.create(apiParams, {auth: authClient}, (err, response) => { console.log(err); console.log(response); }); } else { console.log('Authentication failure.'); } } /** * Initializes the Google credentials for calling the * Business Messages API. */ async function initCredentials() { // configure a JWT auth client const authClient = new google.auth.JWT( privatekey.client_email, null, privatekey.private_key, scopes, ); return new Promise(function(resolve, reject) { // authenticate request authClient.authorize(function(err, tokens) { if (err) { reject(false); } else { resolve(authClient); } }); }); } sendMessage(CONVERSATION_ID, 'BOT');
Java
import com.google.api.client.googleapis.services.AbstractGoogleClientRequest; import com.google.api.client.http.HttpBackOffUnsuccessfulResponseHandler; import com.google.api.client.http.HttpRequest; import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpTransport; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.client.util.ExponentialBackOff; import com.google.api.services.businessmessages.v1.Businessmessages; import com.google.api.services.businessmessages.v1.model.*; import com.google.communications.businessmessages.v1.MediaHeight; import java.io.FileInputStream; import java.util.Arrays; import java.util.UUID; class SendImageMessageSnippet { /** * Initializes credentials used by the Business Messages API. */ private static Businessmessages.Builder getBusinessMessagesBuilder() { Businessmessages.Builder builder = null; try { GoogleCredential credential = GoogleCredential .fromStream(new FileInputStream("PATH_TO_SERVICE_ACCOUNT_KEY")); credential = credential.createScoped(Arrays.asList( "https://www.googleapis.com/auth/businessmessages")); credential.refreshToken(); HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); JacksonFactory jsonFactory = JacksonFactory.getDefaultInstance(); // Create instance of the Business Messages API builder = new Businessmessages .Builder(httpTransport, jsonFactory, null) .setApplicationName("Sample Application"); // Set the API credentials and endpoint builder.setHttpRequestInitializer(credential); } catch (Exception e) { e.printStackTrace(); } return builder; } public static void main(String args[]) { try { String conversationId = "CONVERSATION_ID"; // Create client library reference Businessmessages.Builder builder = getBusinessMessagesBuilder(); // Create an Image BusinessMessagesMessage message = new BusinessMessagesMessage() .setMessageId(UUID.randomUUID().toString()) .setRepresentative(representative) .setImage(new BusinessMessagesImage() .setContentInfo( new BusinessMessagesContentInfo() .setFileUrl("FILE_URL") .setAltText("ALT_TEXT") .setForceRefresh("FORCE_REFRESH") )); // Create message request Businessmessages.Conversations.Messages.Create messageRequest = builder.build().conversations().messages() .create("conversations/" + conversationId, message); // Setup retries with exponential backoff HttpRequest httpRequest = ((AbstractGoogleClientRequest) messageRequest).buildHttpRequest(); httpRequest.setUnsuccessfulResponseHandler(new HttpBackOffUnsuccessfulResponseHandler( new ExponentialBackOff())); // Execute request httpRequest.execute(); } catch (Exception e) { e.printStackTrace(); } } }
Python
"""This code sends an image to the user with a fallback text. Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#images This code is based on the https://github.com/google-business-communications/python-businessmessages Python Business Messages client library. """ import uuid from businessmessages import businessmessages_v1_client as bm_client from businessmessages.businessmessages_v1_messages import BusinessMessagesContentInfo from businessmessages.businessmessages_v1_messages import BusinessmessagesConversationsMessagesCreateRequest from businessmessages.businessmessages_v1_messages import BusinessMessagesImage from businessmessages.businessmessages_v1_messages import BusinessMessagesMessage from businessmessages.businessmessages_v1_messages import BusinessMessagesRepresentative from oauth2client.service_account import ServiceAccountCredentials # Edit the values below: path_to_service_account_key = './service_account_key.json' conversation_id = 'EDIT_HERE' image_file_url = 'EDIT_HERE' credentials = ServiceAccountCredentials.from_json_keyfile_name( path_to_service_account_key, scopes=['https://www.googleapis.com/auth/businessmessages']) client = bm_client.BusinessmessagesV1(credentials=credentials) representative_type_as_string = 'BOT' if representative_type_as_string == 'BOT': representative_type = BusinessMessagesRepresentative.RepresentativeTypeValueValuesEnum.BOT else: representative_type = BusinessMessagesRepresentative.RepresentativeTypeValueValuesEnum.HUMAN # Create an image message with fallback text message = BusinessMessagesMessage( messageId=str(uuid.uuid4().int), representative=BusinessMessagesRepresentative( representativeType=representative_type ), fallback='Hello, world!\nAn image has been sent with Business Messages.', image=BusinessMessagesImage( contentInfo=BusinessMessagesContentInfo( altText='Alternative text', fileUrl=image_file_url, forceRefresh=True ) )) # Create the message request create_request = BusinessmessagesConversationsMessagesCreateRequest( businessMessagesMessage=message, parent='conversations/' + conversation_id) # Send the message bm_client.BusinessmessagesV1.ConversationsMessagesService( client=client).Create(request=create_request)
Réponses suggérées
Les réponses suggérées guident les utilisateurs tout au long des conversations en fournissant des réponses auxquelles votre agent sait comment réagir.
Lorsqu'un utilisateur appuie sur une réponse suggérée, votre agent reçoit un message contenant le texte de la réponse et les données de postback.
Les réponses suggérées sont limitées à 25 caractères, et un message peut contenir 13 suggestions au maximum.
Exemple
Le code suivant envoie un texte avec deux suggestions de réponses. Pour en savoir plus sur les options de mise en forme et de valeur, consultez conversations.messages.create
et SuggestedReply
.
cURL
# Copyright 2021 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # https://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # This code sends a text mesage to the user with suggested replies. # Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#suggested_replies # Replace the __CONVERSATION_ID__ with a conversation id that you can send messages to # Make sure a service account key file exists at ./service_account_key.json curl -X POST "https://businessmessages.googleapis.com/v1/conversations/__CONVERSATION_ID__/messages" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/business-messages" \ -H "$(oauth2l header --json ./service_account_key.json businessmessages)" \ -d "{ 'messageId': '$(uuidgen)', 'text': 'Hello, world!', 'fallback': 'Hello, world!\n\nReply with \"Hello\" or \"Hi!\"', 'suggestions': [ { 'reply': { 'text': 'Hello', 'postbackData': 'hello-formal', }, }, { 'reply': { 'text': 'Hi!', 'postbackData': 'hello-informal', }, }, ], 'representative': { 'avatarImage': 'https://developers.google.com/identity/images/g-logo.png', 'displayName': 'Chatbot', 'representativeType': 'BOT' }, }"
Node.js
/** * This code sends a text mesage to the user with suggested replies. * Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#suggested_replies * * This code is based on the https://github.com/google-business-communications/nodejs-businessmessages Node.js * Business Messages client library. */ /** * Edit the values below: */ const PATH_TO_SERVICE_ACCOUNT_KEY = './service_account_key.json'; const CONVERSATION_ID = 'EDIT_HERE'; const businessmessages = require('businessmessages'); const uuidv4 = require('uuid').v4; const {google} = require('googleapis'); // Initialize the Business Messages API const bmApi = new businessmessages.businessmessages_v1.Businessmessages({}); // Set the scope that we need for the Business Messages API const scopes = [ 'https://www.googleapis.com/auth/businessmessages', ]; // Set the private key to the service account file const privatekey = require(PATH_TO_SERVICE_ACCOUNT_KEY); /** * Posts a message of "Hello, world!" to the Business Messages API along with two suggested replies. * * @param {string} conversationId The unique id for this user and agent. * @param {string} representativeType A value of BOT or HUMAN. */ async function sendMessage(conversationId, representativeType) { const authClient = await initCredentials(); // Create a text message with two suggested replies const apiParams = { auth: authClient, parent: 'conversations/' + conversationId, resource: { messageId: uuidv4(), representative: { representativeType: representativeType, }, fallback: 'Hello, world!\n\nReply with "Hello" or "Hi!"', text: 'Hello, world!', suggestions: [ { reply: { text: 'Hello', postbackData: 'hello-formal', }, }, { reply: { text: 'Hello', postbackData: 'hello-informal', }, }, ], }, }; // Call the message create function using the // Business Messages client library bmApi.conversations.messages.create(apiParams, {auth: authClient}, (err, response) => { console.log(err); console.log(response); }); } /** * Initializes the Google credentials for calling the * Business Messages API. */ async function initCredentials() { // configure a JWT auth client const authClient = new google.auth.JWT( privatekey.client_email, null, privatekey.private_key, scopes, ); return new Promise(function(resolve, reject) { // authenticate request authClient.authorize(function(err, tokens) { if (err) { reject(false); } else { resolve(authClient); } }); }); } sendMessage(CONVERSATION_ID, 'BOT');
Java
import com.google.api.client.googleapis.services.AbstractGoogleClientRequest; import com.google.api.client.http.HttpBackOffUnsuccessfulResponseHandler; import com.google.api.client.http.HttpRequest; import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpTransport; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.client.util.ExponentialBackOff; import com.google.api.services.businessmessages.v1.Businessmessages; import com.google.api.services.businessmessages.v1.model.*; import java.io.FileInputStream; import java.util.Arrays; import java.util.UUID; class SendSuggestedReplySnippet { /** * Initializes credentials used by the Business Messages API. */ private static Businessmessages.Builder getBusinessMessagesBuilder() { Businessmessages.Builder builder = null; try { GoogleCredential credential = GoogleCredential .fromStream(new FileInputStream("PATH_TO_SERVICE_ACCOUNT_KEY")); credential = credential.createScoped(Arrays.asList( "https://www.googleapis.com/auth/businessmessages")); credential.refreshToken(); HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); JacksonFactory jsonFactory = JacksonFactory.getDefaultInstance(); // Create instance of the Business Messages API builder = new Businessmessages .Builder(httpTransport, jsonFactory, null) .setApplicationName("Sample Application"); // Set the API credentials and endpoint builder.setHttpRequestInitializer(credential); } catch (Exception e) { e.printStackTrace(); } return builder; } public static void main(String args[]) { try { String conversationId = "CONVERSATION_ID"; // Create client library reference Businessmessages.Builder builder = getBusinessMessagesBuilder(); // Create a text message with two suggested replies BusinessMessagesMessage message = new BusinessMessagesMessage() .setMessageId(UUID.randomUUID().toString()) .setText("Hello, world!") .setFallback("Hello, world!\n\nReply with \"Hello\" or \"Hi!\"") .setSuggestions(Arrays.asList( new BusinessMessagesSuggestion() .setReply(new BusinessMessagesSuggestedReply() .setText("Hello").setPostbackData("hello-formal") ), new BusinessMessagesSuggestion() .setReply(new BusinessMessagesSuggestedReply() .setText("Hi!").setPostbackData("hello-informal") )) ) .setRepresentative(new BusinessMessagesRepresentative() .setRepresentativeType("TYPE")); // Create message request Businessmessages.Conversations.Messages.Create messageRequest = builder.build().conversations().messages() .create("conversations/" + conversationId, message); // Setup retries with exponential backoff HttpRequest httpRequest = ((AbstractGoogleClientRequest) messageRequest).buildHttpRequest(); httpRequest.setUnsuccessfulResponseHandler(new HttpBackOffUnsuccessfulResponseHandler( new ExponentialBackOff())); // Execute request httpRequest.execute(); } catch (Exception e) { e.printStackTrace(); } } }
Python
"""This code sends a text mesage to the user with suggested replies. Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#suggested_replies This code is based on the https://github.com/google-business-communications/python-businessmessages Python Business Messages client library. """ import uuid from businessmessages import businessmessages_v1_client as bm_client from businessmessages.businessmessages_v1_messages import BusinessmessagesConversationsMessagesCreateRequest from businessmessages.businessmessages_v1_messages import BusinessMessagesMessage from businessmessages.businessmessages_v1_messages import BusinessMessagesRepresentative from businessmessages.businessmessages_v1_messages import BusinessMessagesSuggestedReply from businessmessages.businessmessages_v1_messages import BusinessMessagesSuggestion from oauth2client.service_account import ServiceAccountCredentials # Edit the values below: path_to_service_account_key = './service_account_key.json' conversation_id = 'EDIT_HERE' credentials = ServiceAccountCredentials.from_json_keyfile_name( path_to_service_account_key, scopes=['https://www.googleapis.com/auth/businessmessages']) client = bm_client.BusinessmessagesV1(credentials=credentials) representative_type_as_string = 'BOT' if representative_type_as_string == 'BOT': representative_type = BusinessMessagesRepresentative.RepresentativeTypeValueValuesEnum.BOT else: representative_type = BusinessMessagesRepresentative.RepresentativeTypeValueValuesEnum.HUMAN # Create a text message with two suggested replies and fallback text message = BusinessMessagesMessage( messageId=str(uuid.uuid4().int), representative=BusinessMessagesRepresentative( representativeType=representative_type ), text='Hello, world!', fallback='Hello, world!\n\nReply with \"Hello\" or \"Hi!\"', suggestions=[ BusinessMessagesSuggestion( reply=BusinessMessagesSuggestedReply( text='Hello', postbackData='hello-formal') ), BusinessMessagesSuggestion( reply=BusinessMessagesSuggestedReply( text='Hi!', postbackData='hello-informal') ) ]) # Create the message request create_request = BusinessmessagesConversationsMessagesCreateRequest( businessMessagesMessage=message, parent='conversations/' + conversation_id) # Send the message bm_client.BusinessmessagesV1.ConversationsMessagesService( client=client).Create(request=create_request)
Actions suggérées
Les actions suggérées guident les utilisateurs tout au long des conversations en exploitant les fonctionnalités natives de leurs appareils. Lorsqu'un utilisateur appuie sur une action suggérée, votre agent reçoit un message contenant le texte et les données de postback de l'action.
Les actions suggérées sont limitées à 25 caractères, et un message peut en contenir jusqu'à 13.
Pour en savoir plus sur les options de mise en forme et de valeur, consultez conversations.messages.create
et SuggestedAction
.
Action d'ouverture d'URL
Avec l'action "Ouvrir l'URL", votre agent suggère une URL à ouvrir par un utilisateur. Si une application est enregistrée en tant que gestionnaire par défaut pour l'URL, elle s'ouvre à la place. L'icône de l'action est celle de l'application. Les actions d'URL d'ouverture n'acceptent que les URL avec des protocoles HTTP et HTTPS. Les autres protocoles (tels que mailto) ne sont pas acceptés.
Le code suivant envoie du texte avec une action "Open URL" (Ouvrir l'URL). Pour en savoir plus sur les options de mise en forme et de valeur, consultez OpenUrlAction
.
cURL
# Copyright 2021 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # https://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # This code sends a text mesage to the user with a suggestion action toopen a URL # and a fallback text. # Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#open_url_action # Replace the __CONVERSATION_ID__ with a conversation id that you can send messages to # Make sure a service account key file exists at ./service_account_key.json curl -X POST "https://businessmessages.googleapis.com/v1/conversations/__CONVERSATION_ID__/messages" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/business-messages" \ -H "$(oauth2l header --json ./service_account_key.json businessmessages)" \ -d "{ 'messageId': '$(uuidgen)', 'text': 'Hello world!', 'fallback': 'Hello, world!\n\nSay \"Hello\" at https://www.growingtreebank.com', 'suggestions': [ { 'action': { 'text': 'Hello', 'postbackData': 'hello-formal', 'openUrlAction': { 'url': 'https://www.growingtreebank.com', } }, }, ], 'representative': { 'avatarImage': 'https://developers.google.com/identity/images/g-logo.png', 'displayName': 'Chatbot', 'representativeType': 'BOT' }, }"
Node.js
/** * This code sends a text mesage to the user with a suggestion action toopen a URL * and a fallback text. * Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#open_url_action * * This code is based on the https://github.com/google-business-communications/nodejs-businessmessages Node.js * Business Messages client library. */ /** * Edit the values below: */ const PATH_TO_SERVICE_ACCOUNT_KEY = './service_account_key.json'; const CONVERSATION_ID = 'EDIT_HERE'; const businessmessages = require('businessmessages'); const uuidv4 = require('uuid').v4; const {google} = require('googleapis'); // Initialize the Business Messages API const bmApi = new businessmessages.businessmessages_v1.Businessmessages({}); // Set the scope that we need for the Business Messages API const scopes = [ 'https://www.googleapis.com/auth/businessmessages', ]; // Set the private key to the service account file const privatekey = require(PATH_TO_SERVICE_ACCOUNT_KEY); /** * Posts a message with an open URL action to the Business Messages API. * * @param {string} conversationId The unique id for this user and agent. * @param {string} representativeType A value of BOT or HUMAN. */ async function sendMessage(conversationId, representativeType) { const authClient = await initCredentials(); if (authClient) { // Create the payload for sending a message along with an open url action const apiParams = { auth: authClient, parent: 'conversations/' + conversationId, resource: { messageId: uuidv4(), representative: { representativeType: representativeType, }, fallback: 'Hello, world!\n\nSay \"Hello\" at https://www.growingtreebank.com', text: 'Hello world!', suggestions: [ { action: { text: 'Hello', postbackData: 'hello-formal', openUrlAction: { url: 'https://www.growingtreebank.com', }, }, }, ], }, }; // Call the message create function using the // Business Messages client library bmApi.conversations.messages.create(apiParams, {auth: authClient}, (err, response) => { console.log(err); console.log(response); }); } else { console.log('Authentication failure.'); } } /** * Initializes the Google credentials for calling the * Business Messages API. */ async function initCredentials() { // configure a JWT auth client const authClient = new google.auth.JWT( privatekey.client_email, null, privatekey.private_key, scopes, ); return new Promise(function(resolve, reject) { // authenticate request authClient.authorize(function(err, tokens) { if (err) { reject(false); } else { resolve(authClient); } }); }); } sendMessage(CONVERSATION_ID, 'BOT');
Java
import com.google.api.client.googleapis.services.AbstractGoogleClientRequest; import com.google.api.client.http.HttpBackOffUnsuccessfulResponseHandler; import com.google.api.client.http.HttpRequest; import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpTransport; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.client.util.ExponentialBackOff; import com.google.api.services.businessmessages.v1.Businessmessages; import com.google.api.services.businessmessages.v1.model.*; import java.io.FileInputStream; import java.util.Arrays; import java.util.UUID; class SendSuggestedActionSnippet { /** * Initializes credentials used by the Business Messages API. */ private static Businessmessages.Builder getBusinessMessagesBuilder() { Businessmessages.Builder builder = null; try { GoogleCredential credential = GoogleCredential .fromStream(new FileInputStream("PATH_TO_SERVICE_ACCOUNT_KEY")); credential = credential.createScoped(Arrays.asList( "https://www.googleapis.com/auth/businessmessages")); credential.refreshToken(); HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); JacksonFactory jsonFactory = JacksonFactory.getDefaultInstance(); // Create instance of the Business Messages API builder = new Businessmessages .Builder(httpTransport, jsonFactory, null) .setApplicationName("Sample Application"); // Set the API credentials and endpoint builder.setHttpRequestInitializer(credential); } catch (Exception e) { e.printStackTrace(); } return builder; } public static void main(String args[]) { try { String conversationId = "CONVERSATION_ID"; // Create client library reference Businessmessages.Builder builder = getBusinessMessagesBuilder(); // Create a text message with an open url action BusinessMessagesMessage message = new BusinessMessagesMessage() .setMessageId(UUID.randomUUID().toString()) .setText("Hello world!") .setFallback("Hello, world!\n\nSay \"Hello\" at https://www.growingtreebank.com") .setSuggestions(Arrays.asList(new BusinessMessagesSuggestion() .setAction(new BusinessMessagesSuggestedAction() .setText("Hello").setPostbackData("hello-formal") .setOpenUrlAction( new BusinessMessagesOpenUrlAction().setUrl("https://www.growingtreebank.com")) )) ) .setRepresentative(new BusinessMessagesRepresentative() .setRepresentativeType("TYPE")); // Create message request Businessmessages.Conversations.Messages.Create messageRequest = builder.build().conversations().messages() .create("conversations/" + conversationId, message); // Setup retries with exponential backoff HttpRequest httpRequest = ((AbstractGoogleClientRequest) messageRequest).buildHttpRequest(); httpRequest.setUnsuccessfulResponseHandler(new HttpBackOffUnsuccessfulResponseHandler( new ExponentialBackOff())); // Execute request httpRequest.execute(); } catch (Exception e) { e.printStackTrace(); } } }
Python
"""This code sends a text mesage to the user with a suggestion action to open a URL. Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#open_url_action This code is based on the https://github.com/google-business-communications/python-businessmessages Python Business Messages client library. """ import uuid from businessmessages import businessmessages_v1_client as bm_client from businessmessages.businessmessages_v1_messages import BusinessmessagesConversationsMessagesCreateRequest from businessmessages.businessmessages_v1_messages import BusinessMessagesMessage from businessmessages.businessmessages_v1_messages import BusinessMessagesOpenUrlAction from businessmessages.businessmessages_v1_messages import BusinessMessagesRepresentative from businessmessages.businessmessages_v1_messages import BusinessMessagesSuggestedAction from businessmessages.businessmessages_v1_messages import BusinessMessagesSuggestion from oauth2client.service_account import ServiceAccountCredentials # Edit the values below: path_to_service_account_key = './service_account_key.json' conversation_id = 'EDIT_HERE' credentials = ServiceAccountCredentials.from_json_keyfile_name( path_to_service_account_key, scopes=['https://www.googleapis.com/auth/businessmessages']) client = bm_client.BusinessmessagesV1(credentials=credentials) representative_type_as_string = 'BOT' if representative_type_as_string == 'BOT': representative_type = BusinessMessagesRepresentative.RepresentativeTypeValueValuesEnum.BOT else: representative_type = BusinessMessagesRepresentative.RepresentativeTypeValueValuesEnum.HUMAN # Create a text message with an open url action and fallback text message = BusinessMessagesMessage( messageId=str(uuid.uuid4().int), representative=BusinessMessagesRepresentative( representativeType=representative_type ), text='Hello, world!', fallback='Hello, world!\n\nReply with \"Hello\" or \"Hi!\"', suggestions=[ BusinessMessagesSuggestion( action=BusinessMessagesSuggestedAction( text='Hello', postbackData='hello-formal', openUrlAction=BusinessMessagesOpenUrlAction( url='https://www.growingtreebank.com')) ), ]) # Create the message request create_request = BusinessmessagesConversationsMessagesCreateRequest( businessMessagesMessage=message, parent='conversations/' + conversation_id) # Send the message bm_client.BusinessmessagesV1.ConversationsMessagesService( client=client).Create(request=create_request)
Action de numérotation
L'action "Composer" suggère un numéro de téléphone à composer. Lorsqu'un utilisateur appuie sur un chip de suggestion d'action de numéro, l'application de téléphonie par défaut de l'utilisateur s'ouvre avec le numéro de téléphone spécifié prérempli.
Le code suivant envoie du texte avec une action "Dial". Pour en savoir plus sur les options de mise en forme et de valeur, consultez DialAction
.
cURL
# Copyright 2021 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # https://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # This code sends a text mesage to the user with a suggestion action to dial # a phone number and a fallback text. # Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#dial_action # Replace the __CONVERSATION_ID__ with a conversation id that you can send messages to # Make sure a service account key file exists at ./service_account_key.json curl -X POST "https://businessmessages.googleapis.com/v1/conversations/__CONVERSATION_ID__/messages" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/business-messages" \ -H "$(oauth2l header --json ./service_account_key.json businessmessages)" \ -d "{ 'messageId': '$(uuidgen)', 'text': 'Contact support for help with this issue.', 'fallback': 'Give us a call at +12223334444.', 'suggestions': [ { 'action': { 'text': 'Call support', 'postbackData': 'call-support', 'dialAction': { 'phoneNumber': '+12223334444', } }, }, ], 'representative': { 'avatarImage': 'https://developers.google.com/identity/images/g-logo.png', 'displayName': 'Chatbot', 'representativeType': 'BOT' }, }"
Node.js
/** * This code sends a text mesage to the user with a suggestion action to dial * a phone number and a fallback text. * Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#dial_action * * This code is based on the https://github.com/google-business-communications/nodejs-businessmessages Node.js * Business Messages client library. */ /** * Edit the values below: */ const PATH_TO_SERVICE_ACCOUNT_KEY = './service_account_key.json'; const CONVERSATION_ID = 'EDIT_HERE'; const businessmessages = require('businessmessages'); const uuidv4 = require('uuid').v4; const {google} = require('googleapis'); // Initialize the Business Messages API const bmApi = new businessmessages.businessmessages_v1.Businessmessages({}); // Set the scope that we need for the Business Messages API const scopes = [ 'https://www.googleapis.com/auth/businessmessages', ]; // Set the private key to the service account file const privatekey = require(PATH_TO_SERVICE_ACCOUNT_KEY); /** * Posts a message with a dial suggested action to the Business Messages API. * * @param {string} conversationId The unique id for this user and agent. * @param {string} representativeType A value of BOT or HUMAN. */ async function sendMessage(conversationId, representativeType) { const authClient = await initCredentials(); if (authClient) { // Create the payload for sending a message along with a dial action const apiParams = { auth: authClient, parent: 'conversations/' + conversationId, resource: { messageId: uuidv4(), representative: { representativeType: representativeType, }, fallback: 'Give us a call at +12223334444.', text: 'Contact support for help with this issue.', suggestions: [ { action: { text: 'Call support', postbackData: 'call-support', dialAction: { phoneNumber: '+12223334444', }, }, }, ], }, }; // Call the message create function using the // Business Messages client library bmApi.conversations.messages.create(apiParams, {auth: authClient}, (err, response) => { console.log(err); console.log(response); }); } else { console.log('Authentication failure.'); } } /** * Initializes the Google credentials for calling the * Business Messages API. */ async function initCredentials() { // configure a JWT auth client const authClient = new google.auth.JWT( privatekey.client_email, null, privatekey.private_key, scopes, ); return new Promise(function(resolve, reject) { // authenticate request authClient.authorize(function(err, tokens) { if (err) { reject(false); } else { resolve(authClient); } }); }); } sendMessage(CONVERSATION_ID, 'BOT');
Java
import com.google.api.client.googleapis.services.AbstractGoogleClientRequest; import com.google.api.client.http.HttpBackOffUnsuccessfulResponseHandler; import com.google.api.client.http.HttpRequest; import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpTransport; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.client.util.ExponentialBackOff; import com.google.api.services.businessmessages.v1.Businessmessages; import com.google.api.services.businessmessages.v1.model.*; import java.io.FileInputStream; import java.util.Arrays; import java.util.UUID; class SendDialActionSnippet { /** * Initializes credentials used by the Business Messages API. */ private static Businessmessages.Builder getBusinessMessagesBuilder() { Businessmessages.Builder builder = null; try { GoogleCredential credential = GoogleCredential .fromStream(new FileInputStream("PATH_TO_SERVICE_ACCOUNT_KEY")); credential = credential.createScoped(Arrays.asList( "https://www.googleapis.com/auth/businessmessages")); credential.refreshToken(); HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); JacksonFactory jsonFactory = JacksonFactory.getDefaultInstance(); // Create instance of the Business Messages API builder = new Businessmessages .Builder(httpTransport, jsonFactory, null) .setApplicationName("Sample Application"); // Set the API credentials and endpoint builder.setHttpRequestInitializer(credential); } catch (Exception e) { e.printStackTrace(); } return builder; } public static void main(String args[]) { try { String conversationId = "CONVERSATION_ID"; // Create client library reference Businessmessages.Builder builder = getBusinessMessagesBuilder(); // Create a text message with a dial action BusinessMessagesMessage message = new BusinessMessagesMessage() .setMessageId(UUID.randomUUID().toString()) .setText("Contact support for help with this issue.") .setFallback("Give us a call at +12223334444.") .setSuggestions(Arrays.asList(new BusinessMessagesSuggestion() .setAction(new BusinessMessagesSuggestedAction() .setText("Call support").setPostbackData("call-support") .setDialAction( new BusinessMessagesDialAction().setPhoneNumber("+12223334444")) ))) .setRepresentative(new BusinessMessagesRepresentative() .setRepresentativeType("TYPE")); // Create message request Businessmessages.Conversations.Messages.Create messageRequest = builder.build().conversations().messages() .create("conversations/" + conversationId, message); // Setup retries with exponential backoff HttpRequest httpRequest = ((AbstractGoogleClientRequest) messageRequest).buildHttpRequest(); httpRequest.setUnsuccessfulResponseHandler(new HttpBackOffUnsuccessfulResponseHandler( new ExponentialBackOff())); // Execute request httpRequest.execute(); } catch (Exception e) { e.printStackTrace(); } } }
Python
"""Sends a text mesage to the user with a suggestion action to dial a phone number. Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#dial_action This code is based on the https://github.com/google-business-communications/python-businessmessages Python Business Messages client library. """ import uuid from businessmessages import businessmessages_v1_client as bm_client from businessmessages.businessmessages_v1_messages import BusinessmessagesConversationsMessagesCreateRequest from businessmessages.businessmessages_v1_messages import BusinessMessagesDialAction from businessmessages.businessmessages_v1_messages import BusinessMessagesMessage from businessmessages.businessmessages_v1_messages import BusinessMessagesRepresentative from businessmessages.businessmessages_v1_messages import BusinessMessagesSuggestedAction from businessmessages.businessmessages_v1_messages import BusinessMessagesSuggestion from oauth2client.service_account import ServiceAccountCredentials # Edit the values below: path_to_service_account_key = './service_account_key.json' conversation_id = 'EDIT_HERE' credentials = ServiceAccountCredentials.from_json_keyfile_name( path_to_service_account_key, scopes=['https://www.googleapis.com/auth/businessmessages']) client = bm_client.BusinessmessagesV1(credentials=credentials) representative_type_as_string = 'BOT' if representative_type_as_string == 'BOT': representative_type = BusinessMessagesRepresentative.RepresentativeTypeValueValuesEnum.BOT else: representative_type = BusinessMessagesRepresentative.RepresentativeTypeValueValuesEnum.HUMAN # Create a text message with a dial action and fallback text message = BusinessMessagesMessage( messageId=str(uuid.uuid4().int), representative=BusinessMessagesRepresentative( representativeType=representative_type ), text='Contact support for help with this issue.', fallback='Give us a call at +12223334444.', suggestions=[ BusinessMessagesSuggestion( action=BusinessMessagesSuggestedAction( text='Call support', postbackData='call-support', dialAction=BusinessMessagesDialAction( phoneNumber='+12223334444')) ), ]) # Create the message request create_request = BusinessmessagesConversationsMessagesCreateRequest( businessMessagesMessage=message, parent='conversations/' + conversation_id) # Send the message bm_client.BusinessmessagesV1.ConversationsMessagesService( client=client).Create(request=create_request)
Suggestion de demande d'authentification
La suggestion de requête d'authentification invite les utilisateurs à se connecter à une application compatible avec OAuth 2.0, en transmettant des codes d'authentification pour confirmer les données du compte et en permettant des expériences utilisateur personnalisées et des flux de conversation détaillés. Consultez la section S'authentifier avec OAuth.
Exemple
Le code suivant envoie un texte avec une suggestion de requête d'authentification. Pour en savoir plus sur les options de mise en forme et de valeur, consultez conversations.messages.create
et Suggestion
.
cURL
# Copyright 2021 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # https://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # This code sends a text message to the user with an authentication request suggestion # that allows the user to authenticate with OAuth. It also has a fallback text. # Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#authentication-request-suggestion # Replace the __CONVERSATION_ID__ with a conversation id that you can send messages to # Make sure a service account key file exists at ./service_account_key.json # Replace the __CLIENT_ID__ # Replace the __CODE_CHALLENGE__ # Replace the __SCOPE__ curl -X POST "https://businessmessages.googleapis.com/v1/conversations/__CONVERSATION_ID__/messages" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/business-messages" \ -H "$(oauth2l header --json ./service_account_key.json businessmessages)" \ -d "{ 'messageId': '$(uuidgen)', 'text': 'Sign in to continue the conversation.', 'fallback': 'Visit support.growingtreebank.com to continue.', 'suggestions': [ { 'authenticationRequest': { 'oauth': { 'clientId': '__CLIENT_ID__', 'codeChallenge': '__CODE_CHALLENGE__', 'scopes': [ '__SCOPE__', ], }, }, }, ], 'representative': { 'avatarImage': 'https://developers.google.com/identity/images/g-logo.png', 'displayName': 'Chatbot', 'representativeType': 'BOT' } }"
Node.js
/** * This code sends a text message to the user with an authentication request suggestion * that allows the user to authenticate with OAuth. It also has a fallback text. * Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#authentication-request-suggestion * * This code is based on the https://github.com/google-business-communications/nodejs-businessmessages Node.js * Business Messages client library. */ /** * Before continuing, learn more about the prerequisites for authenticating * with OAuth at: https://developers.google.com/business-communications/business-messages/guides/how-to/integrate/oauth?hl=en * * Edit the values below: */ const PATH_TO_SERVICE_ACCOUNT_KEY = './service_account_key.json'; const CONVERSATION_ID = 'EDIT_HERE'; const OAUTH_CLIENT_ID = 'EDIT_HERE'; const OAUTH_CODE_CHALLENGE = 'EDIT_HERE'; const OAUTH_SCOPE = 'EDIT_HERE'; const businessmessages = require('businessmessages'); const uuidv4 = require('uuid').v4; const {google} = require('googleapis'); // Initialize the Business Messages API const bmApi = new businessmessages.businessmessages_v1.Businessmessages({}); // Set the scope that we need for the Business Messages API const scopes = [ 'https://www.googleapis.com/auth/businessmessages', ]; // Set the private key to the service account file const privatekey = require(PATH_TO_SERVICE_ACCOUNT_KEY); /** * Posts a message to the Business Messages API along with an authentication request. * * @param {string} conversationId The unique id for this user and agent. * @param {string} representativeType A value of BOT or HUMAN. */ async function sendMessage(conversationId, representativeType) { const authClient = await initCredentials(); if (authClient) { // Create the payload for sending a message along with an authentication request const apiParams = { auth: authClient, parent: 'conversations/' + conversationId, resource: { messageId: uuidv4(), representative: { representativeType: representativeType, }, fallback: 'Visit support.growingtreebank.com to continue.', text: 'Sign in to continue the conversation.', suggestions: [ { authenticationRequest: { oauth: { clientId: OAUTH_CLIENT_ID, codeChallenge: OAUTH_CODE_CHALLENGE, scopes: [OAUTH_SCOPE] } } }, ], }, }; // Call the message create function using the // Business Messages client library bmApi.conversations.messages.create(apiParams, {auth: authClient}, (err, response) => { console.log(err); console.log(response); }); } else { console.log('Authentication failure.'); } } /** * Initializes the Google credentials for calling the * Business Messages API. */ async function initCredentials() { // configure a JWT auth client const authClient = new google.auth.JWT( privatekey.client_email, null, privatekey.private_key, scopes, ); return new Promise(function(resolve, reject) { // authenticate request authClient.authorize(function(err, tokens) { if (err) { reject(false); } else { resolve(authClient); } }); }); } sendMessage(CONVERSATION_ID, 'BOT');
Java
import com.google.api.client.googleapis.services.AbstractGoogleClientRequest; import com.google.api.client.http.HttpBackOffUnsuccessfulResponseHandler; import com.google.api.client.http.HttpRequest; import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpTransport; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.client.util.ExponentialBackOff; import com.google.api.services.businessmessages.v1.Businessmessages; import com.google.api.services.businessmessages.v1.model.*; import java.io.FileInputStream; import java.util.Arrays; import java.util.UUID; class SendAuthenticationRequestSuggestionSnippet { /** * Initializes credentials used by the Business Messages API. */ private static Businessmessages.Builder getBusinessMessagesBuilder() { Businessmessages.Builder builder = null; try { GoogleCredential credential = GoogleCredential .fromStream(new FileInputStream("PATH_TO_SERVICE_ACCOUNT_KEY")); credential = credential.createScoped(Arrays.asList( "https://www.googleapis.com/auth/businessmessages")); credential.refreshToken(); HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); JacksonFactory jsonFactory = JacksonFactory.getDefaultInstance(); // Create instance of the Business Messages API builder = new Businessmessages .Builder(httpTransport, jsonFactory, null) .setApplicationName("Sample Application"); // Set the API credentials and endpoint builder.setHttpRequestInitializer(credential); } catch (Exception e) { e.printStackTrace(); } return builder; } public static void main(String args[]) { try { String conversationId = "CONVERSATION_ID"; // Create client library reference Businessmessages.Builder builder = getBusinessMessagesBuilder(); // Create a text message with an authentication request BusinessMessagesMessage message = new BusinessMessagesMessage() .setMessageId(UUID.randomUUID().toString()) .setText("Would you like to chat with a live agent?") .setFallback("Would you like to chat with a live agent?") .setSuggestions(Arrays.asList(new BusinessMessagesSuggestion() .setAuthenticationRequest(new BusinessMessagesAuthenticationRequest() .setOauth(new BusinessMessagesAuthenticationRequestOauth() .setClientId("CLIENT_ID") .setCodeChallenge("CODE_CHALLENGE") .setScopes(Arrays.asList("SCOPE")) ))) ) .setRepresentative(new BusinessMessagesRepresentative() .setRepresentativeType("TYPE")); // Create message request Businessmessages.Conversations.Messages.Create messageRequest = builder.build().conversations().messages() .create("conversations/" + conversationId, message); // Setup retries with exponential backoff HttpRequest httpRequest = ((AbstractGoogleClientRequest) messageRequest).buildHttpRequest(); httpRequest.setUnsuccessfulResponseHandler(new HttpBackOffUnsuccessfulResponseHandler( new ExponentialBackOff())); // Execute request httpRequest.execute(); } catch (Exception e) { e.printStackTrace(); } } }
Python
"""Sends a text message to the user with an authentication request suggestion. It allows the user to authenticate with OAuth and has a fallback text. Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#authentication-request-suggestion This code is based on the https://github.com/google-business-communications/python-businessmessages Python Business Messages client library. """ import uuid from businessmessages import businessmessages_v1_client as bm_client from businessmessages.businessmessages_v1_messages import BusinessMessagesAuthenticationRequest from businessmessages.businessmessages_v1_messages import BusinessMessagesAuthenticationRequestOauth from businessmessages.businessmessages_v1_messages import BusinessmessagesConversationsMessagesCreateRequest from businessmessages.businessmessages_v1_messages import BusinessMessagesMessage from businessmessages.businessmessages_v1_messages import BusinessMessagesRepresentative from businessmessages.businessmessages_v1_messages import BusinessMessagesSuggestion from oauth2client.service_account import ServiceAccountCredentials # Before continuing, learn more about the prerequisites for authenticating # with OAuth at: https://developers.google.com/business-communications/business-messages/guides/how-to/integrate/oauth?hl=en # Edit the values below: path_to_service_account_key = './service_account_key.json' conversation_id = 'EDIT_HERE' oauth_client_id = 'EDIT_HERE' oauth_code_challenge = 'EDIT_HERE' oauth_scope = 'EDIT_HERE' credentials = ServiceAccountCredentials.from_json_keyfile_name( path_to_service_account_key, scopes=['https://www.googleapis.com/auth/businessmessages']) client = bm_client.BusinessmessagesV1(credentials=credentials) representative_type_as_string = 'BOT' if representative_type_as_string == 'BOT': representative_type = BusinessMessagesRepresentative.RepresentativeTypeValueValuesEnum.BOT else: representative_type = BusinessMessagesRepresentative.RepresentativeTypeValueValuesEnum.HUMAN # Create a text message with an authentication request message = BusinessMessagesMessage( messageId=str(uuid.uuid4().int), representative=BusinessMessagesRepresentative( representativeType=representative_type ), text='Sign in to continue the conversation.', fallback='Visit support.growingtreebank.com to continue.', suggestions=[ BusinessMessagesSuggestion( authenticationRequest=BusinessMessagesAuthenticationRequest( oauth=BusinessMessagesAuthenticationRequestOauth( clientId=oauth_client_id, codeChallenge=oauth_code_challenge, scopes=[oauth_scope]) ) ), ] ) # Create the message request create_request = BusinessmessagesConversationsMessagesCreateRequest( businessMessagesMessage=message, parent='conversations/' + conversation_id) # Send the message bm_client.BusinessmessagesV1.ConversationsMessagesService( client=client).Create(request=create_request)
Suggestion de demande d'agent
La suggestion de requêtes d'agent en direct vous permet d'inciter les utilisateurs à interagir avec des représentants humains lors d'interactions complexes ou lorsque votre automatisation ne peut pas gérer une requête utilisateur.
Les utilisateurs peuvent demander l'intervention d'un agent en direct à tout moment d'une conversation à partir du menu à développer. Cette suggestion permet aux agents de suggérer de manière programmatique des interactions avec des représentants humains en fonction du contexte de la conversation. Votre agent doit toujours être prêt à répondre à une demande d'événement demandée par un agent, même s'il n'a pas envoyé de suggestion de demande d'agent.
Lorsque les utilisateurs appuient sur une suggestion de requête d'agent réel, un événement demandé par un agent réel est déclenché.
Exemple
Le code suivant envoie un texte contenant une suggestion de requête d'agent réel. Pour en savoir plus sur les options de mise en forme et de valeur, consultez conversations.messages.create
et Suggestion
.
cURL
# Copyright 2021 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # https://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # This code sends a text message to the user with a Live agent request suggestion # that allows the user to connect with a Live agent. # Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#live_agent_request_suggestion # Replace the __CONVERSATION_ID__ with a conversation id that you can send messages to # Make sure a service account key file exists at ./service_account_key.json curl -X POST "https://businessmessages.googleapis.com/v1/conversations/__CONVERSATION_ID__/messages" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/business-messages" \ -H "$(oauth2l header --json ./service_account_key.json businessmessages)" \ -d "{ 'messageId': '$(uuidgen)', 'text': 'Would you like to chat with a live agent?', 'fallback': 'Would you like to chat with a live agent?', 'suggestions': [ { 'liveAgentRequest': {}, }, ], 'representative': { 'avatarImage': 'https://developers.google.com/identity/images/g-logo.png', 'displayName': 'Chatbot', 'representativeType': 'BOT' }, }"
Node.js
/** * This code sends a text message to the user with a Live agent request suggestion * that allows the user to connect with a Live agent. * Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#live_agent_request_suggestion * * This code is based on the https://github.com/google-business-communications/nodejs-businessmessages Node.js * Business Messages client library. */ /** * Edit the values below: */ const PATH_TO_SERVICE_ACCOUNT_KEY = './service_account_key.json'; const CONVERSATION_ID = 'EDIT_HERE'; const businessmessages = require('businessmessages'); const uuidv4 = require('uuid').v4; const {google} = require('googleapis'); // Initialize the Business Messages API const bmApi = new businessmessages.businessmessages_v1.Businessmessages({}); // Set the scope that we need for the Business Messages API const scopes = [ 'https://www.googleapis.com/auth/businessmessages', ]; // Set the private key to the service account file const privatekey = require(PATH_TO_SERVICE_ACCOUNT_KEY); /** * Posts a message with a live agent request action to the Business Messages API. * * @param {string} conversationId The unique id for this user and agent. */ async function sendMessage(conversationId) { const authClient = await initCredentials(); if (authClient) { // Create the payload for sending a message along with a request for live agent action const apiParams = { auth: authClient, parent: 'conversations/' + conversationId, resource: { messageId: uuidv4(), representative: { representativeType: 'BOT', // Must be sent from a BOT representative }, fallback: 'Would you like to chat with a live agent?', text: 'Would you like to chat with a live agent?', suggestions: [ { liveAgentRequest: {} }, ], }, }; // Call the message create function using the // Business Messages client library bmApi.conversations.messages.create(apiParams, {auth: authClient}, (err, response) => { console.log(err); console.log(response); }); } else { console.log('Authentication failure.'); } } /** * Initializes the Google credentials for calling the * Business Messages API. */ async function initCredentials() { // configure a JWT auth client const authClient = new google.auth.JWT( privatekey.client_email, null, privatekey.private_key, scopes, ); return new Promise(function(resolve, reject) { // authenticate request authClient.authorize(function(err, tokens) { if (err) { reject(false); } else { resolve(authClient); } }); }); } sendMessage(CONVERSATION_ID);
Java
import com.google.api.client.googleapis.services.AbstractGoogleClientRequest; import com.google.api.client.http.HttpBackOffUnsuccessfulResponseHandler; import com.google.api.client.http.HttpRequest; import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpTransport; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.client.util.ExponentialBackOff; import com.google.api.services.businessmessages.v1.Businessmessages; import com.google.api.services.businessmessages.v1.model.*; import java.io.FileInputStream; import java.util.Arrays; import java.util.UUID; class SendLiveAgentRequestSuggestionSnippet { /** * Initializes credentials used by the Business Messages API. */ private static Businessmessages.Builder getBusinessMessagesBuilder() { Businessmessages.Builder builder = null; try { GoogleCredential credential = GoogleCredential .fromStream(new FileInputStream("PATH_TO_SERVICE_ACCOUNT_KEY")); credential = credential.createScoped(Arrays.asList( "https://www.googleapis.com/auth/businessmessages")); credential.refreshToken(); HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); JacksonFactory jsonFactory = JacksonFactory.getDefaultInstance(); // Create instance of the Business Messages API builder = new Businessmessages .Builder(httpTransport, jsonFactory, null) .setApplicationName("Sample Application"); // Set the API credentials and endpoint builder.setHttpRequestInitializer(credential); } catch (Exception e) { e.printStackTrace(); } return builder; } public static void main(String args[]) { try { String conversationId = "CONVERSATION_ID"; // Create client library reference Businessmessages.Builder builder = getBusinessMessagesBuilder(); // Create a text message with a live request action BusinessMessagesMessage message = new BusinessMessagesMessage() .setMessageId(UUID.randomUUID().toString()) .setText("Would you like to chat with a live agent?") .setFallback("Would you like to chat with a live agent?") .setSuggestions(Arrays.asList(new BusinessMessagesSuggestion() .setLiveAgentRequest(new BusinessMessagesLiveAgentRequest())) ) .setRepresentative(new BusinessMessagesRepresentative() .setRepresentativeType("BOT")); // Must be sent from a BOT representative // Create message request Businessmessages.Conversations.Messages.Create messageRequest = builder.build().conversations().messages() .create("conversations/" + conversationId, message); // Setup retries with exponential backoff HttpRequest httpRequest = ((AbstractGoogleClientRequest) messageRequest).buildHttpRequest(); httpRequest.setUnsuccessfulResponseHandler(new HttpBackOffUnsuccessfulResponseHandler( new ExponentialBackOff())); // Execute request httpRequest.execute(); } catch (Exception e) { e.printStackTrace(); } } }
Python
"""Sends a text message to the user with a Live agent request suggestion. It allows the user to connect with a Live agent. Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#live_agent_request_suggestion This code is based on the https://github.com/google-business-communications/python-businessmessages Python Business Messages client library. """ import uuid from businessmessages import businessmessages_v1_client as bm_client from businessmessages.businessmessages_v1_messages import BusinessmessagesConversationsMessagesCreateRequest from businessmessages.businessmessages_v1_messages import BusinessMessagesLiveAgentRequest from businessmessages.businessmessages_v1_messages import BusinessMessagesMessage from businessmessages.businessmessages_v1_messages import BusinessMessagesRepresentative from businessmessages.businessmessages_v1_messages import BusinessMessagesSuggestion from oauth2client.service_account import ServiceAccountCredentials # Edit the values below: path_to_service_account_key = './service_account_key.json' conversation_id = 'EDIT_HERE' credentials = ServiceAccountCredentials.from_json_keyfile_name( path_to_service_account_key, scopes=['https://www.googleapis.com/auth/businessmessages']) client = bm_client.BusinessmessagesV1(credentials=credentials) # Create a text message with a live agent request action and fallback text # Follow instructions at https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#live_agent_request_suggestion message = BusinessMessagesMessage( messageId=str(uuid.uuid4().int), representative=BusinessMessagesRepresentative( # Must be sent from a BOT representative representativeType=BusinessMessagesRepresentative.RepresentativeTypeValueValuesEnum.BOT ), text='Would you like to chat with a live agent?', fallback='Would you like to chat with a live agent?', suggestions=[ BusinessMessagesSuggestion( liveAgentRequest=BusinessMessagesLiveAgentRequest() ) ]) # Create the message request create_request = BusinessmessagesConversationsMessagesCreateRequest( businessMessagesMessage=message, parent='conversations/' + conversation_id) # Send the message bm_client.BusinessmessagesV1.ConversationsMessagesService( client=client).Create(request=create_request)
Cartes enrichies
Lorsque vous devez envoyer un bloc d'informations, de contenus multimédias ou de suggestions associés, vous devez envoyer une carte enrichie. Les cartes enrichies permettent à votre agent d'envoyer plusieurs unités d'informations dans un seul message.
Les cartes enrichies peuvent contenir les éléments suivants:
- Fichier multimédia (JPG, JPEG ou PNG, 5 Mo maximum)
- Miniature du fichier multimédia (JPG, JPEG ou PNG, 25 Ko maximum)
- Titre (200 caractères maximum)
- Description (2 000 caractères maximum)
- Une liste de suggestions de réponses et d'actions suggérées (quatre au maximum)
Une carte enrichie peut contenir tout ou partie des éléments répertoriés, mais elle doit contenir au moins un support ou un titre pour être valide. Une carte enrichie peut contenir jusqu'à quatre suggestions d'actions et de réponses.
Votre agent peut envoyer plusieurs cartes enrichies dans un carrousel de cartes enrichies.
Exemple
Le code suivant envoie une carte enrichie avec une image et des suggestions de réponses. Pour en savoir plus sur les options de mise en forme et de valeur, consultez conversations.messages.create
et RichCard
.
cURL
# Copyright 2021 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # https://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # This code sends a rich card to the user with a fallback text. # Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#rich-cards # Replace the __CONVERSATION_ID__ with a conversation id that you can send messages to # Make sure a service account key file exists at ./service_account_key.json curl -X POST "https://businessmessages.googleapis.com/v1/conversations/__CONVERSATION_ID__/messages" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/business-messages" \ -H "$(oauth2l header --json ./service_account_key.json businessmessages)" \ -d "{ 'messageId': '$(uuidgen)', 'representative': { 'avatarImage': 'https://developers.google.com/identity/images/g-logo.png', 'displayName': 'Chatbot', 'representativeType': 'BOT' }, 'fallback': 'Hello, world!\nSent with Business Messages\n\nReply with \"Suggestion #1\" or \"Suggestion #2\"', 'richCard': { 'standaloneCard': { 'cardContent': { 'title': 'Hello, world!', 'description': 'Sent with Business Messages.', 'media': { 'height': 'TALL', 'contentInfo':{ 'altText': 'Google logo', 'fileUrl': 'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png', 'forceRefresh': 'false' } }, 'suggestions': [ { 'reply': { 'text': 'Suggestion #1', 'postbackData': 'suggestion_1' } }, { 'reply': { 'text': 'Suggestion #2', 'postbackData': 'suggestion_2' } } ] } } } }"
Node.js
/** * This code sends a rich card to the user with a fallback text. * Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#rich-cards * * This code is based on the https://github.com/google-business-communications/nodejs-businessmessages Node.js * Business Messages client library. */ /** * Edit the values below: */ const PATH_TO_SERVICE_ACCOUNT_KEY = './service_account_key.json'; const CONVERSATION_ID = 'EDIT_HERE'; const businessmessages = require('businessmessages'); const uuidv4 = require('uuid').v4; const {google} = require('googleapis'); // Initialize the Business Messages API const bmApi = new businessmessages.businessmessages_v1.Businessmessages({}); // Set the scope that we need for the Business Messages API const scopes = [ 'https://www.googleapis.com/auth/businessmessages', ]; // Set the private key to the service account file const privatekey = require(PATH_TO_SERVICE_ACCOUNT_KEY); /** * Posts a rich card message to the Business Messages API. * * @param {string} conversationId The unique id for this user and agent. * @param {string} representativeType A value of BOT or HUMAN. */ async function sendMessage(conversationId, representativeType) { const authClient = await initCredentials(); if (authClient) { // Create the payload for sending a rich card message with two suggested replies const apiParams = { auth: authClient, parent: 'conversations/' + conversationId, resource: { messageId: uuidv4(), representative: { representativeType: representativeType, }, fallback: 'Hello, world!\nSent with Business Messages\n\nReply with \"Suggestion #1\" or \"Suggestion #2\"', richCard: { standaloneCard: { cardContent: { title: 'Hello, world!', description: 'Sent with Business Messages.', media: { height: 'TALL', contentInfo: { altText: 'Google logo', fileUrl: 'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png', forceRefresh: false, }, }, suggestions: [ { reply: { text: 'Suggestion #1', postbackData: 'suggestion_1', }, }, { reply: { text: 'Suggestion #2', postbackData: 'suggestion_2', }, }, ], }, }, }, }, }; // Call the message create function using the // Business Messages client library bmApi.conversations.messages.create(apiParams, {auth: authClient}, (err, response) => { console.log(err); console.log(response); }); } else { console.log('Authentication failure.'); } } /** * Initializes the Google credentials for calling the * Business Messages API. */ async function initCredentials() { // configure a JWT auth client const authClient = new google.auth.JWT( privatekey.client_email, null, privatekey.private_key, scopes, ); return new Promise(function(resolve, reject) { // authenticate request authClient.authorize(function(err, tokens) { if (err) { reject(false); } else { resolve(authClient); } }); }); } sendMessage(CONVERSATION_ID, 'BOT');
Java
import com.google.api.client.googleapis.services.AbstractGoogleClientRequest; import com.google.api.client.http.HttpBackOffUnsuccessfulResponseHandler; import com.google.api.client.http.HttpRequest; import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpTransport; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.client.util.ExponentialBackOff; import com.google.api.services.businessmessages.v1.Businessmessages; import com.google.api.services.businessmessages.v1.model.*; import com.google.communications.businessmessages.v1.MediaHeight; import java.io.FileInputStream; import java.util.Arrays; import java.util.UUID; class SendRichCardMessageSnippet { /** * Initializes credentials used by the Business Messages API. */ private static Businessmessages.Builder getBusinessMessagesBuilder() { Businessmessages.Builder builder = null; try { GoogleCredential credential = GoogleCredential .fromStream(new FileInputStream("PATH_TO_SERVICE_ACCOUNT_KEY")); credential = credential.createScoped(Arrays.asList( "https://www.googleapis.com/auth/businessmessages")); credential.refreshToken(); HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); JacksonFactory jsonFactory = JacksonFactory.getDefaultInstance(); // Create instance of the Business Messages API builder = new Businessmessages .Builder(httpTransport, jsonFactory, null) .setApplicationName("Sample Application"); // Set the API credentials and endpoint builder.setHttpRequestInitializer(credential); } catch (Exception e) { e.printStackTrace(); } return builder; } public static void main(String args[]) { try { String conversationId = "CONVERSATION_ID"; // Create client library reference Businessmessages.Builder builder = getBusinessMessagesBuilder(); // Create a rich card with two suggested replies BusinessMessagesMessage message = new BusinessMessagesMessage() .setMessageId(UUID.randomUUID().toString()) .setFallback("Hello, world!\nSent with Business Messages\n\nReply with \"Suggestion #1\" or \"Suggestion #2\"") .setRichCard(new BusinessMessagesRichCard() .setStandaloneCard(new BusinessMessagesStandaloneCard() .setCardContent( new BusinessMessagesCardContent() .setTitle("Hello, world!") .setDescription("Sent with Business Messages.") .setSuggestions(Arrays.asList( new BusinessMessagesSuggestion() .setReply(new BusinessMessagesSuggestedReply() .setText("Suggestion #1").setPostbackData("suggestion_1") ), new BusinessMessagesSuggestion() .setReply(new BusinessMessagesSuggestedReply() .setText("Suggestion #2").setPostbackData("suggestion_2") )) ) .setMedia(new BusinessMessagesMedia() .setHeight(MediaHeight.MEDIUM.toString()) .setContentInfo( new BusinessMessagesContentInfo() .setAltText("Google logo") .setFileUrl("https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png") .setForceRefresh(false) )) ))) .setRepresentative(new BusinessMessagesRepresentative() .setRepresentativeType("TYPE")); // Create message request Businessmessages.Conversations.Messages.Create messageRequest = builder.build().conversations().messages() .create("conversations/" + conversationId, message); // Setup retries with exponential backoff HttpRequest httpRequest = ((AbstractGoogleClientRequest) messageRequest).buildHttpRequest(); httpRequest.setUnsuccessfulResponseHandler(new HttpBackOffUnsuccessfulResponseHandler( new ExponentialBackOff())); // Execute request httpRequest.execute(); } catch (Exception e) { e.printStackTrace(); } } }
Python
"""This code sends a rich card to the user with a fallback text. Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#rich-cards This code is based on the https://github.com/google-business-communications/python-businessmessages Python Business Messages client library. """ import uuid from businessmessages import businessmessages_v1_client as bm_client from businessmessages.businessmessages_v1_messages import BusinessMessagesCardContent from businessmessages.businessmessages_v1_messages import BusinessMessagesContentInfo from businessmessages.businessmessages_v1_messages import BusinessmessagesConversationsMessagesCreateRequest from businessmessages.businessmessages_v1_messages import BusinessMessagesMedia from businessmessages.businessmessages_v1_messages import BusinessMessagesMessage from businessmessages.businessmessages_v1_messages import BusinessMessagesRepresentative from businessmessages.businessmessages_v1_messages import BusinessMessagesRichCard from businessmessages.businessmessages_v1_messages import BusinessMessagesStandaloneCard from businessmessages.businessmessages_v1_messages import BusinessMessagesSuggestedReply from businessmessages.businessmessages_v1_messages import BusinessMessagesSuggestion from oauth2client.service_account import ServiceAccountCredentials # Edit the values below: path_to_service_account_key = './service_account_key.json' conversation_id = 'EDIT_HERE' credentials = ServiceAccountCredentials.from_json_keyfile_name( path_to_service_account_key, scopes=['https://www.googleapis.com/auth/businessmessages']) client = bm_client.BusinessmessagesV1(credentials=credentials) representative_type_as_string = 'BOT' if representative_type_as_string == 'BOT': representative_type = BusinessMessagesRepresentative.RepresentativeTypeValueValuesEnum.BOT else: representative_type = BusinessMessagesRepresentative.RepresentativeTypeValueValuesEnum.HUMAN # Create a rich card message with two suggested replies and fallback text message = BusinessMessagesMessage( messageId=str(uuid.uuid4().int), representative=BusinessMessagesRepresentative( representativeType=representative_type ), fallback='Hello, world!\nSent with Business Messages\n\nReply with \"Suggestion #1\" or \"Suggestion #2\"', richCard=BusinessMessagesRichCard( standaloneCard=BusinessMessagesStandaloneCard( cardContent=BusinessMessagesCardContent( title='Hello, world!', description='Sent with Business Messages.', suggestions=[ BusinessMessagesSuggestion( reply=BusinessMessagesSuggestedReply( text='Suggestion #1', postbackData='suggestion_1') ), BusinessMessagesSuggestion( reply=BusinessMessagesSuggestedReply( text='Suggestion #2', postbackData='suggestion_2') ) ], media=BusinessMessagesMedia( height=BusinessMessagesMedia.HeightValueValuesEnum.TALL, contentInfo=BusinessMessagesContentInfo( altText='Google logo', fileUrl='https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png', forceRefresh=False )) )))) # Create the message request create_request = BusinessmessagesConversationsMessagesCreateRequest( businessMessagesMessage=message, parent='conversations/' + conversation_id) # Send the message bm_client.BusinessmessagesV1.ConversationsMessagesService( client=client).Create(request=create_request)
Carrousels de cartes enrichies
Lorsque vous devez proposer à un utilisateur plusieurs options de choix, utilisez un carrousel de cartes enrichies. Les carrousels rassemblent plusieurs fiches enrichies, ce qui permet aux utilisateurs de comparer des éléments et d'y réagir individuellement.
Les carrousels peuvent contenir entre deux et dix cartes enrichies. Les cartes enrichies présentes dans les carrousels doivent respecter les exigences générales des cartes enrichies en termes de contenu et de hauteur.
Exemple
Le code suivant envoie un carrousel de cartes enrichies. Pour en savoir plus sur les options de mise en forme et de valeur, consultez conversations.messages.create
et RichCard
.
cURL
# Copyright 2021 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # https://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # This code sends to the user a carousel with rich cards and a fallback text. # Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#rich-card-carousels # Replace the __CONVERSATION_ID__ with a conversation id that you can send messages to # Make sure a service account key file exists at ./service_account_key.json curl -X POST "https://businessmessages.googleapis.com/v1/conversations/__CONVERSATION_ID__/messages" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/business-messages" \ -H "$(oauth2l header --json ./service_account_key.json businessmessages)" \ -d "{ 'messageId': '$(uuidgen)', 'representative': { 'avatarImage': 'https://developers.google.com/identity/images/g-logo.png', 'displayName': 'Chatbot', 'representativeType': 'BOT' }, 'fallback': 'Card #1\nThe description for card #1\n\nCard #2\nThe description for card #2\n\nReply with \"Card #1\" or \"Card #2\"', 'richCard': { 'carouselCard': { 'cardWidth': 'MEDIUM', 'cardContents': [ { 'title': 'Card #1', 'description': 'The description for card #1', 'suggestions': [ { 'reply': { 'text': 'Card #1', 'postbackData': 'card_1' } } ], 'media': { 'height': 'MEDIUM', 'contentInfo': { 'fileUrl': 'https://storage.googleapis.com/kitchen-sink-sample-images/cute-dog.jpg', 'forceRefresh': 'false', } } }, { 'title': 'Card #2', 'description': 'The description for card #2', 'suggestions': [ { 'reply': { 'text': 'Card #2', 'postbackData': 'card_2' } } ], 'media': { 'height': 'MEDIUM', 'contentInfo': { 'fileUrl': 'https://storage.googleapis.com/kitchen-sink-sample-images/elephant.jpg', 'forceRefresh': 'false', } } } ] } } }"
Node.js
/** * This code sends to the user a carousel with rich cards and a fallback text. * Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#rich-card-carousels * * This code is based on the https://github.com/google-business-communications/nodejs-businessmessages Node.js * Business Messages client library. */ /** * Edit the values below: */ const PATH_TO_SERVICE_ACCOUNT_KEY = './service_account_key.json'; const CONVERSATION_ID = 'EDIT_HERE'; const businessmessages = require('businessmessages'); const uuidv4 = require('uuid').v4; const {google} = require('googleapis'); // Initialize the Business Messages API const bmApi = new businessmessages.businessmessages_v1.Businessmessages({}); // Set the scope that we need for the Business Messages API const scopes = [ 'https://www.googleapis.com/auth/businessmessages', ]; // Set the private key to the service account file const privatekey = require(PATH_TO_SERVICE_ACCOUNT_KEY); /** * Posts a carousel card message to the Business Messages API. * * @param {string} conversationId The unique id for this user and agent. * @param {string} representativeType A value of BOT or HUMAN. */ async function sendMessage(conversationId, representativeType) { const authClient = await initCredentials(); if (authClient) { // Create the payload for sending carousel message // with two cards and a suggested reply for each card const apiParams = { auth: authClient, parent: 'conversations/' + conversationId, resource: { messageId: uuidv4(), representative: { representativeType: representativeType, }, fallback: 'Card #1\nThe description for card #1\n\nCard #2\nThe description for card #2\n\nReply with \"Card #1\" or \"Card #2\"', richCard: { carouselCard: { cardWidth: 'MEDIUM', cardContents: [ { title: 'Card #1', description: 'The description for card #1', suggestions: [ { reply: { text: 'Card #1', postbackData: 'card_1' } } ], media: { height: 'MEDIUM', contentInfo: { fileUrl: 'https://storage.googleapis.com/kitchen-sink-sample-images/cute-dog.jpg', forceRefresh: 'false', } } }, { title: 'Card #2', description: 'The description for card #2', suggestions: [ { reply: { text: 'Card #2', postbackData: 'card_2' } } ], media: { height: 'MEDIUM', contentInfo: { fileUrl: 'https://storage.googleapis.com/kitchen-sink-sample-images/elephant.jpg', forceRefresh: 'false', } } } ] } } }, }; // Call the message create function using the // Business Messages client library bmApi.conversations.messages.create(apiParams, {auth: authClient}, (err, response) => { console.log(err); console.log(response); }); } else { console.log('Authentication failure.'); } } /** * Initializes the Google credentials for calling the * Business Messages API. */ async function initCredentials() { // configure a JWT auth client const authClient = new google.auth.JWT( privatekey.client_email, null, privatekey.private_key, scopes, ); return new Promise(function(resolve, reject) { // authenticate request authClient.authorize(function(err, tokens) { if (err) { reject(false); } else { resolve(authClient); } }); }); } sendMessage(CONVERSATION_ID, 'BOT');
Java
import com.google.api.client.googleapis.services.AbstractGoogleClientRequest; import com.google.api.client.http.HttpBackOffUnsuccessfulResponseHandler; import com.google.api.client.http.HttpRequest; import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpTransport; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.client.util.ExponentialBackOff; import com.google.api.services.businessmessages.v1.Businessmessages; import com.google.api.services.businessmessages.v1.model.*; import com.google.communications.businessmessages.v1.MediaHeight; import java.io.FileInputStream; import java.util.Arrays; import java.util.UUID; class SendRichCardCarouselMessage { /** * Initializes credentials used by the Business Messages API. */ private static Businessmessages.Builder getBusinessMessagesBuilder() { Businessmessages.Builder builder = null; try { GoogleCredential credential = GoogleCredential .fromStream(new FileInputStream("PATH_TO_SERVICE_ACCOUNT_KEY")); credential = credential.createScoped(Arrays.asList( "https://www.googleapis.com/auth/businessmessages")); credential.refreshToken(); HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); JacksonFactory jsonFactory = JacksonFactory.getDefaultInstance(); // Create instance of the Business Messages API builder = new Businessmessages .Builder(httpTransport, jsonFactory, null) .setApplicationName("Sample Application"); // Set the API credentials and endpoint builder.setHttpRequestInitializer(credential); } catch (Exception e) { e.printStackTrace(); } return builder; } public static void main(String args[]) { try { String conversationId = "CONVERSATION_ID"; // Create client library reference Businessmessages.Builder builder = getBusinessMessagesBuilder(); // Create a rich card with two suggested replies BusinessMessagesMessage message = new BusinessMessagesMessage() .setMessageId(UUID.randomUUID().toString()) .setFallback("Hello, world!\nSent with Business Messages\n\nReply with \"Suggestion #1\" or \"Suggestion #2\"") .setRichCard(new BusinessMessagesRichCard() .setCarouselCard(new BusinessMessagesCarouselCard().setCardWidth("MEDIUM") .setCardContents(Arrays.asList( new BusinessMessagesCardContent() .setTitle("Card #1") .setDescription("The description for card #1") .setSuggestions(Arrays.asList(new BusinessMessagesSuggestion() .setReply(new BusinessMessagesSuggestedReply() .setText("Card #1").setPostbackData("card_1") ))) .setMedia(new BusinessMessagesMedia() .setHeight(MediaHeight.MEDIUM.toString()) .setContentInfo(new BusinessMessagesContentInfo() .setFileUrl("https://storage.googleapis.com/kitchen-sink-sample-images/cute-dog.jpg"))), new BusinessMessagesCardContent() .setTitle("Card #2") .setDescription("The description for card #2") .setSuggestions(Arrays.asList(new BusinessMessagesSuggestion() .setReply(new BusinessMessagesSuggestedReply() .setText("Card #2").setPostbackData("card_2") ))) .setMedia(new BusinessMessagesMedia() .setHeight(MediaHeight.MEDIUM.toString()) .setContentInfo(new BusinessMessagesContentInfo() .setFileUrl("https://storage.googleapis.com/kitchen-sink-sample-images/elephant.jpg"))) ) ))) .setRepresentative(new BusinessMessagesRepresentative() .setRepresentativeType("TYPE")); // Create message request Businessmessages.Conversations.Messages.Create messageRequest = builder.build().conversations().messages() .create("conversations/" + conversationId, message); // Setup retries with exponential backoff HttpRequest httpRequest = ((AbstractGoogleClientRequest) messageRequest).buildHttpRequest(); httpRequest.setUnsuccessfulResponseHandler(new HttpBackOffUnsuccessfulResponseHandler( new ExponentialBackOff())); // Execute request httpRequest.execute(); } catch (Exception e) { e.printStackTrace(); } } }
Python
"""This code sends to the user a carousel with rich cards and a fallback text. Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/send?hl=en#rich-card-carousels This code is based on the https://github.com/google-business-communications/python-businessmessages Python Business Messages client library. """ import uuid from businessmessages import businessmessages_v1_client as bm_client from businessmessages.businessmessages_v1_messages import BusinessMessagesCardContent from businessmessages.businessmessages_v1_messages import BusinessMessagesCarouselCard from businessmessages.businessmessages_v1_messages import BusinessMessagesContentInfo from businessmessages.businessmessages_v1_messages import BusinessmessagesConversationsMessagesCreateRequest from businessmessages.businessmessages_v1_messages import BusinessMessagesMedia from businessmessages.businessmessages_v1_messages import BusinessMessagesMessage from businessmessages.businessmessages_v1_messages import BusinessMessagesRepresentative from businessmessages.businessmessages_v1_messages import BusinessMessagesRichCard from businessmessages.businessmessages_v1_messages import BusinessMessagesSuggestedReply from businessmessages.businessmessages_v1_messages import BusinessMessagesSuggestion from oauth2client.service_account import ServiceAccountCredentials # Edit the values below: path_to_service_account_key = './service_account_key.json' conversation_id = 'EDIT_HERE' credentials = ServiceAccountCredentials.from_json_keyfile_name( path_to_service_account_key, scopes=['https://www.googleapis.com/auth/businessmessages']) client = bm_client.BusinessmessagesV1(credentials=credentials) representative_type_as_string = 'BOT' if representative_type_as_string == 'BOT': representative_type = BusinessMessagesRepresentative.RepresentativeTypeValueValuesEnum.BOT else: representative_type = BusinessMessagesRepresentative.RepresentativeTypeValueValuesEnum.HUMAN # Create a carousel message with two cards and a suggested reply for each card # and fallback text message = BusinessMessagesMessage( messageId=str(uuid.uuid4().int), representative=BusinessMessagesRepresentative( representativeType=representative_type ), fallback='Card #1\nThe description for card #1\n\nCard #2\nThe description for card #2\n\nReply with \"Card #1\" or \"Card #2\"', richCard=BusinessMessagesRichCard( carouselCard=BusinessMessagesCarouselCard( cardWidth=BusinessMessagesCarouselCard.CardWidthValueValuesEnum.MEDIUM, cardContents=[ BusinessMessagesCardContent( title='Card #1', description='The description for card #1', suggestions=[ BusinessMessagesSuggestion( reply=BusinessMessagesSuggestedReply( text='Card #1', postbackData='card_1') ) ], media=BusinessMessagesMedia( height=BusinessMessagesMedia.HeightValueValuesEnum.MEDIUM, contentInfo=BusinessMessagesContentInfo( fileUrl='https://storage.googleapis.com/kitchen-sink-sample-images/cute-dog.jpg', forceRefresh=False))), BusinessMessagesCardContent( title='Card #2', description='The description for card #2', suggestions=[ BusinessMessagesSuggestion( reply=BusinessMessagesSuggestedReply( text='Card #2', postbackData='card_2') ) ], media=BusinessMessagesMedia( height=BusinessMessagesMedia.HeightValueValuesEnum.MEDIUM, contentInfo=BusinessMessagesContentInfo( fileUrl='https://storage.googleapis.com/kitchen-sink-sample-images/elephant.jpg', forceRefresh=False))) ]))) # Create the message request create_request = BusinessmessagesConversationsMessagesCreateRequest( businessMessagesMessage=message, parent='conversations/' + conversation_id) # Send the message bm_client.BusinessmessagesV1.ConversationsMessagesService( client=client).Create(request=create_request)