Webhooks

Un webhook es una devolución de llamada HTTPS creada por un socio que especifica cómo debe responder tu agente a los mensajes y eventos. Una vez que configures tu webhook, podrás comenzar a recibir mensajes y eventos.

Webhooks de socios y de agentes

Puedes configurar tu webhook a nivel de socio o de agente.

  • Tu webhook de socio se aplica a todos los agentes que mantienes. Si tus agentes tienen un comportamiento similar o si solo tienes un agente, usa el webhook de socio.
  • Los webhooks de agentes se aplican a agentes individuales. Si operas varios agentes con un comportamiento distinto, puedes configurar un webhook diferente para cada agente.

Si configuraste un webhook de socio y un webhook de agente, el webhook del agente tiene prioridad en su agente específico, mientras que el webhook de socio se aplica a cualquier agente que no tenga su propio webhook.

Configura un webhook de agente

Recibes mensajes enviados a tu agente a través del webhook de tu socio. Si deseas que los mensajes para un agente específico lleguen a un webhook diferente, configura un webhook de agente.

  1. Abre la consola para desarrolladores de Business Communications y accede con tu Cuenta de Google de socio de RBM.
  2. Haz clic en tu agente.
  3. Haz clic en Integrations.
  4. En Webhook, haz clic en Configurar.
  5. En URL de extremo de webhook, ingresa la URL de webhook que comience con “https://”.
  6. Anota tu valor de clientToken. Lo necesitas para verificar que los mensajes que recibes provengan de Google.
  7. Configura tu webhook para que acepte una solicitud POST con el parámetro clientToken especificado y envíe una respuesta 200 OK con el valor de texto sin formato del parámetro secret como cuerpo de la respuesta.

    Por ejemplo, si tu webhook recibe una solicitud POST con el siguiente contenido del cuerpo

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

    Luego, el webhook debería confirmar el valor clientToken y, si clientToken es correcto, mostrar una respuesta 200 OK con 1234567890 como cuerpo de la respuesta:

    // 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. En Play Console, haz clic en Verificar. Cuando RBM verifica tu webhook, se cierra el diálogo.

Verifica los mensajes entrantes

Debido a que los webhooks pueden recibir mensajes de cualquier remitente, debes verificar que Google haya enviado mensajes entrantes antes de procesar el contenido del mensaje.

Para verificar que Google envió un mensaje que recibiste, sigue estos pasos:

  1. Extrae el encabezado X-Goog-Signature del mensaje. Esta es una copia con hash codificada en base64 de la carga útil del cuerpo del mensaje.
  2. Decodifica en base 64 la carga útil de RBM en el elemento message.body de la solicitud.
  3. Con el token de cliente de tu webhook (que especificaste cuando configuraste el webhook) como clave, crea una HMAC SHA512 de los bytes de la carga útil del mensaje decodificado en base64 y codifica en Base64 el resultado.
  4. Compara el hash X-Goog-Signature con el hash que creaste.
    • Si los hash coinciden, confirmaste que Google envió el mensaje.
    • Si los hash no coinciden, verifica tu proceso de hash en un mensaje que se considere bueno.

      Si el proceso de generación de hash funciona correctamente y recibes un mensaje que crees que se te envió de forma fraudulenta, comunícate con nosotros.

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óximos pasos

Una vez que configures el webhook, el agente podrá recibir mensajes de los dispositivos de prueba. Envía un mensaje para validar la configuración.