Passer au contenu principal
Application mobile uniquement. Les webhooks se configurent via l’application mobile Allo.

Qu’est-ce qu’un webhook ?

Les webhooks vous permettent de recevoir des notifications en temps réel depuis Allo vers vos propres systèmes ou applications. Lorsqu’un événement se produit dans Allo (comme la fin d’un appel ou la réception d’un SMS), nous envoyons une requête HTTPS POST vers votre URL. Cas d’usage courants :
  • Enregistrer les appels dans votre base de données
  • Déclencher des automations dans vos systèmes
  • Envoyer des notifications vers vos outils internes
  • Créer des intégrations personnalisées

Comment configurer les webhooks

Étape 1 : Activer le webhook

  1. Ouvrez l’application mobile Allo
  2. Allez dans Réglages
  3. Appuyez sur Intégrations
  4. Sélectionnez Webhooks
  5. Activez Activer le webhook

Étape 2 : Configurer votre URL

Entrez l’URL de votre webhook dans le champ URL. Exigences :
  • Doit utiliser HTTPS (pas HTTP)
  • Doit pouvoir recevoir des requêtes POST
  • Doit retourner un code de statut 2xx
Exemple d’URL :
https://votre-domaine.com/allo-webhook
Important : Votre endpoint doit être accessible publiquement et utiliser HTTPS. Testez votre endpoint avant d’activer le webhook.

Étape 3 : Sélectionner les types d’événements

Choisissez les événements que vous souhaitez recevoir : Appel reçu
  • Déclenché à chaque fin d’appel
  • Inclut les détails de l’appel, l’enregistrement, la transcription et le résumé
SMS reçu
  • Déclenché à chaque réception d’un SMS
  • Inclut le contenu du message et les informations de l’expéditeur
Vous pouvez activer un ou les deux types d’événements selon vos besoins.

Étape 4 : Tester la connexion

Avant de mettre en production, testez votre webhook :
  1. Faites défiler jusqu’à Tester la connexion
  2. Appuyez sur Envoyer
  3. Allo enverra une requête POST de test vers votre URL
  4. Vérifiez que votre endpoint reçoit les données de test
Si le test échoue, vérifiez :
  • Votre URL est correcte
  • Votre endpoint est accessible publiquement
  • Votre serveur accepte les requêtes POST
  • Votre endpoint retourne un code de statut 2xx

Structure des données

Événement Appel reçu

Lorsqu’un appel se termine, nous envoyons une requête POST avec les données suivantes :
{
  "event": "call.received",
  "timestamp": "2025-01-20T12:30:00Z",
  "call": {
    "id": "call_123456",
    "direction": "inbound",
    "from": "+33612345678",
    "to": "+33987654321",
    "duration": 180,
    "status": "completed",
    "recording_url": "https://...",
    "transcript": "Transcription complète de l'appel...",
    "summary": "Résumé généré par l'IA...",
    "started_at": "2025-01-20T12:30:00Z",
    "ended_at": "2025-01-20T12:33:00Z"
  }
}

Événement SMS reçu

Lorsque vous recevez un SMS, nous envoyons une requête POST avec :
{
  "event": "sms.received",
  "timestamp": "2025-01-20T12:30:00Z",
  "sms": {
    "id": "sms_123456",
    "from": "+33612345678",
    "to": "+33987654321",
    "message": "Contenu du message...",
    "received_at": "2025-01-20T12:30:00Z"
  }
}

Bonnes pratiques de sécurité

Vérifier l’authenticité du webhook

Vérifiez toujours que les requêtes webhook proviennent d’Allo pour éviter les accès non autorisés.
Mesures de sécurité recommandées :
  1. Utilisez uniquement HTTPS
  2. Validez la signature de la requête (si fournie)
  3. Vérifiez l’origine de la requête
  4. Implémentez une limitation du débit
  5. Enregistrez toutes les requêtes webhook

Gérer les échecs de webhook

Votre endpoint doit :
  • Répondre en moins de 5 secondes
  • Retourner un code de statut 2xx en cas de succès
  • Gérer les erreurs avec élégance
  • Implémenter une logique de nouvelle tentative si nécessaire
Si votre endpoint échoue :
  • Allo réessaiera jusqu’à 3 fois
  • Les nouvelles tentatives se font avec un délai exponentiel
  • Après 3 échecs, le webhook est désactivé
  • Vous devrez le réactiver manuellement

Dépannage

Vérifiez ces problèmes courants :
  • ✅ L’URL est correcte et accessible publiquement
  • ✅ Utilise HTTPS (pas HTTP)
  • ✅ L’endpoint accepte les requêtes POST
  • ✅ Le pare-feu autorise les requêtes entrantes
  • ✅ Le serveur retourne un code de statut 2xx
  • ✅ Le temps de réponse est inférieur à 5 secondes
Causes possibles :
  1. Webhook désactivé : Vérifiez que le bouton est toujours activé
  2. Types d’événements non sélectionnés : Vérifiez que vous avez activé les bons événements
  3. Endpoint hors ligne : Testez que votre serveur fonctionne
  4. Échecs de livraison : Vérifiez si le webhook a été automatiquement désactivé
Solution : Réactivez le webhook et testez à nouveau la connexion.
Pourquoi cela arrive :
  • Des problèmes réseau peuvent causer des nouvelles tentatives
  • Allo réessaie les livraisons échouées
Solution :Implémentez l’idempotence dans votre endpoint en utilisant l’ID de l’événement pour éviter le traitement en double.
Raison :Après 3 échecs consécutifs de livraison, Allo désactive automatiquement le webhook pour éviter le gaspillage de ressources.Solution :
  1. Corrigez le problème avec votre endpoint
  2. Testez qu’il fonctionne
  3. Réactivez le webhook dans l’application
  4. Lancez un test pour vérifier

Exemple d’implémentation

Node.js / Express

const express = require('express');
const app = express();

app.use(express.json());

app.post('/allo-webhook', (req, res) => {
  const event = req.body;
  
  // Enregistrer l'événement
  console.log('Webhook reçu:', event);
  
  // Traiter selon le type d'événement
  if (event.event === 'call.received') {
    // Gérer l'événement d'appel
    console.log('Appel de:', event.call.from);
    console.log('Résumé:', event.call.summary);
  } else if (event.event === 'sms.received') {
    // Gérer l'événement SMS
    console.log('SMS de:', event.sms.from);
    console.log('Message:', event.sms.message);
  }
  
  // Toujours retourner 200 pour un traitement réussi
  res.status(200).send('OK');
});

app.listen(3000, () => {
  console.log('Serveur webhook en cours d\'exécution sur le port 3000');
});

Python / Flask

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/allo-webhook', methods=['POST'])
def allo_webhook():
    event = request.get_json()
    
    # Enregistrer l'événement
    print('Webhook reçu:', event)
    
    # Traiter selon le type d'événement
    if event['event'] == 'call.received':
        # Gérer l'événement d'appel
        print('Appel de:', event['call']['from'])
        print('Résumé:', event['call']['summary'])
    elif event['event'] == 'sms.received':
        # Gérer l'événement SMS
        print('SMS de:', event['sms']['from'])
        print('Message:', event['sms']['message'])
    
    # Toujours retourner 200 pour un traitement réussi
    return jsonify({'status': 'success'}), 200

if __name__ == '__main__':
    app.run(port=3000)

Besoin d’aide ?