Explorar la documentación

Crear un agente

Agentes y modelos

Un agente es todo lo que oye quien llama: su idioma, su voz, el modelo que lo hace funcionar, su flujo de llamada y lo que pasa cuando termina la llamada.

Crear o duplicar

POST/v1/agents crea un agente desde cero: basta con un nombre, un género y un idioma. Para una variante de un agente que ya funciona (otro club, otro idioma, una versión de prueba), mejor duplícalo: la copia conserva el flujo de llamada, los prompts, los ajustes y el webhook asignado.

Terminal
curl -X POST "https://api.callshift.ai/v1/agents/$AGENT_ID/duplicate" \
  -H "Authorization: Bearer $CALLSHIFT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
# { "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7" }

curl -X PATCH "https://api.callshift.ai/v1/agents/7c9e6679-7425-40de-944b-e07fc1f90ae7" \
  -H "Authorization: Bearer $CALLSHIFT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Alice (Spanish)", "language": "es" }'

Ajustes

CampoValoresPor defecto
nameDe 1 a 50 caracteresobligatorio
genderFEMALE, MALEobligatorio
languagefr, en, nl, pt, esobligatorio
provider, modelConsulta Elegir un modelogoogle, gemini-live-3.1-flash
voiceIdUna voz de la familia del modelo, tal como aparece en el selector de voces del panel. Solo escritura: GET no la devuelve.La voz por defecto de la familia
temperatureDe 0 a 2
maxTokensDe 1 a 10000
silenceTimeoutSecondsDe 5 a 120: el agente cuelga tras este tiempo de silencio del interlocutor25
maxDurationSecondsDe 60 a 3600: al alcanzar ese límite, la llamada termina con max-duration-exceeded420
minEndpointingDelayDe 0,3 a 2,5 segundos que el agente espera después de que el interlocutor deje de hablar. Solo modelos pipeline.Valor por defecto de la plataforma
backgroundSoundoffice_ambience, city_ambience, forest_ambience, crowded_room, keyboard_typing, keyboard_typing2, hold_music, gym_ambience o nullNinguno
backgroundSoundVolumeDe 0 a 10,2
summaryPrompt, evaluationPrompt, informationToCollectConsulta Análisis de llamadas
diagramConsulta Flujo de llamadas
entityId, entityExternalIdConsulta EntidadesCompartido

Elegir un modelo

Un agente puede funcionar con dos familias de modelos.

FamiliaModelos (proveedor)Cuándo elegirla
Speech-to-speech (tiempo real)gemini-3.8-live, gemini-live-3.1-flash (google) · gpt-realtime-2.1-mini, gpt-live-1 (openai) · grok-voice-3.0 (xai)El modelo oye y habla directamente: los turnos de palabra más naturales y las respuestas más rápidas.
Pipelinegpt-4o-mini, gpt-4o, gpt-4.1-mini, gpt-5-mini, gpt-5.4-mini (openai)Voz a texto, un modelo de lenguaje y después texto a voz: más variedad de voces, y más fiable con emails y números dictados. Se aplica minEndpointingDelay.
Nota

Envía provider y model de esta lista, y vuelve a consultar el agente con GET/v1/agents/{agentId} para confirmarlo. Para comparar las dos familias en coste y latencia, usa el simulador speech-to-speech vs pipeline.

Actualizar un agente sin riesgos

PATCH/v1/agents/{agentId} reemplaza por completo cada campo que envías y deja los demás como están. El diagram es un solo campo: consulta el agente, cambia el diagrama y vuelve a enviarlo completo.

const api = (path, init = {}) =>
  fetch(`https://api.callshift.ai${path}`, {
    ...init,
    headers: {
      Authorization: `Bearer ${process.env.CALLSHIFT_API_KEY}`,
      "Content-Type": "application/json",
    },
  }).then((r) => r.json());

const agent = await api(`/v1/agents/${agentId}`);
const start = agent.diagram.nodes.find((n) => n.type === "startCall");
start.data.welcomeMessage =
  "Hello, this is Alice, the AI assistant of Club Lyon Part-Dieu. How can I help?";

await api(`/v1/agents/${agentId}`, {
  method: "PATCH",
  body: JSON.stringify({ diagram: agent.diagram }),
});
import os
import requests

API = "https://api.callshift.ai"
H = {"Authorization": f"Bearer {os.environ['CALLSHIFT_API_KEY']}"}

agent = requests.get(f"{API}/v1/agents/{agent_id}", headers=H).json()
start = next(n for n in agent["diagram"]["nodes"] if n["type"] == "startCall")
start["data"]["welcomeMessage"] = (
    "Hello, this is Alice, the AI assistant of Club Lyon Part-Dieu. How can I help?"
)

requests.patch(f"{API}/v1/agents/{agent_id}", headers=H, json={"diagram": agent["diagram"]})

Los cambios se aplican desde la siguiente llamada, y un agente no tiene historial de versiones. Duplica un agente antes de un cambio grande para conservar la versión anterior. Para una copia de staging, añade un prefijo a su nombre ([STAGING] Alice) y asigna tus números solo al agente de producción.

Eliminar un agente

DELETE/v1/agents/{agentId} elimina el agente y libera los números que tenía asignados. Sus llamadas anteriores se pueden seguir consultando.