Primeros pasos
Montar un workflow de punta a punta: llega una factura, el agente la lee y se crea una cuenta a pagar en su ERP con el PDF original adjunto.
Cuatro pasos, ninguno de los cuales implica desplegar nada de su lado.
1. Guarde la credencial
El agente la referenciará por nombre, así el valor nunca aparece en un prompt.
curl -X POST https://api.inbox.kobana.com.br/v1/secrets \
--cert ./client.crt --key ./client.key \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
-d '{
"key": "FINANCE_TOKEN",
"value": "erp-service-account-token",
"notes": "Cuenta de servicio del ERP — rota cada 90 días"
}'
{
"data": {
"id": "f1e2d3c4-b5a6-4978-8899-aabbccddeeff",
"key": "FINANCE_TOKEN",
"notes": "Cuenta de servicio del ERP — rota cada 90 días",
"last_used_at": null
}
}
La respuesta no trae value, y ninguna lectura posterior lo hará: el valor es de solo escritura. Rotarlo después es un PUT /v1/secrets con la misma key — sin buscar el id, sin tocar el agente.
2. Enseñe al agente a emitir un workflow
La plataforma ejecuta lo que el agente devuelve; no lo escribe. Eso corresponde al system_message del agente:
curl -X PATCH https://api.inbox.kobana.com.br/v1/agents/$AGENT_ID \
--cert ./client.crt --key ./client.key \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
-d @- <<'JSON'
{
"system_message": "Lees facturas recibidas por correo y las registras en el ERP.\n\nResponde con un único objeto JSON con dos claves:\n\n- `result`: los datos que extrajiste (proveedor, importe, vencimiento, número de documento).\n- `workflow`: las peticiones necesarias para registrarla, u omite la clave cuando no haga falta ninguna acción.\n\nCada paso del workflow es:\n{\"type\":\"request\",\"method\":\"POST\",\"url\":\"…\",\"headers\":{…},\"body\":{…},\"expected_status\":201}\n\nReglas:\n- Autentica con `${{secrets.FINANCE_TOKEN}}`. NUNCA escribas una credencial literalmente.\n- Crea la cuenta a pagar primero y luego adjunta el documento al id que devolvió la primera llamada, usando `${{steps.0.response.body.data.id}}`.\n- Incluye `${{kobana.email_id}}` en el cuerpo para que el registro apunte de vuelta al correo.\n- Si la factura está duplicada o no tienes confianza, devuelve solo `result`, sin `workflow`."
}
JSON
Cada PATCH que cambia system_message incrementa Agent.version y guarda una instantánea del prompt, así cada ejecución registra exactamente qué instrucciones produjeron su workflow.
3. Envíe un correo de prueba
Envíe un mensaje real a la dirección del inbox, o suba un .eml por la API — recorre el mismo camino, filtros, agente y webhooks incluidos:
curl -X POST "https://api.inbox.kobana.com.br/v1/emails?inbox_id=$INBOX_ID" \
--cert ./client.crt --key ./client.key \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: message/rfc822" \
--data-binary @factura.eml
4. Lea qué pasó
curl "https://api.inbox.kobana.com.br/v1/workflow-runs?email_id=$EMAIL_ID" \
--cert ./client.crt --key ./client.key \
-H "Authorization: Bearer $JWT"
Después abra la ejecución para ver cada paso, la petición tal como se envió y la respuesta recibida:
curl "https://api.inbox.kobana.com.br/v1/workflow-runs/$RUN_ID" \
--cert ./client.crt --key ./client.key \
-H "Authorization: Bearer $JWT"
{
"data": {
"status": "success",
"summary": { "total": 2, "succeeded": 2, "error": 0 },
"duration_ms": 812,
"steps": [
{
"position": 0,
"status": "success",
"request": {
"method": "POST",
"url": "https://erp.example.com/payables",
"headers": { "Authorization": "Bearer [REDACTED]" }
},
"response": {
"status": 201,
"expected_status": 201,
"body": "{\"data\":{\"id\":\"pay_42\"}}"
}
},
{
"position": 1,
"status": "success",
"request": { "url": "https://erp.example.com/payables/pay_42/attachments" },
"response": { "status": 200 }
}
]
}
}
Fíjese en pay_42 en la URL del segundo paso: el agente escribió ${{steps.0.response.body.data.id}} y la plataforma lo resolvió desde la primera respuesta.
5. Reaccionar en tiempo real (opcional)
En vez de consultar en bucle, suscríbase a los eventos terminales:
curl -X POST https://api.inbox.kobana.com.br/v1/webhooks \
--cert ./client.crt --key ./client.key \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
-d '{
"label": "resultado de los workflows",
"url": "https://ops.example.com/hooks/kobana",
"subscribed_events": ["workflow.run.succeeded", "workflow.run.failed"]
}'
workflow.run.failed lleva data.failed_step, data.failed_steps (todos los pasos que fallaron) y data.error, además de las instantáneas habituales de email y agent_run — suficiente para abrir un ticket sin volver a llamarnos.
Lo mismo desde un cliente de IA
Cada paso de arriba existe como herramienta MCP: secrets_create, agents_update, workflow_runs_list y workflow_runs_get. Subir un .eml de prueba no tiene herramienta — es una subida de cuerpo crudo, así que use el endpoint HTTP de arriba o emails_reprocess sobre un mensaje que ya recibió.
A dónde ir después
- El workflow no hizo lo que esperaba → Diagnóstico.
- Necesita un campo que no vio aquí → Steps y placeholders.