RBM-Agents empfangen Nachrichten und Ereignisse über eine Publish/Subscribe-Beziehung mit Cloud Pub/Sub. Wenn ein Nutzer eine Nachricht an Ihren Agent sendet oder ein Ereignis generiert, sendet seine Messaging-App die Informationen an das Pub/Sub-Abo des Agents, damit der Agent auf die Nachricht oder das Ereignis zugreifen kann. Siehe Nachrichten empfangen.
Der Pub/Sub-Abotyp des Agents bestimmt, wie Ihr Agent Nachrichten empfängt. Daher müssen Sie Ihr Pub/Sub-Abo konfigurieren, bevor der Agent Nachrichten empfangen kann. RBM-Agents unterstützen sowohl pull- als auch push-Abos.
Pull-Abo
Bei einem Pull-Abo kontaktiert Ihr Agent Cloud Pub/Sub und ruft Nachrichten, Ereignisse und andere Anfragen ab.
Voraussetzungen
Bevor Sie beginnen, benötigen Sie einen RBM-Agent.
Einrichtung
- Öffne die Business Communications Developer Console, melde dich mit deinem RBM-Google-Konto an und klicke auf deinen Agent.
- Klicken Sie im linken Navigationsbereich auf Integrations (Integrationen).
- Klicken Sie auf Abo bearbeiten.
- Wählen Sie Pull aus und klicken Sie dann auf Speichern.
- Konfigurieren Sie Ihren Agent für die Verwendung des Pull-Abos:
- Wenn Sie einen Beispiel-Agent mit einem Pull-Abo verwenden, folgen Sie der Anleitung in der README-Datei des Beispiels.
- Wenn Sie keinen Beispiel-Agent verwenden, finden Sie unter Nachrichten mit Pull empfangen Informationen dazu, wie Sie den Agent für die Verwendung des Pull-Abos aktivieren. Je nach Programmiersprache benötigen Sie möglicherweise die Projekt-ID Ihres Agents.
Suchen Sie Ihre Projekt-ID.
Bei einigen Pull-Abo-Mechanismen müssen Sie die Google Cloud-Projekt-ID (GCP) Ihres Agents angeben. Die Projekt-ID des Agents ist in den Namen des Pull-Abos nach project/
eingebettet.
- Öffne die Business Communications Developer Console, melde dich mit deinem RBM-Google-Konto an und klicke auf deinen Agent.
- Klicken Sie im linken Navigationsbereich auf Integrations (Integrationen).
- Suchen Sie den Abonamen des Agents.
- Suchen Sie das Textsegment zwischen
project/
und dem folgenden/
. Dies ist die Projekt-ID Ihres Agents. Wenn der Aboname beispielsweiseprojects/rbm-growing-tree-bank-nbdjkl6t/subscriptions/rbm-agent-subscription
lautet, lautet die Projekt-ID des Agentsrbm-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; }); } }Dieser Code ist ein Auszug aus einem RBM-Beispiel-Agent.
Push-Abo
Bei einem Push-Abo überträgt Cloud Pub/Sub Nachrichten, Ereignisse und andere Anfragen an eine von Ihnen angegebene Webhook-URL.
Voraussetzungen
Für den Einstieg benötigen Sie Folgendes:
- Ein RBM-Agent
- Eine Live-Webhook-Endpunkt-URL, die
- HTTPS mit einem gültigen SSL-Zertifikat
POST
Anfragen- Die Möglichkeit, einen Parameter als Antwort auf eine Validierungsanfrage zurückzugeben
Einrichtung
- Öffne die Business Communications Developer Console, melde dich mit deinem RBM-Google-Konto an und klicke auf deinen Agent.
- Klicken Sie im linken Navigationsbereich auf Integrations (Integrationen).
- Klicken Sie auf Abo bearbeiten.
- Wählen Sie Senden aus.
- Geben Sie unter Webhook-Endpunkt-URL die Webhook-URL ein, die mit „https://“ beginnt.
Konfigurieren Sie den Webhook so, dass er eine
POST
-Anfrage mit dem angegebenen ParameterclientToken
akzeptiert und eine200 OK
-Antwort mit dem Wert des Parameterssecret
sendet.Beispiel: Ihr Webhook erhält eine POST-Anfrage mit dem folgenden Textinhalt:
{ "clientToken":"SJENCPGJESMGUFPY", "secret":"1234567890" }
Der Webhook sollte den Wert
clientToken
bestätigen. WennclientToken
korrekt ist, gibt er eine200 OK
-Antwort mit dem Textsecret: 1234567890
zurück.Klicken Sie in der Konsole auf Bestätigen.
Wenn die RBM-Plattform Ihren Webhook überprüft, wird das Dialogfeld Webhook konfigurieren geschlossen.
Klicken Sie auf Speichern.
Konfigurieren Sie den Agent so, dass er Nachrichten von Ihrem Webhook erhält:
- Wenn Sie einen Beispiel-Agent mit einem Push-Abo verwenden, folgen Sie der Anleitung in der README-Datei des Beispiels.
- Wenn Sie keinen Beispiel-Agent verwenden, konfigurieren Sie Ihre Infrastruktur so, dass Nachrichten vom Webhook an den Agent weitergeleitet werden.
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); } }
Eingehende Nachrichten überprüfen
Da Webhooks Nachrichten von beliebigen Absendern empfangen können, sollten Sie vor der Verarbeitung des Nachrichteninhalts prüfen, ob Google eingehende Nachrichten gesendet hat.
So überprüfen Sie, ob Google eine Nachricht gesendet hat, die Sie erhalten haben:
- Extrahieren Sie den
X-Goog-Signature
-Header der Nachricht. Dies ist eine base64-codierte, gehashte Kopie der Nutzlast des Nachrichtentexts. - Mit Base64 decodieren Sie die RBM-Nutzlast im
message.body
-Element der Anfrage. - Verwenden Sie das Clienttoken des Webhooks, das Sie beim Einrichten Ihres Push-Abos angegeben haben, als Schlüssel, um einen SHA512-HMAC der Byte der base64-decodierten Nachrichtennutzlast zu erstellen und das Ergebnis base64 zu codieren.
- Vergleichen Sie den Hash
X-Goog-Signature
mit dem von Ihnen erstellten Hash.- Wenn die Hashwerte übereinstimmen, haben Sie bestätigt, dass die Nachricht von Google gesendet wurde.
Wenn die Hashwerte nicht übereinstimmen, prüfen Sie Ihren Hash-Vorgang bei einer als fehlerfrei bekannten Nachricht.
Wenn Ihr Hash-Prozess korrekt funktioniert und Sie eine Nachricht erhalten, die Ihrer Meinung nach in betrügerischer Absicht an Sie gesendet wurde, wenden Sie sich an uns.
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);
Nächste Schritte
Sobald Sie Ihr Abo konfiguriert und den Agent für die Kommunikation mit Cloud Pub/Sub eingerichtet haben, kann er von Ihren Testgeräten Nachrichten empfangen. Senden Sie eine Nachricht, um die Einrichtung zu validieren.