REST Context API

Questa API serve per recuperare in una singola chiamata il contesto utente (profilo + ordini + carrello), orchestrando internamente le chiamate MCP verso il tenant. Supporta l'identificazione del cliente tramite user_id (diretto) oppure tramite phone (lookup via telefono).

Endpoint

GET /getUserContext
GET /health
GET /stats

Auth

X-SalesMate-Key: <MCP_API_KEY>

Query params (GET /getUserContext)

parametrotipoobbligatoriodescrizione
tenant_idstringID tenant configurato nel MCP (es. testwc)
user_idintXOR con phoneID utente/cliente diretto nel tenant
phonestringXOR con user_idNumero di telefono (qualsiasi formato, viene normalizzato E.164 dal server)
session_idstringID sessione applicativa lato client (per invalidazione cache)

Regola: specifica esattamente uno tra user_id e phone. Se specifichi phone, il server normalizza il numero, cerca il cliente tramite tool get_customer_by_phone e poi procede con il flusso standard.

Comportamento

- Esegue 3 tool call: get_customer_profile + list_customer_orders + get_cart
- Cache in-memory customer+orders per (tenant_id, user_id) finché session_id non cambia
- Lookup telefono: cache (tenant_id, phone_norm) → user_id con TTL 24h (configurabile PHONE_LOOKUP_CACHE_TTL)
- Stato risposta:
    • 400 INVALID_IDENTIFIER → entrambi o nessuno di user_id/phone
    • 400 INVALID_PHONE      → formato telefono non valido
    • 404 CUSTOMER_NOT_FOUND_BY_PHONE → telefono non associato a nessun cliente
    • 409 CUSTOMER_PHONE_AMBIGUOUS → telefono associato a più clienti sul tenant
    • 200 → successo

Schema response (200)

{
  "user_id": 3,
  "resolved_by": "user_id" | "phone",
  "customer": { "tool_name":"get_customer_profile","success":true,"data":{...} },
  "orders":   { "tool_name":"list_customer_orders","success":true,"data":[...] },
  "cart":     { "tool_name":"get_cart","success":true,"data":{...} }
}

Esempio 1 — ID diretto (back compat)

curl -sS "http://localhost:8002/getUserContext?tenant_id=testwc&user_id=3&session_id=sess_1" \
  -H "X-SalesMate-Key: <MCP_API_KEY>" | jq .

Esempio 2 — per telefono

curl -sS "http://localhost:8002/getUserContext?tenant_id=testwc&phone=3331234567&session_id=sess_1" \
  -H "X-SalesMate-Key: <MCP_API_KEY>" | jq .

curl -sS -G "http://localhost:8002/getUserContext" \
  --data-urlencode "tenant_id=testwc" \
  --data-urlencode "phone=+39 333 123 4567" \
  --data-urlencode "session_id=sess_1" \
  -H "X-SalesMate-Key: <MCP_API_KEY>" | jq .

Swagger/OpenAPI interattivo

GET  /openapi.json
GET  /docs           ← Swagger UI della REST

Nota: esempi usano la porta 8002 tipica del setup locale. In produzione la base URL dipende dal deployment.