Os agentes do RBM recebem mensagens e eventos por uma relação de publicação/assinatura com o Cloud Pub/Sub. Quando um usuário envia uma mensagem para seu agente ou gera um evento, o app de mensagens dele envia as informações para a assinatura do Pub/Sub do agente, onde o agente pode acessar a mensagem ou o evento. Consulte Receber mensagens.
O tipo de assinatura do Pub/Sub do seu agente determina como seu agente recebe as mensagens. Portanto, você precisa configurar sua assinatura do Pub/Sub antes que o agente possa receber mensagens. Os agentes do RBM são compatíveis com assinaturas pull e push.
Assinatura de pull
Com uma assinatura de pull, seu agente entra em contato com o Cloud Pub/Sub e busca mensagens, eventos e outras solicitações.
Pré-requisitos
Antes de começar, você precisa de um agente do RBM.
Configuração
- Abra o Console para desenvolvedores do Business Communications, faça login com sua Conta do Google do RBM e clique no seu agente.
- Na navegação à esquerda, clique em Integrações.
- Clique em Editar assinatura.
- Escolha Pull e clique em Salvar.
- Configure seu agente para usar a assinatura de pull:
- Se você usar um agente de amostra com uma assinatura de pull, siga as instruções no arquivo README da amostra.
- Se você não usar um agente de amostra, consulte Como receber mensagens usando Pull para o código para permitir que seu agente use a assinatura de pull. Dependendo da sua linguagem de programação, talvez você precise do ID do projeto do seu agente.
Encontrar seu código de projeto
Alguns mecanismos de assinatura de pull exigem que você especifique o ID do projeto do Google Cloud (GCP) do seu agente. O ID do projeto do seu agente é incorporado ao nome da assinatura de pull após project/
.
- Abra o Console para desenvolvedores do Business Communications, faça login com sua Conta do Google do RBM e clique no seu agente.
- Na navegação à esquerda, clique em Integrações.
- Encontre o Nome da assinatura do seu agente.
- Localize o trecho de texto entre
project/
e o seguinte/
. Esse é o ID do projeto do agente. Por exemplo, se o nome da assinatura forprojects/rbm-growing-tree-bank-nbdjkl6t/subscriptions/rbm-agent-subscription
, o ID do projeto do agente serárbm-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 é um trecho de um agente de amostra do RBM (em inglês).
Assinatura de push
Com uma assinatura de push, o Cloud Pub/Sub envia mensagens, eventos e outras solicitações para um URL do webhook que você especificar.
Pré-requisitos
Antes de começar, você precisa do seguinte:
- Por um agente do RBM
- Um URL de endpoint do webhook ativo compatível com
- HTTPS com um certificado SSL válido
POST
pedidos- Capacidade de transmitir um parâmetro em resposta a uma solicitação de validação
Configuração
- Abra o Console para desenvolvedores do Business Communications, faça login com sua Conta do Google do RBM e clique no seu agente.
- Na navegação à esquerda, clique em Integrações.
- Clique em Editar assinatura.
- Escolha Enviar.
- Em URL do endpoint do webhook, insira o URL do webhook, começando com "https://".
Configure seu webhook para aceitar uma solicitação
POST
com o parâmetroclientToken
especificado e enviar uma resposta200 OK
com o valor do parâmetrosecret
.Por exemplo, se o webhook receber uma solicitação POST com o seguinte conteúdo de corpo
{ "clientToken":"SJENCPGJESMGUFPY", "secret":"1234567890" }
Seu webhook precisa confirmar o valor
clientToken
e, seclientToken
estiver correto, retornar uma resposta200 OK
com um corpo desecret: 1234567890
.No console, clique em Verificar.
Quando a plataforma RBM verifica seu webhook, a caixa de diálogo Configurar seu webhook é fechada.
Clique em Salvar.
Configure seu agente para receber mensagens do webhook:
- Se você usar um agente de amostra com uma assinatura de push, siga as instruções no arquivo README da amostra.
- Se você não usar um agente de amostra, configure a infraestrutura para transmitir mensagens do webhook para ele.
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); } }
Verificar mensagens recebidas
Como os webhooks podem receber mensagens de qualquer remetente, verifique se o Google enviou as mensagens recebidas antes de processar o conteúdo delas.
Para confirmar que o Google enviou uma mensagem que você recebeu, siga estas etapas:
- Extraia o cabeçalho
X-Goog-Signature
da mensagem. Essa é uma cópia em hash codificada em base64 do payload do corpo da mensagem. - Decodifique em base64 o payload do RBM no elemento
message.body
da solicitação. - Usando o token de cliente do webhook, especificado na configuração da assinatura de push, como chave, crie um HMAC SHA512 dos bytes do payload da mensagem decodificada base-64 e codifique o resultado em base64.
- Compare o hash
X-Goog-Signature
com o hash que você criou.- Se os hashes forem iguais, você vai confirmar que o Google enviou a mensagem.
Se os hashes não forem correspondentes, verifique o processo de hash em uma mensagem conhecida.
Se o processo de hash estiver funcionando corretamente e você receber uma mensagem que acredita ter sido enviada de forma fraudulenta, entre em contato conosco.
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óximas etapas
Depois de configurar sua assinatura e configurar seu agente para se comunicar com o Cloud Pub/Sub, ele pode receber mensagens dos seus dispositivos de teste. Envie uma mensagem para validar sua configuração.