Envía mensajes

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:

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);
});
Este código es un fragmento de un agente de muestra de RBM.

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();
}
Este código es un fragmento de un agente de muestra de RBM.

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')
Este código es un fragmento de un agente de muestra de RBM.

C#

using RCSBusinessMessaging;


// Create an instance of the RBM API helper
RbmApiHelper rbmApiHelper = new RbmApiHelper(credentialsFileLocation,
                                             projectId);

rbmApiHelper.SendTextMessage(
    "Hello, world!",
    "+12223334444",
);
Este código es un fragmento de un agente de muestra de RBM.

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:

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);
});
Este código es un fragmento de un agente de muestra de RBM.

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();
}
Este código es un fragmento de un agente de muestra de RBM.

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')
Este código es un fragmento de un agente de muestra de RBM.

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");
Este código es un fragmento de un agente de muestra de RBM.

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 PDF .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
image/gif GIF .gif
image/png PNG .png
video/h263 Video H263 .h263
video/m4v Video M4V .m4v
video/mp4 Video MP4 .mp4
video/mpeg4 Video MPEG-4 .mp4 y .m4p
video/mpeg Video MPEG .mpeg
video/webm Video WEBM .webm

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);
});
Este código es un fragmento de un agente de muestra de RBM.

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();
}
Este código es un fragmento de un agente de muestra de RBM.

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')
Este código es un fragmento de un agente de muestra de RBM.

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
);
Este código es un fragmento de un agente de muestra de RBM.

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);
});
Este código es un fragmento de un agente de muestra de RBM.

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();
}
Este código es un fragmento de un agente de muestra de RBM.

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')
Este código es un fragmento de un agente de muestra de RBM.

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
);
Este código es un fragmento de un agente de muestra de RBM.

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);
});
Este código es un fragmento de un agente de muestra de RBM.

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();
}
Este código es un fragmento de un agente de muestra de RBM.

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')
Este código es un fragmento de un agente de muestra de RBM.

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
);
Este código es un fragmento de un agente de muestra de RBM.

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);
});
Este código es un fragmento de un agente de muestra de RBM.

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();
}
Este código es un fragmento de un agente de muestra de RBM.

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')
Este código es un fragmento de un agente de muestra de RBM.

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
);
Este código es un fragmento de un agente de muestra de RBM.

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);
});
Este código es un fragmento de un agente de muestra de RBM.

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();
}
Este código es un fragmento de un agente de muestra de RBM.

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')
Este código es un fragmento de un agente de muestra de RBM.

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
);
Este código es un fragmento de un agente de muestra de RBM.

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);
});
Este código es un fragmento de un agente de muestra de RBM.

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();
}
Este código es un fragmento de un agente de muestra de RBM.

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')
Este código es un fragmento de un agente de muestra de RBM.

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
);
Este código es un fragmento de un agente de muestra de RBM.

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);
});
Este código es un fragmento de un agente de muestra de RBM.

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();
}
Este código es un fragmento de un agente de muestra de RBM.

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')
Este código es un fragmento de un agente de muestra de RBM.

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");
Este código es un fragmento de un agente de muestra de RBM.

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.

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:

  1. Reduce la descripción a una sola línea.
  2. Reduce el título a una sola línea.
  3. Omitir las sugerencias que no caben en la tarjeta, comenzando por el final de la lista definida
  4. Omitir la descripción
  5. 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);
});
Este código es un fragmento de un agente de muestra de RBM.

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();
        }
Este código es un fragmento de un agente de muestra de RBM.

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')
Este código es un fragmento de un agente de muestra de RBM.

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);
Este código es un fragmento de un agente de muestra de RBM.