Los agentes de RBM se comunican con los usuarios enviando y recibiendo mensajes. Para enviar mensajes a los usuarios, tu agente envía solicitudes de mensajes a la API de RCS Business Messaging. Una sola solicitud puede incluir texto, tarjetas enriquecidas, archivos multimedia y PDF, así como respuestas sugeridas y acciones sugeridas.
La plataforma de RBM devolverá errores en ciertas situaciones para ayudarte a administrar la entrega de mensajes:
- Si envías un mensaje a un usuario cuyo dispositivo no admite RCS o no tiene habilitado el servicio, la plataforma de RBM devuelve un error 404 NOT_FOUND. En este caso, puedes intentar comunicarte con el usuario a través de los métodos alternativos definidos en tu infraestructura.
- Si envías un mensaje a un usuario de RCS en una red en la que aún no se lanzó tu agente o en una red que no habilitó el tráfico de RCS, la plataforma de RBM devolverá un error 404 NOT_FOUND.
- Si envías un mensaje con funciones que no son compatibles con el dispositivo de un usuario, la plataforma de RBM devuelve un error 400 INVALID_ARGUMENT y no entrega el mensaje.
Como parte de tu estrategia de mensajería multicanal, lo mejor es revocar los mensajes que no se entregan después de un tiempo razonable y enviarlos por otro canal. Para revocar mensajes automáticamente en un momento predefinido, establece un vencimiento del mensaje.
El destinatario no está en línea
La plataforma de RBM sigue aceptando un mensaje para la entrega si el destinatario está sin conexión. Recibes una respuesta 200 OK, y la plataforma de RBM retiene el mensaje y vuelve a intentar la entrega durante 30 días. No es necesario que le pidas a RBM que vuelva a enviar el mensaje.
RBM borra los mensajes que no se entregan 30 días después de que se envían.
Según el caso de uso de tu agente, es posible que quieras revocar un mensaje no entregado antes de que se cumpla este tiempo de espera de 30 días. La revocación puede evitar que los usuarios sin conexión reciban un mensaje desactualizado cuando vuelvan a estar en línea. Existen varias formas de revocar un mensaje:
- Envía una solicitud de revocación para activar la revocación.
- Establece un vencimiento del mensaje para revocarlo automáticamente en el momento adecuado.
Cómo establecer el vencimiento de un mensaje
¿El mensaje de tu agente es urgente? Por ejemplo, los OTP solo son válidos durante un período breve. Las ofertas por tiempo limitado vencen. Además, los recordatorios de citas no son relevantes después de la fecha de la cita. Para que los mensajes sean oportunos y relevantes, establece una fecha de vencimiento. Esto puede evitar que los usuarios sin conexión reciban contenido desactualizado cuando vuelvan a conectarse. El vencimiento también es una buena señal para invocar tu estrategia de mensajes de resguardo, de modo que los usuarios obtengan la información que necesitan a tiempo.
Para establecer un vencimiento del mensaje, especifica uno de los siguientes campos en el mensaje del agente:
expireTime
: Es la hora exacta en UTC en la que vence el mensaje.ttl
(tiempo de vida): Es la cantidad de tiempo que transcurre antes de que caduque el mensaje.
Para conocer las opciones de formato y valores, consulta AgentMessage
.
Una vez que vence el mensaje, la plataforma de RBM deja de intentar entregarlo y se revoca automáticamente. Sin embargo, esto podría fallar en ocasiones excepcionales. Por ejemplo, la API podría activar la revocación mientras la plataforma de RBM estaba en proceso de entregar el mensaje. Para confirmar si el mensaje vencido se revocó correctamente, RBM enviará un evento de notificación a tu webhook.
El valor máximo para ttl
y expireTime
es de 15 días después del envío del mensaje.
Si bien no hay un valor mínimo para ttl
y expireTime
, se recomienda esperar al menos 10 segundos después de enviar el mensaje para reducir significativamente la probabilidad de recibir notificaciones de revocación y entrega.
Cómo establecer el tipo de tráfico de mensajes
La API de RBM incluye un campo messageTrafficType
para categorizar los mensajes.
Si bien los casos de uso del agente siguen definiendo el comportamiento del agente y las reglas de negocio que se aplican, messageTrafficType
permite una categorización más detallada del contenido de los mensajes. En última instancia, esto permitirá que un solo agente controle varios casos de uso. Por el momento, no hay ningún impacto en los casos de uso de agentes existentes ni en las reglas comerciales.
Este campo es opcional, pero te recomendamos que lo configures ahora para que no recibas un error cuando se vuelva obligatorio.
Para establecer el tipo de tráfico de mensajes, asigna el messageTrafficType
adecuado a cada mensaje según su contenido. RBM admite los siguientes tipos de tráfico.
Tipo de tráfico | Contenido del mensaje | Caso de uso del agente |
---|---|---|
AUTHENTICATION |
Para mensajes de autenticación. | OTP |
TRANSACTION |
Son mensajes sobre los productos o servicios existentes de un usuario. Por ejemplo, confirmaciones, recibos de pago o detalles de la reserva. | Transaccional o multiuso |
PROMOTION |
Para mensajes promocionales, como ofertas, descuentos, anuncios o cualquier otro contenido promocional | Promocional o multiuso |
SERVICEREQUEST |
Son mensajes sobre servicios que el usuario solicitó de forma explícita. | OTP, transaccional, promocional o de uso múltiple |
ACKNOWLEDGEMENT |
Para los mensajes que se usan para confirmar la acción de un usuario, específicamente una solicitud de anulación de suscripción Esto confirma que se recibió la solicitud del usuario y que se está procesando. | OTP, transaccional, promocional o de uso múltiple |
Si no se establece ningún tipo de tráfico, el sistema asigna el tipo predeterminado para el caso de uso del agente.
Caso de uso del agente | Tipo de tráfico predeterminado |
---|---|
OTP | AUTHENTICATION |
Transaccional | TRANSACTION |
Promocional | PROMOTION |
Multi-use | MESSAGE_TRAFFIC_TYPE_UNSPECIFIED |
Los agentes de uso múltiple no tienen un tipo de tráfico predeterminado. Debes establecer el tipo de tráfico de forma explícita para cada mensaje según su contenido. Si no reemplazas el valor MESSAGE_TRAFFIC_TYPE_UNSPECIFIED
, se producirá un error.
Límites de tamaño de los mensajes
El tamaño máximo de todo el objeto AgentMessage convertido en cadena es de 250 KB. La parte de texto del mensaje tiene su propio límite de 3,072 caracteres.
El tamaño máximo de un archivo que se puede enviar a través de RBM es de 100 MB. Consulta Archivos PDF y de medios para obtener más información.
Texto
Los mensajes más simples están hechos de texto. Los mensajes de texto son más adecuados para comunicar información sin necesidad de elementos visuales, interacción compleja o respuesta.
Ejemplo
El siguiente código envía un mensaje de texto sin formato. Para conocer las opciones de formato y valores, consulta 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", );
Contenido del mensaje básico: conversión de SMS
Los operadores introdujeron modelos de facturación para admitir la migración de los mensajes SMS a RBM. Un mensaje de RBM que contiene hasta 160 caracteres UTF-8 se denomina mensaje básico.
Cuando construyas una solicitud para enviar un mensaje básico, recuerda que los caracteres se cuentan como 1 byte (UTF-8). Si envías un mensaje que contiene caracteres especiales, como emojis o un conjunto de caracteres multibyte, cada carácter se cuenta como 2 a 4 caracteres UTF-8 o más.
Ingresa texto en el cuadro para verificar su longitud:
Contenido básico del mensaje y vistas previas de vínculos
Los clientes de RCS pueden implementar vistas previas de vínculos. Si un mensaje de RBM solo de texto incluye una URL para un sitio web con etiquetas openGraph, es posible que se muestre una imagen de vista previa que dé la impresión de contenido más enriquecido.
Ten en cuenta que el cliente de RCS puede permitir que el usuario inhabilite las vistas previas de vínculos.
Contraseñas de un solo uso para la verificación del usuario
Puedes usar RBM para enviar contraseñas de un solo uso (OTP) para la verificación automática del usuario con la API de SMS Retriever. No hay una API dedicada para leer los OTP que llegan a través de RBM.
Cómo funciona en Android
En el caso de las apps para Android que se registraron en la API de SMS Retriever, la API espera un mensaje de RBM con el formato correcto. Este mensaje debe contener tanto la OTP como un hash único que identifique tu app.
Cuando se recibe un mensaje de RBM con el formato correcto, la API de SMS Retriever lo procesa como si fuera un OTP por SMS. Después de que el hash coincida con tu app, se extraerá la OTP y se reenviará a tu app para la verificación automática del usuario.
- Ejemplo de mensaje de texto de RBM para la verificación del usuario:
Your code is <OTP> <app hash>.
- Ejemplo:
Your code is 123456 M8tue43FGT.
Para obtener más información sobre SMS Retriever y las APIs relacionadas, consulta la documentación de SMS Retriever. Para obtener detalles sobre la verificación automática del usuario en las apps registradas con la API de SMS Retriever, consulta este diagrama de flujo.
Cómo funciona en iOS
En iOS, el control integrado de OTP del sistema detecta y sugiere automáticamente las OTP de RBM para el autocompletado, al igual que las OTP por SMS. No se requiere ninguna integración de API específica para que la app para iOS lea el OTP.
Archivos multimedia y PDF
Cuando envíes un mensaje con un archivo de imagen, video, audio o PDF, tu agente debe proporcionar una URL de acceso público para el contenido o subir el archivo directamente. En el caso de los archivos multimedia, también puedes especificar una imagen en miniatura que permita a los usuarios obtener una vista previa del contenido antes de hacer clic en él. En el caso de los archivos de audio, se usa el widget de audio predeterminado como marcador de posición.
La plataforma de RBM almacena en caché los archivos durante 60 días, y la API devuelve un ID de archivo que tu agente puede incluir en los mensajes a los usuarios. Después de 60 días, RBM quita los archivos de la caché.
Cuando especifiques archivos por URL, se recomienda establecer contentMessage.forceRefresh
en false
. Si se configura contentMessage.forceRefresh
como true
, se obliga a RBM a recuperar contenido nuevo de la URL especificada, incluso si el contenido de la URL está almacenado en caché, lo que aumenta los tiempos de entrega de mensajes para los usuarios.
Consulta las prácticas recomendadas para obtener recomendaciones y límites sobre el tamaño de los archivos.
Ejemplo de URL de archivo
El siguiente código envía una imagen. Para conocer las opciones de formato y valores, consulta 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");
Como alternativa, puedes subir contenido multimedia antes de enviarlo en un mensaje con files.create
.
Ejemplo de carga de archivos
El siguiente código sube un archivo de video y un archivo de miniatura, y, luego, envía ambos archivos en un mensaje. Para conocer las opciones de formato y valores, consulta files.create
y 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 JSON
curl -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 JSON
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": { "uploadedRbmFile": { "fileName": "SERVER-SPECIFIED_VIDEO_FILE_NAME", "thumbnailName": "SERVER-SPECIFIED_THUMBNAIL_FILE_NAME" } } }'
Tipos de medios admitidos
RBM admite los siguientes tipos de medios. En el caso de las miniaturas, solo se admiten los formatos image/jpeg, image/jpg, image/gif y image/png.
Tipo de medio | Tipo de documento | Extensión | Funciona con tarjetas enriquecidas |
---|---|---|---|
application/ogg | Audio OGG | .ogx | No |
application/pdf | No | ||
audio/aac | Audio AAC | .aac | No |
audio/mp3 | audio en MP3 | .mp3 | No |
audio/mpeg | Audio MPEG | .mpeg | No |
audio/mpg | Audio en MPG | .mp3 | No |
audio/mp4 | Audio MP4 | .mp4 | No |
audio/mp4-latm | Audio MP4-latm | .mp4 | No |
audio/3gpp | Audio 3GPP | .3gp | No |
image/jpeg | JPEG | .jpeg, .jpg | Sí |
image/gif | GIF | .gif | Sí |
image/png | PNG | .png | Sí |
video/h263 | Video H263 | .h263 | Sí |
video/m4v | Video M4V | .m4v | Sí |
video/mp4 | Video MP4 | .mp4 | Sí |
video/mpeg4 | Video MPEG-4 | .mp4 y .m4p | Sí |
video/mpeg | Video MPEG | .mpeg | Sí |
video/webm | Video WEBM | .webm | Sí |
Sugerencias
Tu agente envía sugerencias (respuestas y acciones sugeridas) en listas de chips de sugerencias (hasta 11 sugerencias) o en tarjetas enriquecidas (hasta cuatro sugerencias).
Cada sugerencia tiene un máximo de 25 caracteres.
Respuestas sugeridas
Las respuestas sugeridas guían a los usuarios en las conversaciones proporcionándoles respuestas a las que tu agente sabe cómo reaccionar.
Cuando un usuario presiona una respuesta sugerida, tu agente recibe un evento que contiene el texto de la respuesta y los datos de devolución. La carga útil tiene un máximo de 2,048 caracteres.
Ejemplo
El siguiente código envía texto con dos respuestas sugeridas. Para conocer las opciones de formato y valores, consulta 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 );
Acciones sugeridas
Las acciones sugeridas guían a los usuarios a través de las conversaciones aprovechando la funcionalidad integrada de sus dispositivos. Tu agente puede sugerir que los usuarios marquen un número, abran una ubicación en un mapa, compartan una ubicación, abran una URL o creen un evento de calendario.
Para cada acción sugerida, puedes proporcionar de forma opcional una URL de resguardo (máximo de 2,048 caracteres). Esta URL se abrirá en una ventana nueva del navegador si el dispositivo del usuario no admite la acción sugerida.
Cuando un usuario presiona una acción sugerida, tu agente recibe un evento que contiene los datos de notificación de conversión de la acción.
Para conocer las opciones de formato y valores, consulta SuggestedAction
.
Marcar un número
La acción Dial guía al usuario para que marque un número de teléfono especificado por tu agente.
Los números de teléfono solo pueden incluir dígitos (0-9
), el signo más (+
), el asterisco (*
) y el signo de número (#
). Se admite el formato internacional E.164 (por ejemplo, +14155555555
), pero no es obligatorio. Es decir, tanto +14155555555
como 1011
son entradas válidas.
Ejemplo
El siguiente código envía una acción de marcado. Para conocer las opciones de formato y valores, consulta 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 );
Cómo ver una ubicación
La acción Ver ubicación muestra una ubicación en la app de mapas predeterminada del usuario. Puedes especificar la ubicación con la latitud y la longitud, o bien con una búsqueda basada en la ubicación actual del usuario. También puedes establecer una etiqueta personalizada para el pin que se muestra en la app de mapas.
Ejemplo
El siguiente código envía una acción de ubicación de vista. Para conocer las opciones de formato y valores, consulta 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 );
Compartir una ubicación
La acción Share Location permite que el usuario comparta una ubicación con tu agente. El usuario puede compartir su ubicación actual o una ubicación seleccionada manualmente desde la app de Maps.
Ejemplo
El siguiente código envía una acción de compartir ubicación. Para conocer las opciones de formato y valores, consulta 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 );
Cómo abrir una URL
La acción Open URL te permite guiar a los usuarios a una página web especificada por tu agente. De forma predeterminada, la página web se abre en el navegador del usuario. Si un usuario tiene configurada una app predeterminada para la página web, se abrirá esa app. En ese caso, el ícono del botón de acción sugerida será el ícono de la app.
La acción Open URL también admite WebView integrados. Consulta Open URL with webview.
Ejemplo
El siguiente código envía una acción de URL abierta. Para conocer las opciones de formato y valores, consulta 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 );
Abre una URL con WebView
La acción Open URL with webview carga la página web especificada dentro de la app de mensajería con el motor de renderización de tu navegador predeterminado. Esto permite que el usuario interactúe con la página web sin salir de la conversación de RBM. Si el dispositivo del usuario no admite vistas web, la página web se abrirá en el navegador del usuario. Para habilitar las vistas web, consulta OpenURLApplication
.
Las vistas web tienen tres modos de visualización. Para conocer las opciones de formato y valores, consulta WebviewViewMode
.
- Completa: La página web ocupa toda la pantalla.
- Mitad: La página web ocupa la mitad de la pantalla.
- Alta: La página web ocupa tres cuartos de la pantalla.
Ejemplo
El siguiente código envía una acción de abrir URL con WebView. Para conocer las opciones de formato y valores, consulta 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; }
Cómo crear un evento de calendario
La acción Crear evento de calendario abre la app de calendario del usuario y comienza a crear un evento nuevo con la información especificada.
Se requiere un título para el evento de calendario. Tiene un máximo de 100 caracteres. La descripción del evento de calendario es opcional y tiene un máximo de 500 caracteres.
Ejemplo
El siguiente código envía una acción para crear un evento de calendario. Para conocer las opciones de formato y valores, consulta 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 chips de sugerencias
Tu agente envía listas de chips de sugerencias con mensajes para guiar las acciones posteriores de los usuarios. La lista de chips solo se muestra cuando el mensaje asociado se encuentra en la parte inferior de la conversación. Todos los mensajes posteriores de la conversación (ya sean de un usuario o de tu agente) reemplazan la lista de chips.
Los chips de la lista son respuestas sugeridas y acciones sugeridas.
Las listas de chips contienen un máximo de 11 chips de sugerencias, y cada etiqueta de chip puede tener un máximo de 25 caracteres.
Para conocer las opciones de formato y valores, consulta AgentContentMessage
.
Tarjetas enriquecidas
Cuando necesites enviar un conjunto de información, contenido multimedia o sugerencias relacionados, debes enviar una tarjeta enriquecida. Las tarjetas enriquecidas permiten que tu agente envíe varias unidades de información en un solo mensaje.
Las tarjetas enriquecidas pueden contener los siguientes elementos:
- Una imagen o un video
- Texto del título
- Texto descriptivo
- Respuestas y acciones sugeridas (máximo 4)
Una tarjeta enriquecida puede contener todos los elementos enumerados, pero debe contener al menos una imagen, un video o un título para ser válida. Una tarjeta enriquecida puede contener un máximo de cuatro acciones sugeridas y respuestas sugeridas.
Tu agente puede enviar varias tarjetas enriquecidas juntas en un carrusel de tarjetas enriquecidas.
El tamaño máximo de la carga útil de una tarjeta enriquecida es de 250 KB. Consulta las prácticas recomendadas para obtener recomendaciones y límites sobre el tamaño de los archivos multimedia.
Puedes encontrar las especificaciones de las tarjetas enriquecidas en Tarjetas enriquecidas.
Altura de la tarjeta
Las tarjetas se expanden verticalmente para adaptarse a su contenido. Las tarjetas enriquecidas tienen una altura mínima de 112 DP y una altura máxima de 344 DP. Si el contenido de una tarjeta no es lo suficientemente grande como para ocupar la altura mínima de la tarjeta, esta se expande y ocupa la altura adicional con espacios en blanco.
El contenido multimedia de las tarjetas enriquecidas debe tener una de las tres alturas siguientes:
- Corta: 112 DP
- Mediana: 168 DP
- Grande: 264 DP
Si el contenido multimedia no se ajusta a las dimensiones de la tarjeta con la altura seleccionada, se elige la vista previa del contenido multimedia acercándolo y recortándolo.
Ejemplo
El siguiente código envía una tarjeta enriquecida con una imagen y respuestas sugeridas. Para conocer las opciones de formato y valores, consulta 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");
Carruseles de tarjeta enriquecida
Cuando necesites presentarle al usuario varias opciones para elegir, usa un carrusel de tarjetas enriquecidas. Los carruseles encadenan varias tarjetas enriquecidas, lo que permite a los usuarios comparar elementos y reaccionar a cada uno de forma individual.
Los carruseles pueden contener un mínimo de dos y un máximo de diez tarjetas enriquecidas. Las tarjetas enriquecidas dentro de los carruseles deben cumplir con los requisitos generales de las tarjetas enriquecidas en cuanto a contenido y altura. Puedes encontrar las especificaciones del carrusel en Tarjetas enriquecidas.
El tamaño máximo de la carga útil de un carrusel de tarjetas enriquecidas es de 250 KB. Consulta las prácticas recomendadas para obtener recomendaciones y límites sobre el tamaño de los archivos multimedia.
Truncamiento
Al igual que las tarjetas enriquecidas, muchos factores (como la resolución de la pantalla, la densidad de píxeles y las preferencias del usuario) afectan la forma en que las tarjetas aparecen para los usuarios finales. Sin embargo, en un carrusel, la altura de las primeras tarjetas define la altura de todas las tarjetas del carrusel, y la altura de las tarjetas afecta el truncamiento del título, la descripción y las sugerencias.
Si un dispositivo no puede mostrar todos los elementos de una tarjeta debido a restricciones de visualización o a la altura de la tarjeta, RBM trunca la tarjeta hasta que se pueda mostrar en el dispositivo con la siguiente lógica:
- Reduce la descripción a una sola línea.
- Reduce el título a una sola línea.
- Omitir las sugerencias que no caben en la tarjeta, comenzando por el final de la lista definida
- Omitir la descripción
- Omitir el título
Para evitar el truncamiento, mantén los títulos y las descripciones lo más breves posible. En el caso del contenido multimedia vertical, usa un título y una descripción, o bien una sugerencia. En el caso de los medios medianos, usa hasta dos sugerencias. En el caso de contenido multimedia breve, usa hasta tres sugerencias. Para incluir cuatro sugerencias, no incluyas contenido multimedia en la tarjeta.
Mantén las tarjetas aproximadamente equivalentes en términos de tamaño y longitud del contenido y, si es necesario, carga el carrusel con tarjetas más grandes para evitar el truncamiento en las tarjetas siguientes.
Ejemplo
El siguiente código envía un carrusel de tarjetas enriquecidas. Para conocer las opciones de formato y valores, consulta 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/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
// Reference to RBM API helper const rbmApiHelper = require('@google/rcsbusinessmessaging'); // Images for the carousel cards let card1Image = 'https://storage.googleapis.com/kitchen-sink-sample-images/cute-dog.jpg'; let card2Image = 'https://storage.googleapis.com/kitchen-sink-sample-images/elephant.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/kitchen-sink-sample-images/cute-dog.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/kitchen-sink-sample-images/elephant.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/kitchen-sink-sample-images/cute-dog.jpg'; card_image_2 = 'https://storage.googleapis.com/kitchen-sink-sample-images/elephant.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/kitchen-sink-sample-images/cute-dog.jpg"; string card2Image = "https://storage.googleapis.com/kitchen-sink-sample-images/elephant.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);