Os agentes do RCS for Business comunicam-se com os usuários enviando e recebendo mensagens. Para enviar mensagens aos usuários, seu agente envia solicitações de mensagens para a API de Mensagens do RCS Business. Uma única solicitação pode incluir texto , rich cards , arquivos de mídia e PDF , respostas sugeridas e ações sugeridas .
A plataforma RCS for Business retorna erros em determinadas situações para ajudar você a gerenciar a entrega de mensagens:
- Se você enviar uma mensagem para um usuário cujo dispositivo não seja compatível com RCS ou que não tenha o RCS ativado, a plataforma RCS for Business retornará um erro 404 NOT_FOUND. Nesse caso, você pode tentar entrar em contato com o usuário por meio dos métodos alternativos definidos em sua infraestrutura.
- Se você enviar uma mensagem para um usuário RCS em uma rede onde seu agente ainda não foi iniciado, ou em uma rede que não habilitou o tráfego RCS, a plataforma RCS for Business retornará um erro 404 NOT_FOUND.
- Se você enviar uma mensagem com recursos que o dispositivo do usuário não suporta, a plataforma RCS for Business retornará o erro 400 INVALID_ARGUMENT e não entregará sua mensagem.
Como parte da sua estratégia de mensagens multicanal, é recomendável revogar mensagens que não forem entregues após um período razoável e reenviá-las por um canal diferente. Para revogar mensagens automaticamente em um horário predefinido, defina um prazo de expiração para as mensagens .
O destinatário está offline.
A plataforma RCS for Business ainda aceita uma mensagem para entrega mesmo se o destinatário estiver offline. Você recebe uma resposta 200 OK, e a plataforma RCS for Business retém a mensagem e tenta reenviá-la por 30 dias. Não é necessário solicitar ao RCS for Business que envie a mensagem novamente.
O RCS for Business exclui todas as mensagens não entregues 30 dias após o envio.
Dependendo do caso de uso do seu agente, você pode querer revogar uma mensagem não entregue antes do prazo de 30 dias. A revogação pode impedir que usuários offline recebam uma mensagem desatualizada quando voltarem a ficar online. Existem várias maneiras de revogar uma mensagem:
- Envie uma solicitação de revogação para efetivar a revogação.
- Defina um prazo de expiração para que a mensagem seja revogada automaticamente no momento apropriado.
Defina um prazo de expiração para a mensagem.
As mensagens do seu agente são urgentes? Por exemplo, senhas de uso único (OTPs) são válidas apenas por um curto período. Ofertas por tempo limitado expiram. E lembretes de agendamento perdem a relevância após a data do agendamento. Para manter as mensagens oportunas e relevantes, defina um prazo de expiração. Isso pode evitar que usuários offline recebam conteúdo desatualizado ao retornarem à internet. A expiração também é um bom sinal para acionar sua estratégia de mensagens alternativas, garantindo que os usuários recebam as informações necessárias no momento certo.
Para definir o prazo de validade de uma mensagem, especifique um dos seguintes campos na mensagem do agente:
-
expireTime: o horário exato em UTC em que a mensagem expira. -
ttl(tempo de vida): o período de tempo antes que a mensagem expire.
Para opções de formatação e valores, consulte AgentMessage .
O valor máximo para ttl e expireTime é de 15 dias após o envio da mensagem.
Embora não haja um valor mínimo ttl e expireTime , recomenda-se aguardar pelo menos 10 segundos após o envio da mensagem para reduzir significativamente a chance de receber notificações tanto de revogação quanto de entrega.
Tempo de vida (TTL) para uma mensagem
Ao definir um TTL para uma mensagem RCS for Business, você especifica por quanto tempo a mensagem deve ser considerada válida e entregável. Se a mensagem não for entregue com sucesso ao dispositivo do usuário dentro desse período de TTL, a plataforma RCS for Business tentará revogá-la automaticamente.
Ao iniciar uma revogação de mensagem, você solicita à plataforma RCS for Business que interrompa as tentativas de entrega dessa mensagem específica. No entanto, essa ação afeta apenas as tentativas de entrega futuras. Se o dispositivo do usuário já tiver recebido a mensagem com sucesso, ela estará em processamento e a plataforma RCS for Business não poderá revogá-la do dispositivo do usuário.
Eis o que você pode esperar em relação às notificações:
Mensagem entregue dentro do TTL: Se o dispositivo do usuário se conectar à internet e receber a mensagem antes do TTL expirar, você receberá uma notificação
DELIVERED. Nenhuma notificação de revogação será enviada, pois a mensagem foi entregue com sucesso. Este é o cenário mais comum e esperado.Mensagem não entregue antes do vencimento do TTL: Se o TTL expirar antes que a mensagem chegue ao dispositivo do usuário (por exemplo, se o dispositivo estiver offline), a plataforma RCS for Business tentará revogar a mensagem. Você receberá uma notificação
TTL_EXPIRATION_REVOKED, indicando que a mensagem foi removida com sucesso da fila de entrega. Nesse caso, o usuário não receberá a mensagem.
Recomendações para lidar com casos extremos
Nosso sistema processa o RCS para entrega de mensagens comerciais e expirações de TTL em paralelo. Por isso, muito raramente, você poderá encontrar casos extremos em que o momento das notificações é inesperado. Por exemplo, você pode receber uma notificação de entrega e uma de TTL, ou nenhuma delas.
Aqui estão nossas recomendações para lidar com notificações de mensagens RCS for Business:
Notificação
DELIVERED: Se você receber uma notificaçãoDELIVEREDpara uma mensagem, isso confirma que a mensagem chegou ao usuário. Você pode ignorar com segurança quaisquer notificações de TTL subsequentes para essa mensagem específica.Notificação
TTL_EXPIRATION_REVOKED: Se você receber uma notificação TTL com o statusTTL_EXPIRATION_REVOKED, significa que o sistema RCS for Business interrompeu as tentativas de entrega dessa mensagem específica. Você deve tratar essa mensagem como não entregue e prosseguir com sua estratégia de fallback, se necessário.Notificação TTL com qualquer outro status: Se você receber uma notificação TTL com qualquer outro status, isso indica uma tentativa de revogação inconclusiva.
- Para mensagens críticas, como senhas de uso único (OTPs), acione seu método alternativo.
- Para mensagens não críticas, decida se deve ou não iniciar o mecanismo de contingência.
- Sem notificações: Em casos excepcionais, o sistema pode não enviar uma notificação TTL e o cliente também pode não gerar uma notificação de entrega. Este é um caso extremamente raro.
Defina o tipo de tráfego de mensagens
A API RBM inclui um campo messageTrafficType para categorizar mensagens. Embora os casos de uso do agente ainda definam o comportamento do agente e quais regras de negócio se aplicam, messageTrafficType permite uma categorização mais detalhada do conteúdo da mensagem. Em última análise, isso possibilita que um único agente lide com múltiplos casos de uso. Não há impacto nos casos de uso ou regras de negócio existentes do agente neste momento.
Este campo é opcional, mas recomenda-se que você o preencha agora para evitar um erro quando ele se tornar obrigatório.
Para definir o tipo de tráfego da mensagem, atribua o messageTrafficType apropriado para cada mensagem com base em seu conteúdo. O RCS for Business suporta os seguintes tipos de tráfego.
| Tipo de tráfego | Conteúdo da mensagem | Caso de uso do agente |
|---|---|---|
AUTHENTICATION | Para mensagens de autenticação. | OTP |
TRANSACTION | Para mensagens referentes aos serviços ou produtos já utilizados pelo usuário. Por exemplo: confirmações, recibos de pagamento ou detalhes de reservas. | Transacional ou multiuso |
PROMOTION | Para mensagens promocionais como ofertas, descontos, anúncios ou outros conteúdos promocionais. | Promocional ou multiuso |
SERVICEREQUEST | Para mensagens referentes a serviços que o usuário solicitou explicitamente. | OTP, transacional, promocional ou multiuso |
ACKNOWLEDGEMENT | Para mensagens usadas para confirmar a ação de um usuário – especificamente uma solicitação de cancelamento de inscrição. Isso confirma que a solicitação do usuário foi recebida e está sendo processada. | OTP, transacional, promocional ou multiuso |
Se nenhum tipo de tráfego for definido, o sistema atribuirá o tipo padrão para o caso de uso do agente .
| Caso de uso do agente | Tipo de tráfego padrão |
|---|---|
| OTP | AUTHENTICATION |
| Transacional | TRANSACTION |
| Promocional | PROMOTION |
| Multiuso | MESSAGE_TRAFFIC_TYPE_UNSPECIFIED |
Agentes multiuso não possuem um tipo de tráfego padrão. Você deve definir o tipo de tráfego explicitamente para cada mensagem com base em seu conteúdo. Se você não substituir o valor MESSAGE_TRAFFIC_TYPE_UNSPECIFIED , ocorrerá um erro.
Limites de tamanho de mensagem
O tamanho máximo da mensagem AgentMessage em formato de string é de 250 KB. A parte textual da mensagem tem seu próprio limite de 3072 caracteres.
Para evitar consumo inesperado de dados para os usuários, o tamanho máximo de um arquivo que pode ser enviado por meio do RCS for Business é de 100 MiB, e o tamanho total combinado de todos os anexos de mídia e PDF em uma única mensagem RCS for Business não deve exceder 100 MiB. (1 MiB = 1.048.576 bytes). Para obter mais informações, consulte a seção sobre arquivos de mídia e PDF .
Texto
As mensagens mais simples são compostas de texto. As mensagens de texto são as mais adequadas para comunicar informações sem a necessidade de recursos visuais, interação complexa ou resposta.
Exemplo
O código a seguir envia uma mensagem de texto simples. Para opções de formatação e valores, consulte phones.agentMessages.create .
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentMessages?messageId=MESSAGE_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d '{ "contentMessage": { "text": "Hello, world!" }, "messageTrafficType": "PROMOTION" }'
Node.js
// Reference to RBM API helper const rbmApiHelper = require('@google/rcsbusinessmessaging'); let params = { messageText: 'Hello, world!', msisdn: '+12223334444', }; // Send a simple message to the device rbmApiHelper.sendMessage(params, function(response) { console.log(response); });
Java
import com.google.rbm.RbmApiHelper; … try { // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); // Send simple text message to user rbmApiHelper.sendTextMessage( "Hello, world!", "+12223334444" ); } catch(Exception e) { e.printStackTrace(); }
Python
# Reference to RBM Python client helper and messaging object structure from rcs_business_messaging import rbm_service from rcs_business_messaging import messages # Create a simple RBM text message message_text = messages.TextMessage('Hello, world!') # Send text message to the device messages.MessageCluster().append_message(message_text).send_to_msisdn('+12223334444')
C#
using RCSBusinessMessaging; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(credentialsFileLocation, projectId); rbmApiHelper.SendTextMessage( "Hello, world!", "+12223334444", );
Conteúdo básico da mensagem - conversão de SMS
As operadoras introduziram modelos de faturamento para dar suporte à migração de mensagens SMS para o RCS for Business. Uma mensagem RCS for Business contendo até 160 caracteres UTF-8 é chamada de Mensagem Básica.
Ao construir uma solicitação para enviar uma Mensagem Básica, lembre-se de que os caracteres são contados como 1 byte (UTF-8). Se você enviar uma mensagem contendo caracteres especiais, como emojis ou um conjunto de caracteres multibyte, cada caractere contará como 2 a 4 caracteres UTF-8 ou mais.
Digite algum texto na caixa para verificar seu comprimento:
Conteúdo da mensagem de texto e pré-visualizações de links
Os clientes RCS podem implementar pré-visualizações de links. Se uma mensagem RCS for Business somente de texto incluir um URL para um site com tags OpenGraph , o cliente poderá gerar uma pré-visualização (imagem, título etc.), proporcionando uma experiência mais rica. Por exemplo, veja uma mensagem básica com uma pré-visualização de URL .
Tenha em atenção que o cliente RCS pode permitir ao utilizador desativar as pré-visualizações de links.
Senhas de uso único para verificação de usuários
Você pode usar o RCS for Business para enviar senhas de uso único (OTPs) para verificação automática de usuários com a API SMS Retriever. Não existe uma API dedicada para leitura de OTPs recebidas via RCS for Business.
Como funciona no Android
Para aplicativos Android registrados na API SMS Retriever , a API aguarda uma mensagem RCS for Business formatada corretamente. Essa mensagem deve conter o OTP e um hash exclusivo que identifique seu aplicativo.
Quando uma mensagem RCS for Business é recebida com o formato correto, a API SMS Retriever a processa da mesma forma que um SMS OTP. Após o hash ser associado ao seu aplicativo, o OTP é extraído e encaminhado para o seu aplicativo para verificação automática do usuário.
- Exemplo de mensagem de texto RCS for Business para verificação de usuário:
Your code is <OTP><app hash>. - Exemplo:
Your code is 123456 M8tue43FGT.
Para saber mais sobre o SMS Retriever e as APIs relacionadas, consulte a documentação do SMS Retriever . Para obter detalhes sobre a verificação automática de usuários em aplicativos registrados na API do SMS Retriever, consulte este fluxograma .
Como funciona no iOS
Para iOS, o sistema integrado de tratamento de OTP detecta e sugere automaticamente OTPs RCS para Empresas para preenchimento automático, assim como acontece com os OTPs por SMS. Não é necessária nenhuma integração de API específica para que o aplicativo iOS leia o OTP.
Arquivos de mídia e PDF
Ao enviar uma mensagem com uma imagem, vídeo, áudio ou arquivo PDF, seu agente deve fornecer um URL publicamente acessível para o conteúdo ou fazer o upload do arquivo diretamente.
O tamanho máximo de um arquivo que pode ser enviado é de 100 MiB, e o tamanho total combinado de todos os anexos de mídia e PDF em uma única mensagem não deve exceder 100 MiB.
Compressão e transcodificação de mídia
A plataforma RCS for Business transcodifica e comprime automaticamente arquivos de mídia (como imagens e vídeos) antes de enviá-los, garantindo que carreguem rapidamente e funcionem bem em diferentes redes e dispositivos.
A compressão é baseada na qualidade da mídia de entrada, e não estritamente em limites de tamanho de arquivo. Isso significa que um arquivo pode ser comprimido mesmo que seu tamanho seja bem inferior ao limite máximo de 100 MiB. Os padrões de transcodificação mudam constantemente, portanto, não há um limite fixo de tamanho de arquivo que determine quando a transcodificação é ignorada. Experimente diferentes formatos de mídia, dimensões e taxas de compressão para encontrar o equilíbrio ideal para seus arquivos.
Especificações da miniatura
Para arquivos de mídia, você também pode especificar uma imagem em miniatura que permite aos usuários visualizar o conteúdo antes de clicar nele. Para arquivos de áudio, o widget de áudio padrão é usado como um marcador de posição.
- O tamanho máximo de um arquivo em miniatura é de 100 kB. Para uma melhor experiência do usuário, recomendamos que o tamanho seja de 50 kB ou menos.
- A proporção da miniatura deve corresponder à proporção do arquivo original.
Gerenciamento de cache e URLs
A plataforma RCS for Business armazena arquivos em cache por 60 dias, e a API retorna um ID de arquivo que seu agente pode incluir em mensagens para os usuários. Após 60 dias, o RCS for Business remove os arquivos do cache.
Ao especificar arquivos por URL, a melhor prática é definir contentMessage.forceRefresh como false . Definir contentMessage.forceRefresh como true força o RCS for Business a buscar novo conteúdo da URL especificada, mesmo que o conteúdo da URL esteja em cache, o que aumenta o tempo de entrega das mensagens para os usuários.
Exemplo de URL de arquivo
O código a seguir envia uma imagem. Para opções de formatação e valores, consulte AgentContentMessage .
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentMessages?messageId=MESSAGE_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d '{ "contentMessage": { "contentInfo": { "fileUrl": "http://www.google.com/logos/doodles/2015/googles-new-logo-5078286822539264.3-hp2x.gif", "forceRefresh": false } } }'
Node.js
// Reference to RBM API helper const rbmApiHelper = require('@google/rcsbusinessmessaging'); let params = { fileUrl: 'http://www.google.com/logos/doodles/2015/googles-new-logo-5078286822539264.3-hp2x.gif', msisdn: '+12223334444', }; // Send an image/video to a device rbmApiHelper.sendMessage(params, function(response) { console.log(response); });
Java
import com.google.api.services.rcsbusinessmessaging.v1.model.AgentContentMessage; import com.google.api.services.rcsbusinessmessaging.v1.model.AgentMessage; import com.google.rbm.RbmApiHelper; … try { // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); String fileUrl = "http://www.google.com/logos/doodles/2015/googles-new-logo-5078286822539264.3-hp2x.gif"; // create media only message AgentContentMessage agentContentMessage = new AgentContentMessage(); agentContentMessage.setContentInfo(new ContentInfo().setFileUrl(fileUrl)); // attach content to message AgentMessage agentMessage = new AgentMessage(); agentMessage.setContentMessage(agentContentMessage); rbmApiHelper.sendAgentMessage(agentMessage, "+12223334444"); } catch(Exception e) { e.printStackTrace(); }
Python
# Reference to RBM Python client helper and messaging object structure from rcs_business_messaging import rbm_service from rcs_business_messaging import messages # Create media file attachment file_message = messages.FileMessage('http://www.google.com/logos/doodles/2015/googles-new-logo-5078286822539264.3-hp2x.gif') messages.MessageCluster().append_message(file_message).send_to_msisdn('+12223334444')
C#
using Google.Apis.RCSBusinessMessaging.v1.Data; using RCSBusinessMessaging; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(credentialsFileLocation, projectId); string fileUrl = "http://www.google.com/logos/doodles/2015/googles-new-logo-5078286822539264.3-hp2x.gif"; // Create content info with the file url ContentInfo contentInfo = new ContentInfo { FileUrl = fileUrl }; // Attach content info to a message AgentContentMessage agentContentMessage = new AgentContentMessage { ContentInfo = contentInfo, }; // Attach content to message AgentMessage agentMessage = new AgentMessage { ContentMessage = agentContentMessage }; rbmApiHelper.SendAgentMessage(agentMessage, "+12223334444");
Alternativamente, você pode fazer o upload da mídia antes de enviá-la em uma mensagem com files.create .
Exemplo de upload de arquivo
O código a seguir carrega um arquivo de vídeo e um arquivo de miniatura e, em seguida, envia ambos os arquivos em uma mensagem. Para opções de formatação e valores, consulte files.create e AgentContentMessage .
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/upload/v1/files?agentId=AGENT_ID" \ -H "Content-Type: video/mp4" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ --upload-file "FULL_PATH_TO_VIDEO_MEDIA_FILE"# Capture server-specified video file name from response body JSONcurl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/upload/v1/files?agentId=AGENT_ID" \ -H "Content-Type: image/jpeg" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ --upload-file "FULL_PATH_TO_THUMBNAIL_MEDIA_FILE"# Capture server-specified image file name from response body JSONcurl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentMessages?messageId=MESSAGE_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d '{ "contentMessage": { "uploadedRbmFile": { "fileName": "SERVER-SPECIFIED_VIDEO_FILE_NAME", "thumbnailName": "SERVER-SPECIFIED_THUMBNAIL_FILE_NAME" } } }'
Tipos de mídia suportados
O RCS for Business suporta os seguintes tipos de mídia. Para miniaturas, somente os formatos image/jpeg, image/jpg, image/gif e image/png são suportados.
| Tipo de mídia | Tipo de documento | Extensão | Funciona com cartões de memória ricos. |
|---|---|---|---|
| aplicação/ogg | Áudio OGG | .ogx | Não |
| aplicação/pdf | Sim (somente para o Google Mensagens na Índia) | ||
| áudio/aac | Áudio AAC | .aac | Não |
| áudio/mp3 | Áudio MP3 | .mp3 | Não |
| áudio/mpeg | áudio MPEG | .mpeg | Não |
| áudio/mpg | Áudio MPG | .mp3 | Não |
| áudio/mp4 | Áudio MP4 | .mp4 | Não |
| áudio/mp4-latm | Áudio MP4-latm | .mp4 | Não |
| áudio/3gpp | Áudio 3GPP | .3gp | Não |
| imagem/jpeg | JPEG | .jpeg, .jpg | Sim |
| imagem/gif | GIF | .gif | Sim |
| imagem/png | PNG | .png | Sim |
| vídeo/h263 | Vídeo H263 | .h263 | Sim |
| vídeo/m4v | Vídeo M4V | .m4v | Sim |
| vídeo/mp4 | Vídeo MP4 | .mp4 | Sim |
| vídeo/mpeg4 | Vídeo MPEG-4 | .mp4, .m4p | Sim |
| vídeo/mpeg | Vídeo MPEG | .mpeg | Sim |
| vídeo/webm | Vídeo WEBM | .webm | Sim |
Sugestões
Seu agente envia sugestões (respostas sugeridas e ações sugeridas) em listas de sugestões ou em cartões interativos .
Respostas sugeridas
As respostas sugeridas orientam os usuários durante as conversas, fornecendo respostas às quais seu agente sabe como reagir.
Quando um usuário toca em uma resposta sugerida, seu agente recebe um evento que contém o texto da resposta e os dados de retorno . A carga útil tem um máximo de 2048 caracteres.
Exemplo
O código a seguir envia um texto com duas respostas sugeridas. Para opções de formatação e valores, consulte SuggestedReply .
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentMessages?messageId=MESSAGE_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d '{ "contentMessage": { "text": "Hello, world!", "suggestions": [ { "reply": { "text": "Suggestion #1", "postbackData": "suggestion_1" } }, { "reply": { "text": "Suggestion #2", "postbackData": "suggestion_2" } } ] } }'
Node.js
// Reference to RBM API helper const rbmApiHelper = require('@google/rcsbusinessmessaging'); let suggestions = [ { reply: { 'text': 'Suggestion #1', 'postbackData': 'suggestion_1', }, }, { reply: { 'text': 'Suggestion #2', 'postbackData': 'suggestion_2', }, }, ]; let params = { messageText: 'Hello, world!', msisdn: '+12223334444', suggestions: suggestions, }; // Send a simple message with suggestion chips to the device rbmApiHelper.sendMessage(params, function(response) { console.log(response); });
Java
import com.google.api.services.rcsbusinessmessaging.v1.model.Suggestion; import com.google.rbm.RbmApiHelper; import com.google.rbm.SuggestionHelper; … try { // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); // Create suggestions for chip list List<Suggestion> suggestions = new ArrayList<Suggestion>(); suggestions.add( new SuggestionHelper("Suggestion #1", "suggestion_1").getSuggestedReply()); suggestions.add( new SuggestionHelper("Suggestion #2", "suggestion_2").getSuggestedReply()); // Send simple text message to user rbmApiHelper.sendTextMessage( "Hello, world!", "+12223334444", suggestions ); } catch(Exception e) { e.printStackTrace(); }
Python
# Reference to RBM Python client helper and messaging object structure from rcs_business_messaging import rbm_service from rcs_business_messaging import messages # Create text message to send to user text_msg = messages.TextMessage('Hello, world!') cluster = messages.MessageCluster().append_message(text_msg) # Append suggested replies for the message to send to the user cluster.append_suggestion_chip(messages.SuggestedReply('Suggestion #1', 'reply:suggestion_1')) cluster.append_suggestion_chip(messages.SuggestedReply('Suggestion #2', 'reply:suggestion_2')) # Send a simple message with suggestion chips to the device cluster.send_to_msisdn('+12223334444')
C#
using Google.Apis.RCSBusinessMessaging.v1.Data; using RCSBusinessMessaging; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(credentialsFileLocation, projectId); List<Suggestion> suggestions = new List<Suggestion> { // Create suggestion chips new SuggestionHelper("Suggestion #1", "suggestion_1").SuggestedReply(), new SuggestionHelper("Suggestion #2", "suggestion_2").SuggestedReply() }; // Send simple text message with suggestions to user rbmApiHelper.SendTextMessage( "Hello, world!", "+12223334444", suggestions );
Ações sugeridas
As ações sugeridas guiam os usuários pelas conversas, aproveitando as funcionalidades integradas de seus dispositivos. Seu agente pode sugerir que os usuários disquem um número, abram um local em um mapa, compartilhem um local, abram um URL ou criem um evento na agenda.
Para cada ação sugerida, você pode fornecer opcionalmente um URL alternativo (máximo de 2048 caracteres). Este URL será aberto em uma nova janela do navegador caso o dispositivo do usuário não seja compatível com a ação sugerida.
Quando um usuário toca em uma ação sugerida, seu agente recebe um evento que contém os dados de retorno da ação .
Para opções de formatação e valores, consulte SuggestedAction .
Exibição de sugestões
Existem duas maneiras de exibir sugestões:
- Persistente : Ações ou respostas sugeridas que são exibidas dentro do balão de mensagem e permanecem fixas durante toda a conversa.
- Transiente : Sugestões que são exibidas fora do balão de mensagem e desaparecem quando a conversa continua.
Formatos de mensagem suportados
- Sugestões persistentes: Funcionam com mensagens de texto independentes e cartões interativos.
- Sugestões temporárias: Trabalhe com mensagens de texto independentes, mensagens multimídia e cartões interativos.
Combine as sugestões
Você pode combinar sugestões persistentes e temporárias na mesma mensagem ou cartão interativo.
- Mensagens de texto: As sugestões são temporárias por padrão. Para que permaneçam dentro do balão, você precisa configurá-las como persistentes.
- Cartões avançados: Por padrão, suportam até quatro sugestões persistentes. Você pode adicionar sugestões temporárias como uma "lista de sugestões" abaixo do cartão.
Limites de sugestão
Uma única mensagem de texto suporta um máximo de 11 sugestões no total. Quaisquer sugestões persistentes que você incluir contam para esse limite total. Por exemplo, se você incluir 4 sugestões persistentes, poderá adicionar até 7 sugestões temporárias.
| Tipo de sugestão | Limite | Onde eles aparecem |
|---|---|---|
| Persistente | Até 4 | Dentro do balão de mensagem |
| Transitório | Até 11 | Fora da bolha (como batatas fritas) |
Limite de caracteres
Cada sugestão tem um máximo de 25 caracteres.
Transparência de URLs em ações sugeridas
Para gerar confiança do usuário, o URL subjacente é exibido como uma segunda linha de texto dentro do botão de sugestão para as ações sugeridas "Abrir um URL". Esse comportamento consistente se aplica a mensagens de texto independentes, cartões interativos e carrosséis.
Apoiei clientes com sugestões persistentes.
- Compatível com: Google Mensagens (versão
20260225.00ou posterior). - Não compatível com: versões do Google Mensagens anteriores à
20260225.00, iOS e Samsung Mensagens.
Disque um número
A ação Discar orienta o usuário a discar um número de telefone especificado pelo seu agente. Os números de telefone podem incluir apenas dígitos ( 0-9 ), sinal de mais ( + ), asterisco ( * ) e símbolo de número ( # ). O formato internacional E.164 (por exemplo, +14155555555 ) é compatível, mas não obrigatório. Ou seja, tanto +14155555555 quanto 1011 são entradas válidas.
Exemplo
O código a seguir envia uma ação de discagem. Para opções de formatação e valor, consulte DialAction .
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentMessages?messageId=MESSAGE_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d '{ "contentMessage": { "text": "Hello, world!", "suggestions": [ { "action": { "text": "Call", "postbackData": "postback_data_1234", "fallbackUrl": "https://www.google.com/contact/", "dialAction": { "phoneNumber": "+15556667777" } } } ] } }'
Node.js
// Reference to RBM API helper const rbmApiHelper = require('@google/rcsbusinessmessaging'); // Define a dial suggested action let suggestions = [ { action: { text: 'Call', postbackData: 'postback_data_1234', dialAction: { phoneNumber: '+15556667777' } } }, ]; let params = { messageText: 'Hello, world!', msisdn: '+12223334444', suggestions: suggestions, }; // Send a simple message with a dial suggested action rbmApiHelper.sendMessage(params, function(response) { console.log(response); });
Java
import com.google.api.services.rcsbusinessmessaging.v1.model.DialAction; import com.google.api.services.rcsbusinessmessaging.v1.model.SuggestedAction; import com.google.api.services.rcsbusinessmessaging.v1.model.Suggestion; import com.google.rbm.RbmApiHelper; … try { // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); // Create suggestions for chip list List<Suggestion> suggestions = new ArrayList<Suggestion>(); // creating a dial suggested action DialAction dialAction = new DialAction(); dialAction.setPhoneNumber("+15556667777"); // creating a suggested action based on a dial action SuggestedAction suggestedAction = new SuggestedAction(); suggestedAction.setText("Call"); suggestedAction.setPostbackData("postback_data_1234"); suggestedAction.setDialAction(dialAction); // attaching action to a suggestion Suggestion suggestion = new Suggestion(); suggestion.setAction(suggestedAction); suggestions.add(suggestion); // Send simple text message with the suggestion action rbmApiHelper.sendTextMessage( "Hello, world!", "+12223334444", suggestions ); } catch(Exception e) { e.printStackTrace(); }
Python
# Reference to RBM Python client helper and messaging object structure from rcs_business_messaging import rbm_service from rcs_business_messaging import messages # Create a dial suggested action suggestions = [ messages.DialAction('Call', 'reply:postback_data_1234', '+15556667777') ] # Create text message to send to user text_msg = messages.TextMessage('Hello, world!') cluster = messages.MessageCluster().append_message(text_msg) # Append suggestions for the message to send to the user for suggestion in suggestions: cluster.append_suggestion_chip(suggestion) # Send a simple message with suggested action to the device cluster.send_to_msisdn('+12223334444')
C#
using Google.Apis.RCSBusinessMessaging.v1.Data; using RCSBusinessMessaging; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(credentialsFileLocation, projectId); // Create a dial an agent suggested action DialAction dialAction = new DialAction { PhoneNumber = "+15556667777" }; // Creating a suggested action based on a dial action SuggestedAction suggestedAction = new SuggestedAction { Text = "Call", PostbackData = "postback_data_1234", DialAction = dialAction }; // Attach action to a suggestion Suggestion suggestion = new Suggestion { Action = suggestedAction }; List<Suggestion> suggestions = new List<Suggestion> { suggestion }; rbmApiHelper.SendTextMessage( "Hello, world!", "+12223334444", suggestions );
Veja um local
A ação "Exibir localização" mostra uma localização no aplicativo de mapas padrão do usuário. Você pode especificar a localização por latitude e longitude ou com uma consulta baseada na localização atual do usuário. Você também pode definir um rótulo personalizado para o marcador exibido no aplicativo de mapas.
Exemplo
O código a seguir envia uma ação de localização de visualização. Para opções de formatação e valor, consulte ViewLocationAction .
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentMessages?messageId=MESSAGE_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d '{ "contentMessage": { "text": "Hello, world!", "suggestions": [ { "action": { "text": "View map", "postbackData": "postback_data_1234", "fallbackUrl": "https://www.google.com/maps/@37.4220188,-122.0844786,15z", "viewLocationAction": { "latLong": { "latitude": "37.4220188", "longitude": "-122.0844786" }, "label": "Googleplex" } } } ] } }'
Node.js
// Reference to RBM API helper const rbmApiHelper = require('@google/rcsbusinessmessaging'); // Define a view location suggested action let suggestions = [ { action: { text: 'View map', postbackData: 'postback_data_1234', viewLocationAction: { latLong: { latitude: 37.4220188, longitude: -122.0844786 }, label: 'Googleplex' } } }, ]; let params = { messageText: 'Hello, world!', msisdn: '+12223334444', suggestions: suggestions, }; // Send a simple message with a view location suggested action rbmApiHelper.sendMessage(params, function(response) { console.log(response); });
Java
import com.google.api.services.rcsbusinessmessaging.v1.model.ViewLocationAction; import com.google.api.services.rcsbusinessmessaging.v1.model.SuggestedAction; import com.google.api.services.rcsbusinessmessaging.v1.model.Suggestion; import com.google.rbm.RbmApiHelper; … try { // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); // Create suggestions for chip list List<Suggestion> suggestions = new ArrayList<Suggestion>(); // creating a view location suggested action ViewLocationAction viewLocationAction = new ViewLocationAction(); viewLocationAction.setQuery("Googleplex, Mountain View, CA"); // creating a suggested action based on a view location action SuggestedAction suggestedAction = new SuggestedAction(); suggestedAction.setText("View map"); suggestedAction.setPostbackData("postback_data_1234"); suggestedAction.setViewLocationAction(viewLocationAction); // attaching action to a suggestion Suggestion suggestion = new Suggestion(); suggestion.setAction(suggestedAction); suggestions.add(suggestion); // Send simple text message with the suggestion action rbmApiHelper.sendTextMessage( "Hello, world!", "+12223334444", suggestions ); } catch(Exception e) { e.printStackTrace(); }
Python
# Reference to RBM Python client helper and messaging object structure from rcs_business_messaging import rbm_service from rcs_business_messaging import messages # Create a view location suggested action suggestions = [ messages.ViewLocationAction('View map', 'reply:postback_data_1234', query='Googleplex, Mountain View, CA') ] # Create text message to send to user text_msg = messages.TextMessage('Hello, world!') cluster = messages.MessageCluster().append_message(text_msg) # Append suggestions for the message to send to the user for suggestion in suggestions: cluster.append_suggestion_chip(suggestion) # Send a simple message with suggested action to the device cluster.send_to_msisdn('+12223334444')
C#
using Google.Apis.RCSBusinessMessaging.v1.Data; using RCSBusinessMessaging; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(credentialsFileLocation, projectId); // create an view location action ViewLocationAction viewLocationAction = new ViewLocationAction { Query = "Googleplex Mountain View, CA" }; // Attach the view location action to a suggested action SuggestedAction suggestedAction = new SuggestedAction { ViewLocationAction = viewLocationAction, Text = "View map", PostbackData = "postback_data_1234" }; // Attach the action to a suggestion object Suggestion suggestion = new Suggestion { Action = suggestedAction }; List<Suggestion> suggestions = new List<Suggestion> { suggestion }; rbmApiHelper.SendTextMessage( "Hello, world!", "+12223334444", suggestions );
Compartilhe um local
A ação Compartilhar Localização permite que o usuário compartilhe uma localização com seu agente. O usuário pode compartilhar sua localização atual ou uma localização selecionada manualmente no aplicativo Mapas.
Exemplo
O código a seguir envia uma ação de compartilhamento de localização. Para opções de formatação e valor, consulte ShareLocationAction .
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentMessages?messageId=MESSAGE_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d '{ "contentMessage": { "text": "Hello, world!", "suggestions": [ { "action": { "text": "Share your location", "postbackData": "postback_data_1234", "shareLocationAction": {} } } ] } }'
Node.js
// Reference to RBM API helper const rbmApiHelper = require('@google/rcsbusinessmessaging'); // Define a share location suggested action let suggestions = [ { action: { text: 'Share your location', postbackData: 'postback_data_1234', shareLocationAction: { } } }, ]; let params = { messageText: 'Hello, world!', msisdn: '+12223334444', suggestions: suggestions, }; // Send a simple message with a share location suggested action rbmApiHelper.sendMessage(params, function(response) { console.log(response); });
Java
import com.google.api.services.rcsbusinessmessaging.v1.model.ShareLocationAction; import com.google.api.services.rcsbusinessmessaging.v1.model.SuggestedAction; import com.google.api.services.rcsbusinessmessaging.v1.model.Suggestion; import com.google.rbm.RbmApiHelper; … try { // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); // Create suggestions for chip list List<Suggestion> suggestions = new ArrayList<Suggestion>(); // creating a share location suggested action ShareLocationAction shareLocationAction = new ShareLocationAction(); // creating a suggested action based on a share location action SuggestedAction suggestedAction = new SuggestedAction(); suggestedAction.setText("Share location"); suggestedAction.setPostbackData("postback_data_1234"); suggestedAction.setShareLocationAction(shareLocationAction); // attaching action to a suggestion Suggestion suggestion = new Suggestion(); suggestion.setAction(suggestedAction); suggestions.add(suggestion); // Send simple text message with the suggestion action rbmApiHelper.sendTextMessage( "Hello, world!", "+12223334444", suggestions ); } catch(Exception e) { e.printStackTrace(); }
Python
# Reference to RBM Python client helper and messaging object structure from rcs_business_messaging import rbm_service from rcs_business_messaging import messages # Create a share location suggested action suggestions = [ messages.ShareLocationAction('Share location', 'reply:postback_data_1234') ] # Create text message to send to user text_msg = messages.TextMessage('Hello, world!') cluster = messages.MessageCluster().append_message(text_msg) # Append suggestions for the message to send to the user for suggestion in suggestions: cluster.append_suggestion_chip(suggestion) # Send a simple message with suggested action to the device cluster.send_to_msisdn('+12223334444')
C#
using Google.Apis.RCSBusinessMessaging.v1.Data; using RCSBusinessMessaging; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(credentialsFileLocation, projectId); // Create a share location action ShareLocationAction shareLocationAction = new ShareLocationAction(); // Attach the share location action to a suggested action SuggestedAction suggestedAction = new SuggestedAction { ShareLocationAction = shareLocationAction, Text = "Share location", PostbackData = "postback_data_1234" }; // Attach the action to a suggestion object Suggestion suggestion = new Suggestion { Action = suggestedAction }; List<Suggestion> suggestions = new List<Suggestion> { suggestion }; rbmApiHelper.SendTextMessage( "Hello, world!", "+12223334444", suggestions );
Abrir URL
A ação Abrir URL permite direcionar os usuários para uma página da web especificada pelo seu agente. Por padrão, a página da web é aberta no navegador do usuário. Você também pode configurar a página da web para ser aberta em uma visualização da web. Consulte Abrir uma URL com visualização da web para obter detalhes.
Somente no Google Mensagens
Exibição do URL subjacente : Para maior transparência nas mensagens A2P, o Google Mensagens exibe o endereço URL subjacente nas ações sugeridas em "Abrir um URL". Essa alteração afeta as ações sugeridas em rich cards padrão e carrosséis de rich cards .

Exibição do ícone do aplicativo para links da web : Se um usuário tiver um aplicativo padrão configurado para a página da web, esse aplicativo será aberto em vez do navegador ou da visualização da web, e o botão de sugestão exibirá o ícone do aplicativo. Para que o ícone do aplicativo apareça no Google Mensagens, você precisa fornecer o URL completo e direto. Se você usar um URL encurtado, o ícone padrão "Abrir URL" será exibido.

Exemplo
O código a seguir envia uma ação de abrir URL. Para opções de formatação e valor, consulte OpenUrlAction .
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentMessages?messageId=MESSAGE_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d '{ "contentMessage": { "text": "Hello, world!", "suggestions": [ { "action": { "text": "Open Google", "postbackData": "postback_data_1234", "openUrlAction": { "url": "https://www.google.com" } } } ] } }'
Node.js
// Reference to RBM API helper const rbmApiHelper = require('@google/rcsbusinessmessaging'); // Define an open URL suggested action let suggestions = [ { action: { text: 'Open Google', postbackData: 'postback_data_1234', openUrlAction: { url: 'https://www.google.com' } } }, ]; let params = { messageText: 'Hello, world!', msisdn: '+12223334444', suggestions: suggestions, }; // Send a simple message with an open URL suggested action rbmApiHelper.sendMessage(params, function(response) { console.log(response); });
Java
import com.google.api.services.rcsbusinessmessaging.v1.model.OpenUrlAction; import com.google.api.services.rcsbusinessmessaging.v1.model.SuggestedAction; import com.google.api.services.rcsbusinessmessaging.v1.model.Suggestion; import com.google.rbm.RbmApiHelper; … try { // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); // Create suggestions for chip list List<Suggestion> suggestions = new ArrayList<Suggestion>(); // creating an open url suggested action OpenUrlAction openUrlAction = new OpenUrlAction(); openUrlAction.setUrl("https://www.google.com"); // creating a suggested action based on an open url action SuggestedAction suggestedAction = new SuggestedAction(); suggestedAction.setText("Open Google"); suggestedAction.setPostbackData("postback_data_1234"); suggestedAction.setOpenUrlAction(openUrlAction); // attaching action to a suggestion Suggestion suggestion = new Suggestion(); suggestion.setAction(suggestedAction); suggestions.add(suggestion); // Send simple text message with the suggestion action rbmApiHelper.sendTextMessage( "Hello, world!", "+12223334444", suggestions ); } catch(Exception e) { e.printStackTrace(); }
Python
# Reference to RBM Python client helper and messaging object structure from rcs_business_messaging import rbm_service from rcs_business_messaging import messages # Create an open url suggested action suggestions = [ messages.OpenUrlAction('Open Google', 'reply:postback_data_1234', 'https://www.google.com') ] # Create text message to send to user text_msg = messages.TextMessage('Hello, world!') cluster = messages.MessageCluster().append_message(text_msg) # Append suggestions for the message to send to the user for suggestion in suggestions: cluster.append_suggestion_chip(suggestion) # Send a simple message with suggested action to the device cluster.send_to_msisdn('+12223334444')
C#
using Google.Apis.RCSBusinessMessaging.v1.Data; using RCSBusinessMessaging; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(credentialsFileLocation, projectId); // Create an open url action OpenUrlAction openUrlAction = new OpenUrlAction { Url = "https://www.google.com" }; // Attach the open url action to a suggested action SuggestedAction suggestedAction = new SuggestedAction { OpenUrlAction = openUrlAction, Text = "Open Google", PostbackData = "postback_data_1234" }; // Attach the action to a suggestion object Suggestion suggestion = new Suggestion { Action = suggestedAction }; List<Suggestion> suggestions = new List<Suggestion> { suggestion }; rbmApiHelper.SendTextMessage( "Hello, world!", "+12223334444", suggestions );
Abrir um URL com visualização da web
A ação Abrir URL com visualização da Web carrega a página da Web especificada dentro do aplicativo de mensagens, usando o mecanismo de renderização do navegador padrão. Isso permite que o usuário interaja com a página da Web sem sair da conversa do RCS for Business. Se o dispositivo do usuário não for compatível com visualizações da Web, a página será aberta no navegador do usuário. Para habilitar visualizações da Web, consulte OpenURLApplication .
As WebViews possuem três modos de exibição. Para opções de formatação e valores, consulte WebviewViewMode .
- Completo: A página da web ocupa a tela inteira.
- Metade: A página da web ocupa metade da tela.
- Altura: A página da web ocupa três quartos da tela.
Exemplo
O código a seguir envia uma ação "Abrir URL com visualização da web". Para opções de formatação e valor, consulte OpenURLAction .
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentMessages?messageId=MESSAGE_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d '{ "contentMessage": { "text": "Hello, world!", "suggestions": [ { "action": { "text": "Open Google", "postbackData": "postback_data_1234", "openUrlAction": { "url": "https://www.google.com", "application": "WEBVIEW", "webviewViewMode": "FULL", "description": "Accessibility description" } } } ] } }'
Java
import com.google.api.services.rcsbusinessmessaging.v1.model.OpenUrlAction; import com.google.api.services.rcsbusinessmessaging.v1.model.SuggestedAction; import com.google.api.services.rcsbusinessmessaging.v1.model.Suggestion; import com.google.rbm.RbmApiHelper; … try { String URL = "https://www.google.com"; // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); // Create suggestions for chip list List<Suggestion> suggestions = new ArrayList<Suggestion>(); // Create suggestion to view webpage in full mode Suggestion viewInFullMode = getUrlActionInWebview(URL, "FULL") suggestions.add(viewInFullMode); // create suggestion to view webpage in half mode Suggestion viewInHalfMode = getUrlActionInWebview(URL, "HALF") suggestions.add(viewInHalfMode); // create suggestion to view webpage in tall mode Suggestion viewInTallMode = getUrlActionInWebview(URL, "TALL") suggestions.add(viewInTallMode); // Send simple text message with the suggested action rbmApiHelper.sendTextMessage( "Hello, world!", "+12223334444", suggestions ); } catch(Exception e) { e.printStackTrace(); } /** * Creates a suggested action to open URL in webview. * * @return a suggestion object for an open URL in webview action . */ private Suggestion getUrlActionInWebview(String url, String viewMode) { // create an open url action OpenUrlAction openUrlAction = new OpenUrlAction(); openUrlAction.setUrl(url); openUrlAction.setApplication("WEBVIEW"); openUrlAction.setWebviewViewMode(viewMode); openUrlAction.setDescription("Accessibility description"); // attach the open url action to a suggested action SuggestedAction suggestedAction = new SuggestedAction(); suggestedAction.setOpenUrlAction(openUrlAction); suggestedAction.setText('display_text'); suggestedAction.setPostbackData('postback_data_123'); // attach the action to a suggestion object Suggestion suggestion = new Suggestion(); suggestion.setAction(suggestedAction); return suggestion; }
Criar um evento no calendário
A ação Criar evento no calendário abre o aplicativo de calendário do usuário e inicia a criação de um novo evento com as informações especificadas.
É necessário um título para o evento no calendário. Ele pode ter no máximo 100 caracteres. A descrição do evento é opcional e pode ter no máximo 500 caracteres.
Exemplo
O código a seguir envia uma ação de criação de evento de calendário. Para opções de formatação e valores, consulte CreateCalendarEventAction .
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentMessages?messageId=MESSAGE_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d '{ "contentMessage": { "text": "Hello, world!", "suggestions": [ { "action": { "text": "Save to calendar", "postbackData": "postback_data_1234", "fallbackUrl": "https://www.google.com/calendar", "createCalendarEventAction": { "startTime": "2020-06-30T19:00:00Z", "endTime": "2020-06-30T20:00:00Z", "title": "My calendar event", "description": "Description of the calendar event" } } } ] } }'
Node.js
// Reference to RBM API helper const rbmApiHelper = require('@google/rcsbusinessmessaging'); // Define a create calendar event suggested action let suggestions = [ { action: { text: 'Save to calendar', postbackData: 'postback_data_1234', createCalendarEventAction: { startTime: '2020-06-30T19:00:00Z', endTime: '2020-06-30T20:00:00Z', title: 'My calendar event', description: 'Description of the calendar event', }, } }, ]; let params = { messageText: 'Hello, world!', msisdn: '+12223334444', suggestions: suggestions, }; // Send a simple message with a create calendar event suggested action rbmApiHelper.sendMessage(params, function(response) { console.log(response); });
Java
import com.google.api.services.rcsbusinessmessaging.v1.model.CreateCalendarEventAction; import com.google.api.services.rcsbusinessmessaging.v1.model.SuggestedAction; import com.google.api.services.rcsbusinessmessaging.v1.model.Suggestion; import com.google.rbm.RbmApiHelper; … try { // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); // Create suggestions for chip list List<Suggestion> suggestions = new ArrayList<Suggestion>(); // creating a create calendar event suggested action CreateCalendarEventAction createCalendarEventAction = new CreateCalendarEventAction(); calendarEventAction.setTitle("My calendar event"); calendarEventAction.setDescription("Description of the calendar event"); calendarEventAction.setStartTime("2020-06-30T19:00:00Z"); calendarEventAction.setEndTime("2020-06-30T20:00:00Z"); // creating a suggested action based on a create calendar event action SuggestedAction suggestedAction = new SuggestedAction(); suggestedAction.setText("Save to calendar"); suggestedAction.setPostbackData("postback_data_1234"); suggestedAction.setCreateCalendarEventAction(createCalendarEventAction); // attaching action to a suggestion Suggestion suggestion = new Suggestion(); suggestion.setAction(suggestedAction); suggestions.add(suggestion); // Send simple text message with the suggestion action rbmApiHelper.sendTextMessage( "Hello, world!", "+12223334444", suggestions ); } catch(Exception e) { e.printStackTrace(); }
Python
# Reference to RBM Python client helper and messaging object structure from rcs_business_messaging import rbm_service from rcs_business_messaging import messages # Create a calendar event suggested action suggestions = [ messages.CreateCalendarEventAction('Save to Calendar', 'reply:postback_data_1234', '2020-06-30T19:00:00Z', '2020-06-30T20:00:00Z', 'My calendar event', 'Description of the calendar event') ] # Create text message to send to user text_msg = messages.TextMessage('Hello, world!') cluster = messages.MessageCluster().append_message(text_msg) # Append suggestions for the message to send to the user for suggestion in suggestions: cluster.append_suggestion_chip(suggestion) # Send a simple message with suggested action to the device cluster.send_to_msisdn('+12223334444')
C#
using Google.Apis.RCSBusinessMessaging.v1.Data; using RCSBusinessMessaging; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(credentialsFileLocation, projectId); // Create a calendar event action CreateCalendarEventAction calendarEventAction = new CreateCalendarEventAction { Title = "My calendar event", Description = "Description of the calendar event", StartTime = "2020-06-30T19:00:00Z", EndTime = "2020-06-30T20:00:00Z" }; // Attach the calendar event action to a suggested action SuggestedAction suggestedAction = new SuggestedAction { CreateCalendarEventAction = calendarEventAction, Text = "Save to calendar", PostbackData = "postback_data_1234" }; // Attach the action to a suggestion object Suggestion suggestion = new Suggestion { Action = suggestedAction }; List<Suggestion> suggestions = new List<Suggestion> { suggestion }; rbmApiHelper.SendTextMessage( "Hello, world!", "+12223334444", suggestions );
Lista de sugestões de chips
Seu agente envia listas de sugestões com mensagens para orientar as ações subsequentes dos usuários. A lista de sugestões só é exibida quando a mensagem associada está no final da conversa. Quaisquer mensagens subsequentes na conversa (sejam de um usuário ou do seu agente) substituem a lista de sugestões.
Os itens da lista são sugestões de respostas e ações .
As listas de sugestões contêm no máximo 11 sugestões, e cada etiqueta de sugestão pode ter no máximo 25 caracteres.
Para opções de formatação e valores, consulte AgentContentMessage .
Cartões ricos
Os rich cards combinam mídia, texto e sugestões interativas em uma única mensagem. São ideais para apresentar informações relacionadas (por exemplo, um produto com sua imagem, nome e preço) e orientar os usuários com uma sugestão clara de próximo passo, como "Ver detalhes".
Um cartão rico pode conter o seguinte:
- Mídia (imagem, GIF ou vídeo)
- Texto do título
- Texto descritivo
- Respostas e ações sugeridas (máximo de 4)
Cada um desses campos é opcional, mas pelo menos um dos campos 1 a 3 deve ser incluído no cartão de informações.
Vários cartões podem ser enviados juntos em um carrossel com rolagem horizontal.
Note que a carga útil total para um cartão de memória de alta capacidade é de 250 KB.
Para obter detalhes técnicos completos, consulte a documentação dos cartões Rich .
Altura do cartão
Os cartões Rich expandem-se verticalmente para acomodar seu conteúdo. Eles têm uma altura mínima de 112 DP e uma altura máxima de 344 DP. Se o conteúdo do cartão não for grande o suficiente para preencher a altura mínima, o cartão expande-se e preenche a altura extra com espaço em branco.
O conteúdo multimídia em rich cards deve se adequar a uma das três alturas:
- Curto: 112 DP
- Médio: 168 DP
- Altura: 264 DP
Se a mídia não couber nas dimensões do cartão, considerando a altura selecionada, a pré-visualização da mídia será escolhida aplicando zoom e recortando a imagem.
Exemplo
O código a seguir envia um cartão interativo com uma imagem e sugestões de resposta. Para opções de formatação e valores, consulte RichCard .
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentMessages?messageId=MESSAGE_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d '{ "contentMessage": { "richCard": { "standaloneCard": { "thumbnailImageAlignment": "RIGHT", "cardOrientation": "VERTICAL", "cardContent": { "title": "Hello, world!", "description": "RBM is awesome!", "media": { "height": "TALL", "contentInfo":{ "fileUrl": "http://www.google.com/logos/doodles/2015/googles-new-logo-5078286822539264.3-hp2x.gif", "forceRefresh": false } }, "suggestions": [ { "reply": { "text": "Suggestion #1", "postbackData": "suggestion_1" } }, { "reply": { "text": "Suggestion #2", "postbackData": "suggestion_2" } } ] } } } } }'
Node.js
// Reference to RBM API helper const rbmApiHelper = require('@google/rcsbusinessmessaging'); // Suggested replies to be used in the card let suggestions = [ { reply: { 'text': 'Suggestion #1', 'postbackData': 'suggestion_1', }, }, { reply: { 'text': 'Suggestion #2', 'postbackData': 'suggestion_2', }, }, ]; // Image to be displayed by the card let imageUrl = 'http://www.google.com/logos/doodles/2015/googles-new-logo-5078286822539264.3-hp2x.gif'; // Definition of the card parameters let params = { messageText: 'Hello, world!', messageDescription: 'RBM is awesome!', msisdn: '+12223334444', suggestions: suggestions, imageUrl: imageUrl, height: 'TALL', }; // Send rich card to device rbmApiHelper.sendRichCard(params, function(response) { console.log(response); });
Java
import com.google.api.services.rcsbusinessmessaging.v1.model.StandaloneCard; import com.google.api.services.rcsbusinessmessaging.v1.model.Suggestion; import com.google.rbm.cards.CardOrientation; import com.google.rbm.cards.MediaHeight; import com.google.rbm.RbmApiHelper; import com.google.rbm.SuggestionHelper; … try { // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); // Create suggestions for chip list List<Suggestion> suggestions = new ArrayList<Suggestion>(); suggestions.add( new SuggestionHelper("Suggestion #1", "suggestion_1").getSuggestedReply()); suggestions.add( new SuggestionHelper("Suggestion #2", "suggestion_2").getSuggestedReply()); String imageUrl = "http://www.google.com/logos/doodles/2015/googles-new-logo-5078286822539264.3-hp2x.gif"; // Create a standalone rich card to send to the user StandaloneCard standaloneCard = rbmApiHelper.createStandaloneCard( "Hello, world!", "RBM is awesome!", imageUrl, MediaHeight.MEDIUM, CardOrientation.VERTICAL, suggestions ); rbmApiHelper.sendStandaloneCard(standaloneCard, "+12223334444"); } catch(Exception e) { e.printStackTrace(); }
Python
# Reference to RBM Python client helper and messaging object structure from rcs_business_messaging import rbm_service from rcs_business_messaging import messages # Suggested replies to be used in the card suggestions = [ messages.SuggestedReply('Suggestion #1', 'reply:suggestion_1'), messages.SuggestedReply('Suggestion #2', 'reply:suggestion_2') ] # Image to be displayed by the card image_url = 'http://www.google.com/logos/doodles/2015/googles-new-logo-5078286822539264.3-hp2x.gif'; # Define rich card structure rich_card = messages.StandaloneCard('VERTICAL', 'Hello, world!', 'RBM is awesome!', suggestions, image_url, None, None, 'MEDIUM') # Append rich card and send to the user cluster = messages.MessageCluster().append_message(rich_card) cluster.send_to_msisdn('+12223334444')
C#
using Google.Apis.RCSBusinessMessaging.v1.Data; using RCSBusinessMessaging; using RCSBusinessMessaging.Cards; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(credentialsFileLocation, projectId); List<Suggestion> suggestions = new List<Suggestion> { // Create suggestion chips new SuggestionHelper("Suggestion #1", "suggestion_1").SuggestedReply(), new SuggestionHelper("Suggestion #2", "suggestion_2").SuggestedReply() }; string imageUrl = "http://www.google.com/logos/doodles/2015/googles-new-logo-5078286822539264.3-hp2x.gif"; // Create rich card with suggestions StandaloneCard standaloneCard = rbmApiHelper.CreateStandaloneCard( "Hello, world!", "RBM is awesome", imageUrl, MediaHeight.TALL, CardOrientation.VERTICAL, suggestions ); // Send rich card to user rbmApiHelper.SendStandaloneCard(standaloneCard, "+12223334444");
Carrosséis de cartas ricas
Os carrosséis reúnem vários cartões interativos , permitindo que os usuários comparem itens e reajam a cada um individualmente.
Os carrosséis podem conter no mínimo dois e no máximo dez rich cards. Os rich cards dentro dos carrosséis devem estar em conformidade com os requisitos gerais de rich cards para conteúdo e altura, conforme descrito na documentação de Rich cards . Para obter mais informações sobre o layout e as especificações do carrossel, consulte a documentação do carrossel .
Exemplo
O código a seguir envia um carrossel de rich cards. Para opções de formatação e valores, consulte RichCard .
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentMessages?messageId=MESSAGE_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d '{ "contentMessage": { "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/welcome-bot-sample-images/200.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/welcome-bot-sample-images/201.jpg", "forceRefresh": false } } } ] } } } }'
Node.js
// Reference to RBM API helper const rbmApiHelper = require('@google/rcsbusinessmessaging'); // Images for the carousel cards let card1Image = 'https://storage.googleapis.com/welcome-bot-sample-images/200.jpg'; let card2Image = 'https://storage.googleapis.com/welcome-bot-sample-images/201.jpg'; // Define the card contents for a carousel with two cards, each with one suggested reply let cardContents = [ { title: 'Card #1', description: 'The description for card #1', suggestions: [ { reply: { text: 'Card #1', postbackData: 'card_1', } } ], media: { height: 'MEDIUM', contentInfo: { fileUrl: card1Image, forceRefresh: false, }, }, }, { title: 'Card #2', description: 'The description for card #2', suggestions: [ { reply: { text: 'Card #2', postbackData: 'card_2', } } ], media: { height: 'MEDIUM', contentInfo: { fileUrl: card2Image, forceRefresh: false, }, }, }, ]; // Definition of carousel card let params = { msisdn: '+12223334444', cardContents: cardContents, }; // Send the device the carousel card defined above rbmApiHelper.sendCarouselCard(params, function(response) { console.log(response); });
Java
import com.google.api.services.rcsbusinessmessaging.v1.model.CardContent; import com.google.api.services.rcsbusinessmessaging.v1.model.Suggestion; import com.google.rbm.cards.CardOrientation; import com.google.rbm.cards.CardWidth; import com.google.rbm.cards.MediaHeight; import com.google.rbm.RbmApiHelper; import com.google.rbm.SuggestionHelper; … try { // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); List cardContents = new ArrayList(); // Images for the carousel cards String card1Image = "https://storage.googleapis.com/welcome-bot-sample-images/200.jpg"; // Create suggestions for first carousel card List card1Suggestions = new ArrayList(); card1Suggestions.add( new SuggestionHelper("Card #1", "card_1")); cardContents.add( new StandaloneCardHelper( "Card #1", "The description for card #1", card1Image, card1Suggestions) .getCardContent(MediaHeight.SHORT) ); // Images for the carousel cards String card2Image = "https://storage.googleapis.com/welcome-bot-sample-images/201.jpg"; // Create suggestions for second carousel card List card2Suggestions = new ArrayList(); card2Suggestions.add( new SuggestionHelper("Card #2", "card_2")); cardContents.add( new StandaloneCardHelper( "Card #2", "The description for card #2", card2Image, card2Suggestions) .getCardContent(MediaHeight.SHORT) ); // Send the carousel to the user rbmApiHelper.sendCarouselCards(cardContents, CardWidth.MEDIUM, "+12223334444"); } catch(Exception e) { e.printStackTrace(); }
Python
# Reference to RBM Python client helper and messaging object structure from rcs_business_messaging import rbm_service from rcs_business_messaging import messages # Images for the carousel cards card_image_1 = 'https://storage.googleapis.com/welcome-bot-sample-images/200.jpg'; card_image_2 = 'https://storage.googleapis.com/welcome-bot-sample-images/201.jpg'; # Suggested replies to be used in the cards suggestions1 = [ messages.SuggestedReply('Card #1', 'reply:card_1') ] suggestions2 = [ messages.SuggestedReply('Card #2', 'reply:card_2') ] # Define the card contents for a carousel with two cards, # each with one suggested reply card_contents = [] card_contents.append(messages.CardContent('Card #1', 'The description for card #1', card_image_1, 'MEDIUM', suggestions1)) card_contents.append(messages.CardContent('Card #2', 'The description for card #2', card_image_2, 'MEDIUM', suggestions2)) # Send the device the carousel card defined above carousel_card = messages.CarouselCard('MEDIUM', card_contents) cluster = messages.MessageCluster().append_message(carousel_card) cluster.send_to_msisdn('+12223334444')
C#
using Google.Apis.RCSBusinessMessaging.v1.Data; using RCSBusinessMessaging; using RCSBusinessMessaging.Cards; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(credentialsFileLocation, projectId); // Image references to be used in the carousel cards string card1Image = "https://storage.googleapis.com/welcome-bot-sample-images/200.jpg"; string card2Image = "https://storage.googleapis.com/welcome-bot-sample-images/201.jpg"; // Suggestion chip lists to be used in carousel cards List<Suggestion> suggestions1 = new List<Suggestion> { new SuggestionHelper("Card #1", "card_1").SuggestedReply() }; List<Suggestion> suggestions2 = new List<Suggestion> { new SuggestionHelper("Card #2", "card_2").SuggestedReply() }; // Create the card content for the carousel List<CardContent> cardContents = new List<CardContent> { // Add items as card content new StandaloneCardHelper( "Card #1", "The description for card #1", card1Image, suggestions1).GetCardContent(), new StandaloneCardHelper( "Card #2", "The description for card #2", card2Image, suggestions2).GetCardContent() }; // Send the carousel to the user rbmApiHelper.SendCarouselCards(cardContents, CardWidth.MEDIUM, msisdn);