Sesiones y canales
En la web
Renderiza el token en el script tag del widget. Los visitantes sin sesión simplemente no reciben token, y el agente responde con sus herramientas públicas.
<script src="https://cdn.vatio.ai/v1/widget.js"
data-workspace="acme"
data-token="vatpub_..."
<%= "data-visitor-token=\"#{visitor_jwt}\"".html_safe if current_user %>></script>Para iniciar sesión sin recargar la página:
window.VatioWidget.identify(newToken); // null para cerrar sesiónIniciar sesión a mitad de conversación
Un visitante pregunta algo, el agente le dice que inicie sesión, lo hace y vuelve. La conversación sobrevive. Ya sea que haya iniciado sesión con identify() o navegando y recargando la página con un token, el chat que ya tenía se conserva y ahora tiene un nombre — así el agente puede responder la pregunta que motivó el login sin que la tenga que reescribir.
| Antes | Después | Qué pasa |
|---|---|---|
| anónimo | con sesión | Misma conversación, ahora identificada |
| usuario A | usuario A, token más nuevo | Misma conversación, token refrescado |
| usuario A | usuario B | Conversación nueva |
| con sesión | sin sesión | Conversación nueva |
Los dos últimos son el caso del notebook compartido: una conversación que pertenecía a un sub nunca se le entrega a otro, así que iniciar sesión como otra persona se ve exactamente como llegar por primera vez. Vatio lo impone del lado del servidor — la página no puede optar por salirse.
Refrescar es también cómo se mantiene viva una sesión web: renderiza un token fresco en cada carga de página y una conversación larga sigue funcionando más allá del exp del primer token.
Canales sin sesión
En WhatsApp e Instagram no hay página donde renderizar un token, así que Vatio le pide uno a tu backend. Agrega mint::
auth:
public_key: identity.pub
mint:
url: $env.API_URL/api/vatio/identity
headers:
X-Api-Key: $env.API_KEYVatio envía la evidencia del canal y espera un token de vuelta:
POST /api/vatio/identity
Content-Type: application/json
{ "channel": "whatsapp", "phone_number": "+56912345678" }{ "token": "<el mismo tipo de JWT que firmas para la web>" }Devuelve cualquier no-2xx para un número que no reconozcas — el visitante queda anónimo y el agente conserva sus herramientas públicas. Define los secretos que necesite con vatio secrets set API_KEY ....
Mint corre una vez por conversación, y otra vez solo si el token expira. En WhatsApp eso significa que una conversación larga se refresca sola.
Mint nunca se usa en la web, aunque lo declares. En la web el token es la evidencia: la página tenía una sesión y lo dijo con una firma. Un visitante web sin token válido está sin sesión, y sigue así hasta que la página llame a identify() con uno fresco.
