SAV Informática Docs Contactar
Todos los productos

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 TOKEN

Node.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);
¿Necesitas ayuda con AGOS?Contactar con SAV