Webhooks

Un webhook est un rappel HTTPS créé par un partenaire qui spécifie la manière dont votre agent doit répondre aux messages et aux événements. Une fois le webhook configuré, vous pouvez commencer à recevoir des messages et des événements.

Webhooks de partenaires et webhooks d'agent

Vous pouvez configurer votre webhook au niveau du partenaire ou au niveau de l'agent.

  • Le webhook partenaire s'applique à chaque agent que vous gérez. Si vos agents ont un comportement similaire ou si vous n'avez qu'un seul agent, utilisez le webhook partenaire.
  • Les webhooks d'agent s'appliquent aux agents individuels. Si vous utilisez plusieurs agents avec un comportement différent, vous pouvez définir un webhook différent pour chaque agent.

Si vous avez configuré un webhook partenaire et un webhook d'agent, le webhook d'agent est prioritaire sur son agent spécifique, tandis que le webhook de partenaire s'applique à tous les agents qui ne possèdent pas leur propre webhook.

Configurer un webhook d'agent

Vous recevez les messages envoyés à votre agent au webhook de votre partenaire. Si vous souhaitez que les messages d'un agent spécifique arrivent à un autre webhook, définissez un webhook d'agent.

  1. Ouvrez la console pour les développeurs Business Communications et connectez-vous avec votre compte Google partenaire RBM.
  2. Cliquez sur votre agent.
  3. Cliquez sur Integrations (Intégrations).
  4. Dans le champ Webhook, cliquez sur Configure (Configurer).
  5. Dans le champ URL du point de terminaison du webhook, saisissez l'URL du webhook commençant par "https://".
  6. Notez la valeur clientToken. Vous en aurez besoin pour vérifier que les messages que vous recevez proviennent bien de Google.
  7. Configurez votre webhook pour qu'il accepte une requête POST avec le paramètre clientToken spécifié et envoie une réponse 200 OK avec la valeur en texte brut du paramètre secret dans le corps de la réponse.

    Par exemple, si votre webhook reçoit une requête POST avec le corps de contenu suivant :

    {
      "clientToken":"SJENCPGJESMGUFPY",
      "secret":"1234567890"
    }
    

    Votre webhook doit alors confirmer la valeur clientToken et, si clientToken est correct, renvoyer une réponse 200 OK avec 1234567890 dans le corps de la réponse:

    // 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);
    });
    
  8. Dans la console développeur, cliquez sur Valider. Lorsque RBM vérifie votre webhook, la boîte de dialogue se ferme.

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 le contenu des messages.

Pour vérifier que Google a envoyé un message que vous avez reçu, procédez comme suit:

  1. Extrayez l'en-tête X-Goog-Signature du message. Il s'agit d'une copie hachée et encodée en base64 de la charge utile du corps du message.
  2. Décodez en base64 la charge utile RBM dans l'élément message.body de la requête.
  3. À l'aide du jeton client du webhook (que vous avez spécifié lors de la configuration du webhook) en tant que clé, créez un HMAC SHA512 des octets de la charge utile de message décodée en base64 et encodez le résultat en base64.
  4. Comparez le hachage X-Goog-Signature à celui que vous avez créé.
    • Si les hachages correspondent, vous confirmez que Google a envoyé le message.
    • Si les hachages ne correspondent pas, vérifiez votre processus de hachage sur un message connu comme correct.

      Si le processus de hachage fonctionne correctement et que vous recevez un message qui, selon vous, vous a été envoyé de manière frauduleuse, contactez-nous.

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 le webhook configuré, votre agent peut recevoir des messages de vos appareils de test. Envoyez un message pour valider votre configuration.