Documentación técnicaAPI · 1.7.4
Ejemplos por lenguaje
Autentica un backend y envía una pregunta a AGOS con cURL, JavaScript, Python o C#.
En este artículo
Los cuatro ejemplos realizan el mismo flujo: inician sesión con useCookie: false, comprueban el resultado y envían una pregunta a /api/chat con un token Bearer.
Requisitos del ejemplo
Configura AGOS_BASE_URL, AGOS_EMAIL, AGOS_PASSWORD y AGOS_AGENT_KEY en el entorno del proceso. La URL debe ser el origen HTTPS de tu instalación, sin /api al final. Necesitas un agente activo y una cuenta con licencia y cuota disponibles.
El ejemplo de JavaScript se ejecuta en Node.js, no en el navegador. Los ejemplos no requieren permisos de administración para conversar y nunca deben usar una contraseña incrustada en el código.
Resultado esperado
El chat devuelve un objeto con text y metadatos. JavaScript, Python y C# imprimen el texto; cURL muestra también agente, identificador y fuentes. La respuesta exacta depende del conocimiento del agente.
En producción, conserva messageId si vas a enviar feedback. Envía los turnos anteriores en history cuando necesites contexto: roles user o assistant con campo text. AGOS utiliza los últimos seis turnos, hasta 1.500 caracteres cada uno.
Antes de llevarlo a producción
Estos son ejemplos mínimos de una ejecución, no SDKs completos. Reutiliza el token, añade cancelación y trata los estados de errores y límites. No repitas automáticamente escrituras tras un resultado incierto ni registres el JWT en la consola.
Un 401 requiere revisar autenticación; un 402, la licencia de instalación; un 429, el límite o la cuota. Los ejemplos fallan ante respuestas HTTP no satisfactorias en lugar de tratarlas como respuestas del chat.
Código por lenguaje
Bash, cURL y jq. Variables AGOS_* configuradas en el entorno.
set -euo pipefail
: "${AGOS_BASE_URL:?Define AGOS_BASE_URL}"
: "${AGOS_EMAIL:?Define AGOS_EMAIL}"
: "${AGOS_PASSWORD:?Define AGOS_PASSWORD}"
: "${AGOS_AGENT_KEY:?Define AGOS_AGENT_KEY}"
case "$AGOS_BASE_URL" in https://*) ;; *) exit 1 ;; esac
TOKEN=$(jq -n '{email: env.AGOS_EMAIL,
password: env.AGOS_PASSWORD, useCookie: false}' |
curl --silent --show-error --fail-with-body --max-time 30 \
"${AGOS_BASE_URL%/}/api/auth/login" \
-H 'Content-Type: application/json' --data-binary @- |
jq -er '.token | select(type == "string" and length > 0)')
jq -n '{message: "¿Cómo registro una devolución?",
agentKey: env.AGOS_AGENT_KEY, history: []}' |
curl --silent --show-error --fail-with-body --max-time 120 \
"${AGOS_BASE_URL%/}/api/chat" \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' --data-binary @- |
jq '{text, personality, messageId, sources}'
unset TOKENNode.js 22 o superior. Guarda el ejemplo como un módulo .mjs y ejecútalo con node.
const required = name => {
const value = process.env[name];
if (!value) throw new Error('Falta la variable ' + name);
return value;
};
const base = new URL(required('AGOS_BASE_URL'));
if (base.protocol !== 'https:') throw new Error('Usa HTTPS');
async function post(path, body, token, timeout = 30000) {
const response = await fetch(new URL(path, base), {
method: 'POST',
headers: {
'Content-Type': 'application/json',
...(token ? { Authorization: 'Bearer ' + token } : {})
},
body: JSON.stringify(body),
signal: AbortSignal.timeout(timeout)
});
if (!response.ok) {
throw new Error('AGOS respondió HTTP ' + response.status);
}
return response.json();
}
const login = await post('/api/auth/login', {
email: required('AGOS_EMAIL'),
password: required('AGOS_PASSWORD'),
useCookie: false
});
if (!login.token) throw new Error('El login no devolvió un token');
const reply = await post('/api/chat', {
message: '¿Cómo registro una devolución?',
agentKey: required('AGOS_AGENT_KEY'),
history: []
}, login.token, 120000);
console.log(reply.text);Python 3.10 o superior. Instala requests con python -m pip install requests.
import os
from urllib.parse import urlsplit
import requests
def required(name):
value = os.environ.get(name)
if not value:
raise ValueError(f"Falta la variable {name}")
return value
base = required("AGOS_BASE_URL").rstrip("/")
if urlsplit(base).scheme != "https":
raise ValueError("Usa HTTPS")
with requests.Session() as client:
login = client.post(
f"{base}/api/auth/login",
json={
"email": required("AGOS_EMAIL"),
"password": required("AGOS_PASSWORD"),
"useCookie": False,
},
timeout=(10, 30),
)
login.raise_for_status()
token = login.json().get("token")
if not token:
raise RuntimeError("El login no devolvió un token")
reply = client.post(
f"{base}/api/chat",
headers={"Authorization": f"Bearer {token}"},
json={
"message": "¿Cómo registro una devolución?",
"agentKey": required("AGOS_AGENT_KEY"),
"history": [],
},
timeout=(10, 120),
)
reply.raise_for_status()
print(reply.json()["text"]).NET 8 o superior. Usa una aplicación de consola: dotnet new console; reemplaza Program.cs y ejecuta dotnet run.
using System.Net.Http.Headers;
using System.Net.Http.Json;
static string Required(string name) =>
Environment.GetEnvironmentVariable(name)
?? throw new InvalidOperationException($"Falta la variable {name}");
var baseUri = new Uri(Required("AGOS_BASE_URL"));
if (baseUri.Scheme != "https")
throw new InvalidOperationException("Usa HTTPS");
using var http = new HttpClient
{
BaseAddress = baseUri,
Timeout = TimeSpan.FromSeconds(120)
};
using var loginResponse = await http.PostAsJsonAsync("/api/auth/login", new
{
email = Required("AGOS_EMAIL"),
password = Required("AGOS_PASSWORD"),
useCookie = false
});
loginResponse.EnsureSuccessStatusCode();
var login = await loginResponse.Content.ReadFromJsonAsync<LoginResponse>();
if (string.IsNullOrWhiteSpace(login?.Token))
throw new InvalidOperationException("El login no devolvió un token");
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", login.Token);
using var response = await http.PostAsJsonAsync("/api/chat", new
{
message = "¿Cómo registro una devolución?",
agentKey = Required("AGOS_AGENT_KEY"),
history = Array.Empty<object>()
});
response.EnsureSuccessStatusCode();
var reply = await response.Content.ReadFromJsonAsync<ChatResponse>();
Console.WriteLine(reply?.Text);
record LoginResponse(string Token, string Plan);
record ChatResponse(string Text, string Personality, long MessageId);
Docs Contactar