Les agents RBM reçoivent des messages et des événements via une relation de publication/abonnement. avec Cloud Pub/Sub, Lorsqu'un utilisateur envoie un message à votre agent ou génère une event, l'application de messagerie envoie les informations à l'abonnement Pub/Sub de votre agent, permettant à l'agent d'accéder au message ou à l'événement. Voir Recevez des messages.
Le type d'abonnement Pub/Sub de votre agent détermine la façon dont il reçoit Vous devez donc configurer votre abonnement Pub/Sub avant que votre agent peuvent recevoir des messages. Les agents RBM sont compatibles avec les abonnements pull et push.
Abonnement pull
Avec un abonnement pull, votre agent contacte Cloud Pub/Sub et récupère messages, événements et autres requêtes.
Prérequis
Avant de commencer, vous avez besoin d'un RBM l'agent.
Configuration
- Ouvrez l'application Business Communications Developer Console connectez-vous avec votre compte Google RBM, puis cliquez sur votre agent.
- Dans le panneau de navigation de gauche, cliquez sur Integrations (Intégrations).
- Cliquez sur Modifier l'abonnement.
- Sélectionnez Pull, puis cliquez sur Enregistrer.
- Configurez votre agent pour utiliser l'abonnement pull:
<ph type="x-smartling-placeholder">
- </ph>
- Si vous utilisez un exemple d'agent avec un abonnement pull, suivez les instructions de l'exemple README.
- Si vous n'utilisez pas d'exemple d'agent, consultez la section Recevoir des messages avec Pull pour obtenir du code afin d'activer votre pour utiliser l'abonnement pull. Selon votre programmation, vous aurez peut-être besoin de l'ID de projet de votre agent.
Trouver votre ID de projet
Certains mécanismes d'abonnement pull vous obligent à spécifier les identifiants Google de
ID du projet Google Cloud (GCP). L'ID de projet de votre agent est intégré au processus d'extraction
nom de l'abonnement suivant project/
.
- Ouvrez l'application Business Communications Developer Console connectez-vous avec votre compte Google RBM, puis cliquez sur votre agent.
- Dans le panneau de navigation de gauche, cliquez sur Integrations (Intégrations).
- Recherchez le nom de l'abonnement de votre agent.
- Recherchez le segment de texte compris entre
project/
et/
. C'est l'ID de projet de votre agent. Par exemple, si le nom de l'abonnement estprojects/rbm-growing-tree-bank-nbdjkl6t/subscriptions/rbm-agent-subscription
, l'ID de projet de votre agent estrbm-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; }); } }
Abonnement push
Avec un abonnement push, Cloud Pub/Sub transfère des messages, des événements et d'autres à une URL de webhook que vous spécifiez.
Prérequis
Avant de commencer, vous avez besoin des éléments suivants:
- Un agent RBM
- Une URL de point de terminaison de webhook en direct compatible avec
<ph type="x-smartling-placeholder">
- </ph>
- HTTPS avec un certificat SSL valide
- Requêtes
POST
- Possibilité d'envoyer un écho à un paramètre en réponse à une requête de validation
Configuration
- Ouvrez l'application Business Communications Developer Console connectez-vous avec votre compte Google RBM, puis cliquez sur votre agent.
- Dans le panneau de navigation de gauche, cliquez sur Integrations (Intégrations).
- Cliquez sur Modifier l'abonnement.
- Sélectionnez Push.
- Dans le champ URL du point de terminaison du webhook, saisissez l'URL de votre webhook, commençant par "https://".
Configurez votre webhook pour qu'il accepte une requête
POST
avec lesclientToken
et envoyer une réponse200 OK
avec la valeur dusecret
.Par exemple, si votre webhook reçoit une requête POST dont le corps est le suivant : contenu
{ "clientToken":"SJENCPGJESMGUFPY", "secret":"1234567890" }
le webhook doit confirmer la valeur
clientToken
et, siclientToken
est correctement, renvoyez une réponse200 OK
avec un corps desecret: 1234567890
.Dans la console, cliquez sur Valider.
Lorsque la plate-forme RBM valide votre webhook, la section Configurer votre webhook qui se ferme.
Cliquez sur Enregistrer.
Configurez votre agent pour recevoir des messages de votre webhook:
- Si vous utilisez un exemple d'agent avec un abonnement push, suivez les instructions de l'exemple README.
- Si vous n'utilisez pas d'exemple d'agent, configurez votre infrastructure pour transmettre les messages de votre webhook à l'agent.
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); } }
Vérifier les messages entrants
Étant donné que les webhooks peuvent recevoir des messages de n'importe quel expéditeur, vous devez vérifier que Google a envoyé des messages entrants avant de traiter leur contenu.
Pour vérifier que Google a envoyé un message que vous avez reçu, procédez comme suit:
- Extrayez l'en-tête
X-Goog-Signature
du message. Il s'agit d'une valeur hachée, de la charge utile du corps du message, encodée en base64. - Décodez la charge utile RBM en base64 dans l'élément
message.body
de la requête. - À l'aide du jeton client du webhook (que vous avez spécifié lors de la configuration de votre abonnement push) en tant que clé, créez un HMAC SHA512 des octets de la charge utile du message décodé en base64 et le résultat est encodé en base64.
- Comparez le hachage
X-Goog-Signature
à celui que vous avez créé.- Si les hachages correspondent, vous avez confirmé que Google a envoyé le message.
Si les valeurs de hachage ne correspondent pas, vérifiez votre processus de hachage sur une propriété connue .
Si votre processus de hachage fonctionne correctement et que vous recevez une message qui, selon vous, vous a été envoyé de manière frauduleuse, contactez .
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);
Étapes suivantes
Une fois que vous avez configuré votre abonnement et configuré votre agent pour communiquer avec Cloud Pub/Sub, votre agent peut recevoir des messages provenant de vos appareils de test. Envoyer un message pour valider votre configuration.