Schemas
ResolveConversationDto
resolutionQue se resolvio, en palabras. Queda escrito en la conversacion.
messageSi viene, se le manda al contacto por su canal. Si se omite, la resolucion solo queda registrada.
externalRefEl id del ticket de su lado. Con el, un reintento del mismo aviso no se procesa dos veces.
returnToAgentPor defecto el control vuelve al agente. false lo deja en manos de una persona.
EscalamientoResueltoDto
idEl id de la conversacion.
controlStatusQuien la tiene despues del aviso. Lo normal es agent: el control vuelve al agente. Queda como estaba (human o escalated) si una persona del equipo la tenia tomada, o si mandaste returnToAgent: false.
messageQueuedtrue si el mensaje al contacto quedo encolado. Encolado, no entregado: el transporte lo despacha despues.
alreadyResolvedtrue si este aviso ya se habia procesado antes. Reintentar es seguro.
EnviarMensajeDto
messageEl texto que le llega a la persona. No puede ser solo espacios.
externalRefEl id de este envio en su sistema. Un reintento con el mismo valor no manda el mensaje dos veces.
MensajeEnviadoDto
idEl id de la conversacion.
messageIdEl id del mensaje que quedo guardado en la conversacion. En un reintento es el del primer envio.
alreadySenttrue si esa externalRef ya habia enviado un mensaje en esta conversacion y esta llamada no mando nada. Reintentar es seguro.
CampoDelCasoDto
keyLa clave del campo, tal como se declaro en el embudo.
labelComo se muestra en el panel.
typeEl tipo del campo, tal como se configuro.
valueEl valor guardado en la ficha del contacto. null si el campo no tiene dato todavia.
EstadoDeConversacionDto
idEl id de la conversacion.
nameNombre del contacto.
emailCorreo del contacto.
phoneTelefono del contacto.
statusEl estado del caso en el flujo.
controlStatusQuien la tiene: agent el agente, human una persona del equipo, escalated esperando que alguien la tome.
controlledByEl id de la persona que la tomo, cuando controlStatus es human.
assignedToEl id de la persona duena del caso. null si nadie lo tiene asignado.
escalatedAtescalationReasonPor que se escalo, si se escalo.
pipelineIdEl flujo en el que esta el caso.
pipelineNamecurrentStageIdcurrentStageNamelastMessageAtcreatedAtinboundNumberLabelLa etiqueta del numero de WhatsApp del negocio por el que entro. null si no entro por WhatsApp.
inboundNumberDisplayEse numero, como se muestra. null si no entro por WhatsApp.
Los campos del embudo ACTUAL del caso, en el orden en que se declararon. Un campo sensible no aparece: ni la clave, ni el valor.
ConversacionAnteriorDto
conversationIdEl id de esa conversacion anterior. Sus mensajes se leen con GET /conversations/{id}/messages.
pipelineIdpipelineNamestatusoutcomePor que termino: la clave del sistema (inactividad_despedida, seguimiento_agotado...) o el motivo que declara la etapa de cierre. null si no tiene.
summaryResumen breve de la conversacion, escrito al cerrarse. null si no hay.
firstMessageLos primeros 160 caracteres de lo primero que escribio el cliente. null si no escribio.
messageCountcreatedAtlastMessageAtHistorialDelClienteDto
conversationIdLa conversacion por la que se pregunto.
Las otras conversaciones de la misma persona en esta organizacion, de la mas nueva a la mas vieja. Hasta 50.
EscribirCamposDelCasoDto
Las claves y valores a escribir. Las claves son las que declara el embudo, sin importar quien las llena. Los valores son texto; los vacios se rechazan porque borrarian el que ya estaba.
CamposDelCasoEscritosDto
idEl id del caso.
guardadosLas claves que quedaron escritas en la ficha del contacto. Una clave que ya valia lo mismo vuelve aca igual: la llamada es idempotente y reintentarla no la saca de esta lista.
rechazadosLas claves que no entraron, por su nombre. Una clave cae aca si el embudo no la declara, si el valor venia vacio o no era texto, si no cumple el tipo del campo (un email sin arroba, por ejemplo), o si depende de otro campo que se rechazo en esta misma llamada. El "quien lo llena" NO limita esta puerta: cualquier clave declarada se puede escribir, la llene el equipo, el canal o el agente. No es un error: las demas si se escribieron.
Por que se rechazo cada clave de "rechazados" que no paso el tipo del campo. Solo trae las claves de esa causa: si una se rechazo por no estar declarada en el embudo, no aparece aca.
limpiadosLas claves que esta escritura BORRO de la ficha. Pasa cuando se escribe un campo del que dependen las opciones de otro (dependsOn en GET /pipelines/{id}) y el valor que el otro tenia ya no esta entre las validas para el valor nuevo: ese campo se limpia y hay que volver a pedirlo. No es un error, y las claves de aca no vuelven en "guardados" ni en "rechazados".
DerivarCasoDto
pipelineEl embudo destino, por slug o por id.
stageLa etapa destino dentro de ese embudo, por slug o por id. Si se omite, el caso entra por la etapa de entrada del embudo. Una etapa que no sea de ese embudo es un 400: no se corrige sola.
CasoDerivadoDto
idEl id del caso.
pipelineIdEl id del embudo en el que quedo.
pipelineSlugSu slug.
stageIdEl id de la etapa en la que quedo.
stageSlugSu slug.
movidofalse si el caso ya estaba en esa etapa, o sea que esta llamada no lo movio. Reintentar es seguro: no se reescribe ni se vuelve a avisar.
CrearNotaInternaDto
textoEl texto de la nota. La ve solo el equipo. No puede ser solo espacios.
externalRefEl id de esta nota en su sistema. Un reintento con el mismo valor no deja la nota dos veces.
NotaInternaCreadaDto
idEl id de la conversacion.
messageIdEl id de la nota. Es el mismo con que aparece en GET /conversations/{id}/messages?incluirNotas=true. En un reintento es el de la primera.
createdAtalreadyCreatedtrue si esa externalRef ya habia dejado una nota en esta conversacion y esta llamada no dejo ninguna. Reintentar es seguro.
OpenAgentConversationDto
externalIdEl id de esta conversacion en su sistema, unico en la organizacion. Si ya existe, se devuelve esa conversacion.
contactNamecontactEmailcontactPhoneConversacionAbiertaDto
conversationIdEl id de la conversacion. Es lo que va en la URL para mandar y leer mensajes.
agentSlugEl agente que la atiende.
createdtrue si se abrio en esta llamada; false si ese externalId ya tenia una conversacion y se devolvio esa. Un reintento la ve en false.
SendAgentMessageDto
messageexternalRefEl id de este mensaje en su sistema. Un reintento con el mismo valor no guarda el mensaje dos veces ni hace contestar al agente otra vez: devuelve lo que paso con el primero. Mandenlo siempre.
RespuestaDelAgenteDto
conversationIdstatusanswered: el agente contesto y la respuesta viene en response (HTTP 200). pending: se vencio el techo de espera y la respuesta se escribe despues; se lee con GET /conversations/{id}/messages (HTTP 202). human: alguien del equipo tomo la conversacion, el mensaje le llego a esa persona y el agente no contesta (HTTP 200).
responseLo que contesto el agente. Solo viene cuando status es answered.
alreadySenttrue si ese externalRef ya habia llegado en esta conversacion: el mensaje no se guardo otra vez y la respuesta es la del primero. Reintentar es seguro.
MensajeDto
roleuser lo que mando el cliente; assistant lo que contesto el agente; human lo que escribio alguien del equipo; internal_note una nota interna, que la persona nunca ve (solo viene con incluirNotas=true).
contentcreatedAtauthorQuien dejo la nota: el nombre de la persona del equipo o de la credencial. Solo viene en internal_note.
HiloDeConversacionDto
conversationIdDel mas viejo al mas nuevo.
PushKnowledgeDocumentDto
collectionIdLa colección donde vive el documento. Tiene que ser tuya.
filenameRuta relativa del archivo, p. ej. "docs/pricing.md". Es la identidad: el mismo valor reemplaza el documento anterior.
contentEl contenido del documento, en markdown.
DocumentoEmpujadoDto
idEl id del documento. Es lo que va en documentId para borrarlo.
collectionIdfilenameLa ruta relativa que se mando. Junto con la coleccion, es la identidad del documento.
statusprocessing recien empujado: los trozos y sus vectores se hacen despues. ready cuando el agente ya lo puede citar. failed si la indexacion fallo; el motivo se lee en error al listar.
CrearColeccionDto
slugEl identificador que eliges tú. Es la llave de idempotencia: dos llamadas con el mismo slug devuelven la misma coleccion.
nameComo se llama la coleccion en la pantalla.
descriptionPara que sirve, en una linea. Se ve en la pantalla.
ColeccionCreadaDto
idEl id de la coleccion. Es lo que va en collectionId al empujar documentos y al asignarla a un agente.
slugnamedescriptioncreatedAtColeccionDto
idEl id de la coleccion. Es lo que va en collectionId al empujar documentos y al asignarla a un agente.
slugnamedescriptioncreatedAtdocumentCountCuantos documentos vivos tiene adentro.
PaginaDeColeccionesDto
limitCuantas filas se pidieron. Es el limit del pedido o 50 si no se mando.
offsetCuantas filas se saltearon. Es el offset del pedido o 0.
hasMoretrue si hay mas filas despues de esta pagina. Para seguir, repetir el pedido con offset + limit.
DocumentoDto
idEl id del documento. Es lo que va en documentId para borrarlo.
collectionIdfilenameLa ruta relativa que se mando. Junto con la coleccion, es la identidad del documento.
statusprocessing recien empujado: los trozos y sus vectores se hacen despues. ready cuando el agente ya lo puede citar. failed si la indexacion fallo; el motivo se lee en error al listar.
sizeBytesPeso del contenido en bytes.
chunkCountEn cuantos trozos quedo partido. 0 mientras esta en processing.
errorPor que fallo la indexacion, cuando status es failed. null si no fallo.
createdAtupdatedAtPaginaDeDocumentosDto
limitCuantas filas se pidieron. Es el limit del pedido o 50 si no se mando.
offsetCuantas filas se saltearon. Es el offset del pedido o 0.
hasMoretrue si hay mas filas despues de esta pagina. Para seguir, repetir el pedido con offset + limit.
PlantillaDto
idEl id de la plantilla. Es lo que va en templateId.
slugnamedescriptioncategoryPara agrupar en la galeria.
knowledgeCollectionsLos slugs de las colecciones de conocimiento que el agente instanciado va a usar. Conviene tenerlas creadas antes de instanciar; las que falten salen en missing.
PaginaDePlantillasDto
limitCuantas filas se pidieron. Es el limit del pedido o 50 si no se mando.
offsetCuantas filas se saltearon. Es el offset del pedido o 0.
hasMoretrue si hay mas filas despues de esta pagina. Para seguir, repetir el pedido con offset + limit.
InstanciarPlantillaDto
slugIdentificador del agente dentro de tu organizacion. Es la llave de idempotencia: reintentar con el mismo slug devuelve el mismo agente, no uno nuevo.
nameComo se llama el agente. Por omision, el nombre de la plantilla.
ConocimientoInstanciadoDto
assignedLos slugs de las colecciones que quedaron asignadas al agente.
missingLos slugs que la plantilla pedia y la organizacion no tiene. Se crean con POST /knowledge/collections y se asignan con PUT /agents/{agentId}/knowledge/{collectionId}.
AgenteInstanciadoDto
idEl id del agente. Es lo que va en agentId.
slugnamestatusRecien instanciado queda en draft; se activa con POST /agents/{agentId}/activate.
audiencechannelsLos canales por los que atiende. Vacio significa todos.
createdAtSacarPlantillaDto
nameComo se llama la plantilla.
categoryEn que parte del catalogo va. Por ejemplo sales o support.
slugIdentificador de la plantilla. Por omision se deriva del nombre.
descriptionPara que sirve esta plantilla.
FaltaParaAlcanzarDto
codigoCodigo estable para ramificar: sin_flujo (no esta en ningun flujo), no_es_la_etapa_de_entrada (esta en un flujo pero no lo alcanza una conversacion nueva), sin_canal_api (no tiene el canal api en channels).
mensajeQue hacer al respecto, para una persona.
AgenteActivadoDto
idEl id del agente. Es lo que va en agentId.
slugnamestatusRecien instanciado queda en draft; se activa con POST /agents/{agentId}/activate.
audiencechannelsLos canales por los que atiende. Vacio significa todos.
createdAtLo que todavia impide que alguien lo alcance. Vacio significa que ya lo alcanza cualquiera. Activar no falla por esto: informa.
AgenteAprovisionadoDto
idEl id del agente. Es lo que va en agentId.
slugnamestatusRecien instanciado queda en draft; se activa con POST /agents/{agentId}/activate.
audiencechannelsLos canales por los que atiende. Vacio significa todos.
createdAtAgenteResumenDto
idEl id del agente. Es lo que va en agentId.
slugEl identificador que se eligio al crearlo. Unico en la organizacion.
nameComo se llama en el panel.
descriptionPara que sirve, si se escribio.
statusdraft recien creado; active atendiendo; paused no contesta; archived retirado.
audienceA quien atiende. Por esta API solo se ven agentes external: los internal se administran desde el panel.
runtimeTypetext o voice.
channelsLos canales por los que atiende. Vacio significa todos. Para atender por esta API tiene que incluir api.
versionSube cuando se modifica el agente (PATCH, activar, pausar, dar de baja). Es lo que va en expectedVersion al escribir. No sube al conceder o quitar una accion ni al editar una accion o un servidor: para eso, updatedAt.
createdAtupdatedAtUltimo cambio del agente, de las acciones que tiene concedidas o de lo que hace una de ellas y a donde sale (editar una accion, un servidor MCP o un conector mueve a todos los agentes que la tienen). No refleja las colecciones de conocimiento asignadas ni si un canal esta conectado.
PaginaDeAgentesDto
limitCuantas filas se pidieron. Es el limit del pedido o 50 si no se mando.
offsetCuantas filas se saltearon. Es el offset del pedido o 0.
hasMoretrue si hay mas filas despues de esta pagina. Para seguir, repetir el pedido con offset + limit.
ModeloDelAgenteDto
providerEl proveedor del modelo: gemini, gemini-live, bedrock, anthropic, deepseek o nova.
modelEl identificador del modelo en ese proveedor.
maxOutputTokensCuántos tokens puede escribir el modelo en cada llamada. Sin valor, rige el mínimo del motor.
effortCuánto razona el modelo antes de contestar: low, medium, high, xhigh o max. Sin valor, rige el del modelo.
alwaysLoadedToolsLas herramientas que el modelo ve siempre. Las demás las encuentra buscando cuando las necesita. Sin valor, las ve todas.
AccionDelAgenteDto
slugEl slug de la accion. Es lo que va al conceder o quitar.
namedescriptionLo que lee el agente para decidir cuando usarla.
destinationOriginA que tercero sale la accion: solo el origen (esquema, host y puerto), nunca el path, la query ni las cabeceras. Lo tienen las acciones HTTP de la organizacion, las de un servidor MCP (el origen del servidor) y las de un conector (el de su sitio). null si la accion es una herramienta nativa de Lelemon, que no tiene un destino configurado por la organizacion, o si ya no existe. "(ilegible)" si la accion sale a un destino pero su direccion no se pudo leer. Solo viene si la credencial tiene actions:read; sin ese alcance el campo no existe.
CanalDelAgenteDto
slugEl slug del canal: whatsapp, web, api...
nameconnectedtrue si el canal tiene una conexion activa.
ColeccionAsignadaDto
idEl id de la coleccion. Es lo que va en collectionId.
nameAgenteDto
idEl id del agente. Es lo que va en agentId.
slugEl identificador que se eligio al crearlo. Unico en la organizacion.
nameComo se llama en el panel.
descriptionPara que sirve, si se escribio.
statusdraft recien creado; active atendiendo; paused no contesta; archived retirado.
audienceA quien atiende. Por esta API solo se ven agentes external: los internal se administran desde el panel.
runtimeTypetext o voice.
channelsLos canales por los que atiende. Vacio significa todos. Para atender por esta API tiene que incluir api.
versionSube cuando se modifica el agente (PATCH, activar, pausar, dar de baja). Es lo que va en expectedVersion al escribir. No sube al conceder o quitar una accion ni al editar una accion o un servidor: para eso, updatedAt.
createdAtupdatedAtUltimo cambio del agente, de las acciones que tiene concedidas o de lo que hace una de ellas y a donde sale (editar una accion, un servidor MCP o un conector mueve a todos los agentes que la tienen). No refleja las colecciones de conocimiento asignadas ni si un canal esta conectado.
systemPromptLas instrucciones del agente, enteras. Es el texto que se cambia con PATCH.
maxIterationsCuantas vueltas puede dar el agente en un turno.
maxTokensTecho de tokens por turno.
Las acciones que tiene concedidas hoy. Con actions:read, ademas el origen al que llama cada una; nunca la direccion entera.
Los canales de channels, con su nombre y si estan conectados.
Las colecciones de conocimiento asignadas y habilitadas. Solo viene si la credencial ademas tiene knowledge:read; si no, el campo no esta.
ActualizarAgenteDto
nameComo se llama el agente.
descriptionPara que sirve.
systemPromptLas instrucciones del agente. Queda una version en el historial.
llmConfigCon que modelo contesta: { primary: { provider, model }, fallback?: { provider, model } }.
maxTokensCuantos tokens puede gastar el agente en un turno, sumando entrada y salida de todas sus vueltas. Si se pasa, el turno se detiene.
expectedVersionLa version del agente que leiste. Si alguien lo cambio en el medio, la respuesta es 409 y no se escribe nada.
AgenteGestionadoDto
idslugnamedescriptionstatusversionLa version nueva. Es lo que va en expectedVersion del proximo PATCH para no pisar un cambio ajeno.
updatedAtVersionDePromptDto
idEl id de la version. Es lo que va en versionId para restaurarla.
versionEl numero de version del agente cuando se escribio.
charsCuantos caracteres tiene el texto. El texto no viene: un prompt puede pesar cientos de KB.
createdAtHistorialDePromptsDto
De la mas nueva a la mas vieja. Hasta 50.
VersionRestauradaDto
idEl id de la version cuyo texto se copio.
versionSu numero de version.
AgenteRestauradoDto
idslugnamedescriptionstatusversionLa version nueva. Es lo que va en expectedVersion del proximo PATCH para no pisar un cambio ajeno.
updatedAtDe que version salio el texto. El agente queda con una version NUEVA que lo copia; la vieja sigue en el historial.
TextoDeAutorizacionDto
versiontextoEl texto que se acepta.
detalleLa explicacion larga de lo que ese texto implica.
AutorizacionVigenteDto
versionLa version vigente. Es lo que va en autorizacionVersion al registrar una accion. Va suelta ademas de dentro de vigente para que no haya que deducir cual de los dos textos manda.
La autorizacion de entrega del art. 15 bis de la Ley 21.719, que se acepta siempre.
La confirmacion extra cuando el destino no esta en Chile. Se acepta con confirmaSalidaDelPais: true.
paisesLos valores que acepta destinationCountry.
VariableDeAccionDto
nombre^[a-zA-Z0-9_-]{1,64}… · requiredEl nombre con que llega a tu sistema: letras sin tilde, numeros, "_" o "-", hasta 64. No puede repetirse ni llamarse como un parametro, sin distinguir mayusculas.
variableQue dato de Lelemon va. Ausente cuando origen es campo_del_caso. conversacion.id: el id de la conversacion; es otro cuando la anterior se cerro y la persona vuelve a escribir. conversacion.canal: por donde llego. agente.id: el agente que atiende. organizacion.id: tu organizacion. contacto.telefono: el numero desde el que escribe la persona, como lo manda WhatsApp; no va si la persona usa un nombre de usuario. contacto.whatsapp_id: el identificador de WhatsApp de la persona, que Meta manda aunque oculte su numero. Estos dos ultimos solo salen desde agentes que atienden clientes, en acciones POST, PUT, PATCH o DELETE, y con la autorizacion de destino vigente para esa URL (purpose, destinationCountry y autorizacionVersion); sin ella la accion no se guarda.
origencampo_del_caso cuando el valor sale de un campo del caso (contacts.data), declarado en pipelines.settings.entityFields, en vez de un dato de Lelemon.
campoLa clave del campo del caso tal como la declara el embudo. Obligatoria cuando origen es campo_del_caso; si el caso no la tiene guardada, la accion no se ejecuta.
opcionalSólo con origen campo_del_caso. Si el campo está vacío en el caso, se omite del pedido en vez de bloquear la accion. Por defecto false.
CrearAccionHttpDto
nameComo se llama la accion.
descriptionLo que lee el agente para decidir cuando usarla. Sin esto no la usa nunca.
urlA donde llama. No vuelve en ninguna respuesta: de la direccion solo se devuelve el origen.
methodGET, POST, PUT, PATCH o DELETE.
slugIdentificador de la accion. Es con lo que se le concede a un agente, y es la llave para reintentar sin duplicar.
timeoutMilisegundos de espera.
headersNombre de cabecera a valor. Aca viaja tu credencial: se cifra antes de guardarla y no vuelve nunca en una respuesta.
parametersJSON Schema de los parametros que el agente va a completar.
Campos que llena Lelemon al ejecutar, no el agente: el agente no los ve y no los puede inventar. Van en la query si el metodo es GET y en el cuerpo si no. Si falta el dato (por ejemplo, una conversacion sin caso), el campo no va. El nombre no puede repetirse ni ser el de un parametro. Al volver a registrar la misma accion, omitirlas deja las que tenia; [] o null las saca.
purposePara que es. Parte de la autorizacion de destino (art. 15 bis de la Ley 21.719): si mandas alguno de purpose, destinationCountry o autorizacionVersion, tienen que venir los tres.
destinationCountryDonde esta alojado ese sistema, declarado por ti: chile, fuera_de_chile o desconocido. "No se" cuenta como fuera. Parte de la autorizacion de destino.
autorizacionVersionLa version del texto de autorizacion que aceptas. Se lee en GET /v1/external/actions/authorization. Parte de la autorizacion de destino.
confirmaSalidaDelPaisLa segunda confirmacion, obligatoria cuando el destino no esta en Chile: los datos salen del pais y eso es una transferencia internacional.
paraClientesA que agentes se les puede conceder. Sin mandarlo, a cualquiera: a quien se la das se decide al concederla. true: solo a los que atienden clientes. false: solo a tu asistente interno.
VariableGuardadaDto
nombreEl nombre con que llega a tu sistema.
variableQue dato de Lelemon va: conversacion.id o conversacion.canal, por ejemplo. Ausente cuando origen es campo_del_caso. Una clave que ya no existe se ignora al ejecutar.
origencampo_del_caso cuando el valor sale de un campo del caso en vez de un dato de Lelemon.
campoLa clave del campo del caso, tal como la declara el embudo. Sólo cuando origen es campo_del_caso.
opcionalSólo cuando origen es campo_del_caso. Si está vacío en el caso, se omite del pedido en vez de bloquear la acción.
AccionDto
slugEl identificador de la accion. Es lo que va al concederla a un agente y al darla de baja.
namedescriptionLo que lee el agente para decidir cuando usarla.
methodoriginSolo el origen de la direccion registrada (esquema, host y puerto). La direccion completa no vuelve nunca: en muchos webhooks el path es la credencial.
headerNamesLos nombres de las cabeceras configuradas. Los valores no vuelven nunca.
El JSON Schema de los parametros que el agente completa al usarla.
Los campos que Lelemon agrega en cada llamada. Vacia si no tiene.
audienceA que clase de agente se le puede conceder. null significa a cualquiera, y es lo que queda si no mandaste paraClientes al registrarla: a quien se la das se decide al concederla.
statusactive si esta disponible; inactive si se dio de baja.
ListaDeAccionesDto
Las acciones HTTP activas de la organizacion.
AccionDelCatalogoDto
slugEl slug de la accion. Es lo que va en PUT y DELETE /agents/{agentId}/actions/{slug}.
namedescriptionsourceDe donde sale: "Tus sistemas" para las acciones HTTP que registraste, "Lelemon" para las que traemos nosotros, o el nombre del servidor MCP conectado que la anuncia.
enabledtrue si el agente la tiene concedida hoy.
destinationOriginA que tercero sale la accion: solo el origen (esquema, host y puerto), nunca el path, la query ni las cabeceras. Lo tienen las acciones HTTP de la organizacion, las de un servidor MCP (el origen del servidor) y las de un conector (el de su sitio). null si la accion es una herramienta nativa de Lelemon, que no tiene un destino configurado por la organizacion, o si ya no existe. "(ilegible)" si la accion sale a un destino pero su direccion no se pudo leer. Solo viene si la credencial tiene actions:read; sin ese alcance el campo no existe.
CatalogoDeAccionesDelAgenteDto
ReportarHechoDto
eventoQue paso, con el nombre que uses en tu sistema. Es el mismo nombre que declara el trigger que lo escucha.
externalIdEl identificador del usuario final EN TU SISTEMA. Es el mismo con el que se abre una conversacion, asi que la persona es la misma para las dos rutas.
datosContexto del hecho. Hoy no se guarda ni cambia la decision; se acepta para no romper tu llamada cuando los triggers miren condiciones.
ResultadoDeTriggerDto
triggerIdEl trigger que escuchaba este hecho.
estadodisparo: el agente le escribio. ya_estaba: a esa persona este trigger ya le habia llegado, y no se le escribio de nuevo. control_humano: alguien de tu equipo tiene la conversacion y no se la piso. error: este trigger no pudo despachar (por ejemplo su agente esta pausado) y los demas siguieron igual.
HechoReportadoDto
Una entrada por trigger que escuchaba el hecho. Vacio si ninguno lo escuchaba.
duplicadoVerdadero cuando no se escribio nada nuevo y algo ya le habia llegado a esa persona. Con dos triggers donde uno disparo es falso: hubo mensaje. Sirve para medir reintentos sin mirar el codigo HTTP.
motivoPor que no se escribio nada. Solo viaja cuando no se escribio NI se habia escrito antes: sin trigger que escuche el hecho, la conversacion en manos de tu equipo, o ningun trigger pudo despachar.
CrearTriggerDto
agentIdQue agente escribe. Tiene que ser de tu organizacion, estar activo, y ser de los que la API administra.
eventoEl hecho que despierta este trigger, con el nombre que uses en tu sistema. Es el mismo que mandas a POST /v1/external/events.
textoLo que el agente dice.
abrirPanelSi tu aplicacion deberia traer la conversacion al frente al recibir el aviso. Viaja tal cual en el webhook; la decision es tuya.
activoNace activo. Manda false para crearlo pausado.
TriggerDto
idagentIdEl agente que escribe.
eventoEl hecho que lo despierta.
textoLo que el agente dice.
abrirPanelSi tu aplicacion deberia traer la conversacion al frente. Viaja tal cual en el aviso saliente.
activoUn trigger pausado no dispara.
createdAtupdatedAtTriggersDto
EditarTriggerDto
textoabrirPanelactivoUn trigger pausado no dispara. Pausarlo no borra las entregas: al prenderlo, a quien ya le llego no le vuelve a llegar.
PedidoPorDto
idEl identificador del usuario en tu sistema a nombre de quien corre la corrida.
venceHasta cuando vale la firma, en segundos Unix (UTC). Tiene que estar en el futuro y a no mas de 300 segundos.
firmaHMAC-SHA256 en hex minuscula (64 caracteres) sobre el texto "lelemon-run:v1:
TopesPedidosDto
maxVueltasCuantas vueltas puede dar. Maximo 60; por defecto 30.
maxCostoUsdCuanto puede gastar, en dolares. Maximo 10; por defecto 2.
maxMinutosCuantos minutos puede durar desde que empieza. Maximo 120; por defecto 30.
CrearCorridaDto
metaQue tiene que lograr el agente. Se lo trata como texto de un usuario.
A nombre de quien corre, firmado por tu sistema. Sin este campo: 400. Con la firma invalida o vencida: 401.
TopesDeLaCorridaDto
maxVueltasmaxCostoUsdEn dolares.
maxMinutosResultadoDeLaCorridaDto
resumenLo que el agente declaro al terminar. Es una declaracion: nadie la comprobo todavia.
comprobacionesLo que habria que mirar para confirmar que esta hecho, segun el agente.
parcialLo ultimo que escribio el agente. Viene tambien cuando se detuvo o fallo.
errorPor que fallo. Solo con estado fallida.
CorridaDto
runIdEl id de la corrida. Es lo que va en la URL para seguirla.
agentSlugestadoen_curso: trabajando o en la cola. esperando_al_humano: pauso para preguntar; pregunta trae la pregunta, respondela con POST /runs/{id}/answer. terminada_sin_verificar: el agente dijo que termino y todavia nadie lo comprobo; no la leas como hecha. terminada: la comprobo un verificador (hoy no ocurre). detenida: se acabo un limite; razon dice cual. fallida: error; resultado.error dice cual, o razon "abandonada" si nadie contesto la pausa en 30 dias. cancelada: la cancelaste.
razonCon estado detenida, que limite la freno. Con estado fallida y razon "abandonada", nadie contesto la pausa en 30 dias.
preguntaCon estado esperando_al_humano: lo que el agente pregunto. Respondelo con POST /runs/{id}/answer.
vueltasVueltas que lleva.
costoUsdLo que lleva gastado, en dolares.
cancelacionPedidatrue si pediste cancelarla. Mientras un worker la corre, se cancela al empezar su vuelta siguiente.
creadaEniniciadaEnterminadaEnResponderCorridaDto
respuestaLa respuesta a lo que pregunto el agente.
Quien responde, firmado por tu sistema. Sin este campo: 400. Con la firma invalida o vencida: 401.
AgendaDto
slugCómo se nombra esta agenda en las otras rutas.
nameSu nombre, para mostrarlo.
timezoneEl huso en el que la organización definió sus horarios.
slotDurationMinutesCuánto dura cada bloque, en minutos.
AgendasDto
Las agendas activas de la organización. Vacío significa que no hay ninguna configurada todavía, no que algo haya fallado.
BloqueLibreDto
idIdentificador del bloque. Es lo que se manda de vuelta para reservarlo.
startCuándo empieza, en ISO 8601 con zona.
endCuándo termina, en ISO 8601 con zona.
DisponibilidadDto
Los bloques libres, ordenados de más cercano a más lejano. Vacío significa que no hay ninguno en la ventana pedida, no que algo haya fallado.
ReservarBloqueDto
agendaEn qué agenda reservar, por su slug. El mismo con el que pediste los horarios.
slotStartCuándo empieza, en ISO 8601 con zona. Es el id de un bloque devuelto por la disponibilidad.
attendeeEmailCorreo de quien agenda. Ahí le llega la invitación.
attendeeNameNombre de quien agenda, como aparece en la invitación.
attendeePhoneTeléfono de contacto, si lo tienes.
companyNameEmpresa de quien agenda. Va en la descripción del evento.
contextPara qué es la reunión. Va en la descripción del evento, para que quien atienda llegue sabiendo.
ReunionAgendadaDto
meetingIdEl id de la reunión. Es lo que se guarda para referirse a ella.
scheduledForCuándo quedó, en ISO 8601 con zona.
durationMinutesCuánto dura, en minutos.
meetLinkEl link de la videollamada. Puede no venir si la agenda está configurada sin videollamada.
EmbudoResumenDto
idEl id del embudo. Es lo que va en pipelineId.
nameComo se llama en el panel.
statusdraft recien creado; active en uso; paused pausado; archived retirado.
createdAtPaginaDeEmbudosDto
limitCuantas filas se pidieron. Es el limit del pedido o 50 si no se mando.
offsetCuantas filas se saltearon. Es el offset del pedido o 0.
hasMoretrue si hay mas filas despues de esta pagina. Para seguir, repetir el pedido con offset + limit.
EtapaDelEmbudoDto
idEl id de la etapa.
nameComo se llama en el panel.
orderIndexEl orden en el que aparece en el embudo.
isEntrytrue si es la etapa de entrada.
isTerminaltrue si cierra el caso al llegar ahi.
camposObligatoriosClaves de los campos del embudo (fields[].key) que el caso tiene que tener completos para entrar a esta etapa. Lista vacia si la etapa no exige nada. Un movimiento hecho por una persona, por la API o por el agente se rechaza con 422 mientras falte alguno; el cierre automatico y las transiciones del flujo no se bloquean.
statusTypeQue significa la etapa en el embudo: todo por hacer, in_progress en curso, done terminado. null si el embudo no lo declara. Es descriptivo: no cierra ni mueve el caso.
OpcionDelCampoDto
valuelabelwhenParentSolo en un campo con dependsOn: los valores del campo padre para los que esta opcion existe. Ausente quiere decir que vale para cualquier valor del padre.
CampoDelEmbudoDto
keyLa clave del campo, tal como se guarda en el contacto.
labelComo se muestra en el panel.
typeEl tipo del campo.
sensitivetrue si es un dato sensible. No sale con su valor en GET /conversations/{id}.
requiredtrue si hace falta para avanzar.
Las opciones, si el tipo es select.
dependsOnLa clave del campo del que dependen las opciones de este. Ausente quiere decir que las opciones son fijas. Solo valen las opciones cuyo whenParent nombra el valor que ese campo tiene en el caso, mas las que no traen whenParent; un valor fuera de ahi se rechaza al escribir.
EmbudoDto
idEl id del embudo. Es lo que va en pipelineId.
nameComo se llama en el panel.
statusdraft recien creado; active en uso; paused pausado; archived retirado.
createdAtLas etapas vivas, ordenadas.
Los campos que declara el embudo. Son definiciones, sin valores.
OpcionDto
valueLo que se guarda en el caso. Unico dentro del campo, sin distinguir mayusculas ni espacios al borde.
labelLo que se muestra. Si no viene, vale lo mismo que value. Al escribir un caso se acepta cualquiera de los dos y se guarda el value.
whenParentSolo en un campo con dependsOn: los valores del campo padre para los que esta opcion existe. Si no viene, la opcion vale para cualquier valor del padre.
CampoConOpcionesDto
keyLa clave del campo, tal como la devuelve GET /v1/external/pipelines/{id}. Tiene que existir en el embudo y ser de tipo lista.
Las opciones que el campo queda teniendo. Reemplazan por completo a las que tenia. Una lista vacia lo deja sin opciones.
ReemplazarOpcionesDto
Los campos que se reemplazan. Los que no se nombran quedan como estaban. Padre e hijo de una cascada se mandan en el mismo pedido: se validan juntos.
CampoReemplazadoDto
keyLa clave del campo.
optionsCuantas opciones quedo teniendo.
OpcionesReemplazadasDto
idEl embudo que se escribio.
changedfalse cuando lo que llego era igual a lo que ya habia: no se escribio nada. Repetir el mismo pedido devuelve false.
Como quedo cada campo nombrado en el pedido.
RespuestaRapidaGuardadaDto
atajoEl atajo, sin la barra.
textoEl texto tal como se guardo, con {agente} y {cliente} sin reemplazar: se reemplazan al insertarla en el chat.
RespuestasRapidasDto
idEl embudo.
En el orden en que el panel las muestra. Vacia si el embudo no tiene.
RespuestaRapidaDto
atajoLo que el equipo escribe despues de la barra para insertarla: /saludo es el atajo saludo. De 1 a 30 letras minusculas, numeros, - o _, sin la barra. Unico en el embudo.
textoEl texto que se inserta en el chat, hasta 4096 caracteres. {agente} se reemplaza por el nombre de la persona del equipo que la inserta y {cliente} por el nombre del contacto; si falta el dato se deja vacio, sin dejar la llave ni espacios de sobra. Lo demas se inserta tal cual.
ReemplazarRespuestasRapidasDto
Las respuestas rapidas que el embudo queda teniendo, hasta 50. Reemplazan por completo a las que tenia. Una lista vacia deja el embudo sin respuestas. Se validan igual que en el panel.
RespuestasRapidasReemplazadasDto
idEl embudo.
En el orden en que el panel las muestra. Vacia si el embudo no tiene.
changedfalse cuando lo que llego era igual a lo que ya habia: no se escribio nada. Repetir el mismo pedido devuelve false.
CrearSkillDto
slugEl identificador que eliges tú. Es lo que el agente nombra al cargarla, y la llave de idempotencia: dos llamadas con el mismo slug devuelven la misma skill.
nombreComo se llama la skill.
descripcionPara que sirve, en una linea. Es lo unico de la skill que viaja en el prompt del agente, en cada mensaje: por eso es corta y dice CUANDO usarla, no como.
contenidoEl instructivo completo, en texto. No viaja en el prompt: el agente lo carga con cargar_skill cuando va a hacer esa tarea.
requiereSlugs de otras skills del mismo agente que el agente recibe completas, antes que esta, cada vez que la carga. Sirve para una base que varias comparten sin repetirla. Un solo nivel: una skill requerida no puede requerir otra.
SkillDto
idEl id de la skill. El agente no lo usa: la nombra por su slug.
slugnombredescripcionLo unico de la skill que viaja en el prompt del agente, en cada mensaje.
PaginaDeSkillsDto
limitCuantas filas se pidieron. Es el limit del pedido o 50 si no se mando.
offsetCuantas filas se saltearon. Es el offset del pedido o 0.
hasMoretrue si hay mas filas despues de esta pagina. Para seguir, repetir el pedido con offset + limit.
SkillConContenidoDto
idEl id de la skill. El agente no lo usa: la nombra por su slug.
slugnombredescripcionLo unico de la skill que viaja en el prompt del agente, en cada mensaje.
contenidoEl instructivo completo: lo que el agente lee cuando la carga con cargar_skill. No viaja en su prompt.
requiereLas skills que el agente recibe completas, antes que esta, cada vez que la carga.
ActualizarSkillDto
nombredescripcioncontenidorequiereSlugs de otras skills del mismo agente que el agente recibe completas, antes que esta, cada vez que la carga. Sirve para una base que varias comparten sin repetirla. Un solo nivel: una skill requerida no puede requerir otra.
MetricasDeConversacionDto
conversationIdEl id de la conversación.
pipelineIdpipelineNamestatusEstado actual: pending, active, waiting, completed, failed, abandoned o expired.
controlStatusQuién la tiene ahora: agent, escalated o human.
outcomePor qué terminó, si terminó con un motivo.
createdAtCuándo entró.
escalatedAtLa primera vez que el agente la derivó a una persona.
takenAtLa primera vez que una persona la tomó.
takenByEl id de quien la tomó primero. null si la tomaron desde el celular.
closedAtCuándo se cerró. null si sigue abierta.
closedByQuién la cerró: el agente, una persona o el sistema (inactividad, seguimiento agotado).
resolvedByAitrue si la cerró el agente sin derivarla ni que nadie la tomara.
waitSecondsSegundos entre la última derivación y que una persona la tomara, la primera vez que pasó.
aiSecondsSegundos que la atendió el agente.
humanSecondsSegundos que la atendió una persona.
updatedAtEl último cambio. Es el campo por el que filtra el rango.
PaginaDeMetricasDto
limitCuantas filas se pidieron. Es el limit del pedido o 50 si no se mando.
offsetCuantas filas se saltearon. Es el offset del pedido o 0.
hasMoretrue si hay mas filas despues de esta pagina. Para seguir, repetir el pedido con offset + limit.
AdjuntoDto
idEl id del adjunto. En la ficha es el id del archivo; en el chat es el id del mensaje que lo trajo.
nombreEl nombre original del archivo. Los medios del chat no guardan el nombre que tenian en el telefono: salen con el nombre con que se guardaron.
mimetamanoPeso en bytes. null si no se sabe: los medios del chat no lo guardan.
fechaCuando llego al chat o se adjunto a la ficha.
origenchat: lo mando el cliente por el chat (imagen, audio o video). ficha: lo que esta en la ficha del caso, que mezcla los documentos que el cliente mando por el chat, que quedan solo aqui, con los archivos que subio el equipo; subidoPor los distingue.
subidoPorQuien lo subio. cliente: lo mando la persona por el chat. equipo: lo cargo alguien del equipo en la ficha. Todo lo de origen chat es del cliente; en la ficha se distingue por como entro el archivo.
urlDireccion firmada para descargar el archivo, sin credencial. Vive 10 minutos: pide la lista de nuevo cuando venza. Baja con su nombre en Content-Disposition; solo se ven en linea los pdf, imagenes, audio y video, lo demas baja como archivo.
venceEnHasta cuando sirve la url.
PaginaDeAdjuntosDto
limitCuantas filas se pidieron. Es el limit del pedido o 50 si no se mando.
offsetCuantas filas se saltearon. Es el offset del pedido o 0.
hasMoretrue si hay mas filas despues de esta pagina. Para seguir, repetir el pedido con offset + limit.
DisponibilidadDelMiembroDto
emailEl email de la persona.
estadoLo que quedo marcado, por la persona o por la API. No considera el horario de la organizacion: eso es disponibleParaRepartir.
disponibleParaRepartirSi el reparto le asignaria un caso nuevo ahora mismo. Es false si esta ausente, y tambien si esta disponible pero la organizacion tiene horario de atencion y ya cerro: el auto-away por horario manda, salvo que la persona haya pedido seguir un rato mas (extendidoHasta en el futuro). Poner disponible fuera de horario no cambia eso.
cambiadoElCuando se cambio el estado por ultima vez. null si nunca.
extendidoHastaHasta cuando pidio la persona seguir recibiendo casos pasado el horario. null si no hay extension.
CambiarDisponibilidadDto
emailEl email de la persona del equipo. No distingue mayusculas. Tiene que ser un miembro activo de tu organizacion.
estadodisponible: puede recibir casos nuevos. ausente: el reparto la salta.