Parcourir la documentation

Créer un agent

Parcours d'appel

Le parcours d'appel est le script de l'agent sous forme de graphe : où l'appel commence, ce que sait l'agent, quand il transfère, comment l'appel se termine. C'est le champ diagram de l'agent, que vous pouvez dessiner dans le Call Builder du tableau de bord ou écrire via l'API.

Nœuds

TypeCe qu'il faitSon data
startCallOuvre l'appel. Contient le prompt principal, la première phrase et les réglages des appels sortants.brief, welcomeMessage, outbound
knowHowUn 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
forwardCallTransfè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
forwardAgentPasse la conversation à un autre agent.agentId, message, description
endCallRaccroche 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 :

ConditionLe chemin est pris quand
isExistingContact / notExistingContactL'appelant est, ou n'est pas, un contact du CRM
isNewCaller / notNewCallerC'est, ou ce n'est pas, le premier appel de l'appelant
inboundOnly / outboundOnlyL'appel est entrant, ou sortant

Un parcours d'appel minimal

JSON
{
  "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.

ChampValeurs
welcomeMessageLa première phrase d'un appel sortant
firstMessageModeassistant-speaks-first, assistant-waits-for-user, assistant-speaks-first-with-model-generated-message
pauseBeforeSpeakingSeconds0 à 5
voiceMailEnabled, voiceMailMessageLaisser un message quand une messagerie vocale répond
voiceMailExpectedDuration5 à 60 secondes
voiceMailProvidergoogle, 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.

destinationTypeLe numéroSes champs
fixed (par défaut)Toujours la même ligne, inscrite dans le nœudforwardingPhoneNumber, au format international (+33612345678)
lookupChoisi par votre service pendant l'appel, pour cet appelant : voir plus baslookupUrl, lookupMessage, lookupParameters

Les réglages du transfert sont les mêmes pour les deux :

ChampValeurs
transferModecold 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.
greetingMessageEn transfert à chaud, obligatoire : la première phrase qu'entend la personne quand elle décroche
whisperMessage, threeWayIntroductionEn 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.
holdMusicUrlL'URL de la musique que l'appelant entend pendant l'attente
transferTimeout30 à 300 secondes (60 par défaut)
fallbackMessageCe 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.

JSON
{
  "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."
  }
}
  1. Le nœud devient un outil de l'agent, nommé d'après la forme camelCase de son title (Transfer to technician devient transferToTechnician). Son prompt dit à l'agent quand l'utiliser, et lookupParameters, un JSON Schema au format des parameters d'un outil personnalisé, liste ce que l'agent recueille d'abord. Sans ce champ, l'agent n'envoie aucun argument.
  2. L'agent prononce le lookupMessage (par défaut Un instant., dans la langue de l'agent), et CallShift envoie à lookupUrl la même requête qu'à un outil personnalisé : le nom de l'outil dans name, les arguments dans args, l'état de l'appel à ce stade dans call et, quand l'appelant est un contact connu, le contact.
  3. Votre service répond avec le numéro, ou avec la raison pour laquelle il n'y en a pas.
  4. Avec un numéro, l'agent prononce le forwardingMessage et 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 :

JSON
{
  "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 :

JSON
{
  "error": "Address outside our service area",
  "context": "We cover Lyon and its suburbs only"
}
ChampCe qu'il fait
numberEn cas de correspondance : le numéro vers lequel transférer, au format international, dans le pays de la ligne de l'appel.
messageEn cas de correspondance, facultatif : prononcé mot pour mot à la place du forwardingMessage du nœud.
errorSans 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.
contextFacultatif : 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.

Un nom par outil

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.

Pas encore sur tous les agents

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.

Remarque

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.