1423 lines
56 KiB
JSON
1423 lines
56 KiB
JSON
{
|
|
"http": {
|
|
"config-default": {
|
|
"status": 200,
|
|
"body": "{\"search\":false,\"lb\":false,\"allowDirect\":true,\"s2sUrl\":\"\",\"primaryPrompt\":\"\",\"reasoningType\":\"PROXY\",\"injectProfile\":false,\"debugPrompt\":false,\"startSessionMode\":\"\",\"theme\":\"\",\"apipilot\":false}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"config-proxy": {
|
|
"status": 200,
|
|
"body": "{\"search\":false,\"lb\":false,\"allowDirect\":true,\"s2sUrl\":\"wss://voice.test/v1/realtime\",\"primaryPrompt\":\"\",\"reasoningType\":\"PROXY\",\"injectProfile\":false,\"debugPrompt\":false,\"startSessionMode\":\"\",\"theme\":\"\",\"apipilot\":false}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"config-direct": {
|
|
"status": 200,
|
|
"body": "{\"search\":false,\"lb\":false,\"allowDirect\":true,\"s2sUrl\":\"wss://voice.test/realtime?token=fixture\",\"primaryPrompt\":\"\",\"reasoningType\":\"PROXY\",\"injectProfile\":false,\"debugPrompt\":false,\"startSessionMode\":\"\",\"theme\":\"\",\"apipilot\":false}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"config-lb": {
|
|
"status": 200,
|
|
"body": "{\"search\":false,\"lb\":true,\"allowDirect\":false,\"s2sUrl\":\"\",\"primaryPrompt\":\"\",\"reasoningType\":\"PROXY\",\"injectProfile\":false,\"debugPrompt\":false,\"startSessionMode\":\"\",\"theme\":\"\",\"apipilot\":false}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"removed-/api/me": {
|
|
"status": 404,
|
|
"body": "{\"detail\":\"Not Found\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"removed-/api/session/heartbeat": {
|
|
"status": 404,
|
|
"body": "{\"detail\":\"Not Found\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"removed-/api/session/end": {
|
|
"status": 404,
|
|
"body": "{\"detail\":\"Not Found\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"removed-/": {
|
|
"status": 404,
|
|
"body": "{\"detail\":\"Not Found\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"removed-/server.py": {
|
|
"status": 404,
|
|
"body": "{\"detail\":\"Not Found\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"redirect-/project": {
|
|
"status": 307,
|
|
"body": "",
|
|
"headers": {
|
|
"location": "/docs/proposals/vocero-architecture.html"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"redirect-/project/": {
|
|
"status": 307,
|
|
"body": "",
|
|
"headers": {
|
|
"location": "/docs/proposals/vocero-architecture.html"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"redirect-/project/index.html": {
|
|
"status": 307,
|
|
"body": "",
|
|
"headers": {
|
|
"location": "/docs/proposals/vocero-architecture.html"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"redirect-/public/docs.html": {
|
|
"status": 307,
|
|
"body": "",
|
|
"headers": {
|
|
"location": "/docs/proposals/vocero-architecture.html"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"disabled-/api/session": {
|
|
"status": 404,
|
|
"body": "{\"detail\":\"No encontrado.\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"disabled-/api/queue/end": {
|
|
"status": 404,
|
|
"body": "{\"detail\":\"No encontrado.\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"disabled-queue-GET": {
|
|
"status": 404,
|
|
"body": "{\"detail\":\"No encontrado.\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"disabled-queue-DELETE": {
|
|
"status": 404,
|
|
"body": "{\"detail\":\"No encontrado.\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"search-missing": {
|
|
"status": 422,
|
|
"body": "{\"detail\":[{\"type\":\"missing\",\"loc\":[\"body\",\"query\"],\"msg\":\"Field required\",\"input\":{}}]}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"search-blank": {
|
|
"status": 400,
|
|
"body": "{\"detail\":\"La consulta está vacía.\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"search-wrong-type": {
|
|
"status": 422,
|
|
"body": "{\"detail\":[{\"type\":\"string_type\",\"loc\":[\"body\",\"query\"],\"msg\":\"Input should be a valid string\",\"input\":17}]}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"search-null": {
|
|
"status": 422,
|
|
"body": "{\"detail\":[{\"type\":\"string_type\",\"loc\":[\"body\",\"query\"],\"msg\":\"Input should be a valid string\",\"input\":null}]}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"search-unconfigured": {
|
|
"status": 503,
|
|
"body": "{\"detail\":\"La búsqueda no está configurada.\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"search-success-extra-fields": {
|
|
"status": 200,
|
|
"body": "{\"query\":\"hello\",\"answer\":\"Answer\",\"results\":[{\"title\":\"Title\",\"snippet\":\"Text\",\"url\":\"https://example.test\"}]}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "POST",
|
|
"url": "https://google.serper.dev/search",
|
|
"body": "{\"q\":\"hello\",\"num\":5}",
|
|
"headers": {
|
|
"x-api-key": "caller-fixture-key",
|
|
"content-type": "application/json"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"search-loose-values": {
|
|
"status": 500,
|
|
"body": "Internal Server Error",
|
|
"headers": {
|
|
"content-type": "text/plain; charset=utf-8"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "POST",
|
|
"url": "https://google.serper.dev/search",
|
|
"body": "{\"q\":\"hello\",\"num\":5}",
|
|
"headers": {
|
|
"x-api-key": "server-fixture-key",
|
|
"content-type": "application/json"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"search-upstream-error": {
|
|
"status": 502,
|
|
"body": "{\"detail\":\"Error del proveedor de búsqueda (429): Fixture credits exhausted\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "POST",
|
|
"url": "https://google.serper.dev/search",
|
|
"body": "{\"q\":\"hello\",\"num\":5}",
|
|
"headers": {
|
|
"x-api-key": "server-fixture-key",
|
|
"content-type": "application/json"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"search-invalid-upstream-json": {
|
|
"status": 500,
|
|
"body": "Internal Server Error",
|
|
"headers": {
|
|
"content-type": "text/plain; charset=utf-8"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "POST",
|
|
"url": "https://google.serper.dev/search",
|
|
"body": "{\"q\":\"hello\",\"num\":5}",
|
|
"headers": {
|
|
"x-api-key": "server-fixture-key",
|
|
"content-type": "application/json"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"profile-missing-phone": {
|
|
"status": 422,
|
|
"body": "{\"detail\":[{\"type\":\"missing\",\"loc\":[\"query\",\"phoneNumber\"],\"msg\":\"Field required\",\"input\":null}]}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"profile-unconfigured": {
|
|
"status": 503,
|
|
"body": "{\"detail\":\"VOCERO_USER_PHONE_AUTH_URL no está configurado en este despliegue.\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"profile-blank-phone": {
|
|
"status": 400,
|
|
"body": "{\"detail\":\"Se requiere el campo phoneNumber.\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"profile-object": {
|
|
"status": 200,
|
|
"body": "{\"result\":{\"name\":\"Caller\",\"unknown\":{\"nested\":[1,null]}}}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://profile.test/user?phoneNumber=%2B56000000000",
|
|
"body": "",
|
|
"headers": {}
|
|
}
|
|
]
|
|
},
|
|
"profile-array": {
|
|
"status": 200,
|
|
"body": "[1,{\"future\":\"field\"}]",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://profile.test/user?phoneNumber=%2B56000000000",
|
|
"body": "",
|
|
"headers": {}
|
|
}
|
|
]
|
|
},
|
|
"profile-null": {
|
|
"status": 200,
|
|
"body": "null",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://profile.test/user?phoneNumber=%2B56000000000",
|
|
"body": "",
|
|
"headers": {}
|
|
}
|
|
]
|
|
},
|
|
"profile-string": {
|
|
"status": 200,
|
|
"body": "\"opaque profile\"",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://profile.test/user?phoneNumber=%2B56000000000",
|
|
"body": "",
|
|
"headers": {}
|
|
}
|
|
]
|
|
},
|
|
"profile-error": {
|
|
"status": 403,
|
|
"body": "{\"future_error\":true}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://profile.test/user?phoneNumber=%2B56000000000",
|
|
"body": "",
|
|
"headers": {}
|
|
}
|
|
]
|
|
},
|
|
"profile-invalid-json": {
|
|
"status": 502,
|
|
"body": "{\"detail\":\"El servicio de información del usuario devolvió un JSON no válido.\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://profile.test/user?phoneNumber=%2B56000000000",
|
|
"body": "",
|
|
"headers": {}
|
|
}
|
|
]
|
|
},
|
|
"profile-login-token": {
|
|
"status": 200,
|
|
"body": "{\"name\":\"Caller\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "POST",
|
|
"url": "http://profile.test/login",
|
|
"body": "{\"phoneNumber\":\"123\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
}
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"url": "http://profile.test/user?phoneNumber=123",
|
|
"body": "",
|
|
"headers": {
|
|
"authorization": "Bearer fixture-token"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"reports-disabled": {
|
|
"status": 200,
|
|
"body": "{\"count\":0,\"wrappedLen\":0,\"hints\":[],\"entries\":[],\"skipped\":true,\"reason\":\"S2S_INJECT_REPORTS está deshabilitado en este despliegue; no se muestran reportes programados en la interfaz ni se envían al modelo.\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"reports-unconfigured": {
|
|
"status": 503,
|
|
"body": "{\"detail\":\"S2S_REPORT_LIST no está configurado en este despliegue.\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"reports-empty": {
|
|
"status": 200,
|
|
"body": "{\"count\":0,\"wrappedLen\":0,\"hints\":[],\"entries\":[],\"skipped\":true,\"reason\":\"Lista vacía, error del servicio de origen o ningún contenido disponible.\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://reports.test/list",
|
|
"body": "",
|
|
"headers": {}
|
|
}
|
|
]
|
|
},
|
|
"reports-upstream-failure": {
|
|
"status": 200,
|
|
"body": "{\"count\":0,\"wrappedLen\":0,\"hints\":[],\"entries\":[],\"skipped\":true,\"reason\":\"Lista vacía, error del servicio de origen o ningún contenido disponible.\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://reports.test/list",
|
|
"body": "",
|
|
"headers": {}
|
|
}
|
|
]
|
|
},
|
|
"reports-normalization": {
|
|
"status": 200,
|
|
"body": "{\"count\":2,\"rawCount\":3,\"cap\":5,\"wrappedLen\":271,\"hints\":[\"• Reporte #1: 'Weekly' — programado para 2026-01-03 12:00\",\"• Reporte #2: 'Daily' — programado para 2026-01-02 12:00\"],\"entries\":[{\"sourceScheduleLabel\":\"Weekly\",\"date\":\"2026-01-03T12:00:00Z\"},{\"sourceScheduleLabel\":\"Daily\",\"date\":\"2026-01-02T12:00:00Z\"}]}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://reports.test/list?phoneNumber=123",
|
|
"body": "",
|
|
"headers": {}
|
|
}
|
|
]
|
|
},
|
|
"session-grant": {
|
|
"status": 200,
|
|
"body": "{\"session_id\":\"session\",\"connect_url\":\"ws://voice.test?token=fixture\",\"future\":{\"nested\":true}}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "POST",
|
|
"url": "http://lb.test/session",
|
|
"body": "{}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"session-camelcase": {
|
|
"status": 200,
|
|
"body": "{\"sessionId\":\"session\",\"connectUrl\":\"ws://voice.test\",\"unknown\":null}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "POST",
|
|
"url": "http://lb.test/session",
|
|
"body": "{}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"session-queued": {
|
|
"status": 200,
|
|
"body": "{\"state\":\"queued\",\"queue_id\":\"ticket\",\"position\":3,\"future\":[1]}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "POST",
|
|
"url": "http://lb.test/session",
|
|
"body": "{}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"session-empty": {
|
|
"status": 200,
|
|
"body": "{}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "POST",
|
|
"url": "http://lb.test/session",
|
|
"body": "{}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"session-capacity": {
|
|
"status": 503,
|
|
"body": "{\"state\":\"at_capacity\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "POST",
|
|
"url": "http://lb.test/session",
|
|
"body": "{}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"session-other-error": {
|
|
"status": 502,
|
|
"body": "{\"detail\":\"No se pudo establecer la sesión (429).\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "POST",
|
|
"url": "http://lb.test/session",
|
|
"body": "{}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"session-invalid-json": {
|
|
"status": 500,
|
|
"body": "Internal Server Error",
|
|
"headers": {
|
|
"content-type": "text/plain; charset=utf-8"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "POST",
|
|
"url": "http://lb.test/session",
|
|
"body": "{}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"queue-waiting": {
|
|
"status": 200,
|
|
"body": "{\"state\":\"queued\",\"queue_id\":\"ticket\",\"position\":null,\"future\":true}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://lb.test/queue/ticket",
|
|
"body": "",
|
|
"headers": {}
|
|
}
|
|
]
|
|
},
|
|
"queue-grant": {
|
|
"status": 200,
|
|
"body": "{\"session_id\":\"session\",\"connect_url\":\"ws://voice.test\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://lb.test/queue/ticket",
|
|
"body": "",
|
|
"headers": {}
|
|
}
|
|
]
|
|
},
|
|
"queue-expired": {
|
|
"status": 404,
|
|
"body": "{\"state\":\"expired\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://lb.test/queue/ticket",
|
|
"body": "",
|
|
"headers": {}
|
|
}
|
|
]
|
|
},
|
|
"queue-error": {
|
|
"status": 502,
|
|
"body": "{\"detail\":\"No se pudo consultar la cola de espera (500).\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://lb.test/queue/ticket",
|
|
"body": "",
|
|
"headers": {}
|
|
}
|
|
]
|
|
},
|
|
"queue-invalid-json": {
|
|
"status": 500,
|
|
"body": "Internal Server Error",
|
|
"headers": {
|
|
"content-type": "text/plain; charset=utf-8"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://lb.test/queue/ticket",
|
|
"body": "",
|
|
"headers": {}
|
|
}
|
|
]
|
|
},
|
|
"queue-delete": {
|
|
"status": 200,
|
|
"body": "{\"ok\":true}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "DELETE",
|
|
"url": "http://lb.test/queue/ticket",
|
|
"body": "",
|
|
"headers": {}
|
|
}
|
|
]
|
|
},
|
|
"queue-end-valid": {
|
|
"status": 200,
|
|
"body": "{\"ok\":true}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "DELETE",
|
|
"url": "http://lb.test/queue/ticket",
|
|
"body": "",
|
|
"headers": {}
|
|
}
|
|
]
|
|
},
|
|
"queue-end-empty": {
|
|
"status": 200,
|
|
"body": "{\"ok\":true}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"queue-end-invalid-json": {
|
|
"status": 200,
|
|
"body": "{\"ok\":true}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"queue-end-array": {
|
|
"status": 200,
|
|
"body": "{\"ok\":true}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"queue-end-null-id": {
|
|
"status": 200,
|
|
"body": "{\"ok\":true}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"queue-end-numeric-id": {
|
|
"status": 500,
|
|
"body": "Internal Server Error",
|
|
"headers": {
|
|
"content-type": "text/plain; charset=utf-8"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"reasoning-missing": {
|
|
"status": 422,
|
|
"body": "{\"detail\":[{\"type\":\"missing\",\"loc\":[\"body\",\"transcript\"],\"msg\":\"Field required\",\"input\":{}}]}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"reasoning-proxy": {
|
|
"status": 409,
|
|
"body": "{\"detail\":\"El servicio de razonamiento está deshabilitado en el modo PROXY.\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"reasoning-proxy-blank": {
|
|
"status": 409,
|
|
"body": "{\"detail\":\"El servicio de razonamiento está deshabilitado en el modo PROXY.\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"reasoning-OPENAI-legacy-unbound-token": {
|
|
"status": 500,
|
|
"body": "Internal Server Error",
|
|
"headers": {
|
|
"content-type": "text/plain; charset=utf-8"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"reasoning-NODE_RED-legacy-unbound-token": {
|
|
"status": 500,
|
|
"body": "Internal Server Error",
|
|
"headers": {
|
|
"content-type": "text/plain; charset=utf-8"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"reasoning-legacy-unbound-profile": {
|
|
"status": 500,
|
|
"body": "Internal Server Error",
|
|
"headers": {
|
|
"content-type": "text/plain; charset=utf-8"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"reasoning-node-answer": {
|
|
"status": 200,
|
|
"body": "{\"answer\":\"answer\",\"usage\":{\"future\":true},\"latency_ms\":\"loose\",\"intent\":{\"future\":1}}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://profile.test/user?phoneNumber=123",
|
|
"body": "",
|
|
"headers": {}
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"url": "http://reasoning.test/api/reasoning",
|
|
"body": "{\"transcript\":\"hello\",\"instructions\":\"Fixture instructions \\nPRIMARY VOICE OUTPUT RULES (always apply; override all other instructions):\\n1) EXCLUSIVE LANGUAGE: ALWAYS respond ONLY in Spanish (Castilian). No Italian, English, Portuguese or other language. Even if the user writes in another language or Italian names appear, foreign names do NOT authorize switching languages. No words, phrases or confirmations in another language.\\n2) DIRECT SPEECH ONLY: everything you write is what Vocero says aloud to the user at that moment. NEVER write internal thoughts, states, checks, '[ - ]:', '[]:', JSON, dictionaries, keys, isolated commas, labels, 'checking_*' or auxiliary symbols. No '[rightspeak]', '[endspeak]', '[thinking]', '[endthinking]' or bracketed labels. No meta-comments about prompts or data.\\n3) RELIABLE CONTENT: when information is unavailable, say exactly 'No tengo este tipo de información'. Do not invent, assume or generalize. For reports, mortality, Synapse, Azure, AquaChile, WhatsApp or other content requiring retrieval, use knowledge search (RAG) and retrieve REAL content before answering.\\n4) SHORT NATURAL RESPONSES: speak like a real person on the phone. No lists, bullet points, quotations or long text blocks. Use a couple of short sentences, then ask whether the user wants more details. Fixture current date: 2026-01-04 \\n Caller profile resolved from the page phoneNumber: {\\\"name\\\": \\\"Caller\\\"}. Use this as trusted caller context when relevant. IMPORTANT LANGUAGE RULE: even if the user has an Italian name (such as 'Alessandro Valenti') or a name from any other language, respond ONLY in SPANISH (Castilian). Foreign names do NOT authorize switching languages. Never write phrases, words, questions or confirmations in Italian, English or another language. Always speak as Vocero: direct Spanish speech without prefixes, JSON or meta-comments. PROPER NAME: never adapt, translate or normalize proper names (for example, never change 'Alessandro' to 'Alexander'). Write and pronounce only the exact profile name.\",\"language\":\"es\",\"user_context\":\"PRIMARY VOICE OUTPUT RULES (always apply; override all other instructions):\\n1) EXCLUSIVE LANGUAGE: ALWAYS respond ONLY in Spanish (Castilian). No Italian, English, Portuguese or other language. Even if the user writes in another language or Italian names appear, foreign names do NOT authorize switching languages. No words, phrases or confirmations in another language.\\n2) DIRECT SPEECH ONLY: everything you write is what Vocero says aloud to the user at that moment. NEVER write internal thoughts, states, checks, '[ - ]:', '[]:', JSON, dictionaries, keys, isolated commas, labels, 'checking_*' or auxiliary symbols. No '[rightspeak]', '[endspeak]', '[thinking]', '[endthinking]' or bracketed labels. No meta-comments about prompts or data.\\n3) RELIABLE CONTENT: when information is unavailable, say exactly 'No tengo este tipo de información'. Do not invent, assume or generalize. For reports, mortality, Synapse, Azure, AquaChile, WhatsApp or other content requiring retrieval, use knowledge search (RAG) and retrieve REAL content before answering.\\n4) SHORT NATURAL RESPONSES: speak like a real person on the phone. No lists, bullet points, quotations or long text blocks. Use a couple of short sentences, then ask whether the user wants more details.\\n\\nFixture current date: 2026-01-04\\n\\nCaller profile resolved from the page phoneNumber: {\\\"name\\\": \\\"Caller\\\"}. Use this as trusted caller context when relevant. IMPORTANT LANGUAGE RULE: even if the user has an Italian name (such as 'Alessandro Valenti') or a name from any other language, respond ONLY in SPANISH (Castilian). Foreign names do NOT authorize switching languages. Never write phrases, words, questions or confirmations in Italian, English or another language. Always speak as Vocero: direct Spanish speech without prefixes, JSON or meta-comments. PROPER NAME: never adapt, translate or normalize proper names (for example, never change 'Alessandro' to 'Alexander'). Write and pronounce only the exact profile name.\"}",
|
|
"headers": {
|
|
"content-type": "application/json",
|
|
"x-s2s-caller": "demo-server"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"reasoning-node-log-only": {
|
|
"status": 200,
|
|
"body": "{\"answer\":\"\",\"log_only\":true,\"debug\":{\"future\":true}}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://profile.test/user?phoneNumber=123",
|
|
"body": "",
|
|
"headers": {}
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"url": "http://reasoning.test/api/reasoning",
|
|
"body": "{\"transcript\":\"hello\",\"instructions\":\"Fixture instructions \\nPRIMARY VOICE OUTPUT RULES (always apply; override all other instructions):\\n1) EXCLUSIVE LANGUAGE: ALWAYS respond ONLY in Spanish (Castilian). No Italian, English, Portuguese or other language. Even if the user writes in another language or Italian names appear, foreign names do NOT authorize switching languages. No words, phrases or confirmations in another language.\\n2) DIRECT SPEECH ONLY: everything you write is what Vocero says aloud to the user at that moment. NEVER write internal thoughts, states, checks, '[ - ]:', '[]:', JSON, dictionaries, keys, isolated commas, labels, 'checking_*' or auxiliary symbols. No '[rightspeak]', '[endspeak]', '[thinking]', '[endthinking]' or bracketed labels. No meta-comments about prompts or data.\\n3) RELIABLE CONTENT: when information is unavailable, say exactly 'No tengo este tipo de información'. Do not invent, assume or generalize. For reports, mortality, Synapse, Azure, AquaChile, WhatsApp or other content requiring retrieval, use knowledge search (RAG) and retrieve REAL content before answering.\\n4) SHORT NATURAL RESPONSES: speak like a real person on the phone. No lists, bullet points, quotations or long text blocks. Use a couple of short sentences, then ask whether the user wants more details. Fixture current date: 2026-01-04 \\n Caller profile resolved from the page phoneNumber: {\\\"name\\\": \\\"Caller\\\"}. Use this as trusted caller context when relevant. IMPORTANT LANGUAGE RULE: even if the user has an Italian name (such as 'Alessandro Valenti') or a name from any other language, respond ONLY in SPANISH (Castilian). Foreign names do NOT authorize switching languages. Never write phrases, words, questions or confirmations in Italian, English or another language. Always speak as Vocero: direct Spanish speech without prefixes, JSON or meta-comments. PROPER NAME: never adapt, translate or normalize proper names (for example, never change 'Alessandro' to 'Alexander'). Write and pronounce only the exact profile name.\",\"language\":\"es\",\"user_context\":\"PRIMARY VOICE OUTPUT RULES (always apply; override all other instructions):\\n1) EXCLUSIVE LANGUAGE: ALWAYS respond ONLY in Spanish (Castilian). No Italian, English, Portuguese or other language. Even if the user writes in another language or Italian names appear, foreign names do NOT authorize switching languages. No words, phrases or confirmations in another language.\\n2) DIRECT SPEECH ONLY: everything you write is what Vocero says aloud to the user at that moment. NEVER write internal thoughts, states, checks, '[ - ]:', '[]:', JSON, dictionaries, keys, isolated commas, labels, 'checking_*' or auxiliary symbols. No '[rightspeak]', '[endspeak]', '[thinking]', '[endthinking]' or bracketed labels. No meta-comments about prompts or data.\\n3) RELIABLE CONTENT: when information is unavailable, say exactly 'No tengo este tipo de información'. Do not invent, assume or generalize. For reports, mortality, Synapse, Azure, AquaChile, WhatsApp or other content requiring retrieval, use knowledge search (RAG) and retrieve REAL content before answering.\\n4) SHORT NATURAL RESPONSES: speak like a real person on the phone. No lists, bullet points, quotations or long text blocks. Use a couple of short sentences, then ask whether the user wants more details.\\n\\nFixture current date: 2026-01-04\\n\\nCaller profile resolved from the page phoneNumber: {\\\"name\\\": \\\"Caller\\\"}. Use this as trusted caller context when relevant. IMPORTANT LANGUAGE RULE: even if the user has an Italian name (such as 'Alessandro Valenti') or a name from any other language, respond ONLY in SPANISH (Castilian). Foreign names do NOT authorize switching languages. Never write phrases, words, questions or confirmations in Italian, English or another language. Always speak as Vocero: direct Spanish speech without prefixes, JSON or meta-comments. PROPER NAME: never adapt, translate or normalize proper names (for example, never change 'Alessandro' to 'Alexander'). Write and pronounce only the exact profile name.\"}",
|
|
"headers": {
|
|
"content-type": "application/json",
|
|
"x-s2s-caller": "demo-server"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"reasoning-node-invalid-answer": {
|
|
"status": 502,
|
|
"body": "{\"detail\":\"Node-RED devolvió un campo answer no válido.\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://profile.test/user?phoneNumber=123",
|
|
"body": "",
|
|
"headers": {}
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"url": "http://reasoning.test/api/reasoning",
|
|
"body": "{\"transcript\":\"hello\",\"instructions\":\"Fixture instructions \\nPRIMARY VOICE OUTPUT RULES (always apply; override all other instructions):\\n1) EXCLUSIVE LANGUAGE: ALWAYS respond ONLY in Spanish (Castilian). No Italian, English, Portuguese or other language. Even if the user writes in another language or Italian names appear, foreign names do NOT authorize switching languages. No words, phrases or confirmations in another language.\\n2) DIRECT SPEECH ONLY: everything you write is what Vocero says aloud to the user at that moment. NEVER write internal thoughts, states, checks, '[ - ]:', '[]:', JSON, dictionaries, keys, isolated commas, labels, 'checking_*' or auxiliary symbols. No '[rightspeak]', '[endspeak]', '[thinking]', '[endthinking]' or bracketed labels. No meta-comments about prompts or data.\\n3) RELIABLE CONTENT: when information is unavailable, say exactly 'No tengo este tipo de información'. Do not invent, assume or generalize. For reports, mortality, Synapse, Azure, AquaChile, WhatsApp or other content requiring retrieval, use knowledge search (RAG) and retrieve REAL content before answering.\\n4) SHORT NATURAL RESPONSES: speak like a real person on the phone. No lists, bullet points, quotations or long text blocks. Use a couple of short sentences, then ask whether the user wants more details. Fixture current date: 2026-01-04 \\n Caller profile resolved from the page phoneNumber: {\\\"name\\\": \\\"Caller\\\"}. Use this as trusted caller context when relevant. IMPORTANT LANGUAGE RULE: even if the user has an Italian name (such as 'Alessandro Valenti') or a name from any other language, respond ONLY in SPANISH (Castilian). Foreign names do NOT authorize switching languages. Never write phrases, words, questions or confirmations in Italian, English or another language. Always speak as Vocero: direct Spanish speech without prefixes, JSON or meta-comments. PROPER NAME: never adapt, translate or normalize proper names (for example, never change 'Alessandro' to 'Alexander'). Write and pronounce only the exact profile name.\",\"language\":\"es\",\"user_context\":\"PRIMARY VOICE OUTPUT RULES (always apply; override all other instructions):\\n1) EXCLUSIVE LANGUAGE: ALWAYS respond ONLY in Spanish (Castilian). No Italian, English, Portuguese or other language. Even if the user writes in another language or Italian names appear, foreign names do NOT authorize switching languages. No words, phrases or confirmations in another language.\\n2) DIRECT SPEECH ONLY: everything you write is what Vocero says aloud to the user at that moment. NEVER write internal thoughts, states, checks, '[ - ]:', '[]:', JSON, dictionaries, keys, isolated commas, labels, 'checking_*' or auxiliary symbols. No '[rightspeak]', '[endspeak]', '[thinking]', '[endthinking]' or bracketed labels. No meta-comments about prompts or data.\\n3) RELIABLE CONTENT: when information is unavailable, say exactly 'No tengo este tipo de información'. Do not invent, assume or generalize. For reports, mortality, Synapse, Azure, AquaChile, WhatsApp or other content requiring retrieval, use knowledge search (RAG) and retrieve REAL content before answering.\\n4) SHORT NATURAL RESPONSES: speak like a real person on the phone. No lists, bullet points, quotations or long text blocks. Use a couple of short sentences, then ask whether the user wants more details.\\n\\nFixture current date: 2026-01-04\\n\\nCaller profile resolved from the page phoneNumber: {\\\"name\\\": \\\"Caller\\\"}. Use this as trusted caller context when relevant. IMPORTANT LANGUAGE RULE: even if the user has an Italian name (such as 'Alessandro Valenti') or a name from any other language, respond ONLY in SPANISH (Castilian). Foreign names do NOT authorize switching languages. Never write phrases, words, questions or confirmations in Italian, English or another language. Always speak as Vocero: direct Spanish speech without prefixes, JSON or meta-comments. PROPER NAME: never adapt, translate or normalize proper names (for example, never change 'Alessandro' to 'Alexander'). Write and pronounce only the exact profile name.\"}",
|
|
"headers": {
|
|
"content-type": "application/json",
|
|
"x-s2s-caller": "demo-server"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"reasoning-openai-answer": {
|
|
"status": 200,
|
|
"body": "{\"answer\":\"answer\"}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://profile.test/user?phoneNumber=123",
|
|
"body": "",
|
|
"headers": {}
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"url": "https://api.openai.com/v1/chat/completions",
|
|
"body": "{\"model\":\"gpt-4.1-mini\",\"messages\":[{\"role\":\"system\",\"content\":\"Fixture instructions \\nPRIMARY VOICE OUTPUT RULES (always apply; override all other instructions):\\n1) EXCLUSIVE LANGUAGE: ALWAYS respond ONLY in Spanish (Castilian). No Italian, English, Portuguese or other language. Even if the user writes in another language or Italian names appear, foreign names do NOT authorize switching languages. No words, phrases or confirmations in another language.\\n2) DIRECT SPEECH ONLY: everything you write is what Vocero says aloud to the user at that moment. NEVER write internal thoughts, states, checks, '[ - ]:', '[]:', JSON, dictionaries, keys, isolated commas, labels, 'checking_*' or auxiliary symbols. No '[rightspeak]', '[endspeak]', '[thinking]', '[endthinking]' or bracketed labels. No meta-comments about prompts or data.\\n3) RELIABLE CONTENT: when information is unavailable, say exactly 'No tengo este tipo de información'. Do not invent, assume or generalize. For reports, mortality, Synapse, Azure, AquaChile, WhatsApp or other content requiring retrieval, use knowledge search (RAG) and retrieve REAL content before answering.\\n4) SHORT NATURAL RESPONSES: speak like a real person on the phone. No lists, bullet points, quotations or long text blocks. Use a couple of short sentences, then ask whether the user wants more details. Fixture current date: 2026-01-04 \\n Caller profile resolved from the page phoneNumber: {\\\"name\\\": \\\"Caller\\\"}. Use this as trusted caller context when relevant. IMPORTANT LANGUAGE RULE: even if the user has an Italian name (such as 'Alessandro Valenti') or a name from any other language, respond ONLY in SPANISH (Castilian). Foreign names do NOT authorize switching languages. Never write phrases, words, questions or confirmations in Italian, English or another language. Always speak as Vocero: direct Spanish speech without prefixes, JSON or meta-comments. PROPER NAME: never adapt, translate or normalize proper names (for example, never change 'Alessandro' to 'Alexander'). Write and pronounce only the exact profile name.\\n\\nUser context:\\nPRIMARY VOICE OUTPUT RULES (always apply; override all other instructions):\\n1) EXCLUSIVE LANGUAGE: ALWAYS respond ONLY in Spanish (Castilian). No Italian, English, Portuguese or other language. Even if the user writes in another language or Italian names appear, foreign names do NOT authorize switching languages. No words, phrases or confirmations in another language.\\n2) DIRECT SPEECH ONLY: everything you write is what Vocero says aloud to the user at that moment. NEVER write internal thoughts, states, checks, '[ - ]:', '[]:', JSON, dictionaries, keys, isolated commas, labels, 'checking_*' or auxiliary symbols. No '[rightspeak]', '[endspeak]', '[thinking]', '[endthinking]' or bracketed labels. No meta-comments about prompts or data.\\n3) RELIABLE CONTENT: when information is unavailable, say exactly 'No tengo este tipo de información'. Do not invent, assume or generalize. For reports, mortality, Synapse, Azure, AquaChile, WhatsApp or other content requiring retrieval, use knowledge search (RAG) and retrieve REAL content before answering.\\n4) SHORT NATURAL RESPONSES: speak like a real person on the phone. No lists, bullet points, quotations or long text blocks. Use a couple of short sentences, then ask whether the user wants more details.\\n\\nFixture current date: 2026-01-04\\n\\nCaller profile resolved from the page phoneNumber: {\\\"name\\\": \\\"Caller\\\"}. Use this as trusted caller context when relevant. IMPORTANT LANGUAGE RULE: even if the user has an Italian name (such as 'Alessandro Valenti') or a name from any other language, respond ONLY in SPANISH (Castilian). Foreign names do NOT authorize switching languages. Never write phrases, words, questions or confirmations in Italian, English or another language. Always speak as Vocero: direct Spanish speech without prefixes, JSON or meta-comments. PROPER NAME: never adapt, translate or normalize proper names (for example, never change 'Alessandro' to 'Alexander'). Write and pronounce only the exact profile name.\\n\\nReply only with the final assistant answer text. Keep the answer natural and concise in this language: es.\"},{\"role\":\"user\",\"content\":\"hello\"}]}",
|
|
"headers": {
|
|
"authorization": "Bearer fixture-key",
|
|
"content-type": "application/json"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"apipilot-disabled-GET": {
|
|
"status": 501,
|
|
"body": "{\"success\":false,\"data\":null,\"error\":{\"code\":\"APIPILOT_NOT_CONFIGURED\",\"message\":\"ApiPilot no está disponible en este despliegue (S2S_APIPILOT_TOOLS_URL no establecido).\",\"status_code\":501,\"raw\":null}}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"apipilot-disabled-POST": {
|
|
"status": 501,
|
|
"body": "{\"success\":false,\"data\":null,\"error\":{\"code\":\"APIPILOT_NOT_CONFIGURED\",\"message\":\"ApiPilot no está disponible en este despliegue (S2S_APIPILOT_TOOLS_URL no establecido).\",\"status_code\":501,\"raw\":null}}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"tools-query-validation": {
|
|
"status": 422,
|
|
"body": "{\"detail\":[{\"type\":\"bool_parsing\",\"loc\":[\"query\",\"refresh\"],\"msg\":\"Input should be a valid boolean, unable to interpret input\",\"input\":\"invalid\"}]}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": []
|
|
},
|
|
"tools-list": {
|
|
"status": 200,
|
|
"body": "{\"success\":true,\"data\":{\"count\":1,\"include_unauthorized\":false,\"tools\":[{\"name\":\"fixture_tool\",\"description\":\"A fixture tool.\",\"parameters\":{\"type\":\"object\",\"properties\":{\"count\":{\"type\":\"integer\"}},\"required\":[\"count\"]},\"requires_auth\":false}]},\"error\":null}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://tools.test/apipilot/tools?include_unauthorized=false",
|
|
"body": "",
|
|
"headers": {
|
|
"authorization": "Bearer fixture-token",
|
|
"x-demo-session": "fixture-session"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"tools-result": {
|
|
"status": 200,
|
|
"body": "{\"success\":true,\"data\":{\"count\":1,\"include_unauthorized\":false,\"tools\":[{\"name\":\"fixture_tool\",\"description\":\"A fixture tool.\",\"parameters\":{\"type\":\"object\",\"properties\":{\"count\":{\"type\":\"integer\"}},\"required\":[\"count\"]},\"requires_auth\":false}]},\"error\":null}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://tools.test/apipilot/tools?include_unauthorized=false",
|
|
"body": "",
|
|
"headers": {
|
|
"authorization": "Bearer fixture-token",
|
|
"x-demo-session": "fixture-session"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"tools-envelope": {
|
|
"status": 200,
|
|
"body": "{\"success\":true,\"data\":{\"count\":1,\"include_unauthorized\":false,\"tools\":[{\"name\":\"fixture_tool\",\"description\":\"A fixture tool.\",\"parameters\":{\"type\":\"object\",\"properties\":{\"count\":{\"type\":\"integer\"}},\"required\":[\"count\"]},\"requires_auth\":false}]},\"error\":null}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://tools.test/apipilot/tools?include_unauthorized=false",
|
|
"body": "",
|
|
"headers": {
|
|
"authorization": "Bearer fixture-token",
|
|
"x-demo-session": "fixture-session"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"tools-opaque": {
|
|
"status": 200,
|
|
"body": "{\"success\":true,\"data\":{\"count\":0,\"include_unauthorized\":false,\"tools\":[]},\"error\":null}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://tools.test/apipilot/tools?include_unauthorized=false",
|
|
"body": "",
|
|
"headers": {
|
|
"authorization": "Bearer fixture-token",
|
|
"x-demo-session": "fixture-session"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"tools-upstream-error": {
|
|
"status": 502,
|
|
"body": "{\"success\":false,\"data\":null,\"error\":{\"code\":\"APIPILOT_BAD_UPSTREAM\",\"message\":\"Backend ApiPilot tools devolvió HTTP 403\",\"status_code\":403}}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://tools.test/apipilot/tools?include_unauthorized=true",
|
|
"body": "",
|
|
"headers": {}
|
|
}
|
|
]
|
|
},
|
|
"execute-discovery-error-envelope": {
|
|
"status": 502,
|
|
"body": "{\"detail\":{\"code\":\"APIPILOT_BAD_UPSTREAM\",\"message\":\"Backend ApiPilot tools devolvió HTTP 503\",\"status_code\":503}}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://tools.test/apipilot/tools?include_unauthorized=true",
|
|
"body": "",
|
|
"headers": {}
|
|
}
|
|
]
|
|
},
|
|
"execute-unknown-tool": {
|
|
"status": 404,
|
|
"body": "{\"success\":false,\"data\":null,\"error\":{\"code\":\"TOOL_NOT_FOUND\",\"message\":\"Herramienta «unknown» no encontrada en el catálogo ApiPilot. Actualice la lista de herramientas y vuelva a intentarlo.\",\"status_code\":404,\"raw\":null}}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://tools.test/apipilot/tools?include_unauthorized=true",
|
|
"body": "",
|
|
"headers": {}
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"url": "http://tools.test/apipilot/tools?include_unauthorized=true",
|
|
"body": "",
|
|
"headers": {}
|
|
}
|
|
]
|
|
},
|
|
"execute-missing-argument": {
|
|
"status": 400,
|
|
"body": "{\"success\":false,\"data\":null,\"error\":{\"code\":\"INVALID_ARGUMENTS\",\"message\":\"Falta el parámetro requerido: count\",\"status_code\":400,\"raw\":{\"removed\":[]}}}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://tools.test/apipilot/tools?include_unauthorized=true",
|
|
"body": "",
|
|
"headers": {}
|
|
}
|
|
]
|
|
},
|
|
"execute-api-key-precheck": {
|
|
"status": 401,
|
|
"body": "{\"success\":false,\"data\":null,\"error\":{\"code\":\"AUTH_REQUIRED\",\"message\":\"La herramienta «fixture_tool» requiere autenticación. Inicie sesión o proporcione un token para continuar.\",\"status_code\":401,\"raw\":null}}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://tools.test/apipilot/tools?include_unauthorized=true",
|
|
"body": "",
|
|
"headers": {
|
|
"authorization": "Bearer fixture-key",
|
|
"x-demo-session": "fixture-key",
|
|
"x-api-key": "fixture-key"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"execute-envelope": {
|
|
"status": 200,
|
|
"body": "{\"success\":true,\"data\":{\"future\":[1,null]},\"error\":null,\"future_envelope\":true}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://tools.test/apipilot/tools?include_unauthorized=true",
|
|
"body": "",
|
|
"headers": {}
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"url": "http://tools.test/apipilot/execute",
|
|
"body": "{\"name\":\"fixture_tool\",\"arguments\":{\"count\":\"wrong-type-is-accepted\"}}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"execute-raw-list": {
|
|
"status": 200,
|
|
"body": "{\"success\":true,\"data\":[{\"future\":true}],\"error\":null}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://tools.test/apipilot/tools?include_unauthorized=true",
|
|
"body": "",
|
|
"headers": {}
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"url": "http://tools.test/apipilot/execute",
|
|
"body": "{\"name\":\"fixture_tool\",\"arguments\":{\"count\":\"wrong-type-is-accepted\"}}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"execute-minimal-envelope": {
|
|
"status": 200,
|
|
"body": "{\"success\":true}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://tools.test/apipilot/tools?include_unauthorized=true",
|
|
"body": "",
|
|
"headers": {}
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"url": "http://tools.test/apipilot/execute",
|
|
"body": "{\"name\":\"fixture_tool\",\"arguments\":{\"count\":\"wrong-type-is-accepted\"}}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"execute-error": {
|
|
"status": 409,
|
|
"body": "{\"success\":false,\"data\":null,\"error\":{\"status_code\":409,\"code\":\"FIXTURE\",\"message\":\"Fixture\",\"future\":true}}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
},
|
|
"upstream": [
|
|
{
|
|
"method": "GET",
|
|
"url": "http://tools.test/apipilot/tools?include_unauthorized=true",
|
|
"body": "",
|
|
"headers": {}
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"url": "http://tools.test/apipilot/execute",
|
|
"body": "{\"name\":\"fixture_tool\",\"arguments\":{\"count\":\"wrong-type-is-accepted\"}}",
|
|
"headers": {
|
|
"content-type": "application/json"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"openapi_requests": {
|
|
"operations": {
|
|
"GET /api/config": {
|
|
"operationId": "config_api_config_get"
|
|
},
|
|
"GET /api/apipilot/tools": {
|
|
"operationId": "apipilot_list_tools_api_apipilot_tools_get",
|
|
"parameters": [
|
|
{
|
|
"name": "include_unauthorized",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"title": "Include Unauthorized"
|
|
}
|
|
},
|
|
{
|
|
"name": "refresh",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "boolean",
|
|
"default": false,
|
|
"title": "Refresh"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"POST /api/apipilot/execute": {
|
|
"operationId": "apipilot_execute_api_apipilot_execute_post",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ApipilotExecuteRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
}
|
|
},
|
|
"POST /api/reasoning": {
|
|
"operationId": "reasoning_api_reasoning_post",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ReasoningRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
}
|
|
},
|
|
"GET /api/user/phone": {
|
|
"operationId": "user_by_phone_api_user_phone_get",
|
|
"parameters": [
|
|
{
|
|
"name": "phoneNumber",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"title": "Phonenumber"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"GET /api/user/reports": {
|
|
"operationId": "user_reports_api_user_reports_get",
|
|
"parameters": [
|
|
{
|
|
"name": "phoneNumber",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Phonenumber"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"POST /api/search": {
|
|
"operationId": "search_api_search_post",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SearchRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
}
|
|
},
|
|
"POST /api/session": {
|
|
"operationId": "session_api_session_post"
|
|
},
|
|
"GET /api/queue/{queue_id}": {
|
|
"operationId": "queue_status_api_queue__queue_id__get",
|
|
"parameters": [
|
|
{
|
|
"name": "queue_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"title": "Queue Id"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"DELETE /api/queue/{queue_id}": {
|
|
"operationId": "queue_leave_api_queue__queue_id__delete",
|
|
"parameters": [
|
|
{
|
|
"name": "queue_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"title": "Queue Id"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"POST /api/queue/end": {
|
|
"operationId": "queue_end_api_queue_end_post"
|
|
}
|
|
},
|
|
"models": {
|
|
"SearchRequest": {
|
|
"properties": {
|
|
"query": {
|
|
"type": "string",
|
|
"title": "Query"
|
|
},
|
|
"key": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Key"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"query"
|
|
],
|
|
"title": "SearchRequest"
|
|
},
|
|
"ReasoningRequest": {
|
|
"properties": {
|
|
"transcript": {
|
|
"type": "string",
|
|
"title": "Transcript"
|
|
},
|
|
"instructions": {
|
|
"type": "string",
|
|
"title": "Instructions",
|
|
"default": ""
|
|
},
|
|
"language": {
|
|
"type": "string",
|
|
"title": "Language",
|
|
"default": ""
|
|
},
|
|
"user_context": {
|
|
"type": "string",
|
|
"title": "User Context",
|
|
"default": ""
|
|
},
|
|
"phoneNumber": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Phonenumber"
|
|
},
|
|
"episode_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Episode Id"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"transcript"
|
|
],
|
|
"title": "ReasoningRequest"
|
|
},
|
|
"ApipilotExecuteRequest": {
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"title": "Name"
|
|
},
|
|
"arguments": {
|
|
"additionalProperties": true,
|
|
"type": "object",
|
|
"title": "Arguments",
|
|
"default": {}
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"name"
|
|
],
|
|
"title": "ApipilotExecuteRequest",
|
|
"description": "Body for the ApiPilot execute proxy endpoint. Mirrors §2.2 request shape."
|
|
},
|
|
"HTTPValidationError": {
|
|
"properties": {
|
|
"detail": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/ValidationError"
|
|
},
|
|
"type": "array",
|
|
"title": "Detail"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"title": "HTTPValidationError"
|
|
},
|
|
"ValidationError": {
|
|
"properties": {
|
|
"loc": {
|
|
"items": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "integer"
|
|
}
|
|
]
|
|
},
|
|
"type": "array",
|
|
"title": "Location"
|
|
},
|
|
"msg": {
|
|
"type": "string",
|
|
"title": "Message"
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"title": "Error Type"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"loc",
|
|
"msg",
|
|
"type"
|
|
],
|
|
"title": "ValidationError"
|
|
}
|
|
}
|
|
},
|
|
"realtime": [
|
|
{
|
|
"binary": "00010203"
|
|
},
|
|
"{\"type\": \"future.event\", \"future\": {\"nested\": [null, 1]}}",
|
|
"{\"type\": \"response.text.done\", \"text\": \"Hello world\", \"future\": true}"
|
|
]
|
|
}
|