Upfirst
oficialUpfirst es un recepcionista telefónico con IA para pequeñas empresas. Revisa las transcripciones de llamadas y luego corrige el saludo, el conocimiento y las reglas de transferencia desde tu cliente de IA.
¿Qué puedes hacer con Upfirst MCP?
-
Auditar el desempeño de la recepcionista — Pídele a tu asistente que revise las llamadas de la semana pasada y las compare con el conocimiento del agente para identificar brechas y sugerir nuevas entradas de capacitación.
-
Configurar recepcionistas a partir de descripciones — Haz que tu asistente convierta una descripción en lenguaje sencillo de tu negocio y del manejo de llamadas en una configuración completa con saludos, conocimiento, reglas de transferencia y horarios.
-
Corregir llamadas de bajo rendimiento — Señala a tu asistente una transcripción de llamada específica y describe el resultado deseado; sugerirá ediciones precisas de conocimiento para mejorar llamadas futuras.
-
Gestionar la configuración del agente — Indica a tu asistente que lea o actualice el saludo, el mensaje de despedida, el tono de voz, la velocidad del habla o las preferencias de bloqueo de llamadas de una recepcionista.
-
Crear y editar contenido de capacitación — Pide a tu asistente que agregue, actualice o elimine entradas de conocimiento vinculadas a uno o más agentes, incluyendo entradas de programación para horarios comerciales específicos.
-
Configurar reglas de transferencia de llamadas — Dirige a tu asistente para configurar habilidades de transferencia con condiciones, mensajes previos a la transferencia, números de destino y horarios semanales.
Documentación
Conexión
No hay nada que instalar. Apunta tu cliente a https://mcp.upfirst.ai y te guiará para iniciar sesión en Upfirst la primera vez que se conecte. La autorización es un inicio de sesión estándar OAuth 2.1, por lo que no hay claves API que copiar o almacenar.
El servidor se ejecuta sobre HTTP transmisible y le da a tu asistente 25 herramientas, que pueden tanto leer tu cuenta como modificarla. Elige tu cliente a continuación.
Upfirst está en el directorio de conectores de Claude. Abre claude.ai/directory/upfirst, añade Upfirst, luego inicia sesión en Upfirst y aprueba el acceso. Funciona en la aplicación de escritorio de Claude y en claude.ai.
Añádelo como conector personalizado en su lugar
- Abre Personalizar y luego Conectores.
- Haz clic en + y luego en Añadir conector personalizado.
- Nómbralo Upfirst y pega la URL a continuación como URL del servidor MCP remoto.
- Deja vacíos los campos avanzados de ID de cliente y Secreto de cliente.
- Haz clic en Añadir, luego en Conectar, inicia sesión en Upfirst y aprueba el acceso.
https://mcp.upfirst.ai
En los planes Team y Enterprise, un propietario añade el conector una vez en la configuración de la organización, y todos los demás hacen clic en Conectar.
Sin importar cómo te conectes, la primera llamada abre la página de inicio de sesión de Upfirst. Apruebas el acceso una vez y la conexión permanece vinculada a tu organización a partir de entonces.
Convenciones
Algunas reglas se aplican a todas las herramientas. Cada una lleva una etiqueta sobre lo que hace con tus datos:
- Leer Obtiene datos; nunca cambia nada.
- Escribir Crea o actualiza un registro.
- Eliminar Elimina permanentemente un registro. No hay deshacer.
Los IDs provienen de las herramientas de listado
Los IDs de agentes provienen de list_agents, los IDs de habilidades de list_agent_skills, los IDs de conocimientos de get_agent_knowledge, los IDs de saludos de list_agent_greetings, los IDs de acciones personalizadas de list_custom_actions y los IDs de llamadas de list_calls. Los IDs son cadenas de dígitos. Las herramientas de habilidades toman el ID como skillId; las herramientas de conocimiento, saludo y acción personalizada lo toman como id. Las herramientas de actualización y eliminación solo necesitan ese ID. No toman un agentId.
Los registros están vinculados a agentes
Cada habilidad, entrada de conocimiento y acción personalizada está vinculada a uno o más agentes. Las herramientas de creación toman agentIds, una lista con al menos un ID de agente. Establece autoLinkNewAgents en true para también dar el registro a cada agente que crees más adelante. En ese caso, agentIds debe listar cada agente actual. Las herramientas de actualización cambian los vínculos solo cuando envías tanto agentIds como autoLinkNewAgents. Deja ambos fuera para mantener los vínculos como están. Editar o eliminar un registro lo cambia para cada agente al que está vinculado.
Paginación
get_agent_knowledge, list_calls y get_call_transcript toman offset y limit y devuelven un totalCount, por lo que la página siempre se extrae del mismo conjunto filtrado. Las otras herramientas de listado devuelven todo en una sola respuesta.
Zonas horarias
Las fechas simples (YYYY-MM-DD) se leen en la zona horaria del negocio. Los horarios semanales se leen en la zona horaria de cada agente, por lo que una entrada vinculada a agentes en dos zonas horarias sigue las horas locales de cada uno. Pasa una fecha y hora ISO 8601 completa cuando necesites un instante exacto.
Las eliminaciones son permanentes
No hay restauración a través de esta conexión. Una habilidad, entrada de conocimiento o acción personalizada eliminada desaparece de cada agente al que estaba vinculada, y esos agentes dejan de usarla en cuestión de minutos.
Algunos ajustes son solo del panel
Voz, zona horaria e idioma; habilidades de programación; las conexiones OAuth a través de las cuales se autentica una acción personalizada; eliminar una habilidad de transferencia; e importar conocimiento del sitio web se gestionan en el panel de Upfirst, no a través de MCP. Las herramientas lo indican donde corresponde.
Ejemplos de indicaciones
El servidor MCP de Upfirst funciona desde cualquier cliente de IA compatible. Para comenzar, copia una de estas indicaciones en tu cliente y adáptala a tu negocio.
Encuentra brechas en el conocimiento de tu recepcionista
Caso de uso
Usa este flujo de trabajo para revisar la semana pasada de llamadas y encontrar dónde el conocimiento del recepcionista se quedó corto, para que sepas qué añadir a su entrenamiento.
Ejemplo de indicación
Estás ayudando a encontrar brechas en el conocimiento de un recepcionista de Upfirst.
Revisa las llamadas de los últimos siete días y luego lee el conocimiento actual del recepcionista. Busca preguntas que los llamadores hicieron y que no pudo responder bien, información que le faltaba y el mismo tema apareciendo más de una vez.
Para cada brecha, señala las llamadas que la muestran y sugiere una entrada de conocimiento específica que la llenaría, escrita de la manera en que el recepcionista debería responder. Agrupa las brechas relacionadas y clasifícalas por la frecuencia con la que aparecieron.
No cambies nada. Presenta las brechas y las entradas sugeridas para revisión.
Recepcionista: [Name, or leave blank for all]
Configura tu recepcionista a partir de una descripción
Caso de uso
Usa este flujo de trabajo para describir cómo quieres que tu recepcionista maneje las llamadas y deja que tu asistente construya la configuración: el saludo, el conocimiento, las reglas de transferencia, los horarios y las habilidades de mensajería de texto.
Ejemplo de indicación
Estás ayudando a configurar un recepcionista de IA de Upfirst a partir de una descripción simple de cómo debería manejar las llamadas.
Convierte la descripción en una configuración completa: un saludo y una despedida, el conocimiento que necesita para responder preguntas comunes, reglas de transferencia para llamadas que deberían llegar a una persona, horarios para información o transferencias que solo aplican durante ciertas horas, y cualquier habilidad de mensajería de texto que la descripción requiera.
Pregunta sobre cualquier cosa importante que la descripción deje poco clara, como horarios, a quién deberían llegar las llamadas o cómo manejar solicitudes comunes, en lugar de adivinar.
Muestra la configuración propuesta completa para revisión antes de crear cualquier cosa, luego aplícala una vez que esté aprobada.
Cómo debería manejar las llamadas el recepcionista: [Describe your business, your hours, what callers usually need, and who calls should reach]
Arregla una llamada que no salió bien
Caso de uso
Usa este flujo de trabajo para señalar una llamada que no salió como querías, di qué habrías preferido y haz que tu asistente ajuste el conocimiento del recepcionista para que llamadas similares salgan mejor.
Ejemplo de indicación
Estás ayudando a mejorar un recepcionista de Upfirst basándote en una llamada que no salió bien.
Lee la llamada que te señalo, incluida su transcripción, y compara lo que hizo el recepcionista con lo que quería que sucediera. Determina qué llevó al resultado: si algo en su conocimiento faltaba, no estaba claro o estaba contradicho por otra entrada.
Sugiere los cambios específicos que harían que una llamada como esta salga mejor la próxima vez, escritos como el conocimiento exacto a añadir o editar, y explica por qué cada uno ayuda.
Muestra los cambios para revisión antes de aplicarlos, luego haz las ediciones aprobadas.
Llamada: [ID or a short description of the call]
Lo que quería que sucediera en su lugar: [Describe the outcome you were hoping for]
01
Cuenta y agentes
Orientate, luego lee o actualiza un recepcionista de IA individual.
Comienza aquí. Una instantánea compacta de toda la cuenta: el nombre del negocio, cada recepcionista con su zona horaria, saludo, números de teléfono, habilidades y conocimiento, y el número de llamadas gestionadas en los últimos 30 días.
Sin parámetros.
Devuelve Nombre del negocio · agentes (id, nombre, zona horaria, saludo, números de teléfono, nombres de habilidades y conocimiento) · llamadas en los últimos 30 días (solo llamadas resueltas; las llamadas de prueba y archivadas no se cuentan).
Lista los agentes de IA de la organización. Usa un id devuelto con las herramientas específicas de agente a continuación.
Sin parámetros.
Devuelve agentes, cada uno con id y nombre.
Lee la configuración conversacional completa de un agente y los números de teléfono adjuntos.
| Parámetro | Tipo | Descripción |
|---|---|---|
agentId | string req | Id de agente numérico de list_agents. |
Devuelve mensajes de saludo y despedida, tono de voz, velocidad del habla, música en espera, zona horaria, bloqueo de spam y números gratuitos, y números de teléfono adjuntos.
Cambia la configuración conversacional de un agente. Actualización parcial: envía solo lo que cambia; se requiere al menos un campo configurable.
| Parámetro | Tipo | Descripción |
|---|---|---|
agentId | string req | Agente a actualizar. |
greetingMessage | string opt | Mensaje de apertura. |
goodbyeMessage | string opt | Mensaje de cierre. |
voiceTone | enum opt | friendly · professional |
speechRate | number opt | 0.7 · 0.85 · 1 · 1.1 · 1.2 |
holdMusic | enum opt | ringTone · gentleGuitar · marimba · softKeys |
isSpamCallsBlocked | boolean opt | Bloquear llamadas sospechosas de spam. |
isTollFreeCallsBlocked | boolean opt | Bloquear llamadas a números gratuitos. |
La voz, la zona horaria y el idioma se gestionan en el panel y no se pueden cambiar aquí. Los dos indicadores de bloqueo son a nivel de organización: establecer cualquiera de ellos lo cambia para cada agente activo, igual que el panel. greetingMessage es el saludo predeterminado. Los saludos para ciertas horas o fechas tienen sus propias herramientas en Saludos programados.
Devuelve el agente actualizado, en la misma forma que get_agent_by_id.
02
Saludos programados
Un saludo programado es lo que un recepcionista dice primero en llamadas que caen dentro de su horario, como un saludo fuera de horario o de día festivo. Cada uno pertenece a un solo agente. Cuando ningún saludo programado coincide con la hora de la llamada, el agente usa su saludo predeterminado, que se lee con get_agent_by_id y se cambia con update_agent.
Lista los saludos programados de un agente, incluidos los inactivos. Lee esto antes de cambiar un saludo, para que nada se sobrescriba sin verse.
| Parámetro | Tipo | Descripción |
|---|---|---|
agentId | string req | Agente cuyos saludos listar. |
Devuelve el id de cada saludo, text, indicador de activo, kind y schedule. kind es de solo lectura: text significa que el saludo se dice tal como está escrito, instruction significa que el agente construye el saludo a partir de él y unknown significa que aún no está clasificado.
Añade un saludo programado a un agente. El saludo se guarda solo cuando toda la solicitud es válida.
| Parámetro | Tipo | Descripción |
|---|---|---|
agentId | string req | Agente al que pertenece el saludo. |
text | string req | Las palabras exactas a decir, o una instrucción sobre cómo saludar. |
schedule | object req | Cuándo se usa el saludo, en la zona horaria del agente. Consulta Horarios de saludos. |
isActive | boolean opt | Si el saludo se usa en llamadas desde el inicio. El valor predeterminado es true. |
El horario no debe superponerse con otro saludo activo del mismo agente. Las horas semanales y las fechas se verifican por separado. kind lo establece el sistema: lee unknown justo después de una escritura y se clasifica en segundos.
Devuelve el id del nuevo saludo y sus campos.
Cambia el texto, el indicador de activo o el horario de un saludo programado. Actualización parcial: envía solo lo que cambia; se requiere al menos un campo.
| Parámetro | Tipo | Descripción |
|---|---|---|
id | string req | Id del saludo, de list_agent_greetings. |
text | string opt | Nuevo texto del saludo. |
isActive | boolean opt | Si el saludo se usa en llamadas. |
schedule | object opt | Nuevo horario. Consulta Horarios de saludos. |
Un nuevo horario reemplaza por completo el almacenado, así que lee el saludo primero y envía el horario completo que quieras que tenga. Se aplica la misma regla de superposición que en la creación. Un cambio de texto restablece kind a unknown hasta que se clasifique nuevamente.
Devuelve los campos que escribió la actualización.
Elimina permanentemente un saludo programado.
| Parámetro | Tipo | Descripción |
|---|---|---|
id | string req | Id del saludo a eliminar. |
No hay forma de restaurar un saludo eliminado. Las llamadas en su franja horaria usan entonces otro saludo que coincida, o el saludo predeterminado del agente cuando ninguno coincide.
El horario de un saludo tiene horas semanales en days y fechas exactas opcionales en dates, todo en la zona horaria del agente. days usa la misma forma que Schedules: los siete días, cada uno con enabled y workingPeriods. Cada entrada en dates tiene un date como YYYY-MM-DD y al menos un rango de tiempo en periods. Una entrada de fecha tiene prioridad sobre las horas semanales de ese día, que es como se configura un saludo de día festivo.
{
"days": {
"monday": { "enabled": true, "workingPeriods": [{ "from": "17:00", "to": "23:59" }] },
"tuesday": { "enabled": true, "workingPeriods": [{ "from": "17:00", "to": "23:59" }] },
"wednesday": { "enabled": true, "workingPeriods": [{ "from": "17:00", "to": "23:59" }] },
"thursday": { "enabled": true, "workingPeriods": [{ "from": "17:00", "to": "23:59" }] },
"friday": { "enabled": true, "workingPeriods": [{ "from": "17:00", "to": "23:59" }] },
"saturday": { "enabled": false, "workingPeriods": [] },
"sunday": { "enabled": false, "workingPeriods": [] }
},
"dates": [
{ "date": "2026-12-25", "periods": [{ "from": "00:00", "to": "23:59" }] }
]
}
03
Habilidades
Una habilidad es una acción que un recepcionista puede realizar en una llamada: enviar un mensaje de texto al llamante, enviar un enlace de programación, transferir la llamada, reservar una cita o llamar a una API externa. Cada tipo tiene sus propias herramientas, por lo que los campos que se pasan son siempre los que ese tipo utiliza. Las habilidades de programación son de solo lectura aquí y se gestionan en el panel de control. La configuración de una habilidad de webhook reside en la acción personalizada a la que está vinculada; léela y edítala con las herramientas de Custom actions a continuación.
Lista las habilidades configuradas para un agente, incluyendo las inactivas por defecto.
| Parámetro | Tipo | Descripción |
|---|---|---|
agentId | string req | Agente cuyas habilidades se van a listar. |
llmTool | enum opt | Solo habilidades de este tipo: sendSms · sendScheduleSms · transferCall · scheduleSlot · customWebhook. |
includeInactive | boolean opt | Incluir habilidades desactivadas. Por defecto true. |
Devuelve habilidades: id, nombre, slug, tipo, indicador de activo, configuración almacenada, horario semanal opcional. Una fila de customWebhook tiene una configuración vacía y un bloque de webhook con la url de la acción vinculada, el método HTTP y el momento; lee su configuración completa con list_custom_actions.
Un horario se respeta en las llamadas solo para habilidades de transferencia. Otros tipos lo almacenan pero lo ignoran.
Añade una habilidad de mensajería de texto: un SMS que el recepcionista puede enviar a un llamante durante una llamada. sendSms envía el mensaje tal como está escrito. sendScheduleSms lo envía junto con el enlace de programación de la organización.
| Parámetro | Tipo | Descripción |
|---|---|---|
agentIds | string[] req | Agentes que reciben la habilidad, al menos uno. Ids de list_agents. |
autoLinkNewAgents | boolean opt | También dar la habilidad a cada agente creado posteriormente. Cuando true, agentIds debe listar a todos los agentes actuales. Por defecto false. |
llmTool | enum req | sendSms · sendScheduleSms |
name | string req | Etiqueta corta, mostrada en el panel de control. |
message | string req | El texto del SMS que envía el agente, hasta 306 caracteres. |
instruction | string req | Cuándo debe enviarlo el agente durante una llamada. |
isActive | boolean opt | Activada desde el inicio. Por defecto true. |
El mensaje pasa un filtro de contenido que rechaza redacción promocional o restringida de otro modo.
Devuelve el id de la nueva habilidad y los campos enviados (llmTool, name, message, instruction, isActive). Lee la habilidad almacenada con list_agent_skills.
Cambia una habilidad de mensajería de texto. Actualización parcial: solo cambian los campos que se envían. Envía al menos un campo configurable o un nuevo conjunto de agentes.
| Parámetro | Tipo | Descripción |
|---|---|---|
skillId | string req | Id de habilidad de list_agent_skills. |
llmTool | enum opt | Cambia entre sendSms y sendScheduleSms. |
name | string opt | Nueva etiqueta. |
message | string opt | Nuevo texto del SMS, hasta 306 caracteres. |
instruction | string opt | Nueva guía sobre cuándo enviarlo. |
isActive | boolean opt | Activa o desactiva la habilidad. |
agentIds | string[] opt | Nuevo conjunto de agentes que reciben la habilidad. Envíalo junto con autoLinkNewAgents, o deja ambos fuera para mantener los enlaces actuales. |
autoLinkNewAgents | boolean opt | También dar la habilidad a cada agente creado posteriormente. Cuando true, agentIds debe listar a todos los agentes actuales. |
Devuelve los campos que escribió la actualización.
Elimina permanentemente una habilidad de mensajería de texto de cada agente al que está vinculada. Esos agentes dejan de enviar ese mensaje.
| Parámetro | Tipo | Descripción |
|---|---|---|
skillId | string req | Id de habilidad a eliminar. |
No hay forma de restaurar una habilidad eliminada. Recuperarla significa crearla de nuevo desde cero.
Devuelve { id, note }, donde note confirma la eliminación en lenguaje sencillo.
Añade una habilidad de transferencia: la regla que entrega una llamada en vivo a una persona. condition le dice al agente cuándo transferir, preTransferMessage es lo que le dice al llamante primero, y destinations son los números que marca en orden.
| Parámetro | Tipo | Descripción |
|---|---|---|
agentIds | string[] req | Agentes que reciben la habilidad, al menos uno. Ids de list_agents. |
autoLinkNewAgents | boolean opt | También dar la habilidad a cada agente creado posteriormente. Cuando true, agentIds debe listar a todos los agentes actuales. Por defecto false. |
name | string req | Etiqueta corta, mostrada en el panel de control. |
condition | string req | Cuándo transferir, en lenguaje sencillo. |
preTransferMessage | string req | Lo que dice el agente antes de transferir. |
destinations | array req | Uno o más destinos, probados en orden, cada uno { phoneNumber, label, phoneExtension }. phoneNumber es obligatorio y debe ser E.164 (p. ej. +12025550123). |
ringTimeoutSeconds | number opt | Tiempo de llamada por destino, 5–60. |
noAnswerAction | enum opt | endCall · returnToAgent |
transferMethod | enum opt | cold transfiere al llamante directamente · warm informa primero al destino. |
transferCallerId | enum opt | Número que ve el destino: upfirstNumber · callerNumber. |
recordingMode | enum opt | agentOnly detiene la grabación en la transferencia · fullCall sigue grabando después. |
isActive | boolean opt | Activada desde el inicio. Por defecto true. |
schedule | object opt | Horas semanales en las que se ofrece la habilidad, en la zona horaria del agente. Omítelo para disponibilidad permanente. Ver Schedules. |
Cada destino debe estar en el mismo país que uno de los números de Upfirst de los agentes vinculados. Cuando se omite, la habilidad usa los valores predeterminados del panel de control en el momento de la llamada: un tono de 30 segundos, finalizar la llamada si no hay respuesta, transferencia en frío, el número de Upfirst como identificador de llamada y la grabación se detiene en la transferencia.
Devuelve el id de la nueva habilidad y los campos enviados. Lee la habilidad almacenada con list_agent_skills.
Cambia una habilidad de transferencia. Actualización parcial: solo cambian los campos que se envían. Envía al menos un campo configurable o un nuevo conjunto de agentes.
| Parámetro | Tipo | Descripción |
|---|---|---|
skillId | string req | Id de habilidad de list_agent_skills. |
destinations | array opt | Reemplaza la lista completa. Envía cada número que quieras conservar. |
schedule | object opt | Reemplaza las horas almacenadas. null borra el horario, haciendo la habilidad disponible las 24 horas. |
| Otros campos de creación | opt | name, condition, preTransferMessage, ringTimeoutSeconds, noAnswerAction, transferMethod, transferCallerId, recordingMode, isActive. Mismos valores que en la creación. |
agentIds | string[] opt | Nuevo conjunto de agentes que reciben la habilidad. Envíalo junto con autoLinkNewAgents, o deja ambos fuera para mantener los enlaces actuales. |
autoLinkNewAgents | boolean opt | También dar la habilidad a cada agente creado posteriormente. Cuando true, agentIds debe listar a todos los agentes actuales. |
Cada destino debe estar en el mismo país que uno de los números de Upfirst de los agentes vinculados.
El tipo de una habilidad se fija en la creación. Pasar el id de una habilidad de programación o webhook se lee como no encontrado.
Devuelve los campos que escribió la actualización.
No hay herramienta para esto. Las habilidades de transferencia se eliminan en el panel de control de Upfirst. Por MCP puedes desactivar una en su lugar: establece isActive: false con update_transfer_call_skill, y el agente deja de ofrecer la transferencia mientras la habilidad permanece configurada.
04
Conocimiento
El conocimiento de un recepcionista es de lo que responde a los llamantes. En el panel de control de Upfirst estas entradas viven bajo Training. Cada una es texto que escribes o contenido importado de un sitio web. Una entrada puede estar vinculada a varios agentes, y editarla o eliminarla cambia lo que responde cada agente vinculado. Las escrituras reentrenan automáticamente al recepcionista en minutos.
Lee la base de conocimiento de un agente. Cada entrada se devuelve completa con su contenido íntegro, nunca una vista previa.
| Parámetro | Tipo | Descripción |
|---|---|---|
agentId | string req | Agente cuyo conocimiento se va a leer. |
id | string opt | Devuelve solo esta entrada. |
offset | number opt | Entradas a omitir. Por defecto 0. |
limit | number opt | Máximo de entradas, 1–100. Por defecto 25. |
Devuelve entradas: id, nombre, tipo (texto/sitio web), indicador de activo, contenido completo, url de origen y horario semanal, más totalCount.
Añade una entrada de texto al entrenamiento de uno o más recepcionistas. La nueva entrada va al principio de la lista de cada agente vinculado.
| Parámetro | Tipo | Descripción |
|---|---|---|
agentIds | string[] req | Agentes que reciben la entrada, al menos uno. Ids de list_agents. |
autoLinkNewAgents | boolean opt | También dar la entrada a cada agente creado posteriormente. Cuando true, agentIds debe listar a todos los agentes actuales. Por defecto false. |
name | string req | Nombre mostrado de la entrada. |
content | string req | Texto plano, hasta 250,000 caracteres. |
isActive | boolean opt | Activa desde el inicio. Por defecto true. |
schedule | object opt | Restringe la entrada al horario laboral. Omítelo para actividad permanente. Ver Schedules. |
Devuelve el id de la nueva entrada, name, isActive, schedule (null cuando está siempre activa) y contentLength en caracteres. Lee la entrada completa con get_agent_knowledge.
Cambia el nombre de una entrada, el indicador de activo, el contenido, el horario o qué agentes la ven. Actualización parcial: envía al menos un campo configurable o un nuevo conjunto de agentes.
| Parámetro | Tipo | Descripción |
|---|---|---|
id | string req | Id de entrada de get_agent_knowledge. |
name, isActive | opt | Nuevo nombre / indicador de activo. |
content | string opt | Nuevo texto, reemplazando el contenido almacenado por completo. Hasta 250,000 caracteres. |
schedule | object opt | Nuevo horario. null lo borra, haciendo la entrada siempre disponible; omítelo para conservar el almacenado. |
agentIds | string[] opt | Nuevo conjunto de agentes que reciben la entrada. Envíalo junto con autoLinkNewAgents, o deja ambos fuera para mantener los enlaces actuales. |
autoLinkNewAgents | boolean opt | También dar la entrada a cada agente creado posteriormente. Cuando true, agentIds debe listar a todos los agentes actuales. |
El contenido se reemplaza, nunca se añade. Lee la entrada con get_agent_knowledge primero y envía de vuelta el texto completo que quieras que tenga, incluyendo lo que estés conservando. La edición cambia lo que dice cada agente vinculado a la entrada.
Devuelve los campos que escribió la actualización. El contenido nuevo vuelve como contentLength, no como el texto completo.
Elimina permanentemente una entrada de conocimiento.
| Parámetro | Tipo | Descripción |
|---|---|---|
id | string req | Id de entrada a eliminar. |
No hay forma de restaurar una entrada eliminada. Eliminarla la quita de cada agente al que está vinculada.
Devuelve { id, note }, donde note confirma la eliminación en lenguaje sencillo.
Una programación restringe una entrada de conocimiento (o habilidad de transferencia) a horario comercial, respetado en la zona horaria comercial del agente. Es un objeto por día de la semana. Cada programación que envíes debe incluir los siete días; un día en el que la entrada no deba aplicarse es enabled: false con un workingPeriods vacío. Las horas son en formato HH:MM de 24 horas en la zona horaria del agente.
Una entrada programada solo está en el conocimiento de la recepcionista durante sus ventanas. Fuera de ellas, es como si la entrada no existiera, por lo que la recepcionista nunca responde basándose en ella en el momento equivocado.
Eso hace que las programaciones sean una forma confiable de manejar hechos específicos en el tiempo. Para que las horas de apertura y cierre sean infalibles, agrega una entrada restringida a tus horas de apertura que diga "Actualmente estamos abiertos" y una segunda restringida a tus horas de cierre que diga "Actualmente estamos cerrados". Solo una está activa a la vez, por lo que la recepcionista no puede confundirlas.
{
"days": {
"monday": { "enabled": true, "workingPeriods": [{ "from": "09:00", "to": "17:00" }] },
"tuesday": { "enabled": true, "workingPeriods": [{ "from": "09:00", "to": "17:00" }] },
"wednesday": { "enabled": true, "workingPeriods": [{ "from": "09:00", "to": "17:00" }] },
"thursday": { "enabled": true, "workingPeriods": [{ "from": "09:00", "to": "17:00" }] },
"friday": { "enabled": true, "workingPeriods": [{ "from": "09:00", "to": "17:00" }] },
"saturday": { "enabled": false, "workingPeriods": [] },
"sunday": { "enabled": false, "workingPeriods": [] }
}
}
05
Acciones personalizadas
Una acción personalizada es una llamada que la recepcionista hace a una API HTTP externa. timing decide cuándo se ejecuta: before se dispara antes de la conversación y solo puede usar variables del sistema; during se ofrece al agente en la llamada, que decide a partir de la descripción si llamarla; after se dispara una vez que la llamada ha terminado, ya sea cada vez o cuando se cumple una condición en lenguaje natural.
Las variables se interpolan en la URL, los parámetros de consulta, los encabezados y el cuerpo como {{name}}. Una acción está vinculada a uno o más agentes, y editarla o eliminarla cambia lo que hace cada agente vinculado. En list_agent_skills, una habilidad de customWebhook es la vista del lado del agente de una acción personalizada. Las conexiones OAuth a través de las cuales una acción puede autenticarse se configuran en el panel de Upfirst.
Cada acción personalizada que un agente puede usar, cada una con su configuración completa. Lee esto antes de reescribir una acción, para que nada se sobrescriba sin verse.
| Parámetro | Tipo | Descripción |
|---|---|---|
agentId | string req | Agente cuyas acciones listar. Cada acción vinculada a este agente se incluye. |
id | string opt | Devuelve solo esta acción. |
Devuelve customActions, cada una con id, agentIds (cada agente al que está vinculada la acción), autoLinkNewAgents, nombre, descripción, sincronización, método HTTP, URL, tipo de autenticación e id de conexión OAuth, mensaje de respaldo, tiempo de espera, indicador de activo, variables, parámetros de consulta, encabezados, campos de salida permitidos, valores de muestra, plantilla de cuerpo y la condición posterior a la sincronización.
Un encabezado cuyo nombre parezca una credencial (token, clave, secreto, autorización) regresa como [redacted]; el valor real nunca se lee. Las acciones eliminadas se omiten.
Agrega una acción personalizada y vincúlala a uno o más agentes.
| Parámetro | Tipo | Descripción |
|---|---|---|
agentIds | string[] req | Agentes que reciben la acción, al menos uno. Ids de list_agents. |
autoLinkNewAgents | boolean opt | También da la acción a cada agente creado posteriormente. Cuando true, agentIds debe listar a cada agente actual. Predeterminado false. |
name | string req | Etiqueta corta, mostrada en el panel. |
description | string req | Qué hace la acción, en lenguaje natural. La sincronización before y during la pone frente al agente, que decide a partir de este texto si llamar a la API. La sincronización after la ignora. |
timing | enum req | before · during · after |
httpMethod | enum req | GET · POST · PUT · PATCH · DELETE |
url | string req | Endpoint al que va la solicitud. Puede contener marcadores de posición {{variable}}. |
authType | enum req | none envía la solicitud sin autenticación · bearer necesita un encabezado Authorization en headers · customHeaders autentica a través de los encabezados que proporciones · oauth_connection resuelve un token de una conexión y necesita oauthConnectionId. |
fallbackMessage | string req | Lo que el agente le dice al llamante cuando la solicitud falla o se agota el tiempo. |
oauthConnectionId | string opt | Id numérico de una conexión OAuth conectada. Requerido para oauth_connection, rechazado para cualquier otro tipo de autenticación. Tómalo de list_custom_actions en una acción que ya use una. |
variables | array opt | Valores interpolados en la solicitud, cada uno { name, description, exampleValue, isSystem, required }. name y description son requeridos y los nombres deben ser únicos. Las variables del sistema las completa Upfirst desde la propia llamada; las personalizadas se recogen del llamante. Una acción de sincronización before solo puede usar variables del sistema. Predeterminado []. |
queryParams | array opt | Parámetros de cadena de consulta, cada uno { key, value }. Los valores pueden usar marcadores de posición. Predeterminado []. |
headers | array opt | Encabezados de solicitud, cada uno { key, value }. La autenticación Bearer lleva su token en un encabezado Authorization aquí. Nunca envíes el marcador de posición [redacted] de vuelta. Predeterminado []. |
allowedOutputFields | string[] opt | Campos de la respuesta JSON que el agente puede leer. Vacío pasa la respuesta sin tocar. Predeterminado []. |
bodyTemplate | string opt | Cuerpo de la solicitud enviado tal cual con marcadores de posición sustituidos. Vacío para ninguno. |
sampleValues | object opt | Un valor por nombre de variable, usado cuando se prueba la acción. |
timeoutSeconds | integer opt | 1–30. Predeterminado 10. |
isActive | boolean opt | Activado desde el inicio. Predeterminado true. |
condition | string o null opt | Solo sincronización after. Regla en lenguaje natural verificada contra la llamada finalizada; null se dispara después de cada llamada. Déjalo fuera para before y during. |
Devuelve la acción creada con su nuevo id.
Cambia una acción personalizada. Actualización parcial: solo cambian los campos que envíes. Envía al menos un campo configurable o un nuevo conjunto de agentes. Las listas se reemplazan completas, no se fusionan, así que lee la acción con list_custom_actions primero.
| Parámetro | Tipo | Descripción |
|---|---|---|
id | string req | Id de acción de list_custom_actions. |
agentIds | string[] opt | Nuevo conjunto de agentes que reciben la acción. Envíalo junto con autoLinkNewAgents, o deja ambos fuera para mantener los vínculos actuales. |
autoLinkNewAgents | boolean opt | También da la acción a cada agente creado posteriormente. Cuando true, agentIds debe listar a cada agente actual. |
oauthConnectionId | string o null opt | null lo borra. Envía null en la misma llamada que mueve la acción fuera del tipo de autenticación oauth_connection. |
condition | string o null opt | null lo borra. Envía null en la misma llamada que mueve la acción fuera de la sincronización after. |
variables, queryParams, headers, allowedOutputFields | array opt | Cada uno reemplaza su lista completa. Envía cada entrada que quieras conservar. Un encabezado que lleve el marcador de posición [redacted] se rechaza; envía el valor real o deja ese encabezado fuera. |
| Otros campos de creación | opt | name, description, timing, httpMethod, url, authType, bodyTemplate, sampleValues, fallbackMessage, timeoutSeconds, isActive. Mismos valores que en la creación. |
Una acción vinculada a varios agentes se edita para todos ellos.
Devuelve los campos que escribió la actualización.
Elimina permanentemente una acción personalizada. Cada agente vinculado a ella deja de llamar a esa API.
| Parámetro | Tipo | Descripción |
|---|---|---|
id | string req | Id de acción a eliminar. |
No hay forma de restaurar una acción eliminada. Recuperarla significa crearla de nuevo desde cero, y list_custom_actions devuelve su configuración solo mientras aún exista.
Devuelve { id, note }, donde note confirma la eliminación en lenguaje natural.
06
Llamadas
Lee el historial de llamadas del negocio, los detalles de una llamada y su transcripción. Solo aparecen las llamadas que han terminado; una llamada aparece poco después de que termina.
Lista y filtra el historial de llamadas, más recientes primero. Filas compactas sin transcripciones ni resúmenes (usa las herramientas a continuación para esos).
| Parámetro | Tipo | Descripción |
|---|---|---|
statuses | enum[] opt | Filtra por resultado, cada llamada tiene exactamente uno: test · blocked · spam · hungUp · completed. |
query | string opt | Búsqueda de texto libre sobre resúmenes y transcripciones de llamadas. |
tags | string[] opt | Coincide con llamadas que lleven cualquiera de estas etiquetas (por nombre o id). |
startDate | date opt | YYYY-MM-DD desnudo = día calendario en la zona horaria del negocio, o un datetime ISO completo. |
endDate | date opt | Como arriba; inclusivo. |
archived | boolean opt | Devuelve llamadas archivadas en lugar de activas. Predeterminado false. |
offset, limit | number opt | Paginación. limit es 1–100, predeterminado 25. |
Devuelve filas de llamadas (llamante, hora, duración, resultado, etiquetas, contacto vinculado, recuento de turnos de transcripción) más totalCount.
Detalles completos de una llamada, todo excepto el texto de la transcripción y la grabación.
| Parámetro | Tipo | Descripción |
|---|---|---|
callId | string req | Id de llamada numérico de list_calls. |
Devuelve sincronización, resultado, números del llamante y de la recepcionista, el resumen escrito por IA, los campos de datos capturados, las habilidades que usó el agente (con cuándo se disparó cada una), etiquetas, los comentarios de tu equipo y el recuento de turnos de transcripción.
El texto de la conversación de una llamada como turnos ordenados, cada uno con una marca de desplazamiento [mm:ss] y su hablante.
| Parámetro | Tipo | Descripción |
|---|---|---|
callId | string req | Id de llamada numérico de list_calls. |
offset, limit | number opt | Paginación sobre turnos. limit es 1–200, predeterminado 100. Una llamada típica cabe en una respuesta; pagina solo cuando la nota diga que quedan más turnos. |
Los hablantes son Agente (la recepcionista de IA), Llamante (la persona que marcó) y Transferido (un humano al que se transfirió la llamada).
Devuelve turnos (desplazamiento, hablante, texto) más totalCount.
Preguntas frecuentes
¿Cómo hago para que Upfirst empiece a contestar mis llamadas?
Te damos un número de teléfono. Puedes repartir ese número y hacer que la gente lo llame directamente, pero la mayoría de los negocios reenvían las llamadas a él desde la línea que ya usan.
Tú eliges cuánto reenviar: cada llamada, solo las que pierdes o, dependiendo de tu teléfono, operador o sistema VoIP, solo durante ciertas horas. Los pasos difieren para cada proveedor, así que consulta Reenvía todas tus llamadas a Upfirst para el tuyo.
¿Necesito una clave API?
No. La autorización es un inicio de sesión estándar OAuth 2.1. La primera llamada abre la página de inicio de sesión de Upfirst, apruebas el acceso una vez y no hay nada que copiar, pegar o almacenar.
¿Con qué asistentes de IA puedo usar esto?
Con cualquier cliente que admita servidores MCP remotos sobre HTTP. La sección Conexión tiene la configuración para Claude, ChatGPT, Claude Code, Cursor, VS Code y Codex. Para cualquier otra cosa, apúntalo a https://mcp.upfirst.ai como un servidor HTTP transmisible y manejará el inicio de sesión en la primera llamada.
¿Qué puede alcanzar mi asistente?
Solo la organización con la que iniciaste sesión. Cada herramienta está limitada a esa organización, y los ids de cualquier otra nunca son accesibles. Dentro de ella, el asistente puede leer llamadas y transcripciones y cambiar la configuración de la recepcionista, las habilidades, el conocimiento y las acciones personalizadas, y elegir a qué recepcionistas se aplica cada una, así que trata la conexión como tratarías estar conectado al panel.
¿Por qué no aparece una llamada que acabo de tomar?
Solo aparecen llamadas finalizadas, y una llamada se muestra poco después de que termina. Las llamadas en curso no están disponibles hasta que cuelgan. Si una llamada aún falta, verifica si fue archivada, ya que list_calls devuelve llamadas activas a menos que pases archived: true.
¿Qué no puedo hacer a través de MCP?
Voz, zona horaria e idioma; habilidades de programación; conexiones OAuth para acciones personalizadas; eliminar una habilidad de transferencia; e importar conocimiento desde un sitio web se gestionan en el panel de Upfirst. Las grabaciones de llamadas tampoco están disponibles a través de esta conexión. Las herramientas lo indican donde corresponde.