Passer au contenu principal

Configurer le webhook

Fournissez l’URL de Webhook où vous souhaitez que Volubile envoie les notifications dans les Paramètres d’intégration Webhook

Webhook payload

Une fois un appel terminé ou échoué, une requête POST sera envoyée à votre URL de Webhook avec les détails de l’appel. Identique à l’endpoint Get a call.
{
   "id":"3c90c3cc-0d44-4b50-8888-8dd25736052a",
   "agentId":"3c90c3cc-0d44-4b50-8888-8dd25736052a",
   "phone":"+33612345678",
   "type":"INBOUND",
   "duration":360,
   "startTime":"2024-07-30T14:35:00Z",
   "endTime":"2024-07-30T14:41:00Z",
   "anonymous":false,
   "status":"COMPLETED",
   "extractors":[
      {
         "name":"customer",
         "value":[
            {
               "name":"firstname",
               "value":[
                  "John"
               ]
            },
            {
               "name":"lastname",
               "value":[
                  "Doe"
               ]
            },
            {
               "name":"address",
               "value":[
                  "123 Main St"
               ]
            }
         ]
      },
      {
         "name":"example",
         "value":[
            "example1",
            "example2"
         ]
      }
   ],
   "extractedData":{
      "customer":{
         "firstname":"John",
         "lastname":"Doe",
         "address":"123 Main St"
      },
      "example":"example1"
   },
   "classifiers":[
      {
         "name":"Customer's request",
         "value":"Refund",
         "type":"PRIMARY"
      },
      {
         "name":"Sentiment",
         "value":"Positive",
         "type":"SECONDARY"
      }
   ],
   "classificationData":{
      "Customer's request":"Refund",
      "Sentiment":"Positive"
   },
   "context":{
      "firstName":"firstname",
      "lastName":"lastname",
      "commandNumber":"5HZ99FRT",
      "system.phone":"+33612345678"
   },
   "recorded":true,
   "summary":"Discussed project requirements and next steps.",
   "created":"2024-07-30T14:45:00Z"
}

Sécuriser le webhook

Vous pouvez choisir d’activer la sécurité pour les webhooks en générant un secret dans les Paramètres d’intégration Webhook. Lorsqu’elle est activée, nous inclurons un X-Webhook-Signature dans les en-têtes de requête vers votre URL de Webhook, vous permettant de vérifier que la payload provient de Volubile. Voici un exemple de code démontrant comment vérifier la signature HMAC :
import org.apache.commons.codec.binary.Hex;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import static java.nio.charset.StandardCharsets.UTF_8;
...

final var SECRET_KEY = "{volubile - webhook - secret}";

final var payload = """
{
    "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "agentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "type": "INBOUND",
    ...
}
""";

try {
final var mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(SECRET_KEY.getBytes(UTF_8), "HmacSHA256"));
final byte[] rawHmac = mac.doFinal(payload.getBytes());
final byte[] hexBytes = new Hex().encode(rawHmac);

final var signature = new String(hexBytes, UTF_8);
...
} catch (final NoSuchAlgorithmException | InvalidKeyException e) {
logger.error("Error occurred!");
}

Retry des webhooks

Si votre serveur retourne une erreur 50x (code d’erreur 500 ou supérieur), nous rejouerons la requête jusqu’à 4 fois avec un délai incrémental de 1 seconde afin de pas surcharger vos serveurs.