Webhooks

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

Webhooks de socios y de agentes

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

  • El webhook de tu socio se aplica a cada agente 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 uno 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 los mensajes enviados a tu agente en tu webhook de socio. Si quieres 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 (Webhook endpoint URL), 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ía 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"
    }
    

    tu webhook debe confirmar el valor clientToken y, si clientToken es correcto, mostrar una respuesta 200 OK con 1234567890 como el 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 los 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 y codificada en base64 de la carga útil del cuerpo del mensaje.
  2. En Base64, decodifica 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 un 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 hashes coinciden, confirmaste que Google envió el mensaje.
    • Si los hashes no coinciden, verifica tu proceso en un mensaje que funcione correctamente.

      Si el proceso 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);
  

Manejo de mensajes

Mostrar cualquier dato que no sea 200 OK desde un webhook se considera un error de entrega.

Los desarrolladores deben tener en cuenta que enviar mensajes a tasas altas generará notificaciones de webhook a tasas altas y deben diseñar su código para garantizar que puedan consumir notificaciones a la frecuencia esperada. Es importante que los desarrolladores consideren situaciones que pueden causar respuestas con errores, incluidas las respuestas 500 de su contenedor web, tiempos de espera o fallas ascendentes. Entre los aspectos que debes tener en cuenta, se incluyen los siguientes:

  • Asegúrate de que tus protecciones contra DDoS estén configuradas para manejar la tasa esperada de notificaciones de webhook.
  • Asegúrate de que los recursos como los grupos de conexiones de bases de datos no se queden y produzcan tiempos de espera o respuestas 500.

Comportamiento ante errores de entrega

RBM usa un mecanismo de retirada y reintento cuando recibe una respuesta distinta de 200 OK de una llamada de webhook. RBM aumentará el tiempo de espera entre reintentos hasta un máximo de 600 segundos. El proceso de baja continuará durante 7 días. Después de este período, se descartará el mensaje.

Implicaciones de los webhooks a nivel del agente

RBM pone en cola los mensajes de un socio en una sola cola. Cuando un socio usa webhooks a nivel de agente, es importante tener en cuenta que la falla de un webhook afectará la entrega a otros webhooks. Los webhooks que pertenecen a otros agentes se llamarán durante el período de retirada de un mensaje con errores, pero, a medida que los mensajes con errores se ponen en cola para reintentar, la frecuencia de entrega general disminuirá y otros agentes se verán afectados.

Es importante que los desarrolladores comprendan este modelo y código como corresponde. Tanto como sea posible, acepten mensajes y los pongan en cola para su procesamiento a fin de minimizar la oportunidad de mostrar una falla.

Próximos pasos

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