Aller au contenu
Voxivra

Développement Asterisk AGI : une logique d'appel dynamique et robuste

Nous développons des services AGI et FastAGI qui relient le dialplan Asterisk à vos bases de données et à votre CRM, avec la fiabilité qu'exige un système téléphonique en production.

Asterisk AGI (Asterisk Gateway Interface) est la plus ancienne interface de programmation d’Asterisk, et l’une des plus pratiques pour intégrer une vraie logique métier dans un système téléphonique. Lorsqu’un appel atteint l’application AGI() du dialplan, Asterisk confie le contrôle à un programme externe qui peut interroger une base de données, appeler l’API d’un CRM, diffuser des messages, recueillir des touches DTMF et décider de la suite de l’appel. Voxivra conçoit des applications Asterisk AGI depuis les débuts de la plateforme, et nous l’utilisons encore en production chaque fois qu’elle est le bon outil.

Le fonctionnement de l’AGI

L’AGI est un protocole texte, ligne par ligne. Quand un canal entre dans AGI(), Asterisk envoie d’abord un bloc de variables agi_* (numéro appelant, numéro composé, nom du canal, contexte, identifiant unique, etc.), suivi d’une ligne vide. Le programme envoie ensuite des commandes comme ANSWER, STREAM FILE, GET DATA, SET VARIABLE ou EXEC, et Asterisk répond à chacune par une ligne de résultat (200 result=...).

Deux caractéristiques orientent la conception :

  • L’AGI est synchrone. Chaque commande bloque jusqu’à la réponse d’Asterisk, et le script « possède » le canal pendant son exécution. La logique est lisible, mais un appel d’API lent se traduit par un silence pour l’appelant.
  • Le dialplan garde la main. À la fin du script, l’appel reprend à la priorité suivante. La variable AGISTATUS indique si le script a réussi, échoué ou constaté un raccrochage.

AGI, FastAGI et EAGI

Variante Transport Usage type
AGI Nouveau processus local par appel (stdin/stdout) Petits scripts, faible volume
FastAGI TCP vers un service permanent (agi://hôte:4573) Production, pools de connexions, serveurs applicatifs séparés
EAGI Comme l’AGI, avec l’audio entrant sur le descripteur 3 Anciens essais de reconnaissance vocale ; ARI est souvent préférable aujourd’hui

Au-delà de quelques appels simultanés, nous utilisons FastAGI. Lancer un interpréteur à chaque appel consomme processeur et mémoire sur le serveur Asterisk et empêche de réutiliser les connexions aux bases de données. Un service FastAGI tourne de façon autonome, peut être placé derrière un répartiteur de charge et mis à jour sans toucher à Asterisk.

Un schéma FastAGI typique

Voici un dialplan simplifié qui confie un appel entrant à un service de routage FastAGI, puis exploite les variables renvoyées :

[inbound]
exten => _X.,1,Answer()
 same => n,Set(TIMEOUT(absolute)=3600)
 same => n,AGI(agi://10.0.10.20:4573/route?lang=fr)
 same => n,GotoIf($["${AGISTATUS}" != "SUCCESS"]?fallback,s,1)
 same => n,Goto(${ROUTE_CONTEXT},${ROUTE_EXTEN},1)

[fallback]
exten => s,1,Playback(please-hold)
 same => n,Queue(general)

Le service FastAGI recherche l’appelant dans le CRM, vérifie les heures d’ouverture et les dossiers en cours, puis définit ROUTE_CONTEXT et ROUTE_EXTEN avec SET VARIABLE. Si le service est injoignable, le dialplan bascule vers une file d’attente générale au lieu de couper l’appel. Dans nos projets, cette branche de secours n’est jamais facultative : la téléphonie doit continuer de fonctionner quand un serveur applicatif tombe.

Ce que nous réalisons avec Asterisk AGI

  • Routage basé sur les données : identification de l’appelant par numéro ou numéro de compte, puis acheminement selon le niveau de service, la langue, le dossier ouvert ou l’agent attitré.
  • Menus SVI dynamiques (serveur vocal interactif) générés depuis une base de données plutôt que codés en dur, pour que les équipes métier modifient les options sans toucher au dialplan. Voir notre service de SVI sur mesure.
  • Libre-service : consultation de solde ou de commande, vérification de NIP, confirmation de rendez-vous, le tout en DTMF.
  • Intégration CRM et ERP : création de fiches d’appel, remontée de la fiche client à l’agent, journalisation des résultats, comme décrit sur notre page intégration CRM et ERP.
  • Modernisation : réécriture d’anciens scripts lancés à chaque appel en services FastAGI testés et maintenables.

Les pratiques qui rendent l’AGI fiable

L’AGI est facile à écrire et facile à mal écrire. Les problèmes que nous corrigeons en audit sont prévisibles ; nous les évitons dès la conception.

Des délais d’expiration partout

Chaque appel externe dans un gestionnaire AGI a un délai strict, bien inférieur à ce qu’un appelant tolère en silence. Si le CRM ne répond pas à temps, le script renvoie une valeur par défaut sûre et l’appel continue. Pour les requêtes potentiellement lentes, nous diffusons un court message ou une musique d’attente, ou nous préchargeons les données plus tôt dans le parcours.

La gestion du raccrochage

Les appelants raccrochent en plein script. Un gestionnaire robuste détecte le raccrochage, cesse d’envoyer des commandes au canal et termine malgré tout ses traitements, comme l’écriture de la fiche d’appel. Le travail post-appel qui n’a pas besoin du canal est déplacé dans l’extension h, un gestionnaire de raccrochage ou une file de messages.

Des services sans état

Pour exécuter plusieurs instances d’un serveur FastAGI, celui-ci ne doit pas conserver l’état des appels en mémoire. Nous gardons l’état dans les variables du dialplan, une base de données ou un cache, ce qui simplifie la mise à l’échelle horizontale et les mises à jour progressives.

L’observabilité

Chaque requête AGI journalise l’identifiant unique Asterisk (agi_uniqueid), ce qui permet de suivre un appel du dialplan jusqu’au CRM. Nous ajoutons des métriques de latence et de taux d’erreur par gestionnaire : « le SVI est lent » devient un diagnostic précis.

La sécurité

FastAGI n’offre ni authentification ni chiffrement. Le service doit écouter uniquement sur un réseau privé ou être restreint par pare-feu aux serveurs Asterisk. Nous n’exposons jamais le port 4573 à Internet. Plus de détails dans notre expertise en sécurité VoIP.

Quand Voxivra recommande l’AGI, et quand l’éviter

Nous recommandons l’AGI, et plus précisément FastAGI, lorsque :

  • vous avez déjà un dialplan fonctionnel et souhaitez y ajouter des décisions ou des recherches sans réécrire le parcours d’appel ;
  • l’interaction repose surtout sur des messages et du DTMF, avec une logique linéaire, étape par étape ;
  • votre équipe maîtrise le dialplan et veut qu’il reste la référence.

Nous privilégions plutôt Asterisk ARI lorsque l’application doit piloter plusieurs canaux et ponts à la fois, réagir à des événements asynchrones ou diffuser l’audio vers la reconnaissance vocale d’un voicebot conversationnel. Le modèle bloquant de l’AGI n’est pas conçu pour l’audio bidirectionnel en temps réel. Beaucoup de nos déploiements combinent les deux : AGI pour le routage et le libre-service simple, ARI pour les parties pilotées par l’IA. Nous comparons les deux approches dans l’article Asterisk : AGI ou ARI ?.

Notre démarche sur un projet AGI

  1. Revue de votre dialplan, de vos scripts et de vos volumes d’appels.
  2. Conception des gestionnaires, des sources de données, des délais et des chemins de secours.
  3. Développement du service FastAGI, avec des tests automatisés qui simulent le protocole AGI.
  4. Tests de charge avec des générateurs de trafic SIP avant la mise en service.
  5. Déploiement et support, avec supervision et documentation pour votre équipe.

Si votre code AGI est devenu difficile à maintenir, ou si vous avez un nouveau parcours d’appel à construire, présentez-nous votre environnement : nous vous dirons franchement si l’AGI est la bonne option.

Questions fréquentes

Quelle est la différence entre AGI et FastAGI ?

Avec l'AGI classique, Asterisk lance un nouveau processus sur le serveur à chaque appel qui atteint l'application AGI(). FastAGI transporte le même protocole sur une connexion TCP vers un service permanent, généralement sur le port 4573. La logique peut alors tourner sur un autre serveur, réutiliser ses connexions et évoluer indépendamment d'Asterisk.

L'AGI est-elle dépassée depuis l'arrivée d'ARI ?

Non. L'AGI est toujours maintenue et reste le moyen le plus simple d'ajouter des décisions basées sur les données à un dialplan existant. ARI convient mieux aux applications qui doivent piloter finement canaux, ponts et flux audio, mais beaucoup de systèmes en production utilisent les deux.

Quels langages peut-on utiliser pour l'AGI ?

Tout langage capable de lire et d'écrire des lignes de texte convient, puisque l'AGI est un protocole texte sur stdin/stdout ou TCP. Python, PHP, Node.js, Go et Java sont courants, et des bibliothèques éprouvées existent pour la plupart.

Pouvez-vous reprendre un code AGI existant ?

Oui. Nous auditons et remanions régulièrement des scripts AGI hérités : passage en FastAGI, ajout de délais d'expiration et de gestion d'erreurs, suppression des appels bloquants et documentation du dialplan pour qu'il reste maintenable.

À lire aussi

Un projet de téléphonie ou d'IA vocale ?

Parlons-en lors d'une consultation gratuite de 30 minutes, sans engagement.

Planifier une consultation