Un webhook è un URL specificato dal partner in cui la piattaforma RBM pubblica messaggi ed eventi. Questo URL funge da endpoint che riceve richieste POST HTTPS contenenti dati sugli eventi. Ciò significa che i dati vengono inviati alla tua applicazione in modo sicuro tramite HTTPS.
Un URL webhook potrebbe avere un aspetto simile a questo:
https://[your company name].com/api/rbm-events.
Una volta configurato il webhook, puoi iniziare a ricevere messaggi ed eventi.
Webhook partner e webhook agente
Puoi configurare il webhook a livello di partner o di agente.
- Il webhook partner si applica a ogni agente che gestisci. Se i tuoi agenti hanno un comportamento simile o se hai un solo agente, utilizza il webhook partner.
- I webhook dell'agente si applicano ai singoli agenti. Se gestisci più agenti con comportamenti distinti, puoi impostare un webhook diverso per ogni agente.
Se hai configurato sia un webhook partner sia un webhook agente, il webhook agente ha la precedenza sul suo agente specifico, mentre il webhook partner si applica a tutti gli agenti che non hanno un proprio webhook.
Configura un webhook dell'agente
Ricevi i messaggi inviati al tuo agente nel webhook del partner. Se vuoi che i messaggi per un agente specifico arrivino a un webhook diverso, imposta un webhook agente.
- Apri Business Communications Developer Console e accedi con il tuo Account Google partner RBM.
- Fai clic sull'agente.
- Fai clic su Integrations (Integrazioni).
- Per Webhook, fai clic su Configura.
- In URL endpoint webhook, inserisci l'URL webhook che inizia con "https://".
- Prendi nota del valore di
clientToken. Ti serve per verificare che i messaggi che ricevi provengano da Google. Configura il webhook in modo che accetti una richiesta
POSTcon il parametroclientTokenspecificato e invii una risposta200 OKcon il valore di testo normale del parametrosecretcome corpo della risposta.Ad esempio, se il webhook riceve una richiesta
POSTcon i seguenti contenuti del corpo{ "clientToken":"SJENCPGJESMGUFPY", "secret":"1234567890" }il webhook deve confermare il valore
clientTokene, seclientTokenè corretto, restituire una risposta200 OKcon1234567890come corpo della risposta:// clientToken from Configure const myClientToken = "SJENCPGJESMGUFPY"; // Example endpoint app.post("/rbm-webhook", (req, res) => { const msg = req.body; if (msg.clientToken === myClientToken) { res.status(200).send(msg.secret); return; } res.send(400); });In Developer Console, fai clic su Verifica. Quando RBM verifica il webhook, la finestra di dialogo si chiude.
Verificare i messaggi in arrivo
Poiché i webhook possono ricevere messaggi da qualsiasi mittente, devi verificare che Google abbia inviato i messaggi in arrivo prima di elaborarne il contenuto.
Per verificare che Google abbia inviato un messaggio che hai ricevuto, segui questi passaggi:
- Estrai l'intestazione
X-Goog-Signaturedel messaggio. Si tratta di una copia con hash e codifica base64 del payload del corpo del messaggio. - Decodifica in base64 il payload RBM nell'elemento
message.bodydella richiesta. - Utilizzando il token client del webhook (che hai specificato durante la configurazione del webhook) come chiave, crea un HMAC SHA512 dei byte del payload del messaggio con codifica Base64 e codifica Base64 il risultato.
- Confronta l'hash
X-Goog-Signaturecon l'hash che hai creato.- Se gli hash corrispondono, hai la conferma che il messaggio è stato inviato da Google.
Se gli hash non corrispondono, controlla la procedura di hashing su un messaggio di cui è noto il corretto funzionamento.
Se la procedura di hashing funziona correttamente e ricevi un messaggio che ritieni ti sia stato inviato in modo fraudolento, contattaci.
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);
Gestione dei messaggi
La restituzione di un valore diverso da 200 OK da un webhook viene considerata un errore di consegna.
Gli sviluppatori devono tenere presente che l'invio di messaggi a velocità elevate genererà notifiche webhook a velocità elevate e devono progettare il codice in modo da gestire le notifiche alla velocità prevista. È importante che gli sviluppatori
prendano in considerazione le situazioni che potrebbero causare risposte di errore, incluse le risposte 500
dal contenitore web, i timeout o gli errori upstream. Aspetti da considerare:
- Verifica che le protezioni DDoS siano configurate per gestire la velocità prevista delle notifiche webhook.
- Verifica che le risorse come i pool di connessioni al database non si esauriscano e
non producano timeout o risposte
500.
Gli sviluppatori devono progettare i propri sistemi in modo che l'elaborazione degli eventi RBM avvenga
in modo asincrono e non impedisca al webhook di restituire 200 OK.

È importante non elaborare l'evento RBM all'interno del webhook stesso. Qualsiasi errore o ritardo durante l'elaborazione può influire sul codice restituito del webhook:

Comportamento in caso di mancata pubblicazione
RBM utilizza un meccanismo di backoff e ripetizione quando riceve una risposta diversa da
200 OK da una chiamata webhook. RBM aumenterà il tempo di attesa tra i tentativi
fino a un massimo di 600 secondi. I tentativi verranno ripetuti per 7 giorni,
dopodiché il messaggio verrà eliminato.
Implicazioni dei webhook a livello di agente
RBM accoda i messaggi per un partner in una coda. Se un partner utilizza webhook a livello di agente, è importante tenere presente che l'errore di un webhook influirà sulla distribuzione ad altri webhook. I webhook appartenenti ad altri agenti verranno chiamati durante il periodo di backoff di un messaggio non riuscito. Tuttavia, man mano che i messaggi non riusciti vengono messi in coda per il nuovo tentativo, i tassi di recapito complessivi diminuiranno e altri agenti ne risentiranno.
È importante che gli sviluppatori comprendano questo modello e codifichino di conseguenza, accettando i messaggi e mettendoli in coda per l'elaborazione per ridurre al minimo la possibilità di restituire un errore.
Passaggi successivi
Una volta configurato il webhook, l'agente può ricevere messaggi dai tuoi dispositivi di test. Invia un messaggio per convalidare la configurazione.