Agenty RBM otrzymują wiadomości i zdarzenia w ramach relacji publikacji/subskrypcji z Cloud Pub/Sub. Gdy użytkownik wysyła wiadomość do agenta lub generuje zdarzenie, jego aplikacja do obsługi wiadomości wysyła informacje do subskrypcji Pub/Sub agenta, gdzie agent może uzyskać dostęp do wiadomości lub zdarzenia. Zobacz Otrzymywanie wiadomości.
Typ subskrypcji Pub/Sub agenta określa, jak agent odbiera wiadomości, dlatego musisz skonfigurować subskrypcję Pub/Sub, zanim agent będzie mógł odbierać wiadomości. Agenty RBM obsługują zarówno subskrypcje pull, jak i push.
Pobierz subskrypcję
W ramach subskrypcji pull agent kontaktuje się z Cloud Pub/Sub i pobiera wiadomości, zdarzenia i inne żądania.
Wymagania wstępne
Zanim zaczniesz, potrzebujesz agenta RBM.
Konfiguracja
- Otwórz konsolę programisty w komunikacji biznesowej, zaloguj się na konto Google RBM i kliknij agenta.
- W menu nawigacyjnym po lewej stronie kliknij Integracje.
- Kliknij Edytuj subskrypcję.
- Kliknij kolejno Pobierz i Zapisz.
- Skonfiguruj agenta do korzystania z subskrypcji pull:
- Jeśli używasz przykładowego agenta z subskrypcją pull, postępuj zgodnie z instrukcjami w pliku README tego przykładu.
- Jeśli nie używasz przykładowego agenta, zapoznaj się z sekcją na temat odbierania wiadomości za pomocą metody Pull, która zawiera kod umożliwiający agentowi korzystanie z subskrypcji pull. W zależności od języka programowania możesz potrzebować identyfikatora projektu agenta.
Znajdowanie identyfikatora projektu
Niektóre mechanizmy subskrypcji pull wymagają podania identyfikatora projektu Google Cloud (GCP) agenta. Identyfikator projektu agenta jest umieszczony w nazwie subskrypcji pull po elemencie project/
.
- Otwórz konsolę programisty w komunikacji biznesowej, zaloguj się na konto Google RBM i kliknij agenta.
- W menu nawigacyjnym po lewej stronie kliknij Integracje.
- Znajdź nazwę subskrypcji agenta.
- Znajdź segment tekstowy między
project/
a/
. Jest to identyfikator projektu agenta. Jeśli na przykład nazwa subskrypcji toprojects/rbm-growing-tree-bank-nbdjkl6t/subscriptions/rbm-agent-subscription
, identyfikator projektu agenta torbm-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; }); } }Ten kod jest fragmentem przykładowego agenta RBM.
Subskrypcja push
Dzięki subskrypcji push Cloud Pub/Sub przekazuje wiadomości, zdarzenia i inne żądania na podany przez Ciebie adres URL webhooka.
Wymagania wstępne
Potrzebujesz tych elementów:
- agent RBM,
- aktywny adres URL punktu końcowego webhooka, który obsługuje:
- HTTPS z ważnym certyfikatem SSL
- Prośby:
POST
- Możliwość powtórzenia parametru w odpowiedzi na żądanie weryfikacji
Konfiguracja
- Otwórz konsolę programisty w komunikacji biznesowej, zaloguj się na konto Google RBM i kliknij agenta.
- W menu nawigacyjnym po lewej stronie kliknij Integracje.
- Kliknij Edytuj subskrypcję.
- Wybierz Wypchnij.
- W polu Adres URL punktu końcowego webhooka wpisz adres URL webhooka zaczynający się od „https://”.
Skonfiguruj webhooka, aby akceptował żądanie
POST
z określonym parametremclientToken
i wysyłał odpowiedź200 OK
z wartością parametrusecret
.Jeśli na przykład webhook otrzyma żądanie POST z tą treścią:
{ "clientToken":"SJENCPGJESMGUFPY", "secret":"1234567890" }
webhook powinien potwierdzić wartość
clientToken
i – jeśliclientToken
jest prawidłowy – zwrócić odpowiedź200 OK
z treściąsecret: 1234567890
.W konsoli kliknij Zweryfikuj.
Gdy platforma RBM zweryfikuje webhooka, okno Skonfiguruj webhooka zostanie zamknięte.
Kliknij Zapisz.
Skonfiguruj agenta, aby odbierał wiadomości z webhooka:
- Jeśli używasz przykładowego agenta z subskrypcją push, postępuj zgodnie z instrukcjami w pliku README tego przykładu.
- Jeśli nie używasz przykładowego agenta, skonfiguruj infrastrukturę pod kątem przekazywania wiadomości z webhooka do agenta.
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); } }
Weryfikowanie wiadomości przychodzących
Webhooki mogą odbierać wiadomości od dowolnych nadawców, dlatego przed przetworzeniem ich treści musisz sprawdzić, czy Google wysłał wiadomości przychodzące.
Aby sprawdzić, czy otrzymana wiadomość została wysłana przez Google, wykonaj te czynności:
- Wyodrębnij nagłówek
X-Goog-Signature
wiadomości. Jest to zaszyfrowana kopia ładunku treści wiadomości zakodowana w formacie base64. - Dekodowanie ładunku RBM w standardzie Base-64 w elemencie
message.body
żądania. - Korzystając z tokena klienta webhooka (określonego podczas konfigurowania subskrypcji push) jako klucza utwórz SHA512 HMAC bajtów ładunku wiadomości zdekodowanego w standardzie base-64 i zakoduj wynik w standardzie base64.
- Porównaj hasz funkcji
X-Goog-Signature
z utworzonym przez siebie haszem.- Jeśli hasze są zgodne, oznacza to, że wiadomość została wysłana przez Google.
Jeśli hasze nie są zgodne, sprawdź swój proces haszowania w przypadku dobrze znanej wiadomości.
Jeśli proces szyfrowania działa prawidłowo i otrzymujesz wiadomość, która Twoim zdaniem została wysłana w wyniku oszustwa, skontaktuj się z nami.
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);
Dalsze kroki
Gdy skonfigurujesz subskrypcję i skonfigurujesz agenta do komunikacji z Cloud Pub/Sub, agent będzie mógł odbierać wiadomości z Twoich urządzeń testowych. Wyślij wiadomość, aby sprawdzić konfigurację.