Explorar la documentación

Crear un agente

Flujo de llamadas

El flujo de llamada es el guion del agente en forma de grafo: dónde empieza la llamada, qué sabe el agente, cuándo transfiere y cómo termina. Es el campo diagram del agente, que puedes dibujar en el Call Builder del panel o escribir con la API.

Nodos

TipoQué haceSu data
startCallAbre la llamada. Contiene el prompt principal, la primera frase y los ajustes de las llamadas salientes.brief, welcomeMessage, outbound
knowHowUn bloque de conocimiento o de comportamiento, con un título. Su prompt es HTML, y es ahí donde se vinculan las herramientas.title, prompt
forwardCallTransfiere a quien llama a un número de teléfono, en frío o en caliente: un número fijo, o el que tu servicio busca durante la llamada.title, prompt, forwardingMessage, destinationType, forwardingPhoneNumber o lookupUrl, transferMode, opciones
forwardAgentPasa la conversación a otro agente.agentId, message, description
endCallCuelga después de una frase de cierre.endCallMessage

Cada nodo tiene un id, un type, una position en el lienzo (x, y) y su data. Los ids de los nodos se conservan al duplicar un agente, así que un script puede cambiar el mismo nodo en todas las copias.

Conexiones y condiciones

Las conexiones (edges) unen dos nodos (source, target). Una conexión puede llevar una condición, que decide el camino que sigue la llamada:

CondiciónEl camino se sigue cuando
isExistingContact / notExistingContactQuien llama es, o no es, un contacto del CRM
isNewCaller / notNewCallerEs, o no es, la primera llamada de esa persona
inboundOnly / outboundOnlyLa llamada es entrante o saliente

Un flujo de llamada mínimo

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" }
  ]
}

El prompt que lee el modelo es el brief seguido de los nodos en el orden del diagrama. Los prompts son HTML: conserva las etiquetas cuando vuelvas a escribir uno.

Ajustes de las llamadas salientes

El objeto outbound de startCall se aplica a las llamadas que realiza una campaña.

CampoValores
welcomeMessageLa primera frase de una llamada saliente
firstMessageModeassistant-speaks-first, assistant-waits-for-user, assistant-speaks-first-with-model-generated-message
pauseBeforeSpeakingSecondsDe 0 a 5
voiceMailEnabled, voiceMailMessageDejar un mensaje cuando contesta un buzón de voz
voiceMailExpectedDurationDe 5 a 60 segundos
voiceMailProvidergoogle, openai: la detección del buzón de voz

Transferencias

Un nodo forwardCall se ejecuta cuando se da la situación que describe su prompt: el agente dice el forwardingMessage y transfiere la llamada al destino del nodo.

destinationTypeEl númeroSus campos
fixed (por defecto)Siempre la misma línea, escrita en el nodoforwardingPhoneNumber, en formato internacional (+33612345678)
lookupLo elige tu servicio durante la llamada, para esa persona: ver más abajolookupUrl, lookupMessage, lookupParameters

Los ajustes de la transferencia son los mismos para los dos:

CampoValores
transferModecold conecta a quien llama de inmediato. warm llama primero a la persona y la pone al tanto, y después conecta a quien llama.
greetingMessageObligatorio en las transferencias en caliente: la primera frase que oye la persona al descolgar
whisperMessage, threeWayIntroductionEn las transferencias en caliente: qué contarle a la persona sobre quien llama y cómo presentárselo. Son instrucciones para el agente, no frases que lea en voz alta.
holdMusicUrlLa URL de la música que oye quien llama mientras espera
transferTimeoutDe 30 a 300 segundos (60 por defecto)
fallbackMessageLo que dice el agente cuando la transferencia no se completa

Buscar el número durante la llamada

Cuando el número correcto depende de quien llama (el subcontratista de su zona, la agencia de su código postal, el técnico de guardia esta semana), pon destinationType en lookup: tu servicio elige el número mientras la persona espera. El número nunca pasa por el modelo, así que el modelo no puede entenderlo mal ni inventárselo, y cientos de números quedan fuera del 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. El nodo se convierte en una herramienta del agente, con el nombre de su title en camelCase (Transfer to technician se convierte en transferToTechnician). Su prompt le dice al agente cuándo usarla, y lookupParameters, un JSON Schema con el formato de los parameters de una herramienta personalizada, enumera lo que el agente recopila antes. Sin él, el agente no envía ningún argumento.
  2. El agente dice el lookupMessage (por defecto Un momento., en el idioma del agente), y CallShift envía a lookupUrl la misma petición que a una herramienta personalizada: el nombre de la herramienta en name, los argumentos en args, la llamada hasta ese momento en call y, cuando quien llama es un contacto conocido, el contact.
  3. Tu servicio responde con el número, o con el motivo por el que no lo hay.
  4. Con un número, el agente dice el forwardingMessage y transfiere la llamada, en frío o en caliente, con los ajustes del nodo.

La respuesta de tu servicio

Si hay coincidencia, la respuesta da el número:

JSON
{
  "number": "+33612345678",
  "message": "I'm putting you through to Dupont Plumbing, the technician of your area.",
  "context": "Subcontractor for Lyon 3rd, contract 4521"
}

Si no la hay, da el motivo, con cualquier código de estado HTTP:

JSON
{
  "error": "Address outside our service area",
  "context": "We cover Lyon and its suburbs only"
}
CampoQué hace
numberSi hay coincidencia: el número al que transferir, en formato internacional y del mismo país que la línea por la que pasa la llamada.
messageSi hay coincidencia, opcional: se dice palabra por palabra en lugar del forwardingMessage del nodo.
errorSi no hay coincidencia: por qué no hay número. El agente recibe este motivo junto con el aviso de que la transferencia no es posible, y sigue con la llamada.
contextOpcional: en una transferencia en caliente, se añade al whisperMessage para poner al tanto a la persona. Si no hay transferencia, se le da al agente.

Responde en menos de 5 segundos. Tampoco hay transferencia si se supera ese plazo, si el cuerpo no incluye number ni error, si el código de estado es de error y falta error, si el número no es válido o es de otro país, o si la llamada se hace desde un navegador, que no está en ninguna línea: se le dice al agente que no es posible, y el motivo aparece en los registros de herramientas del panel. Los números extranjeros se rechazan para que un servicio que falle o que esté comprometido no pueda desviar tus llamadas a otro país.

La petición no lleva firma: pon un token secreto en la URL y compruébalo.

Un nombre por herramienta

El nombre de herramienta de un nodo con búsqueda de número no puede estar ya en uso: un flujo de llamada en el que también sea el nombre de otro nodo de ese tipo, de una de las herramientas de la cuenta o de una herramienta integrada (sendSms, transferCall) se rechaza con un 422. Dale otro title al nodo; cambiar el título cambia el nombre de la herramienta.

Aún no en todos los agentes

La búsqueda del número funciona en los agentes que usan el motor de voz actual. Los demás agentes omiten el nodo, así que no transfieren: comprueba la transferencia con una llamada de prueba.

Nota

Transferir, pasar la conversación a otro agente y colgar son nodos del flujo de llamada. Todo lo demás que el agente hace con tus sistemas es una herramienta.