Dashboard
System-wide view: Pulling campaigns (HTTP agenda pulls + Redis queue), outbound CSV campaigns, and live calls.
Use Auto-refresh (top right) for how often this page reloads stats, CPU/RAM, queue and history previews, chart, and live calls. Choose Off and use Refresh now to update manually.
CPU & memory
Same Auto-refresh as the rest of this page (/api/system/metrics). Process = this Node.js process when Admin runs inside the orchestrator; host = full machine (Linux: /proc/stat + meminfo; macOS: load-average estimate for CPU).
| Orchestrator uptime | - |
| Redis | - |
| Node PID | - |
Live monitor: active calls
0 active| Phone | Name | Status | Started at | Duration |
|---|---|---|---|---|
| No active calls. | ||||
Pulling queue (preview)
Next scheduled Redis items (same data as Call queue).
| Phone | Name | Time | Passes | Reason | Order |
|---|---|---|---|---|---|
| — | |||||
Recent call history (all sources)
Latest sessions; outbound rows show in the Source column. Full CSV campaigns use each campaign’s history.
| Phone | Name | Result | Started | Source |
|---|---|---|---|---|
| — | ||||
Orchestrator logs
Archivo: tiempo casi real desde logs/orchestrator.log (rotación diaria UTC; archivos orchestrator-YYYY-MM-DD.log se conservan ~6 meses). Sesión: tail de logs/sessions/<channelId>.log escrito por el orquestador (mismo UUID que «Iniciando (canal: …)»). Nivel global: config/orchestrator.json → logging.level.
Si haces scroll hacia arriba para leer líneas antiguas, las nuevas entradas se añaden abajo sin mover tu posición. Pulsa Ir al final para volver a anclar el scroll al final. El filtro oculta líneas que no coincidan (insensible a mayúsculas); solo afecta a lo que entra por SSE después de escribir el filtro.
Pulling campaigns
Scheduled HTTP pulls from the agenda connector, Redis scheduling, and pause/resume for this pipeline only. Outbound CSV campaigns are separate.
Pause / Resume pulling scheduler (arriba a la derecha) afecta a todas las campañas de pulling a la vez (intervalo de poleo y despacho desde Redis). Para pausar solo una campaña, usa Pause / Resume en la fila de esa campaña en el submenú Pulling campaigns.
Use Auto-refresh (top right) for stats, queue and history previews, live calls, and chart—or Off with Refresh now.
Sesiones sin campaignId, incomingCampaignId ni apiCampaignId (pipeline pull / MediLink). GET /api/stats/results?scope=pull.
| Orchestrator uptime | - |
| Redis | - |
| Node PID | - |
Live monitor: active calls
0 active| Phone | Name | Status | Started at | Duration |
|---|---|---|---|---|
| No active calls. | ||||
Pulling queue (preview)
| Phone | Name | Time | Passes | Reason | Order |
|---|---|---|---|---|---|
| — | |||||
Recent pulling history
| Phone | Name | Result | Started |
|---|---|---|---|
| — | |||
Call history (pulling)
Sessions from the agenda-pulling pipeline only. Outbound campaigns keep history inside each campaign.
| Campaña | Phone | Name | Transcription | Appointment | Nº orden | Result | Duration | Date | Metadata | API | Audio | Acciones |
|---|
Call queue (pull)
Contacts scheduled in Redis for the agenda-pulling pipeline. Outbound CSV leads are not listed here.
| Campaña | Nº orden | Scheduled | Queue passes | Reason | Phone | Name | HORA AGENDA | Doctor | Location | Actions |
|---|
Phone search
Search a number across call history, outbound campaign leads, and the pull Redis queue. Use * as wildcard. Minimum 2 characters.
Results
Call sessions (database)
Process: rows with campaign ID → outbound campaign; otherwise → pulling pipeline.
| Phone | Name | Result | Started | Process | Detail |
|---|
Campaign leads (CSV outbound)
| Campaign | Phone key | Lead status | Outcome |
|---|
API campaign leads
| Campaign | Phone key | Lead status | Outcome |
|---|
Pulling queue (Redis)
| Phone | Name | Passes | Reason | Order # |
|---|
Add lead
Add a single lead to an outbound campaign using the campaign’s column mapping (telefono required in mapping). The contact is queued as pending; start or resume the campaign to dial.
Configuration
Edit system parameters.
Outbound Campaigns
CSV lead lists, dialing window, queue, and reports. Dialing runs when the campaign is running and inside the schedule. Use Add lead in the sidebar to insert one contact without uploading a file.
Campaign dashboard
Open = queue, CSV import, charts & calls. Edit / Clone / Delete work from the row. Start · Pause · Archive = status (Archive marks finished; data kept).
| Name | Status | Leads | Pending | Done | Actions |
|---|---|---|---|---|---|
| Loading… | |||||
Campaign
Call queue (pending)
Leads waiting to be dialed (after CSV import).
| Phone | Name | Passes | Reason | Queued |
|---|---|---|---|---|
| — | ||||
Effectiveness
La dona de estado refleja leads CSV; la barra, resultados de CallSession solo de esta campaña. Raw:
Calls (this campaign)
Same fields as pull history (sessions linked to this campaign).
| Phone | Name | Transcription | Appointment | Nº orden | Result | Duration | Date | Metadata | API | Audio | Acciones |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Select a campaign. | |||||||||||
Pulling campaigns
Poleo HTTP programado, cola Redis y flujo FSM por campaña. El conector JWT y los perfiles HTTP se configuran en HTTP connector. Tras guardar, el motor recarga el scheduler.
| Id | Name | Enabled | Paused | Poll interval (min) | HTTP profile | Actions |
|---|---|---|---|---|---|---|
| Loading… | ||||||
Campaign
Cola agregada: menú lateral Call queue (abrir). Cada contacto en Redis puede llevar _pullCampaignId según la campaña que lo programó.
Manual fetch
Reset processed order
Quita el marcador «ya procesado» para un ordenId en los últimos días (zona horaria de la campaña), solo en esta campaña (pullCampaignId). No hace falta elegir fecha.
Calls (this campaign)
| Phone | Name | Transcription | Appointment | Nº orden | Result | Duration | Date | Metadata | API | Audio | Acciones |
|---|---|---|---|---|---|---|---|---|---|---|---|
| — | |||||||||||
HTTP connector
URL base del conector MediLink, login JWT y mapa de rutas nombradas (integraciones FSM). Credenciales en .env (CONNECTOR_API_USERNAME). Los perfiles HTTP sirven para poleo por campaña y para base URL / timeout por campaña saliente o entrante.
Global Conector JWT y endpoints
Mismo estilo que en AVA: bloque principal del conector, con parámetros editables y tabla de “herramientas” (perfiles) debajo.
HTTP API profiles
Cada campaña de pulling elige un perfil para el poleo; las campañas outbound/inbound pueden enlazar un perfil para jwtRequest. Use {{fecha}} y {{hora}} en query o body.
| Name | Method | Path | JWT | Enabled | Actions |
|---|---|---|---|---|---|
| Loading… | |||||
STT phrase lists
Grupos de frases para sesgar el reconocimiento (solo Azure STT: FastAPI y Realtime). Cada grupo es un <id>.json bajo el directorio configurado en speech.json → stt.azure.phraseListsDirectory. En el FSM builder, ciclo → escucha: marca qué grupos aplican a esa escucha; en stt.azure.phraseListIds puedes fijar grupos globales.
Id: solo letras, números, guión bajo y guión (1–64 caracteres). Documentación: docs/PHRASE-LISTS-STT.md.
| Id | Nombre | Frases | |
|---|---|---|---|
| Cargando… | |||
Editar o crear grupo
Outbound call queue (all campaigns)
Pending leads waiting to dial across all outbound CSV campaigns. Filter by campaign, phone, or name.
| Campaign | Phone | Name | Passes | Reason | Queued |
|---|---|---|---|---|---|
| — | |||||
Outbound call history (all campaigns)
Sessions linked to any outbound campaign. Use filters to narrow by campaign or phone.
| Campaign | Phone | Name | Transcription | Appointment | Nº orden | Result | Duration | Date | Metadata | API | Audio | Acciones |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| — | ||||||||||||
Incoming campaigns
Inbound DID → Asterisk Stasis → FSM flow. Shares orchestrator concurrency with pull and outbound. Configure campaigns and dialplan (see docs/INCOMING-CAMPAIGNS.md).
Resultados de llamadas (solo incoming)
Agregado por resultado en call_sessions con incomingCampaignId definido. API: GET /api/stats/results?scope=incoming.
Incoming — campaigns & settings
Create a row per DID line. Set FSM flow and enable/disable. Copy the UUID into extensions.conf as Stasis(app,incoming,<uuid>).
Summary
| Name | Status | FSM flow | Calls (7d) | Actions |
|---|---|---|---|---|
| Loading… | ||||
Campaign
—
Dialplan snippet: —
Incoming — call history
Sessions from inbound Stasis campaigns. Filter by campaign or phone.
| Campaign | Phone | Name | Nº orden | Result | Duration | Started | Detail | Acciones |
|---|---|---|---|---|---|---|---|---|
| — | ||||||||
API campaigns — overview
Sessions created from HTTP-ingested leads. Configure the public Admin base URL under HTTP connector to show full ingest URLs in campaign details.
Resultados de llamadas (solo API campaigns)
Agregado por resultado en sesiones con apiCampaignId definido. API: GET /api/stats/results?scope=api.
API campaigns
Each campaign exposes POST …/api/public/api-campaigns/<id>/contacts with a campaign token (shown once on create / rotate). Up to 1000 contacts per request. Set Public Admin URL in HTTP connector for documented full URLs.
Save this token now (shown only once):
| Name | Status | Leads | Pending | Token | Actions |
|---|---|---|---|---|---|
| Loading… | |||||
Campaign
Use header Authorization: Bearer <token> or X-Api-Token. Body: { "contacts": [ { … }, … ] } (max 1000). Optional skipExisting: true.
Call queue (pending)
| Phone | Name | Passes | Reason | Queued |
|---|---|---|---|---|
| — | ||||
Activity
La dona refleja leads API; la barra, CallSession.resultado agregado solo para sesiones de esta campaña (bySessionResultado). Raw:
Calls
| Phone | Name | Transcription | Appointment | Nº orden | Result | Duration | Date | Metadata | API | Audio | Acciones |
|---|
API campaigns — call queue (all)
Pending leads across API campaigns.
| Campaign | Phone | Name | Passes | Reason | Queued |
|---|
API campaigns — call history
Same columns and filters as outbound history.
| Campaign | Phone | Name | Transcript | Appt | Orden | Result | Dur | Started | Rec | Acciones |
|---|
FSM builder
Cada ciclo es una caja: reproducción o TTS → STT → APIs + IA → respuesta al interlocutor (texto y/o audio). Orden arrastrable y ciclo de entrada. Guarda en config/conversation-fsm.json.
Interruptor: «Usar FSM» = enabled. Tras guardar, reinicia el orquestador.
Cada ciclo agrupa pasos previos, mensaje al interlocutor (TTS y/o archivo de audio), escucha, pasos post-STT, Gemini, post-IA, intentRoutes y intentResponses (reproducción / TTS por whenIntent). El ciclo de entrada y la tira de orden definen qué se ejecuta y en qué secuencia; las flechas siguen la tira.
Botón APIs de integración → integration-apis.json. Ajustes globales (audio, repregunta, error, soundsDir, desenlaces por intención) en el panel sin ciclo seleccionado. Guía: docs/FSM-FLOWS-GUIDE.md.
Environment Variables
Secrets and tokens (.env).
Account Settings
Update credentials.
Branding
Only administrators can change branding.
Logo y favicon
Logo (barra lateral y login): PNG, JPEG, WebP o SVG. Recomendado ancho máx. 400px, altura proporcional (típ. 48–120px de alto), < 2 MB. Favicon: ICO o PNG cuadrado (16×16 a 64×64 o multi-resolución en ICO), < 2 MB.
Las rutas se guardan en config/brand.json; los ficheros van a admin-ui/public/assets/brand/. Tras subir, la vista se actualiza al instante.
Security
Users
Additional GUI logins (stored in admin-ui/users.json).