Los agentes de RBM reciben mensajes y eventos a través de una relación de publicación y suscripción con Cloud Pub/Sub. Cuando un usuario envía un mensaje a tu agente o genera un evento, su app de mensajería envía la información a la suscripción de Pub/Sub de tu agente, donde puede acceder al mensaje o evento. Consulta Recibe mensajes.
El tipo de suscripción de Pub/Sub del agente determina cómo recibe los mensajes, por lo que debes configurar la suscripción a Pub/Sub para que el agente pueda recibir mensajes. Los agentes de RBM admiten las suscripciones pull y push.
Suscripción de extracción
Con una suscripción de extracción, tu agente se comunica con Cloud Pub/Sub y recupera mensajes, eventos y otras solicitudes.
Requisitos previos
Antes de comenzar, necesitas un agente de RBM.
Configuración
- Abre Business Communications Developer Console, accede con tu Cuenta de Google de RBM y haz clic en tu agente.
- En el panel de navegación izquierdo, haz clic en Integraciones.
- Haz clic en Editar suscripción.
- Selecciona Extraer y, luego, haz clic en Guardar.
- Configura tu agente para usar la suscripción de extracción:
- Si usas un agente de muestra con una suscripción de extracción, sigue las instrucciones del archivo README de la muestra.
- Si no usas un agente de muestra, consulta Recibe mensajes con una extracción para obtener un código que permita que tu agente use la suscripción de extracción. Según tu lenguaje de programación, es posible que necesites el ID del proyecto de tu agente.
Encuentra el ID del proyecto
Algunos mecanismos de suscripción de extracción requieren que especifiques el ID del proyecto de Google Cloud Project (GCP) de tu agente. El ID del proyecto de tu agente está incorporado en el nombre de la suscripción de extracción después de project/
.
- Abre Business Communications Developer Console, accede con tu Cuenta de Google de RBM y haz clic en tu agente.
- En el panel de navegación izquierdo, haz clic en Integraciones.
- Busca el Nombre de la suscripción del agente.
- Ubica el segmento de texto entre
project/
y el siguiente/
. Este es el ID del proyecto de tu agente. Por ejemplo, si el nombre de la suscripción esprojects/rbm-growing-tree-bank-nbdjkl6t/subscriptions/rbm-agent-subscription
, el ID del proyecto de tu agente esrbm-growing-tree-bank-nbdjkl6t
.
C#
private async void InitPullMessages(string projectId, string jsonPath) { GoogleCredential googleCredential = null; using (var jsonStream = new FileStream(jsonPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { googleCredential = GoogleCredential.FromStream(jsonStream) .CreateScoped(SubscriberServiceApiClient.DefaultScopes); } SubscriptionName subscriptionName = new SubscriptionName(projectId, subscriptionId); SubscriberClient subscriber = new SubscriberClientBuilder { SubscriptionName = subscriptionName, GoogleCredential = googleCredential }.Build(); // setup listener for pubsub messages await subscriber.StartAsync( async (PubsubMessage message, CancellationToken cancel) => { string text = System.Text.Encoding.UTF8.GetString(message.Data.ToArray()); JObject jsonObject = JObject.Parse(jsonAsString); string userResponse = GetResponseText(jsonObject); string eventType = (string)jsonObject["eventType"]; // check if the message is a user response message if ((userResponse.Length > 0) && (eventType == null)) { string messageId = (string)jsonObject["messageId"]; string msisdn = (string)jsonObject["senderPhoneNumber"]; // let the user know their message has been read kitchenSinkBot.SendReadMessage(messageId, msisdn); HandleUserResponse(userResponse, msisdn); } await Console.Out.WriteLineAsync( $"Message {message.MessageId}: {jsonAsString}"); return SubscriberClient.Reply.Ack; }); } }Este código es un extracto de un agente de muestra de RBM.
Suscripción de envío
Con una suscripción de envío, Cloud Pub/Sub envía mensajes, eventos y otras solicitudes a la URL de webhook que especifiques.
Requisitos previos
Antes de comenzar, necesitarás lo siguiente:
- Un agente de RBM
- Una URL de extremo de webhook activa que admite
- HTTPS con un certificado SSL válido
POST
solicitudes- La capacidad de reproducir un parámetro en respuesta a una solicitud de validación
Configuración
- Abre Business Communications Developer Console, accede con tu Cuenta de Google de RBM y haz clic en tu agente.
- En el panel de navegación izquierdo, haz clic en Integraciones.
- Haz clic en Editar suscripción.
- Selecciona Enviar.
- En URL de extremo de webhook, ingresa la URL de tu webhook que comience con “https://”.
Configura tu webhook para que acepte una solicitud
POST
con el parámetroclientToken
especificado y envíe una respuesta200 OK
con el valor del parámetrosecret
.Por ejemplo, si tu webhook recibe una solicitud POST con el siguiente contenido del cuerpo
{ "clientToken":"SJENCPGJESMGUFPY", "secret":"1234567890" }
El webhook debe confirmar el valor
clientToken
y, siclientToken
es correcto, mostrar una respuesta200 OK
con un cuerpo desecret: 1234567890
.En la consola, haz clic en Verificar.
Cuando la plataforma de RBM verifica tu webhook, se cierra el diálogo Configura tu webhook.
Haz clic en Guardar.
Configura tu agente para recibir mensajes de tu webhook:
- Si usas un agente de muestra con una suscripción de envío, sigue las instrucciones del archivo README de la muestra.
- Si no usas un agente de muestra, configura la infraestructura para pasar mensajes de tu webhook al agente.
Node.js
let requestBody = req.body; if ((requestBody.hasOwnProperty('clientToken')) && (requestBody.hasOwnProperty('secret'))) { console.log('RBM webhook verification request'); // Confirm that the clientToken is the one we are seeing in the RBM console if (requestBody.clientToken == CLIENT_TOKEN) { console.log('Tokens match, returning secret'); res.status(200).send('secret: ' + requestBody.secret); } else { // Client tokens did not match - sending permission denied console.log('Tokens do not match'); res.sendStatus(403); } }
Verifica los mensajes entrantes
Debido a que los webhooks pueden recibir mensajes de cualquier remitente, debes verificar que Google haya enviado mensajes entrantes antes de procesar el contenido del mensaje.
Para verificar que Google envió un mensaje que recibiste, sigue estos pasos:
- Extrae el encabezado
X-Goog-Signature
del mensaje. Esta es una copia con hash codificada en base64 de la carga útil del cuerpo del mensaje. - Decodifica en base 64 la carga útil de RBM en el elemento
message.body
de la solicitud. - Con el token de cliente de tu webhook (que especificaste cuando configuraste tu suscripción de envío) como clave, crea una HMAC SHA512 de los bytes de la carga útil del mensaje decodificado en base64 y codifica en base64 el resultado.
- Compara el hash
X-Goog-Signature
con el hash que creaste.- Si los hash coinciden, confirmaste que Google envió el mensaje.
Si los hash no coinciden, verifica tu proceso de hash en un mensaje que se considere bueno.
Si el proceso de generación de hash funciona correctamente y recibes un mensaje que crees que se te envió de forma fraudulenta, comunícate con nosotros.
Node.js
if ((requestBody.hasOwnProperty('message')) && (requestBody.message.hasOwnProperty('data'))) { // Validate the received hash to ensure the message came from Google RBM let userEventString = Buffer.from(requestBody.message.data, 'base64'); let hmac = crypto.createHmac('sha512', CLIENT_TOKEN); let data = hmac.update(userEventString); let genHash = data.digest('base64'); let headerHash = req.header('X-Goog-Signature'); if (headerHash === genHash) { let userEvent = JSON.parse(userEventString); console.log('userEventString: ' + userEventString); handleMessage(userEvent); } else { console.log('hash mismatch - ignoring message'); } } res.sendStatus(200);
Próximos pasos
Una vez que configures tu suscripción y configures tu agente para que se comunique con Cloud Pub/Sub, el agente podrá recibir mensajes de tus dispositivos de prueba. Envía un mensaje para validar la configuración.