Appearance
Copiloto en vivo: sugerencias al agente durante la llamada
English version: Live copilot.
El copiloto escucha la pata humana de la llamada y muestra al agente sugerencias cortas y descartables mientras ésta sigue en curso. Existe en core desde v0.107.0 (core#1975, ADR #264). La spec vendorizada openapi/dialer-v1.yaml es 0.106.0 y no lo describe: los eventos son fotogramas de WebSocket entregados al widget del agente; las afirmaciones citan API.md, ADR.md y CHANGELOG.md de core en el tag v0.107.0.
Quién es elegible
Deben cumplirse todas, o no se abre y no se gasta nada:
- Plan: sólo
enterprise. - Grabación: de la llamada, en
pendingoavailable. - Consentimiento:
consent_basis == "CONSENT_STATUS_GRANTED", congelado al abrir la grabación. Una grabación entrante conconsent_basisnulo no es elegible en esta versión (lectura estricta mientras el criterio del asesor legal sigue abierto). - Llamada: no atendida por el agente de voz con IA, y con agente humano conocido.
Se abre cuando la llamada pasa a bridged. Si la llamada cambia de agente, la sesión del anterior se cierra (copilot.ended con reason: "agent_changed") y se abre otra para el nuevo si es elegible; si no se sabe quién atiende, no se sugiere a nadie.
Qué recibe el agente
Tres fotogramas, entregados sólo al socket ddw_ del agente de esa llamada por un tema privado por agente. Ningún socket dd_ o ddu_, ningún otro agente y tampoco el tema del tenant (que rechaza copilot.* igual que screen.*):
| Fotograma | Contenido |
|---|---|
copilot.started | {call_id, session_id} |
copilot.suggestion | {call_id, session_id, suggestion_id, suggestions: [{kind, text}]}: de 1 a 3; kind es talking_point, objection_reply, compliance_note o next_step; text de 1 a 240 code points Unicode |
copilot.ended | {call_id, session_id, reason}; reason: budget, call_ended, max_duration, requested, agent_changed, fork_lost (el servicio de voz cerró el fork de audio) o fork_failed (no consta que el fork se abriera; puede llegar sin copilot.started previo). Cualquier otro valor se trata como fin de sesión |
Una sugerencia informa y no ejecuta nada: el panel del widget del dashboard (apps/web/src/widget/CopilotPanel.tsx, presente en dashboard v0.51.0 y v0.51.1) permite leerla o descartarla, sin otra acción. El texto viene de lo que dijo el consumidor, así que es dato no confiable: píntalo como texto, nunca como HTML. Ni el audio ni el texto se escriben en logs ni métricas.
El freno de gasto (fail-closed)
El gasto es continuo, así que se reserva en tramos de 60 s por el mismo freno que la transcripción y el análisis (function: "copilot"). El tramo siguiente se reserva antes de liquidar el actual. Si el freno lo deniega (sin techo mensual, sin precio, libro ilegible, cambio de proveedor entre tramos), la sesión cierra el fork de audio y emite copilot.ended con reason: "budget". La llamada nunca se corta, transfiere, silencia ni mueve: sólo cesan las sugerencias. Una sesión termina sola a los 3600 s (max_duration). Las reglas del freno están en Inteligencia post-llamada.
Lo que esta página no afirma
- Lo que el asesor legal exigirá finalmente para el consentimiento entrante.
- El copiloto ve sólo la pata humana: no se guarda transcripción de la sesión.