Aller au contenu
Aya Mind

Documentation développeur

La référence complète : attributs du widget, points d'entrée publics, outils, MCP, variables, webhooks, limites et erreurs courantes.

Démarrage

Cette page décrit tout ce qu'un développeur doit savoir pour intégrer un agent Aya Mind : le widget, les points d'entrée publics, les outils appelés pendant la conversation, les serveurs MCP et les webhooks reçus après l'appel.

Un agent se crée dans la plateforme, à l'adresse /platform/agents. Retenez son identifiant : il apparaît dans l'URL de l'éditeur et dans l'onglet Widget.

Un agent doit être en statut actif pour répondre en dehors de la plateforme. Un agent en brouillon ne fonctionne que dans le panneau de test.

Les trois identifiants à ne pas confondre

IdentifiantOù le trouverUsage
agentIdURL de l'éditeur, onglet WidgetWidget, lien de partage, API publiques
conversationIdRetourné à la fin d'un appelHistorique, webhooks, support
serverUrlhttps://www.aya-mind.comBase de toutes les URL publiques

Widget web

Le widget est un script autonome à coller avant la fermeture de la balise </body>. Il crée un bouton flottant et gère lui-même le micro, la connexion vocale et l'affichage de la transcription. Il s'isole dans un Shadow DOM : il n'hérite pas du CSS de votre site et ne le modifie pas.

HTML
<script
  src="https://www.aya-mind.com/widget/agentic-widget.js"
  data-agent-id="VOTRE_AGENT_ID"
  data-server-url="https://www.aya-mind.com"
  data-position="bottom-right"
  data-color="#6B2362"
  defer
></script>
AttributObligatoireValeur par défautDescription
data-agent-idOui—Identifiant de l'agent. Sans lui, le widget ne démarre pas.
data-server-urlOui—Racine du service. En production : https://www.aya-mind.com
data-positionNonbottom-rightbottom-right ou bottom-left
data-colorNon#6B2362Couleur du bouton, au format hexadécimal
deferRecommandé—Évite de bloquer le rendu de votre page

Ce que le widget demande au navigateur

À la première prise de parole, le navigateur demande l'autorisation du microphone. Cette autorisation exige une page servie en HTTPS. Sur une page en HTTP, l'appel échoue avec une erreur de périphérique.

Le widget vérifie le domaine appelant. Si la liste blanche de l'agent n'est pas vide et que votre domaine n'y figure pas, la configuration est refusée avec un code 403.

Lien de partage

Chaque agent actif dispose d'une page publique, sans intégration à faire :

URL
https://www.aya-mind.com/share/VOTRE_AGENT_ID

Cette page affiche le nom de l'agent, son message d'accueil, la transcription en direct et les commandes d'appel. Elle est utile pour un test client, une campagne ou un QR code affiché en boutique.

Session vocale

Une conversation n'utilise jamais de clé d'API côté navigateur. Le déroulé est le suivant :

  1. Le widget demande la configuration publique de l'agent.
  2. Il demande une URL de session signée, valable quelques minutes.
  3. Il ouvre une connexion WebSocket sécurisée vers le moteur vocal avec cette URL.
  4. À la fin de l'appel, il envoie la durée et la transcription pour l'historique.

La signature est générée côté serveur. Une URL signée interceptée expire rapidement et ne donne accès à aucun autre agent.

API publiques

Ces trois points d'entrée ne demandent pas d'authentification, mais contrôlent le domaine appelant. Ils servent au widget et aux intégrations personnalisées.

Méthode et cheminRôleRéponse
GET /api/widget/{agentId}/configNom, message d'accueil, couleurs, mode texte200, ou 404 si l'agent n'est pas actif, ou 403 si le domaine est refusé
GET /api/widget/{agentId}/signed-urlURL de session signée200 avec signed_url
POST /api/widget/{agentId}/store-callEnregistre l'appel terminé200 avec l'identifiant de conversation
bash
curl https://www.aya-mind.com/api/widget/AGENT_ID/config \
  -H "Origin: https://votre-site.com"
JSON
{
  "name": "Assistante Aya",
  "firstMessage": "Bonjour, comment puis-je vous aider ?",
  "config": { "position": "bottom-right", "primaryColor": "#6B2362", "showTranscript": true },
  "chatEnabled": false
}

Enregistrer un appel mené par votre propre interface

bash
curl -X POST https://www.aya-mind.com/api/widget/AGENT_ID/store-call \
  -H "Content-Type: application/json" \
  -d '{
    "startedAt": "2026-09-22T10:14:02Z",
    "endedAt": "2026-09-22T10:17:06Z",
    "durationSeconds": 184,
    "callerDomain": "votre-site.com",
    "messages": [
      { "role": "agent", "text": "Bonjour." },
      { "role": "user", "text": "Bonjour, une question sur ma commande." }
    ]
  }'

Outils pendant l'appel

Un outil est une URL que l'agent appelle au milieu de la conversation. Vous le déclarez dans l'onglet Outils de l'agent : nom, description, URL, méthode. La description est déterminante : c'est elle qui indique au modèle quand appeler l'outil.

JSON
{
  "name": "verifier_commande",
  "description": "Retourne l'état d'une commande à partir de son numéro. Utiliser dès que le client donne un numéro de commande.",
  "url": "https://erp.votre-entreprise.ma/api/commandes/{numero}",
  "method": "GET",
  "headers": { "X-API-Key": "..." }
}

Règles à respecter côté votre API

  • Répondez en moins de deux à trois secondes. Au-delà, le silence s'entend dans la conversation.
  • Retournez du JSON court et lisible : l'agent le lit à voix haute après reformulation.
  • Gérez l'erreur proprement, avec un message exploitable plutôt qu'une page HTML d'erreur.
  • N'exposez que les champs nécessaires : tout ce que l'outil retourne peut être prononcé.

Un outil qui écrit (créer un ticket, annuler une commande) doit être idempotent quand c'est possible : un client peut répéter sa demande, et l'agent peut rappeler l'outil.

Serveurs MCP

Le protocole MCP expose les outils d'un système entier avec un seul connecteur. Vous enregistrez le serveur une fois dans l'onglet Outils, puis vous l'activez sur les agents concernés.

ChampDescription
URLPoint d'entrée du serveur MCP, par exemple https://mcp.votre-entreprise.ma/mcp
TransportHTTP (streamable) ou SSE, selon ce que votre serveur expose
En-tête d'authentificationNom et valeur, par exemple X-API-Key. La valeur est stockée chiffrée et n'est jamais renvoyée à l'interface
Approbation des outilsAutomatique, ou validation demandée avant chaque appel d'outil

Côté serveur MCP, nommez vos outils dans la langue des instructions de l'agent et décrivez-les précisément. Un outil nommé rechercher_client avec une bonne description sera mieux utilisé qu'un query générique.

Variables dynamiques

Les variables permettent de personnaliser l'appel sans changer les instructions : nom du client, numéro de dossier, enseigne appelée. Vous les déclarez dans l'onglet Personnalité, puis vous les utilisez dans le prompt avec deux accolades.

Texte
Tu réponds pour {{nom_entreprise}}.
Le client s'appelle {{nom_client}} et son dossier porte le numéro {{numero_dossier}}.

La valeur saisie dans la plateforme sert de valeur par défaut. Une intégration peut fournir une valeur différente au démarrage de la session.

Indicateurs et extraction de données

L'onglet Metrics sert à deux choses distinctes, selon le type choisi :

TypeEffetExemple
BooléenDevient un critère d'évaluation de l'appel, noté réussi ou non« Le client a-t-il pris rendez-vous ? »
Texte, nombre, entierDevient une donnée extraite de la transcriptionNuméro de facture, budget annoncé, résumé

Les valeurs extraites apparaissent dans l'historique de l'appel et sont incluses dans la charge utile envoyée à vos webhooks.

Webhooks

Après chaque appel, Aya Mind peut envoyer un résumé complet à l'URL de votre choix. C'est le moyen le plus fiable d'alimenter un CRM sans interroger l'API en boucle.

JSON
POST /votre-endpoint
{
  "conversation_id": "conv_8f2c...",
  "agent": "Assistante Aya",
  "started_at": "2026-09-22T10:14:02Z",
  "duration_seconds": 184,
  "language": "fr",
  "sentiment": "positive",
  "summary": "Le client demande le statut de la facture 4412.",
  "transcript": [
    { "role": "agent", "text": "Bonjour, Aya Mind à votre écoute." },
    { "role": "user",  "text": "Bonjour, c'est au sujet de ma facture." }
  ],
  "data_collection": { "numero_facture": "4412" }
}

Bonnes pratiques de réception

  • Répondez 200 rapidement, puis traitez en tâche de fond.
  • Traitez les doublons : un même appel peut être notifié deux fois en cas de réessai.
  • Vérifiez l'origine de la requête avant d'écrire dans votre système.

Telegram

Un agent peut répondre dans Telegram. Vous créez un bot avec BotFather, vous collez son jeton dans l'onglet Telegram de l'agent, et la plateforme enregistre l'adresse de réception auprès de Telegram.

Les messages vocaux reçus sont transcrits, la réponse est renvoyée en audio. Les mêmes outils et la même base de connaissances s'appliquent.

Limites et sécurité

RéglageOùEffet
Domaines autorisésOnglet SécuritéLe widget et la configuration publique sont refusés ailleurs
Durée maximale d'un appelOnglet AvancéL'appel se termine proprement au-delà
Appels par jourOnglet SécuritéPlafond quotidien, appliqué aussi côté moteur vocal
Enregistrement audioOnglet AvancéConservation de l'audio, et durée de rétention

Aucune clé d'API n'est exposée au navigateur, quelle que soit l'intégration. Si une intégration vous demande de publier une clé côté client, c'est une erreur de conception.

Erreurs courantes

SymptômeCause probableCorrection
Le bouton n'apparaît pasdata-agent-id ou data-server-url manquantVérifier les deux attributs et la console du navigateur
403 sur la configurationDomaine absent de la liste blancheAjouter le domaine dans l'onglet Sécurité
404 sur la configurationAgent en brouillon ou archivéPasser l'agent en statut actif
« Requested device not found »Aucun micro détecté par le navigateurVérifier le périphérique d'entrée et l'autorisation du site
L'agent ignore un outilDescription trop vagueDécrire explicitement quand l'outil doit être appelé
Silences pendant l'appelOutil ou MCP trop lentRéduire le temps de réponse, ou annoncer l'attente dans les instructions