[TUTO] comment obtenir des fichiers ressources wazo api pour l'ia

Bonjour,

Il y a quelque temps je me suis créé de la documentation api wazo pour perplexity et autres IA et llm.

Je n’ai plus les prompts exacts mais je vais expliquer le principe.

Pour commencer je suis allé sur https://api.wazo.io/ , pour chaque composant je suis allé sur API console et j’ai téléchargé la definition openapi en yml. Une fois le tout téléchargé , je suis allé sur perplexity en utilisant le modele claude de l’époque et j’ai inséré tout les fichiers de definition openapi *.yml , en substance j’ai demandé à ce que je dispose de la bible des api wazo, extremement détaillé et expliqué au format markdown. Bon sachant que j’ai un prompt optimizer à partir de ces quelques mots ça m’a sorti un prompt de minimum 30 phrases. J’ai repris ce prompt en inserant toute les définitions openapi , et j’ai obtenu des fichier markdown, j’ai reitéré, jusqua obtenir le tout. Ensuite sur une autre session j’ai demandé à l’ia de me lister dans un document tout les scénarios chainés existant dans un fichiier markdown via l’api toujours en important les définitions de l’openapi. Bon la théorie c’est bien, mais le réeel c’est mieux. Quelques mois après j’ai donné tout ces fichier à mon hermes agent, j’ai mis en place un wazo de test auquel hermes agent avit accès afin qu’il vérifie tout les fichiers ressource via le serveur wazo de test auquel il avait accès via tailscale. Il a corrigé des fichiers ressources!!! Avec ces ressources il sait quasiment tout créé tout seul via l’api wazo. En tout cas il a su faire l’installation tout seul , la conf tout seul et plus!!! Je lui fais testé ,validé et documenté tout ce qu’il fait. Il bosse pas mal . J’avais fais le meme test avec openclaw il m’avait tout déglingué, je suis joueur , c’est qu’une vm !!

lol :smiley: @+

Plutot que me faire chier à tout tester moi meme, bien que je sois un vieux crabe, on est en 2026, autant laisser l’ia travailler et faire ses rapports!!! lol :smiley:

Avec ce travail j’ai constaté quelques coquilles dans les api de wazo pltform et j’ai aussi compris que tout n’était pas exposé via l’api ou configuré sur wazo plateform!!! :wink:

Heureusement que j’ai fais bossé l’ia avec tests réels car la documentation est insuffisante et ne reflete pas la réalité des dernières versions!!! :wink:

J’ai test aussi la version micro service dockerizé qui était sabré, j’ai recréé avec l’ia le service qui était mock pour que ça tourne , ça fonctionnait bien mais je suis pas fan de docker!!! lol

J’ai pas ma langue dans ma poche, mais j’ai l’impression que la version wazo plateform est sabré pour poussé les gens pas trop bricoleur vers wazo portal!!!

Après c’est sur qu’il faut bien qu’une boite se finance, c’est sur que l’équilibre entre le gratuit et le payant n’est pas évident!!!

Bonjour,

J’ai fait pas mal de retours aux devs backend sur les fautes de documentation api et certaines sont corrigés.

Mais l’api ne couvre pas la logique et la documentation encore moins.

C’est cette logique, et/ou enchaînements d’actions qui est important.

Tu devrais utiliser le code source du wazo-js-sdk et mes applications toriphone pour améliorer ton agent ia.

Il serait même bien de récrire le js-sdk en intégrant toute la logique. J’avais commencé sur un repo privé, mais j’utilise peu l’ia et en suis déçu (chatgpt en gratuit).

Et cela me demande trop de temps.

L’idée serait d’avoir la gestion des events, un store des donnés directement dans le sdk. Ainsi il ne manquerai que le front pour avoir son app.

Et une ia pourrait utiliser ce sdk comme élément de compréhension des apis et du système, au point d’en faire rapidement une documentation complète et de pouvoir tout faire en quelques prompts.

Cheers !

Hello Merci pour ton retour,

Effectivement j’ai oublié de le mentionné mais j’avais inclus comme ressource le wazo-js-sdk , ce qui m’a permis de corriger et avoir plus d’informations. Effectivement il manque beaucoup d’information sur la logique et enchainement d’action je m’en suis aperçu lorsque j’ai créé une application permettant de créer en masse des lignes completes (utilisateurs, lignes, extensions, endpoints SIP, voicemails, comptes d’authentification) . Pour le gros travail de codage avec l’ia j’utilise hermes agent avec les modeles minimax3 ou deepseekv4 flash avec mes fichiers ressources, plus une vm de test wazo auxquels à accès hermes agent pour valider les informations et faire des tests. Pour l’instant j’ai une partie dela logique dans des fichier markdown , voici par exemple WAZO_COOKBOOK_PART1.md


PARTIE 1 : Provisioning Core & Utilisateurs

Cette partie couvre les workflows fondamentaux de gestion des utilisateurs et du provisioning de base. Ces scénarios sont les plus fréquents et constituent le socle de toute intégration Wazo.


1.1 Création d’un Utilisateur Complet (8 Étapes)

Objectif

Créer un utilisateur téléphonique complet avec tous les composants nécessaires : compte d’accès, ligne SIP, extension, boîte vocale, et les liaisons entre tous ces éléments. C’est le scénario le plus courant pour le provisioning de nouveaux employés.

Services impliqués

  • wazo-confd : Gestion des utilisateurs, lignes, extensions, endpoints SIP, voicemails
  • wazo-auth : Gestion des comptes d’authentification

Le Workflow détaillé

Étape 1 : Créer le compte utilisateur dans confd

POST /api/confd/1.1/users
Content-Type: application/json
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Payload :

{
  "firstname": "Jean",
  "lastname": "Dupont",
  "email": "jean.dupont@acme.fr",
  "username": "jdupont",
  "caller_id": {"name": "Jean Dupont", "number": "1001"}
}

Réponse :

{
  "uuid": "a1223fe6-bff8-4fb6-a982-f9157dea5094",
  "firstname": "Jean",
  "lastname": "Dupont",
  "email": "jean.dupont@acme.fr",
  "username": "jdupont",
  ...
}

:link: Chaînage : Récupérez le champ uuid — il sera utilisé dans toutes les étapes suivantes pour lier les ressources. Stockez-le dans USER_UUID.

Étape 2 : Créer la boîte vocale (optionnel mais recommandé)

POST /api/confd/1.1/voicemails
Content-Type: application/json
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Payload :

{
  "name": "jdupont",
  "number": "1001",
  "email": "jean.dupont@acme.fr",
  "timezone": "Europe/Paris",
  "password": "1234",
  "max_messages": 50
}

Réponse :

{
  "id": 12,
  "name": "jdupont",
  "number": "1001",
  ...
}

:link: Chaînage : Récupérez le champ id — il sera utilisé pour lier la boîte vocale à l’utilisateur. Stockez-le dans VM_ID.

Étape 3 : Créer l’endpoint SIP technique

POST /api/confd/1.1/endpoints/sip
Content-Type: application/json
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Payload :

{
  "label": "jdupont-sip",
  "name": "jdupont",
  "auth_section_options": [
    ["username", "jdupont"],
    ["password", "secure_password_sip"]
  ],
  "endpoint_section_options": [
    ["disallow", "all"],
    ["allow", "ulaw,alaw,g722"],
    ["direct_media", "no"],
    ["rtp_symmetric", "yes"]
  ]
}

Réponse :

{
  "uuid": "b2345gh7-abc9-4def-ghij-klmnopqr6789",
  "label": "jdupont-sip",
  "name": "jdupont",
  ...
}

:link: Chaînage : Récupérez le champ uuid — il sera utilisé pour lier l’endpoint SIP à la ligne. Stockez-le dans SIP_UUID.

Étape 4 : Créer la ligne téléphonique

POST /api/confd/1.1/lines
Content-Type: application/json
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Payload :

{
  "name": "jdupont-line",
  "context": "default",
  "caller_id_name": "Jean Dupont",
  "caller_id_number": "1001"
}

Réponse :

{
  "id": 25,
  "name": "jdupont-line",
  "context": "default",
  ...
}

:link: Chaînage : Récupérez le champ id — il sera utilisé pour lier l’extension, l’endpoint SIP et l’utilisateur. Stockez-le dans LINE_ID.

Étape 5 : Créer l’extension

POST /api/confd/1.1/extensions
Content-Type: application/json
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Payload :

{
  "exten": "1001",
  "context": "default"
}

Réponse :

{
  "id": 156,
  "exten": "1001",
  "context": "default"
}

:link: Chaînage : Récupérez le champ id — il sera utilisé pour lier l’extension à la ligne. Stockez-le dans EXT_ID.

Étape 6 : Lier l’extension à la ligne

PUT /api/confd/1.1/lines/{LINE_ID}/extensions/{EXT_ID}
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Réponse : 204 No Content

Étape 7 : Lier l’endpoint SIP à la ligne

PUT /api/confd/1.1/lines/{LINE_ID}/endpoints/sip/{SIP_UUID}
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Réponse : 204 No Content

Étape 8 : Lier la ligne à l’utilisateur

PUT /api/confd/1.1/users/{USER_UUID}/lines/{LINE_ID}
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Réponse : 204 No Content

Étape 9 (optionnel) : Lier la boîte vocale à l’utilisateur

PUT /api/confd/1.1/users/{USER_UUID}/voicemails/{VM_ID}
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Réponse : 204 No Content

Étape 10 : Créer le compte d’authentification

POST /api/auth/0.1/users
Content-Type: application/json
X-Auth-Token: {admin_token}

Payload :

{
  "username": "jdupont",
  "password": "initial_password",
  "firstname": "Jean",
  "lastname": "Dupont",
  "email": "jean.dupont@acme.fr"
}

Réponse :

{
  "uuid": "c3456ij8-def0-4abc-lmno-pqrstu901234",
  "username": "jdupont",
  ...
}

:link: Chaînage : Récupérez le champ uuid — il correspond au compte d’authentification. Stockez-le dans AUTH_USER_UUID.

Étape 11 : Lier le compte auth à l’utilisateur confd

PUT /api/confd/1.1/users/{USER_UUID}
Content-Type: application/json
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Payload :

{
  "auth_user_uuid": "c3456ij8-def0-4abc-lmno-pqrstu901234"
}

Réponse : 200 OK

Point d’attention / Warning

:warning: Important :

  • L’ordre des étapes est STRICT — l’extension doit être créée AVANT d’être liée à la ligne
  • Les passwords SIP doivent être sécurisés (minimum 12 caractères, complexité)
  • Le context doit exister dans Wazo (créez-le via /api/confd/1.1/contexts si nécessaire)
  • La boîte vocale est optionnelle mais recommandée pour un utilisateur complet

1.2 Suppression Propre d’un Utilisateur (8 Étapes)

Objectif

Supprimer un utilisateur et toutes ses ressources associées de manière propre et ordonnée, sans laisser d’orphelins dans la base de données. L’ordre de suppression est critique pour éviter les erreurs de contrainte.

Services impliqués

  • wazo-confd : Tous les composants de configuration
  • wazo-provd : Gestion des devices

Le Workflow détaillé

Étape 1 : Récupérer les lignes de l’utilisateur

GET /api/confd/1.1/users/{USER_UUID}/lines
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Réponse :

{
  "items": [
    {
      "id": 25,
      "name": "jdupont-line",
      ...
    }
  ]
}

:link: Chaînage : Stockez le LINE_ID = 25

Étape 2 : Récupérer les devices associés à la ligne

GET /api/confd/1.1/lines/{LINE_ID}/devices
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Réponse :

{
  "items": [
    {
      "id": "001122334455",
      "mac": "001122334455",
      "model": "Yealink T46S",
      ...
    }
  ]
}

:link: Chaînage : Stockez le DEVICE_ID = 001122334455

Étape 3 : Dissocier le device de la ligne

DELETE /api/confd/1.1/lines/{LINE_ID}/devices/{DEVICE_ID}
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Réponse : 204 No Content

Étape 4 : Réinitialiser le device en mode autoprov

POST /api/provd/0.1/devices/{DEVICE_ID}/autoprov
X-Auth-Token: {admin_token}

Réponse : 200 OK

Cette étape permet au téléphone de se réapprovisionner automatiquement lors du prochain redémarrage.

Étape 5 : Récupérer les extensions de la ligne

GET /api/confd/1.1/lines/{LINE_ID}/extensions
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Réponse :

{
  "items": [
    {
      "id": 156,
      "exten": "1001",
      "context": "default"
    }
  ]
}

:link: Chaphinage : Stockez EXT_ID = 156

Étape 6 : Dissocier l’extension de la ligne

DELETE /api/confd/1.1/lines/{LINE_ID}/extensions/{EXT_ID}
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Réponse : 204 No Content

Étape 7 : Dissocier la ligne de l’utilisateur

DELETE /api/confd/1.1/users/{USER_UUID}/lines/{LINE_ID}
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Réponse : 204 No Content

Étape 8 : Supprimer l’extension

DELETE /api/confd/1.1/extensions/{EXT_ID}
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Réponse : 204 No Content

Étape 9 : Supprimer la ligne

DELETE /api/confd/1.1/lines/{LINE_ID}
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Réponse : 204 No Content

Étape 10 : Supprimer l’endpoint SIP

DELETE /api/confd/1.1/endpoints/sip/{SIP_UUID}
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Réponse : 204 No Content

Étape 11 : Supprimer l’utilisateur

DELETE /api/confd/1.1/users/{USER_UUID}
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Réponse : 204 No Content

Point d’attention / Warning

:warning: Important :

  • L’ORDRE EST CRITIQUE : supprimez toujours dans l’ordre inverse de la création
  • Ne supprimez jamais un endpoint SIP utilisé par d’autres lignes
  • Le device doit être dissocié AVANT de supprimer la ligne
  • Vérifiez qu’aucun trunk ou queue n’utilise ces ressources avant suppression

1.3 Importation CSV en Masse d’Utilisateurs (4 Étapes)

Objectif

Importer rapidement des dizaines ou centaines d’utilisateurs simultanément via un fichier CSV, en utilisant l’import automatique de Wazo qui crée tous les éléments en une seule opération.

Services impliqués

  • wazo-confd : Import des utilisateurs via endpoint spécialisé

Le Workflow détaillé

Étape 1 : Récupérer le template CSV

GET /api/confd/1.1/users/export
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}
Accept: text/csv

Réponse (CSV) :

firstname,lastname,email,username,extension,context,line_name,voicemail_number
Jean,Dupont,jd@acme.fr,jdupont,1001,default,jd-line,1001
Marie,Martin,mm@acme.fr,mmartin,1002,default,mm-line,1002

:link: Chaînage : Ce template vous montre les colonnes attendues. Préparez votre fichier CSV en suivant ce format.

Étape 2 : Importer le fichier CSV

POST /api/confd/1.1/users/import
Content-Type: text/csv
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Body (CSV) :

firstname,lastname,email,username,extension,context,line_name,voicemail_number
Jean,Dupont,jd@acme.fr,jdupont,1001,default,jd-line,1001
Marie,Martin,mm@acme.fr,mmartin,1002,default,mm-line,1002
Pierre,Durand,pd@acme.fr,pdurand,1003,default,pd-line,1003

Réponse :

{
  "created_users": [
    {"uuid": "user-uuid-1", "username": "jdupont"},
    {"uuid": "user-uuid-2", "username": "mmartin"},
    {"uuid": "user-uuid-3", "username": "pdurand"}
  ],
  "errors": []
}

:link: Chaînage : La réponse contient les UUIDs créés. Stockez-les pour les utiliser dans les étapes suivantes si besoin.

Étape 3 : Vérifier les créations

GET /api/confd/1.1/users?search=Dupont
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Réponse :

{
  "items": [
    {
      "uuid": "user-uuid-1",
      "firstname": "Jean",
      "lastname": "Dupont",
      ...
    }
  ]
}

Étape 4 : Associer les lignes aux utilisateurs (si nécessaire)

PUT /api/confd/1.1/users/{USER_UUID}/lines/{LINE_ID}
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Point d’attention / Warning

:warning: Important :

  • L’import CSV crée automatiquement les lignes et extensions correspondantes
  • Les voicemails ne sont PAS créés automatiquement — faites-le séparément si besoin
  • En cas d’erreur sur une ligne, les autres lignes du fichier sont quand même créées
  • Vérifiez toujours le champ errors dans la réponse

1.4 Renvois d’Appel Utilisateur (4 Étapes)

Objectif

Configurer les renvois d’appel (forwards) pour un utilisateur : inconditionnel, sur occupation, et sur non-réponse. Ces services permettent la continuité des communications en cas d’absence.

Services impliqués

  • wazo-confd : Configuration des services de renvoi

Le Workflow détaillé

Étape 1 : Lister les renvois actuels

GET /api/confd/1.1/users/{USER_UUID}/forwards
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Réponse :

{
  "items": [
    {
      "type": "unconditional",
      "enabled": false,
      "destination": null
    },
    {
      "type": "busy",
      "enabled": false,
      "destination": null
    },
    {
      "type": "noanswer",
      "enabled": false,
      "destination": null
    }
  ]
}

Étape 2 : Configurer le renvoi inconditionnel

PUT /api/confd/1.1/users/{USER_UUID}/forwards/unconditional
Content-Type: application/json
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Payload :

{
  "enabled": true,
  "destination": "1005"
}

Réponse :

{
  "enabled": true,
  "destination": "1005"
}

:link: Chaînage : Le numéro de destination peut être une extension interne ou un numéro externe

Étape 3 : Configurer le renvoi sur occupation

PUT /api/confd/1.1/users/{USER_UUID}/forwards/busy
Content-Type: application/json
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Payload :

{
  "enabled": true,
  "destination": "2001"
}

Étape 4 : Configurer le renvoi sur non-réponse

PUT /api/confd/1.1/users/{USER_UUID}/forwards/noanswer
Content-Type: application/json
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Payload :

{
  "enabled": true,
  "destination": "3000",
  "timeout": 18
}
Paramètre Description
timeout Durée avant renvoi (en secondes, défaut: 18)

Point d’attention / Warning

:warning: Important :

  • Le renvoi inconditionnel est prioritaire sur tous les autres
  • Le timeout du renvoi sur non-réponse doit être inférieur au timeout de la ligne
  • Les destinations externes nécessitent les droits d’appels sortants appropriés

1.5 Services Utilisateur : DND et Filtre d’Appel (4 Étapes)

Objectif

Activer le mode “Ne Pas Déranger” (DND) et le filtre d’appel entrant pour un utilisateur. Le DND bloque tous les appels entrants ; le filtre permet de筛选 les appels selon certaines règles.

Services impliqués

  • wazo-confd : Services DND et incallfilter

Le Workflow détaillé

Étape 1 : Activer le DND

PUT /api/confd/1.1/users/{USER_UUID}/services/dnd/enable
Content-Type: application/json
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Réponse :

{
  "enabled": true
}

Étape 2 : Désactiver le DND

PUT /api/confd/1.1/users/{USER_UUID}/services/dnd/disable
Content-Type: application/json
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Étape 3 : Activer le filtre d’appel entrant

PUT /api/confd/1.1/users/{USER_UUID}/services/incallfilter/enable
Content-Type: application/json
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Réponse :

{
  "enabled": true
}

Étape 4 : Désactiver le filtre d’appel entrant

PUT /api/confd/1.1/users/{USER_UUID}/services/incallfilter/disable
Content-Type: application/json
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Point d’attention / Warning

:warning: Important :

  • Depuis XiVO 16.13, le DND est effectif indépendamment de l’extension *25
  • Le filtre d’appel nécessite une configuration supplémentaire des règles de filtrage

1.6 Création d’un Nouveau Tenant (Multi-Tenant) (7 Étapes)

Objectif

Créer un nouveau tenant isolé pour un client ou un département, avec ses propres contextes, utilisateurs et politiques d’accès. Le multi-tenant permet une isolation complète des données.

Services impliqués

  • wazo-auth : Gestion des tenants et utilisateurs d’authentification
  • wazo-confd : Gestion des contextes

Le Workflow détaillé

Étape 1 : Créer le tenant

POST /api/auth/0.1/tenants
Content-Type: application/json
X-Auth-Token: {admin_token}

Payload :

{
  "name": "ACME Corp",
  "slug": "acme"
}

Réponse :

{
  "uuid": "tenant-uuid-acme123",
  "name": "ACME Corp",
  "slug": "acme",
  "parent_uuid": "master-tenant-uuid"
}

:link: Chaînage : Récupérez le champ uuid — il sera utilisé pour toutes les opérations sur ce tenant. Stockez-le dans TENANT_UUID.

Étape 2 : Créer l’utilisateur administrateur du tenant

POST /api/auth/0.1/users
Content-Type: application/json
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Payload :

{
  "username": "admin_acme",
  "password": "secure_password",
  "firstname": "Admin",
  "lastname": "ACME"
}

Réponse :

{
  "uuid": "admin-auth-uuid-456",
  "username": "admin_acme",
  ...
}

:link: Chaînage : Stockez ADMIN_AUTH_UUID

Étape 3 : Créer une policy d’administration

POST /api/auth/0.1/policies
Content-Type: application/json
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Payload :

{
  "name": "admin-policy",
  "description": "Full admin access for ACME tenant",
  "acl": [
    "confd.#",
    "calld.#",
    "provd.#"
  ]
}

Réponse :

{
  "uuid": "policy-uuid-789",
  "name": "admin-policy",
  ...
}

:link: Chaînage : Stockez POLICY_UUID

Étape 4 : Assigner la policy à l’administrateur

POST /api/auth/0.1/users/{ADMIN_AUTH_UUID}/policies
Content-Type: application/json
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Payload :

{
  "policy_uuid": "policy-uuid-789"
}

Étape 5 : Créer le contexte interne pour le tenant

POST /api/confd/1.1/contexts
Content-Type: application/json
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Payload :

{
  "label": "interne-acme",
  "name": "Interne ACME",
  "type": "internal",
  "user_ranges": [
    {"start": "1000", "end": "1999"}
  ]
}

Réponse :

{
  "id": 45,
  "label": "interne-acme",
  "type": "internal",
  ...
}

:link: Chaînage : Stockez CTX_INTERNAL_ID = 45

Étape 6 : Créer le contexte entrant pour le tenant

POST /api/confd/1.1/contexts
Content-Type: application/json
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Payload :

{
  "label": "entrant-acme",
  "name": "Entrant ACME",
  "type": "incall",
  "incall_ranges": [
    {"start": "003338000100", "end": "003338000200"}
  ]
}

Réponse :

{
  "id": 46,
  "label": "entrant-acme",
  "type": "incall",
  ...
}

:link: Chaînage : Stockez CTX_INCALL_ID = 46

Étape 7 : Vérifier le tenant

GET /api/auth/0.1/tenants/{TENANT_UUID}
X-Auth-Token: {admin_token}

Point d’attention / Warning

:warning: Important :

  • Le header Wazo-Tenant est OBLIGATOIRE pour toutes les opérations après la création du tenant
  • L’ACL confd.# donne accès à toutes les ressources confd du tenant
  • Les contextes créés n’ont pas de relation automatique — créez des liens explicites si nécessaire
  • La suppression d’un tenant est IRRÉVERSIBLE

1.7 Fallbacks et Options Utilisateur (4 Étapes)

Objectif

Configurer les fallbacks (renvois en cas d’indisponibilité) et les options avancées d’un utilisateur : timeout, destination si pas de réponse, boîte vocale, etc.

Services impliqués

  • wazo-confd : Configuration des fallbacks utilisateur

Le Workflow détaillé

Étape 1 : Récupérer les fallbacks actuels

GET /api/confd/1.1/users/{USER_UUID}/fallbacks
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Réponse :

{
  "noanswer_destination": null,
  "busy_destination": null,
  "congestion_destination": null,
  "fail_destination": null,
  "noanswer_timeout": 18
}

Étape 2 : Configurer le fallback sur non-réponse

PUT /api/confd/1.1/users/{USER_UUID}/fallbacks
Content-Type: application/json
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Payload :

{
  "noanswer_destination": {
    "type": "voicemail",
    "voicemail_id": 12
  },
  "noanswer_timeout": 25
}

Étape 3 : Configurer le fallback sur occupation

PUT /api/confd/1.1/users/{USER_UUID}/fallbacks
Content-Type: application/json
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Payload :

{
  "busy_destination": {
    "type": "voicemail",
    "voicemail_id": 12
  }
}

Étape 4 : Configurer le fallback sur indisponibilité (fail)

PUT /api/confd/1.1/users/{USER_UUID}/fallbacks
Content-Type: application/json
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Payload :

{
  "fail_destination": {
    "type": "extension",
    "extension": "1000",
    "context": "default"
  }
}
Type de destination Paramètres requis
voicemail voicemail_id
extension extension, context
user user_id
custom content (dialplan)

Point d’attention / Warning

:warning: Important :

  • Le noanswer_timeout doit être cohérent avec le timeout de sonnerie du téléphone
  • Les fallbacks sont évalués dans l’ordre : busy → noanswer → congestion → fail
  • Configurez toujours une destination de dernier recours (fallback final)

1.8 Gestion des Funckeys (Touches de Fonction) (5 Étapes)

Objectif

Configurer les touches de fonction (BLF, speed dial, pickup) sur les телефонов prenant en charge les touches programmable. Ces touches permettent un accès rapide aux fonctions fréquentes.

Services impliqués

  • wazo-confd : Configuration des funckeys

Le Workflow détaillé

Étape 1 : Lister les destinations disponibles

GET /api/confd/1.1/funckeys/destinations
X-Auth-Token: {admin_token}

Réponse :

{
  "items": [
    {"type": "user", "description": "Appeler un utilisateur"},
    {"type": "queue", "description": "Appeler une file d'attente"},
    {"type": "custom", "description": "Extension personnalisée"},
    {"type": "transfer", "description": "Transférer l'appel"},
    {"type": "bsfilter", "description": "Filtre boss-secrétaire"}
  ]
}

Étape 2 : Créer un template de funckeys

POST /api/confd/1.1/funckeys/templates
Content-Type: application/json
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Payload :

{
  "name": "standard-template",
  "keys": {
    "1": {
      "destination_type": "user",
      "user_id": "user-uuid-1"
    },
    "2": {
      "destination_type": "queue",
      "queue_id": 10
    },
    "3": {
      "destination_type": "custom",
      "extension": "*25",
      "label": "DND"
    }
  }
}

Réponse :

{
  "id": 5,
  "name": "standard-template",
  "keys": {...}
}

:link: Chaînage : Stockez TEMPLATE_ID = 5

Étape 3 : Appliquer le template à un utilisateur

PUT /api/confd/1.1/users/{USER_UUID}/funckeys/templates/{TEMPLATE_ID}
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Étape 4 : Ajouter une funckey individuelle (override)

PUT /api/confd/1.1/users/{USER_UUID}/funckeys/5
Content-Type: application/json
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Payload :

{
  "destination_type": "custom",
  "extension": "*26",
  "label": "Renvoi ON",
  "blf": true
}

Étape 5 : Récupérer les funckeys fusionnées

GET /api/confd/1.1/users/{USER_UUID}/funckeys?view=merged
X-Auth-Token: {admin_token}
Wazo-Tenant: {tenant_uuid}

Point d’attention / Warning

:warning: Important :

  • Le paramètre blf: true permet la surveillance d’état (Busy Lamp Field)
  • Les funckeys individuelles surchargent le template
  • La suppression d’une funckey la retire complètement

1.9 Récapitulatif des Endpoints Utilisateur

Ressource CRUD Endpoint
Utilisateur C POST /users
Utilisateur R GET /users/{uuid}
Utilisateur U PUT /users/{uuid}
Utilisateur D DELETE /users/{uuid}
Ligne C POST /lines
Extension C POST /extensions
Endpoint SIP C POST /endpoints/sip
Voicemail C POST /voicemails
Forward U PUT /users/{uuid}/forwards/{type}
DND U PUT /users/{uuid}/services/dnd/enable
Fallback U PUT /users/{uuid}/fallbacks
Funckey C PUT /users/{uuid}/funckeys/{position}

Fin de la PARTIE 1

Cela peut vraiment aider comme doc, et l’avoir sous forme de fonctions disponibles dans le sdk serait un réel plus.

Joli travail !

Merci . J’en ai 5 comme ça de cookbook plus 9 autres que j’ai appelé wazo bible couvrant toute les api couvrant à peu près toute les fonctionnalités. Javascript c’est pas trop ma tasse de thé donc j’ai fais travaillé L’ia . Au début j’ai fais bcp de choses en utilisant perplexity car tu peux créer un espace spécifique avec des instructions et donner des fichiers ressources de références. Donc j’avais créé un espace spécifique de développement wazo avec tout mes fichiers de références et le wazojs_sdk et j’utilisais essentiellement le modèle claude sonnet qui est assez performant. Mais ça faisait bcp de va et vient entre perplexity et vscode + les tests. Après je suis passé à hermes agent couplé à opencode et openspec et une vm de test wazo afin que hermes agent puisse faire tout les test en automatique sur mon wazo de test quand je lui demande. Contrairement à un chat ia ou tu doit faire des va et vient avec ce workflow ça fait une bonne partie du code tout seul avec test unitaires, corrections, doc… Le couplage hermes agent et opencode et openspec est vraiment un banger j’ai de très bon résultat, meilleur que si je fais seulement codé hermes agent à partir d’un cahier des charges.

Re, le temps de faire quelques courses , j’ai fai créé à l’ia une version amélioré du wazo js intégrant tout les fonctionnalités des wazo cookbook je n’ai pas encore regardé et testé

Re,

J’ai poussé toute ma doc sur https://github.com/mobilejudi/WAZODOCS.

Le fichier WAZO_API_BIBLE_CH9_ARI.md est assez intéressant car très faux dans la doc d’origine. ça peut etre utile pour test GitHub - hkjarral/AVA-AI-Voice-Agent-for-Asterisk: An open-source AI Voice Agent that integrates with Asterisk/FreePBX using Audiosocket/RTP technology · GitHub , j’ai pondu ou fais pondre des scripts de deploiement pour ava-ai pour wazo dans un repo privé!!!