Créer un agent
Parcours d'appel
diagram de l'agent, que vous pouvez dessiner dans le Call Builder du tableau de bord ou écrire via l'API.Nœuds
| Type | Ce qu'il fait | Son data |
|---|---|---|
startCall | Ouvre l'appel. Contient le prompt principal, la première phrase et les réglages des appels sortants. | brief, welcomeMessage, outbound |
knowHow | Un bloc de connaissances ou de comportement, avec un titre. Son prompt est en HTML, et c'est là que se rattachent les outils. | title, prompt |
forwardCall | Transfère l'appelant vers un numéro de téléphone, à froid ou à chaud : un numéro fixe, ou celui que votre service recherche pendant l'appel. | title, prompt, forwardingMessage, destinationType, forwardingPhoneNumber ou lookupUrl, transferMode, options |
forwardAgent | Passe la conversation à un autre agent. | agentId, message, description |
endCall | Raccroche après une phrase de conclusion. | endCallMessage |
Chaque nœud a un id, un type, une position sur le canevas (x, y) et son objet data. Les id des nœuds sont conservés quand un agent est dupliqué : un script peut donc modifier le même nœud dans chaque copie.
Liens et conditions
Les liens relient deux nœuds (source, target). Un lien peut porter une condition, qui décide du chemin que prend l'appel :
| Condition | Le chemin est pris quand |
|---|---|
isExistingContact / notExistingContact | L'appelant est, ou n'est pas, un contact du CRM |
isNewCaller / notNewCaller | C'est, ou ce n'est pas, le premier appel de l'appelant |
inboundOnly / outboundOnly | L'appel est entrant, ou sortant |
Un parcours d'appel minimal
{
"nodes": [
{
"id": "start", "type": "startCall", "position": { "x": 0, "y": 0 },
"data": {
"brief": "<p>You are Alice, the receptionist of Club Lyon Part-Dieu. Answer briefly and warmly.</p>",
"welcomeMessage": "Hello, this is Alice, the AI assistant of Club Lyon Part-Dieu. How can I help?"
}
},
{
"id": "hours", "type": "knowHow", "position": { "x": 0, "y": 160 },
"data": { "title": "Opening hours", "prompt": "<p>The club is open every day from 6am to 11pm.</p>" }
},
{
"id": "end", "type": "endCall", "position": { "x": 0, "y": 320 },
"data": { "endCallMessage": "Thank you for calling. Have a good day!" }
}
],
"edges": [
{ "id": "e1", "source": "start", "target": "hours" },
{ "id": "e2", "source": "hours", "target": "end" }
]
}Le prompt que lit le modèle est le brief, suivi des nœuds dans l'ordre du diagramme. Les prompts sont en HTML : conservez les balises quand vous en réécrivez un.
Réglages des appels sortants
L'objet outbound de startCall s'applique aux appels que passe une campagne.
| Champ | Valeurs |
|---|---|
welcomeMessage | La première phrase d'un appel sortant |
firstMessageMode | assistant-speaks-first, assistant-waits-for-user, assistant-speaks-first-with-model-generated-message |
pauseBeforeSpeakingSeconds | 0 à 5 |
voiceMailEnabled, voiceMailMessage | Laisser un message quand une messagerie vocale répond |
voiceMailExpectedDuration | 5 à 60 secondes |
voiceMailProvider | google, openai : la détection de messagerie vocale |
Transferts
Un nœud forwardCall s'exécute quand son prompt s'applique : l'agent prononce le forwardingMessage et transfère l'appel vers la destination du nœud.
destinationType | Le numéro | Ses champs |
|---|---|---|
fixed (par défaut) | Toujours la même ligne, inscrite dans le nœud | forwardingPhoneNumber, au format international (+33612345678) |
lookup | Choisi par votre service pendant l'appel, pour cet appelant : voir plus bas | lookupUrl, lookupMessage, lookupParameters |
Les réglages du transfert sont les mêmes pour les deux :
| Champ | Valeurs |
|---|---|
transferMode | cold met l'appelant en relation immédiatement. warm appelle d'abord la personne et lui présente l'appel, puis met l'appelant en relation. |
greetingMessage | En transfert à chaud, obligatoire : la première phrase qu'entend la personne quand elle décroche |
whisperMessage, threeWayIntroduction | En transfert à chaud : ce qu'il faut dire à la personne sur l'appelant, et comment le présenter. Des instructions pour l'agent, pas des phrases qu'il lit telles quelles. |
holdMusicUrl | L'URL de la musique que l'appelant entend pendant l'attente |
transferTimeout | 30 à 300 secondes (60 par défaut) |
fallbackMessage | Ce que dit l'agent quand le transfert n'aboutit pas |
Rechercher le numéro pendant l'appel
Quand le bon numéro dépend de l'appelant (le sous-traitant de son secteur, l'agence de son code postal, le technicien d'astreinte cette semaine), passez destinationType à lookup : votre service choisit le numéro pendant que l'appelant patiente. Le numéro ne passe jamais par le modèle, qui ne peut donc ni le déformer ni l'inventer, et des centaines de numéros restent hors du prompt.
{
"id": "technician", "type": "forwardCall", "position": { "x": 320, "y": 160 },
"data": {
"title": "Transfer to technician",
"prompt": "<p>Once the caller has given their address, transfer them.</p>",
"forwardingMessage": "I'm putting you through to the technician of your area.",
"destinationType": "lookup",
"lookupUrl": "https://example.com/api/transfer-number?token=YOUR_SECRET",
"lookupMessage": "One moment, I'm finding the technician of your area.",
"lookupParameters": {
"type": "object",
"properties": {
"address": { "type": "string", "description": "The caller's full address" }
},
"required": ["address"]
},
"transferMode": "cold",
"fallbackMessage": "The technician cannot be reached. I'll take a message."
}
}- Le nœud devient un outil de l'agent, nommé d'après la forme camelCase de son
title(Transfer to technician devienttransferToTechnician). Sonpromptdit à l'agent quand l'utiliser, etlookupParameters, un JSON Schema au format desparametersd'un outil personnalisé, liste ce que l'agent recueille d'abord. Sans ce champ, l'agent n'envoie aucun argument. - L'agent prononce le
lookupMessage(par défaut Un instant., dans la langue de l'agent), et CallShift envoie àlookupUrlla même requête qu'à un outil personnalisé : le nom de l'outil dansname, les arguments dansargs, l'état de l'appel à ce stade danscallet, quand l'appelant est un contact connu, lecontact. - Votre service répond avec le numéro, ou avec la raison pour laquelle il n'y en a pas.
- Avec un numéro, l'agent prononce le
forwardingMessageet transfère l'appelant, à froid ou à chaud, avec les réglages du nœud.
La réponse de votre service
En cas de correspondance, la réponse donne le numéro :
{
"number": "+33612345678",
"message": "I'm putting you through to Dupont Plumbing, the technician of your area.",
"context": "Subcontractor for Lyon 3rd, contract 4521"
}Sans correspondance, la réponse donne la raison, avec n'importe quel statut HTTP :
{
"error": "Address outside our service area",
"context": "We cover Lyon and its suburbs only"
}| Champ | Ce qu'il fait |
|---|---|
number | En cas de correspondance : le numéro vers lequel transférer, au format international, dans le pays de la ligne de l'appel. |
message | En cas de correspondance, facultatif : prononcé mot pour mot à la place du forwardingMessage du nœud. |
error | Sans correspondance : pourquoi il n'y a pas de numéro. L'agent est informé que le transfert est impossible, et pour quelle raison, puis poursuit l'appel. |
context | Facultatif : en transfert à chaud, ajouté au whisperMessage pour mettre la personne au courant. Quand aucun transfert n'a lieu, transmis à l'agent. |
Répondez en moins de 5 secondes. Au-delà, il n'y a pas de transfert. Il n'y en a pas non plus si le corps ne contient ni number ni error, si la réponse a un statut d'erreur sans error, si le numéro est invalide ou situé dans un autre pays, ou si l'appel est passé depuis un navigateur, qui n'emprunte aucune ligne. Dans tous ces cas, l'agent est informé que le transfert est impossible, et la raison figure dans les logs du tableau de bord. Un numéro à l'étranger est refusé, pour qu'un service qui se trompe, ou qui est compromis, ne puisse pas envoyer vos appels vers un autre pays.
La requête n'est pas signée : mettez un jeton secret dans l'URL et vérifiez-le.
Le nom d'outil d'un nœud dont le numéro est recherché doit être libre : un parcours d'appel où c'est aussi le nom d'un autre nœud de ce type, d'un des outils du compte ou d'un outil intégré (sendSms, transferCall) est refusé avec une erreur 422. Donnez un autre title au nœud ; changer le titre renomme l'outil.
La recherche de numéro fonctionne avec les agents qui utilisent le moteur vocal actuel. Les autres agents laissent le nœud de côté et ne transfèrent donc pas : essayez un transfert sur un appel de test.
Transférer, passer le relais à un autre agent et raccrocher sont des nœuds du parcours d'appel. Tout ce que l'agent fait d'autre avec vos systèmes passe par un outil.
