Po otrzymaniu wiadomości od użytkownika możesz wysłać odpowiedź, aby kontynuować rozmowę. Wiadomości do użytkownika możesz wysyłać do 30 dni po ostatniej wiadomości użytkownika.
Agenty komunikują się z użytkownikami, wysyłając i odbierając wiadomości. Aby wysyłać wiadomości do użytkowników, agent wysyła prośby o rozpoczęcie czatu do Business Messages.
Aby wysłać wiadomość, wysyłasz do interfejsu Business Messages API żądanie HTTP POST, które zawiera
- unikalny identyfikator wiadomości
- identyfikator rozmowy
- treść wiadomości.
Gdy interfejs Business Messages API wysyła wiadomość do użytkownika, zwraca 200 OK
. Jeśli w wiadomości brakuje wymaganych wartości, interfejs API zwraca błąd 400
. Jeśli wiadomość zawiera nieprawidłowe dane logowania, interfejs API zwraca błąd 401
.
Problemy z dostarczaniem wiadomości możesz debugować na stronie dzienników konsoli programisty Business Communications.
Strategia zastępcza
Jeśli urządzenie użytkownika nie obsługuje wiadomości, którą próbujesz wysłać (np. nie obsługuje on sugerowanych odpowiedzi), interfejs API zwróci błąd 400 (FAILED
PRECONDITION)
. Możesz jednak obejść ten problem, określając tekst fallback
dla każdej wysyłanej wiadomości. Jeśli podasz tekst fallback
, API zwróci odpowiedź 200 OK
, nawet jeśli urządzenie użytkownika nie obsługuje danego typu komunikatu.
Jeśli użytkownik otrzyma komunikat, że jego urządzenie nie obsługuje, ale zawiera tekst fallback
, zamiast niego wyświetli się tekst fallback
. To zachowanie pozwala kontynuować rozmowę w sposób proaktywny bez zakłócania przebiegu rozmowy ani poświęcania dodatkowego czasu na przetworzenie błędu 400
(FAILED PRECONDITION)
i zidentyfikowanie komunikatu alternatywnego.
Tekst fallback
każdej wiadomości powinien odzwierciedlać jej funkcję.
Przykład:
- W przypadku wiadomości z sugerowanymi odpowiedziami lub działaniami umieść tekst wiadomości w polu
fallback
oraz dołącz wskazówki dotyczące opcji kontynuowania rozmowy. - W przypadku kart informacyjnych lub karuzeli umieść w tekście
fallback
tytuł i opis oraz linki do obrazów lub stron.
Aby wstawić podziały wierszy w tekście fallback
, użyj \n
lub \r\n
.
Testuj tekst zastępczy
Zanim uruchomisz agenta, możesz sprawdzić, jak tekst zastępczy wyświetla się w wątku. W tym celu wyślij wiadomość z parametrem adresu URL forceFallback
ustawionym na true
. Gdy wymusisz stosowanie tekstu zastępczego, wątek ignoruje główną treść wiadomości (tekst i sugestię otwarcia adresu URL w poniższym przykładzie) i zamiast niej wyświetla tekst zastępczy.
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)
Więcej informacji: Message
.
Przedstawiciele
Gdy agent wysyła wiadomość, wybierasz przedstawiciela – człowieka lub automatyzację, który ją napisał. Business Messages obsługuje przedstawicieli HUMAN
i BOT
.
Określ przedstawiciela BOT
, gdy wiadomość powstaje w ramach jakiejkolwiek automatyzacji, niezależnie od tego, czy chodzi o automatyczne odpowiadanie użytkownikom na ich miejsce w kolejce, o złożony agent rozumiejący język naturalny z dynamicznym dostępem do informacji o użytkownikach czy coś pomiędzy. Wiadomości z przedstawicielami firmy BOT
mają małą ikonę , która pomaga określić oczekiwania użytkowników w odniesieniu do określonych interakcji.
Określ przedstawiciela HUMAN
tylko wtedy, gdy pracownik obsługi klienta tworzy wiadomość.
Zanim wyślesz jakiekolwiek wiadomości od przedstawiciela firmy HUMAN
, wyślij REPRESENTATIVE_JOINED
zdarzenie, aby poinformować użytkowników, że mogą wysyłać bardziej swobodnie lub bardziej złożone wiadomości. Po wysłaniu ostatniej wiadomości od przedstawiciela firmy HUMAN
wyślij zdarzenie REPRESENTATIVE_LEFT
, aby ponownie określić oczekiwania użytkownika.
Jeśli na przykład użytkownik rozpocznie rozmowę z pracownikiem obsługi klienta, a Ty wyślesz automatyczną wiadomość z informacją, że powinien się spodziewać kontaktu z obsługą klienta w ciągu 2 minut, powinna ona zostać wysłana przez przedstawiciela BOT
. Zanim pracownik obsługi klienta dołączy do gry, wyślij zdarzenie REPRESENTATIVE_JOINED
. Wszystkie wiadomości od agenta na żywo powinny być oznaczone jako pochodzące od przedstawiciela HUMAN
. Gdy pracownik obsługi klienta zakończy rozmowę, wyślij zdarzenie REPRESENTATIVE_LEFT
. Wszystkie
kolejne wiadomości powinny pochodzić od przedstawiciela BOT
, chyba że do rozmowy dołączy inny aktywny agent.
Przykładową rozmowę i kod używany do przekazania przedstawicielom firmy BOT
i HUMAN
znajdziesz w artykule o przekazywaniu kontaktów między botem a aktywnym pracownikiem obsługi klienta.
Niezależnie od tego, czy Twoim przedstawicielem jest BOT
czy HUMAN
, możesz określić reprezentatywną wyświetlaną nazwę i awatar. Zarówno nazwy wyświetlane, jak i awatary są widoczne dla użytkowników.
Obrazy awatara muszą mieć wymiary 1024 × 1024 piksele, nie więcej niż 50 KB. Muszą być też określone jako publicznie dostępne adresy URL. Jeśli nie prześlesz obrazu awatara, jako awatar przedstawiciela zostanie użyte logo agenta.
Tekst
Najprostsze wiadomości składają się z tekstu. Do przekazywania informacji najlepiej nadają się wiadomości tekstowe, które nie wymagają treści wizualnych, skomplikowanej interakcji ani reakcji.
Przykład
Ten kod wysyła prostego SMS-a. Więcej informacji: 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)
Tekst sformatowany
SMS-y z wartością containsRichText
ustawioną na true
mogą zawierać podstawowe formatowanie Markdown. Możesz dodać hiperlinki, pogrubić tekst lub wpisać kursywę. Tabela zawiera kilka prawidłowych przykładów:
Format | Znaki | Zwykły tekst | Wyrenderowany tekst |
---|---|---|---|
Pogrubienie | ** |
**Some text** |
Jakiś tekst |
Kursywa | * |
*Some text* |
Jakiś tekst |
Hiperlink | []() |
[Click here](https://www.example.com) |
Kliknij tutaj |
Przejście do nowego wiersza | \n
|
Line one\nLine two
|
Wiersz 1 Wiersz 2 |
Formatowanie musi być zgodne z kilkoma dodatkowymi regułami:
- Wszystkie linki muszą zaczynać się od
https://
lubhttp://
- Zagnieżdżone mogą być różne typy formatowania, ale nie mogą się na siebie nakładać.
- Podziały wierszy w polu
\n
można używać w dowolnym miejscu wiadomości, ale podziały na końcu wiadomości nie są wyświetlane. - Aby normalnie wyświetlać którekolwiek ze znaków zarezerwowanych (
*
,\
,[
lub]
), musisz poprzedzić je znakiem ukośnika lewego (\
).
Wiadomości z nieprawidłowym formatem nie są wysyłane z komunikatem o błędzie dotyczącym nieprawidłowego formatu Markdown. Tabela zawiera więcej prawidłowych i nieprawidłowych przykładów opartych na powyższych regułach:
Zwykły tekst | Poprawność | Wyrenderowany tekst |
---|---|---|
[Click here](www.example.com) |
Nieprawidłowa wartość. Link nie zaczyna się od http:// ani https:// |
Nie jest renderowany. |
[**Click here**](https://www.example.com) |
Prawidłowe. Zagnieżdżanie jest dozwolone. | Kliknij tutaj |
**This is [not** valid](https://www.example.com) |
Nieprawidłowa wartość. Nakładające się formatowanie jest niedozwolone. | Nie jest renderowany. |
** Some bold text ** |
Nieprawidłowa wartość. Wewnątrz ** nie można umieszczać spacji na końcu. |
Nie jest renderowany. |
Citation below\* |
Prawidłowe. Znak * zawiera zmianę znaczenia. |
Cytowanie poniżej: * |
Przykład
Poniższy kod umożliwia wysyłanie sformatowanego tekstu. Więcej informacji: 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)
zdjęcia;
Wyślij obraz do użytkownika w wiadomości.
Możesz wysłać wiadomość o obrazie z adresami URL obrazu i jego miniatury.
Przykład
Ten kod wysyła obraz. Opcje formatowania i wartości znajdziesz w sekcjach conversations.messages.create
i 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)
Sugerowane odpowiedzi
Sugerowane odpowiedzi prowadzą użytkowników przez rozmowy, dostarczając odpowiedzi, na które agent wie, jak zareagować.
Gdy użytkownik kliknie sugerowaną odpowiedź, agent otrzyma wiadomość zawierającą tekst odpowiedzi i dane wywołania zwrotnego.
Sugerowane odpowiedzi mogą mieć maksymalnie 25 znaków, a wiadomości – 13.
Przykład
Podany niżej kod wysyła tekst z 2 sugerowanymi odpowiedziami. Opcje formatowania i wartości znajdziesz w sekcjach conversations.messages.create
i 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)
Sugerowane działania
Sugerowane działania prowadzą użytkowników przez rozmowy, wykorzystując natywne funkcje urządzeń. Gdy użytkownik kliknie sugerowane działanie, agent otrzyma wiadomość z tekstem działania i danymi wywołania zwrotnego.
Sugerowane działania mogą mieć maksymalnie 25 znaków, a wiadomość może zawierać maksymalnie 13 sugestii.
Informacje o opcjach formatowania i wartości znajdziesz w sekcjach conversations.messages.create
i SuggestedAction
.
Otwórz działanie URL
Wykonując czynność Otwórz URL, agent proponuje adres URL, który użytkownik może otworzyć. Jeśli aplikacja jest zarejestrowana jako domyślny moduł obsługi adresu URL, zostanie ona otwarta, a ikona działania jest ikoną aplikacji. Działania związane z otwartymi adresami URL obsługują tylko adresy URL z protokołami HTTP i HTTPS. Inne protokoły (np. mailto) nie są obsługiwane.
Poniższy kod wysyła tekst za pomocą działania Open URL. Opcje formatowania i wartości znajdziesz tutaj: 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)
Wybieranie numeru
Wybranie numeru telefonu zasugeruje numer telefonu, który użytkownik może wybrać. Gdy użytkownik kliknie element z sugestią wybierania czynności, otworzy się domyślna aplikacja telefonu ze wstępnie wypełnionym określonym numerem telefonu.
Podany niżej kod wysyła SMS-a z działaniem Wybierz numer. Opcje formatowania i wartości znajdziesz tutaj: 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)
Sugestia dotycząca prośby o uwierzytelnienie
Sugestia dotycząca żądań uwierzytelniania zachęca użytkowników do zalogowania się w aplikacji zgodnej z OAuth 2.0, przekazując kody uwierzytelniające w celu potwierdzenia danych konta oraz zapewniając niestandardowy interfejs i szczegółowe przepływy rozmowy. Zobacz Uwierzytelnianie przez OAuth.
Przykład
Poniższy kod wysyła tekst z sugestią dotyczącą żądania uwierzytelnienia. Informacje o opcjach formatowania i wartości znajdziesz w sekcjach conversations.messages.create
i 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)
Sugestia dotycząca prośby pracownika obsługi klienta na żywo
Sugestia dotycząca próśb o obsługę agenta na żywo umożliwia poinstruowanie użytkowników, aby mogli wchodzić w interakcje z ludźmi w trakcie złożonych interakcji lub gdy automatyzacja nie może obsłużyć żądania użytkownika.
Użytkownicy mogą w dowolnym momencie rozmowy poprosić o pomoc, korzystając z rozszerzonego menu. Ta sugestia daje pracownikom obsługi klienta możliwość automatycznego sugerowania interakcji z przedstawicielami na podstawie kontekstu rozmowy. Twój agent powinien zawsze być gotowy, aby odpowiedzieć na żądanie agenta na żywo, nawet jeśli nie wysłał sugestii dotyczącej obsługi klienta na żywo.
Gdy użytkownik kliknie sugestię prośby o dodanie pracownika obsługi klienta na żywo, spowoduje to wywołanie zdarzenia zamówionego przez pracownika obsługi klienta na żywo.
Przykład
Ten kod służy do wysyłania SMS-a z sugestią dotyczącą prośby pracownika obsługi klienta na żywo. Informacje o opcjach formatowania i wartości znajdziesz w sekcjach conversations.messages.create
i 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)
Karty informacyjne
Aby wysłać fragment powiązanych informacji, multimediów lub sugestii, należy wysłać kartę informacyjną. Dzięki kartom rozszerzonym agent może wysłać wiele jednostek informacji w jednej wiadomości.
Karty rozszerzone mogą zawierać te elementy:
- Multimedia (JPG, JPEG lub PNG, maksymalnie 5 MB)
- Miniatura multimediów (JPG, JPEG lub PNG, maksymalnie 25 KB)
- Tytuł (maksymalnie 200 znaków)
- Tekst reklamy (maksymalnie 2000 znaków)
- Lista sugerowanych odpowiedzi i sugerowanych działań (maksymalnie 4)
Karta informacyjna może zawierać dowolne lub wszystkie wymienione elementy, ale aby karta była prawidłowa, musi zawierać co najmniej multimedia lub tytuł. Karta informacyjna może zawierać maksymalnie 4 sugerowane działania i odpowiedzi.
Agent może wysyłać razem wiele kart rozszerzonych w karuzeli kart rozszerzonych.
Przykład
Podany niżej kod wysyła kartę informacyjną z obrazem i sugerowanymi odpowiedziami. Informacje o opcjach formatowania i wartości znajdziesz w sekcjach conversations.messages.create
i 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)
Karuzele kart rozszerzonych
Gdy chcesz pokazać użytkownikowi kilka opcji do wyboru, użyj karuzeli kart rozszerzonych. Karuzele są połączone ze sobą wiele kart rozszerzonych, co pozwala użytkownikom porównywać elementy i reagować na każdą z nich osobno.
Karuzele może zawierać od 2 do 10 kart rozszerzonych. Karty informacyjne w karuzeli muszą spełniać ogólne wymagania dotyczące treści i wysokości kart rozszerzonych.
Przykład
Poniższy kod wysyła karuzelę kart rozszerzonych. Opcje formatowania i wartości znajdziesz w sekcjach conversations.messages.create
i 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)