create-bk-agent 0.22.0 → 0.22.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/src/index.js CHANGED
@@ -94,7 +94,9 @@ function buildNextSteps(choices) {
94
94
  ? 'node test-flow.mjs calificacion-lead # or propuesta-comercial'
95
95
  : tmpl === 'marketing'
96
96
  ? 'node test-flow.mjs articulo-blog # or campana-leads'
97
- : '# Define your flows in flows/ and run: node test-flow.mjs';
97
+ : tmpl === 'soporte'
98
+ ? 'node test-flow.mjs atencion-ticket # or incidente-critico'
99
+ : '# Define your flows in flows/ and run: node test-flow.mjs';
98
100
  return [
99
101
  'Add your API key to .env',
100
102
  'Edit orchestrator.yaml to customize agents for your domain',
@@ -100,6 +100,11 @@ const WORKFLOW_TEMPLATE_CHOICES = [
100
100
  value: 'marketing',
101
101
  description: '6 agents: content strategist, copywriter, SEO, social, campaign, analytics',
102
102
  },
103
+ {
104
+ title: p('Soporte al cliente', 22) + 'Ticket triage, L1/L2/L3 escalation and critical incident management',
105
+ value: 'soporte',
106
+ description: '6 agents: triage, support L1, technical L2, escalation L3, communication, knowledge',
107
+ },
103
108
  {
104
109
  title: p('Blank', 22) + 'Empty orchestrator.yaml — define your own agents and flows',
105
110
  value: 'blank',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-bk-agent",
3
- "version": "0.22.0",
3
+ "version": "0.22.1",
4
4
  "description": "Create a new BackendKit agent project",
5
5
  "main": "dist/src/index.js",
6
6
  "bin": {
@@ -0,0 +1,159 @@
1
+ version: 1
2
+ id: atencion-ticket
3
+ name: "Atención de Ticket — {{payload.ticket_id}}"
4
+ description: >
5
+ Pipeline completo de atención a un ticket de soporte: triage y priorización,
6
+ resolución L1 con la base de conocimiento, comunicación al cliente con gate de
7
+ aprobación, y registro de aprendizajes en la KB.
8
+
9
+ steps:
10
+ - id: s1-triage
11
+ agent: triage-agent
12
+ depends_on: []
13
+ task: |
14
+ Clasificar y priorizar el siguiente ticket de soporte entrante.
15
+
16
+ DATOS DEL TICKET:
17
+ - ID: {{payload.ticket_id}}
18
+ - Cliente: {{payload.cliente}}
19
+ - Plan/Tier: {{payload.plan}}
20
+ - Canal de entrada: {{payload.canal}}
21
+ - Asunto: {{payload.asunto}}
22
+ - Descripción del problema: {{payload.descripcion}}
23
+ - Información del entorno (si la proporcionó): {{payload.entorno}}
24
+
25
+ Producir el triage completo:
26
+
27
+ 1. PRIORIDAD
28
+ - P1 Crítico: sistema caído, impacto en producción, sin workaround
29
+ - P2 Alto: funcionalidad core degradada, impacto en operaciones
30
+ - P3 Medio: bug con workaround disponible o feature parcialmente afectada
31
+ - P4 Bajo: consulta, mejora sugerida o cosmético
32
+
33
+ 2. TIPO DE ISSUE
34
+ - Bug / Error técnico
35
+ - Consulta / "How to"
36
+ - Solicitud de feature / mejora
37
+ - Problema de rendimiento / performance
38
+ - Acceso / permisos / facturación
39
+ - Integración con terceros
40
+
41
+ 3. ÁREA DE PRODUCTO AFECTADA
42
+ Identificar qué módulo, API o componente está involucrado basándose en la descripción.
43
+
44
+ 4. NIVEL DE SOPORTE REQUERIDO
45
+ - L1: resoluble con documentación existente o procedimiento estándar
46
+ - L2: requiere investigación técnica, acceso a logs o análisis de código
47
+ - L3: requiere escalación a ingeniería, posible bug en producción
48
+
49
+ 5. SLA APLICABLE
50
+ Tiempo de respuesta y resolución según prioridad y plan del cliente.
51
+
52
+ 6. INFORMACIÓN FALTANTE
53
+ Lista de datos adicionales que necesitamos del cliente para resolver más rápido
54
+ (si aplica).
55
+
56
+ 7. CONTEXTO PARA EL AGENTE DE SOPORTE
57
+ Resumen ejecutivo de 3-4 líneas con lo que sabe el siguiente agente para arrancar.
58
+
59
+ - id: s2-resolucion
60
+ agent: support-agent
61
+ depends_on: [s1-triage]
62
+ task: |
63
+ Resolver el ticket de soporte usando la base de conocimiento.
64
+
65
+ TRIAGE DEL TICKET:
66
+ {{steps.s1-triage.output}}
67
+
68
+ TICKET ORIGINAL:
69
+ - Cliente: {{payload.cliente}} (Plan: {{payload.plan}})
70
+ - Asunto: {{payload.asunto}}
71
+ - Descripción: {{payload.descripcion}}
72
+ - Entorno: {{payload.entorno}}
73
+
74
+ Produce la respuesta de soporte L1:
75
+
76
+ 1. DIAGNÓSTICO
77
+ Qué está causando el problema según la descripción y la base de conocimiento.
78
+
79
+ 2. SOLUCIÓN PASO A PASO
80
+ Instrucciones claras y numeradas para que el cliente resuelva el problema.
81
+ Si hay un workaround mientras se investiga la causa raíz, indicarlo primero.
82
+
83
+ 3. VERIFICACIÓN
84
+ Cómo sabe el cliente que el problema se resolvió (qué debe ver/comprobar).
85
+
86
+ 4. ESTADO DE RESOLUCIÓN
87
+ - RESUELTO: el problema tiene solución documentada y completa
88
+ - NECESITA_INFO: falta información del cliente para continuar
89
+ - ESCALAR_L2: el issue supera el alcance de L1, necesita investigación técnica
90
+ - WORKAROUND: hay solución temporal pero el root cause requiere L2
91
+
92
+ 5. ARTÍCULOS DE KB UTILIZADOS
93
+ Lista de artículos o secciones de la documentación consultados (para tracking).
94
+
95
+ - id: s3-comunicacion
96
+ agent: communication-agent
97
+ depends_on: [s1-triage, s2-resolucion]
98
+ gate: true
99
+ gate_criteria:
100
+ - "La respuesta es clara y accionable — el cliente sabe exactamente qué hacer"
101
+ - "El tono es empático sin ser condescendiente"
102
+ - "Si el issue no se resuelve completamente, se explica el próximo paso y el tiempo estimado"
103
+ - "No se incluye jerga interna ni información confidencial"
104
+ task: |
105
+ Redactar la respuesta al cliente para el ticket {{payload.ticket_id}}.
106
+
107
+ TRIAGE:
108
+ {{steps.s1-triage.output}}
109
+
110
+ RESOLUCIÓN L1:
111
+ {{steps.s2-resolucion.output}}
112
+
113
+ DATOS DEL CLIENTE:
114
+ - Nombre: {{payload.cliente}}
115
+ - Canal: {{payload.canal}}
116
+ - Plan: {{payload.plan}}
117
+
118
+ Redactar la comunicación completa:
119
+
120
+ ## Asunto del email / título de la respuesta
121
+ Claro, específico, que transmita que estamos trabajando en ello.
122
+
123
+ ## Cuerpo de la respuesta
124
+ - Apertura: reconocer el problema con empatía (1-2 líneas, sin excesos)
125
+ - Diagnóstico explicado en términos del cliente (no jerga técnica interna)
126
+ - Solución o próximos pasos numerados y claros
127
+ - Tiempo estimado si el problema no está completamente resuelto
128
+ - Cierre: cómo contactarnos si la solución no funciona o hay preguntas
129
+
130
+ ## Notas internas (no van al cliente)
131
+ - Información de contexto para el agente que haga seguimiento
132
+ - Acciones pendientes del equipo de soporte
133
+
134
+ - id: s4-kb
135
+ agent: knowledge-agent
136
+ depends_on: [s2-resolucion, s3-comunicacion]
137
+ task: |
138
+ Analizar el ticket resuelto y proponer mejoras a la base de conocimiento.
139
+
140
+ TICKET: {{payload.asunto}}
141
+ TRIAGE: {{steps.s1-triage.output}}
142
+ RESOLUCIÓN: {{steps.s2-resolucion.output}}
143
+
144
+ Evaluar:
145
+
146
+ 1. ¿EXISTE ARTÍCULO EN LA KB?
147
+ - SÍ, está actualizado → no se requiere acción
148
+ - SÍ, pero está desactualizado o incompleto → proponer actualización
149
+ - NO → proponer nuevo artículo
150
+
151
+ 2. PROPUESTA DE CONTENIDO (si aplica)
152
+ Si se necesita crear o actualizar un artículo, redactar el borrador completo
153
+ siguiendo la estructura: título + descripción del problema + causa + solución
154
+ paso a paso + verificación + casos relacionados.
155
+
156
+ 3. MEJORAS AL PROCESO
157
+ Si este ticket reveló un gap en el proceso de atención (pregunta frecuente no
158
+ documentada, procedimiento ambiguo, criterio de escalación poco claro), proponer
159
+ la mejora específica.
@@ -0,0 +1,218 @@
1
+ version: 1
2
+ id: incidente-critico
3
+ name: "Incidente Crítico — {{payload.incidente_id}}"
4
+ description: >
5
+ Gestión de incidentes P1/P2: confirmación y escalación con gate, diagnóstico
6
+ técnico profundo, plan de resolución con gate de aprobación, comunicado externo
7
+ al cliente y postmortem para prevenir recurrencias.
8
+
9
+ steps:
10
+ - id: s1-confirmacion
11
+ agent: triage-agent
12
+ depends_on: []
13
+ gate: true
14
+ gate_criteria:
15
+ - "La prioridad P1/P2 está correctamente justificada con el impacto real"
16
+ - "El alcance del incidente está definido (cuántos clientes, qué funcionalidades)"
17
+ - "Se identificó el canal de comunicación de crisis y los responsables en guardia"
18
+ - "Hay un War Room o canal de coordinación definido"
19
+ task: |
20
+ Confirmar y documentar el incidente crítico para activar el protocolo de respuesta.
21
+
22
+ DATOS DEL INCIDENTE:
23
+ - ID: {{payload.incidente_id}}
24
+ - Reportado por: {{payload.reportado_por}}
25
+ - Fecha/hora de detección: {{payload.hora_deteccion}}
26
+ - Descripción inicial: {{payload.descripcion}}
27
+ - Sistemas afectados: {{payload.sistemas_afectados}}
28
+ - Clientes impactados (estimado): {{payload.clientes_impactados}}
29
+ - Síntomas observados: {{payload.sintomas}}
30
+
31
+ Producir el documento de apertura del incidente:
32
+
33
+ 1. CLASIFICACIÓN
34
+ - Prioridad confirmada: P1 / P2 con justificación
35
+ - Tipo de incidente: outage total / degradación / pérdida de datos / seguridad / rendimiento
36
+ - Sistemas afectados con nivel de impacto por sistema
37
+
38
+ 2. ALCANCE DEL IMPACTO
39
+ - Clientes afectados (cantidad y segmento)
40
+ - Funcionalidades no disponibles o degradadas
41
+ - Impacto en negocio estimado (revenue, operaciones, reputación)
42
+
43
+ 3. HIPÓTESIS INICIALES
44
+ 3 hipótesis de causa raíz ordenadas por probabilidad.
45
+
46
+ 4. PLAN DE RESPUESTA INMEDIATA
47
+ - Acciones en las próximas 15 minutos
48
+ - Responsable de cada acción (rol)
49
+ - Canal de coordinación del equipo (War Room)
50
+
51
+ 5. COMUNICACIÓN INICIAL
52
+ - A quién notificar dentro de la empresa (escalación interna)
53
+ - Si se debe notificar proactivamente a clientes ahora o esperar diagnóstico
54
+
55
+ - id: s2-diagnostico
56
+ agent: technical-agent
57
+ depends_on: [s1-confirmacion]
58
+ task: |
59
+ Realizar el diagnóstico técnico profundo del incidente.
60
+
61
+ DOCUMENTO DE APERTURA DEL INCIDENTE:
62
+ {{steps.s1-confirmacion.output}}
63
+
64
+ INFORMACIÓN TÉCNICA DISPONIBLE:
65
+ - Sistemas afectados: {{payload.sistemas_afectados}}
66
+ - Síntomas: {{payload.sintomas}}
67
+ - Logs o errores disponibles: {{payload.logs}}
68
+ - Cambios recientes en producción: {{payload.cambios_recientes}}
69
+
70
+ Producir el diagnóstico técnico:
71
+
72
+ 1. ANÁLISIS DE CAUSA RAÍZ
73
+ Evaluación de cada hipótesis con la evidencia disponible.
74
+ Conclusión: causa raíz confirmada o hipótesis más probable con nivel de confianza.
75
+
76
+ 2. ÁRBOL DE IMPACTO
77
+ Qué sistemas dependen del sistema afectado y cómo se propaga el fallo.
78
+
79
+ 3. OPCIONES DE RESOLUCIÓN
80
+ Para cada opción: descripción, tiempo estimado, riesgo, impacto secundario.
81
+ - Opción A (más rápida): workaround o rollback
82
+ - Opción B (más definitiva): fix en producción
83
+ - Opción C (si aplica): fallback o degraded mode
84
+
85
+ 4. RECOMENDACIÓN
86
+ Qué opción ejecutar primero y por qué, con los pasos concretos.
87
+
88
+ 5. RIESGOS DE LA INTERVENCIÓN
89
+ Qué puede salir mal al aplicar la solución y cómo mitigarlo.
90
+
91
+ - id: s3-plan-resolucion
92
+ agent: escalation-agent
93
+ depends_on: [s2-diagnostico]
94
+ gate: true
95
+ gate_criteria:
96
+ - "La opción de resolución elegida está aprobada por el responsable técnico"
97
+ - "Hay un rollback plan definido si la solución empeora el incidente"
98
+ - "El tiempo estimado de resolución está actualizado y es realista"
99
+ - "Se definió quién ejecuta cada paso (no puede quedar sin responsable asignado)"
100
+ task: |
101
+ Diseñar y coordinar el plan de resolución del incidente.
102
+
103
+ DIAGNÓSTICO TÉCNICO:
104
+ {{steps.s2-diagnostico.output}}
105
+
106
+ CONTEXTO DEL INCIDENTE:
107
+ ID: {{payload.incidente_id}} | Sistemas: {{payload.sistemas_afectados}}
108
+ Clientes impactados: {{payload.clientes_impactados}}
109
+
110
+ Producir el plan de resolución:
111
+
112
+ 1. DECISIÓN DE RESOLUCIÓN
113
+ Opción elegida con justificación y aprobación requerida.
114
+
115
+ 2. RUNBOOK DE EJECUCIÓN
116
+ Pasos numerados con:
117
+ - Acción específica
118
+ - Responsable (rol)
119
+ - Tiempo estimado
120
+ - Criterio de verificación (cómo saber que el paso funcionó)
121
+
122
+ 3. ROLLBACK PLAN
123
+ Si el fix empeora el incidente, qué hacer en los primeros 5 minutos.
124
+
125
+ 4. CRITERIO DE RESOLUCIÓN
126
+ Cómo sabemos que el incidente está cerrado (métricas, checks, confirmación).
127
+
128
+ 5. COMUNICACIÓN DURANTE LA RESOLUCIÓN
129
+ - Cada cuánto actualizar a clientes (ej: cada 30 minutos)
130
+ - Qué decirle al equipo interno
131
+ - Cuándo declarar "resuelto" públicamente
132
+
133
+ 6. EQUIPO DE GUARDIA
134
+ Roles y responsabilidades durante la ejecución del plan.
135
+
136
+ - id: s4-comunicado-externo
137
+ agent: communication-agent
138
+ depends_on: [s1-confirmacion, s3-plan-resolucion]
139
+ task: |
140
+ Redactar las comunicaciones externas para el incidente {{payload.incidente_id}}.
141
+
142
+ CONTEXTO DEL INCIDENTE:
143
+ {{steps.s1-confirmacion.output}}
144
+
145
+ PLAN DE RESOLUCIÓN:
146
+ {{steps.s3-plan-resolucion.output}}
147
+
148
+ Redactar los 3 comunicados necesarios:
149
+
150
+ ## 1. COMUNICADO DE APERTURA (enviar ahora)
151
+ - Qué está pasando (sin jerga técnica, en términos de impacto al cliente)
152
+ - Qué estamos haciendo para resolverlo
153
+ - Tiempo estimado de resolución (dar rango, no promesas exactas)
154
+ - Dónde ver actualizaciones (status page, canal de comunicación)
155
+ - Contacto para urgencias
156
+
157
+ ## 2. ACTUALIZACIONES DE PROGRESO (template reutilizable)
158
+ Template con placeholders para actualizar cada 30 minutos durante el incidente:
159
+ - [HORA] Estado actual
160
+ - [AVANCE] Qué se hizo
161
+ - [PRÓXIMOS PASOS] Qué sigue
162
+ - [ETA] Estimación actualizada
163
+
164
+ ## 3. COMUNICADO DE CIERRE
165
+ - Confirmación de que el incidente fue resuelto
166
+ - Descripción breve de qué pasó y cómo se resolvió (sin exponer vulnerabilidades)
167
+ - Medidas tomadas para que no vuelva a ocurrir
168
+ - Disculpas y reconocimiento del impacto
169
+ - Crédito/compensación si aplica según política
170
+
171
+ - id: s5-postmortem
172
+ agent: technical-agent
173
+ depends_on: [s2-diagnostico, s3-plan-resolucion, s4-comunicado-externo]
174
+ task: |
175
+ Redactar el documento de postmortem del incidente {{payload.incidente_id}}.
176
+
177
+ DIAGNÓSTICO TÉCNICO:
178
+ {{steps.s2-diagnostico.output}}
179
+
180
+ PLAN Y RESOLUCIÓN:
181
+ {{steps.s3-plan-resolucion.output}}
182
+
183
+ DATOS DEL INCIDENTE:
184
+ - Hora de detección: {{payload.hora_deteccion}}
185
+ - Sistemas afectados: {{payload.sistemas_afectados}}
186
+ - Clientes impactados: {{payload.clientes_impactados}}
187
+
188
+ Estructura del postmortem (blameless — sin culpables, solo sistemas y procesos):
189
+
190
+ ## Resumen Ejecutivo
191
+ 3-4 líneas: qué pasó, cuánto duró, impacto total.
192
+
193
+ ## Timeline
194
+ Cronología minuto a minuto desde la detección hasta la resolución.
195
+
196
+ ## Causa Raíz
197
+ Causa técnica confirmada. Usar "5 Whys" para llegar al root cause real.
198
+
199
+ ## Factores Contribuyentes
200
+ Condiciones que hicieron posible o empeoraron el incidente.
201
+
202
+ ## Qué Funcionó Bien
203
+ Partes del proceso de respuesta que fueron efectivas.
204
+
205
+ ## Qué No Funcionó
206
+ Gaps en detección, respuesta, comunicación o herramientas.
207
+
208
+ ## Acciones Correctivas
209
+ Lista priorizada de mejoras con responsable y fecha límite:
210
+ - Acciones de remediación inmediata (ya implementadas)
211
+ - Acciones de prevención a corto plazo (< 2 semanas)
212
+ - Acciones estructurales a mediano plazo (< 3 meses)
213
+
214
+ ## Métricas del Incidente
215
+ - MTTD (Mean Time to Detect)
216
+ - MTTA (Mean Time to Acknowledge)
217
+ - MTTR (Mean Time to Resolve)
218
+ - Clientes impactados y duración del impacto
@@ -0,0 +1,98 @@
1
+ version: 1
2
+
3
+ orchestrator:
4
+ name: "Orquestador de Soporte al Cliente"
5
+ provider: __PROVIDER_ID__
6
+ vault:
7
+ path: ./vault
8
+ embedder: simple # change to "ollama" in production for better semantic search
9
+
10
+ __PROVIDERS_BLOCK__
11
+
12
+ flows:
13
+ - id: atencion-ticket
14
+ file: ./flows/atencion-ticket.yaml
15
+ trigger: "ticket|soporte|consulta|problema|error|bug|incidencia|reclamo|ayuda|no funciona|falla"
16
+
17
+ - id: incidente-critico
18
+ file: ./flows/incidente-critico.yaml
19
+ trigger: "incidente|crítico|caído|urgente|p1|p2|emergencia|producción|caída del sistema|outage"
20
+
21
+ agents:
22
+ - id: triage-agent
23
+ name: "Agente de Triage"
24
+ description: >
25
+ Clasifica y prioriza tickets de soporte entrantes. Determina la urgencia (P1-P4),
26
+ el tipo de issue (bug, consulta, facturación, feature request), el área de producto
27
+ afectada y el nivel de soporte requerido (L1/L2/L3). Genera el contexto inicial
28
+ para el agente que tomará el ticket.
29
+ capabilities: [triage, clasificacion, prioridad, sla, routing, diagnostico-inicial]
30
+ provider: __PROVIDER_ID__
31
+ domain: soporte
32
+
33
+ - id: support-agent
34
+ name: "Agente de Soporte L1"
35
+ description: >
36
+ Maneja tickets de soporte de nivel 1: consultas frecuentes, configuraciones estándar,
37
+ procedimientos documentados y troubleshooting básico. Usa la base de conocimiento para
38
+ dar respuestas precisas y consistentes. Si no puede resolver, prepara el contexto
39
+ para escalación a L2 con toda la información necesaria.
40
+ capabilities: [l1, soporte, faq, troubleshooting, kb, resolucion, guia-paso-a-paso]
41
+ provider: __PROVIDER_ID__
42
+ domain: soporte
43
+
44
+ - id: technical-agent
45
+ name: "Agente Técnico L2"
46
+ description: >
47
+ Investigación técnica profunda de issues complejos. Diagnóstico de root cause,
48
+ análisis de logs, identificación de bugs, propuesta de workarounds y soluciones
49
+ definitivas. Documenta hallazgos técnicos para el equipo de ingeniería y para
50
+ enriquecer la base de conocimiento.
51
+ capabilities: [l2, tecnico, diagnostico, root-cause, logs, bugs, workaround, ingenieria]
52
+ provider: __PROVIDER_ID__
53
+ domain: soporte
54
+ gate: true
55
+ gate_criteria:
56
+ - "El diagnóstico incluye el root cause o una hipótesis sólida con evidencia"
57
+ - "Se propone al menos un workaround inmediato para desbloquear al cliente"
58
+ - "La solución propuesta no implica cambios de datos o configuración sin respaldo"
59
+ - "Se documentaron los pasos de reproducción del issue"
60
+
61
+ - id: escalation-agent
62
+ name: "Agente de Escalación L3"
63
+ description: >
64
+ Gestiona incidentes críticos y escalaciones a ingeniería. Coordina la respuesta
65
+ ante outages, define el plan de acción con responsables y tiempos, y asegura que
66
+ se mantenga informado al cliente durante todo el incidente. Lidera el proceso de
67
+ postmortem y seguimiento de acciones correctivas.
68
+ capabilities: [l3, escalacion, incidente, outage, coordinacion, postmortem, p1, p2]
69
+ provider: __PROVIDER_ID__
70
+ domain: soporte
71
+ gate: true
72
+ gate_criteria:
73
+ - "La escalación a ingeniería está justificada y el impacto está cuantificado"
74
+ - "Hay un responsable asignado (nombre o rol) para cada acción del plan"
75
+ - "El cliente fue notificado del incidente y del tiempo estimado de resolución"
76
+ - "Se definió el criterio de resolución: cómo sabemos que el incidente está cerrado"
77
+
78
+ - id: communication-agent
79
+ name: "Agente de Comunicación"
80
+ description: >
81
+ Redacta todas las comunicaciones hacia el cliente: respuestas a tickets, actualizaciones
82
+ de estado durante incidentes, emails de cierre, solicitudes de información adicional y
83
+ encuestas de satisfacción. Adapta el tono y nivel técnico al perfil del cliente.
84
+ Asegura que cada comunicación sea clara, empática y accionable.
85
+ capabilities: [comunicacion, redaccion, email, respuesta-cliente, estado, cierre, empatia]
86
+ provider: __PROVIDER_ID__
87
+ domain: soporte
88
+
89
+ - id: knowledge-agent
90
+ name: "Agente de Base de Conocimiento"
91
+ description: >
92
+ Mantiene y mejora la base de conocimiento de soporte. Identifica gaps de documentación
93
+ a partir de tickets resueltos, propone nuevos artículos o actualizaciones de los
94
+ existentes, y sugiere mejoras en los procedimientos de atención para reducir el tiempo
95
+ de resolución en futuros tickets similares.
96
+ capabilities: [knowledge-base, documentacion, kb, articulos, mejora-continua, procedimientos]
97
+ provider: __PROVIDER_ID__
98
+ domain: soporte
@@ -0,0 +1,210 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Test runner for the soporte orchestrator
4
+ *
5
+ * Usage:
6
+ * node test-flow.mjs atencion-ticket # standard ticket (triage → L1 → gate → KB)
7
+ * node test-flow.mjs incidente-critico # P1 incident (gate → diagnosis → gate → comms → postmortem)
8
+ * node test-flow.mjs dynamic # dynamic planning (no flow match)
9
+ */
10
+
11
+ import { spawn } from 'node:child_process';
12
+ import { createInterface } from 'node:readline';
13
+ import * as path from 'node:path';
14
+ import * as fs from 'node:fs';
15
+ import * as url from 'node:url';
16
+
17
+ const __dirname = path.dirname(url.fileURLToPath(import.meta.url));
18
+ const CONFIG_PATH = path.resolve(__dirname, 'orchestrator.yaml');
19
+ const SERVER_PATH = path.resolve(
20
+ __dirname,
21
+ 'node_modules/@backendkit-labs/orchestrator-agent/dist/server.js',
22
+ );
23
+
24
+ // ── Sample payloads ───────────────────────────────────────────────────────────
25
+
26
+ const FLOWS = {
27
+ 'atencion-ticket': {
28
+ flow_id: 'atencion-ticket',
29
+ task: 'Atender ticket de soporte: error al exportar reportes en formato Excel',
30
+ payload: {
31
+ ticket_id: 'TKT-2024-1547',
32
+ cliente: 'Acme Corp',
33
+ plan: 'Professional',
34
+ canal: 'Portal de soporte',
35
+ asunto: 'Error al exportar reportes en formato Excel — aparece "Download failed"',
36
+ descripcion: 'Desde ayer a la tarde, cuando intento descargar cualquier reporte en formato Excel (no en CSV), me aparece el mensaje "Download failed" y no se genera ningún archivo. El botón de descarga en PDF sí funciona bien. Lo probé en Chrome y Firefox con el mismo resultado. Necesito los reportes para una reunión de directorio mañana a las 10hs.',
37
+ entorno: 'Chrome 124, Windows 11, cuenta admin. La sesión expira correctamente y puedo hacer todo lo demás en la plataforma sin problemas.',
38
+ },
39
+ },
40
+ 'incidente-critico': {
41
+ flow_id: 'incidente-critico',
42
+ task: 'Gestionar incidente crítico: plataforma inaccesible para clientes Enterprise',
43
+ payload: {
44
+ incidente_id: 'INC-2024-003',
45
+ reportado_por: 'Sistema de monitoreo + 3 clientes Enterprise simultáneamente',
46
+ hora_deteccion: '2024-06-14 09:23 ART',
47
+ descripcion: 'La plataforma devuelve error 503 para todos los usuarios. El health check de la API principal está fallando. Múltiples clientes Enterprise están llamando al número de emergencias.',
48
+ sistemas_afectados: 'API principal (/api/v3/*), Dashboard web, Mobile app. La base de datos parece responder (status page de RDS en verde).',
49
+ clientes_impactados: 'Estimado 100% de usuarios activos en este momento (~340 sesiones activas según los últimos logs disponibles)',
50
+ sintomas: 'HTTP 503 en todas las rutas de la API. Los worker processes de Node.js no están respondiendo. Los logs muestran "FATAL: Cannot allocate memory" repetidamente desde las 09:18.',
51
+ logs: 'FATAL: Cannot allocate memory in static TLS block\nnode: Cannot allocate memory\nAborted (core dumped)\nRestarting worker... (intent 47 en los últimos 5 minutos)',
52
+ cambios_recientes: 'Deploy de v3.4.1 a las 08:45 (35 minutos antes del incidente). El deploy incluyó actualización de una dependencia de procesamiento de imágenes.',
53
+ },
54
+ },
55
+ 'dynamic': {
56
+ flow_id: undefined,
57
+ task: process.env.TASK ?? 'Analizar los tickets de la última semana e identificar los 3 problemas más frecuentes que deberían documentarse como artículos de KB',
58
+ payload: {},
59
+ },
60
+ };
61
+
62
+ // ── MCP Client (stdio) ────────────────────────────────────────────────────────
63
+
64
+ class McpClient {
65
+ constructor(serverPath) {
66
+ this._nextId = 1;
67
+ this._pending = new Map();
68
+
69
+ const env = { ...process.env };
70
+ const dotenv = path.join(__dirname, '.env');
71
+ if (fs.existsSync(dotenv)) {
72
+ for (const line of fs.readFileSync(dotenv, 'utf-8').split('\n')) {
73
+ const m = line.match(/^\s*([A-Z_][A-Z0-9_]*)\s*=\s*(.*?)\s*$/);
74
+ if (m && m[2] && !(m[1] in env)) env[m[1]] = m[2].replace(/^["']|["']$/g, '');
75
+ }
76
+ }
77
+
78
+ this._proc = spawn('node', [serverPath], { stdio: ['pipe', 'pipe', 'inherit'], env });
79
+
80
+ const rl = createInterface({ input: this._proc.stdout });
81
+ rl.on('line', (line) => {
82
+ if (!line.trim()) return;
83
+ try {
84
+ const msg = JSON.parse(line);
85
+ if (msg.id !== undefined && this._pending.has(msg.id)) {
86
+ const { resolve, reject } = this._pending.get(msg.id);
87
+ this._pending.delete(msg.id);
88
+ if (msg.error) reject(new Error(msg.error.message ?? JSON.stringify(msg.error)));
89
+ else resolve(msg.result);
90
+ }
91
+ } catch {}
92
+ });
93
+
94
+ this._proc.on('error', (err) => console.error('[MCP] error:', err.message));
95
+ }
96
+
97
+ _send(msg) { this._proc.stdin.write(JSON.stringify(msg) + '\n'); }
98
+
99
+ async initialize() {
100
+ const id = this._nextId++;
101
+ const p = new Promise((res, rej) => this._pending.set(id, { resolve: res, reject: rej }));
102
+ this._send({ jsonrpc: '2.0', id, method: 'initialize', params: {
103
+ protocolVersion: '2024-11-05', capabilities: {},
104
+ clientInfo: { name: 'test-flow', version: '0.1.0' },
105
+ }});
106
+ await p;
107
+ this._send({ jsonrpc: '2.0', method: 'notifications/initialized', params: {} });
108
+ }
109
+
110
+ async callTool(name, args) {
111
+ const id = this._nextId++;
112
+ const p = new Promise((res, rej) => {
113
+ this._pending.set(id, { resolve: res, reject: rej });
114
+ setTimeout(() => {
115
+ if (this._pending.has(id)) { this._pending.delete(id); rej(new Error(`Timeout: ${name}`)); }
116
+ }, 120_000);
117
+ });
118
+ this._send({ jsonrpc: '2.0', id, method: 'tools/call', params: { name, arguments: args } });
119
+ return p;
120
+ }
121
+
122
+ close() { this._proc.stdin.end(); }
123
+ }
124
+
125
+ // ── Helpers ───────────────────────────────────────────────────────────────────
126
+
127
+ const extractText = (r) => r?.content?.filter(c => c.type === 'text').map(c => c.text).join('\n') ?? String(r);
128
+ const sleep = (ms) => new Promise(r => setTimeout(r, ms));
129
+
130
+ function printSection(title, text) {
131
+ const line = '─'.repeat(60);
132
+ console.log(`\n${line}\n ${title}\n${line}`);
133
+ console.log(text);
134
+ }
135
+
136
+ // ── Main ──────────────────────────────────────────────────────────────────────
137
+
138
+ async function main() {
139
+ const flowKey = process.argv[2] ?? 'atencion-ticket';
140
+ const flowDef = FLOWS[flowKey];
141
+ if (!flowDef) {
142
+ console.error(`Unknown flow: ${flowKey}\nOptions: ${Object.keys(FLOWS).join(', ')}`);
143
+ process.exit(1);
144
+ }
145
+ if (!fs.existsSync(SERVER_PATH)) {
146
+ console.error(`Server not found:\n ${SERVER_PATH}\nRun: npm install`);
147
+ process.exit(1);
148
+ }
149
+
150
+ console.log(`\nStarting orchestrator (soporte)...`);
151
+ console.log(` Flow: ${flowKey}`);
152
+
153
+ const client = new McpClient(SERVER_PATH);
154
+ try {
155
+ await client.initialize();
156
+ console.log(' MCP: connected ✓\n');
157
+
158
+ const runArgs = { config_path: CONFIG_PATH, task: flowDef.task };
159
+ if (flowDef.flow_id) runArgs.flow_id = flowDef.flow_id;
160
+ if (Object.keys(flowDef.payload).length > 0) runArgs.payload = flowDef.payload;
161
+
162
+ const startText = extractText(await client.callTool('orchestrator_run', runArgs));
163
+ printSection('RUN STARTED', startText);
164
+
165
+ const runIdMatch = startText.match(/runId:\s*`?([a-z0-9-]+)`?/i);
166
+ if (!runIdMatch) { console.error('\n[ERROR] Could not extract runId.'); process.exit(1); }
167
+ const runId = runIdMatch[1];
168
+
169
+ let attempts = 0, lastStatus = '';
170
+ console.log(`\nPolling (runId: ${runId})...\n`);
171
+
172
+ while (attempts < 80) {
173
+ await sleep(5000);
174
+ attempts++;
175
+
176
+ const statusText = extractText(await client.callTool('orchestrator_status', {
177
+ config_path: CONFIG_PATH, run_id: runId,
178
+ }));
179
+ const status = statusText.match(/status:\s*\*\*([^*]+)\*\*/)?.[1]
180
+ ?? statusText.match(/^status:\s*(\S+)/m)?.[1]
181
+ ?? 'unknown';
182
+
183
+ if (status !== lastStatus) {
184
+ process.stdout.write(` [${new Date().toLocaleTimeString()}] status: ${status}\n`);
185
+ lastStatus = status;
186
+ }
187
+
188
+ if (status === 'complete') { printSection('RESULT', statusText); break; }
189
+ if (status === 'failed') { printSection('ERROR', statusText); break; }
190
+
191
+ if (status === 'waiting_gate') {
192
+ printSection('GATE — APPROVAL REQUIRED', statusText);
193
+ console.log('\nAuto-approving...\n');
194
+ await sleep(2000);
195
+ const approveText = extractText(await client.callTool('orchestrator_approve', {
196
+ config_path: CONFIG_PATH, run_id: runId,
197
+ approved: true, notes: 'Auto-approved by test-flow.mjs',
198
+ }));
199
+ printSection('GATE APPROVED', approveText);
200
+ lastStatus = '';
201
+ }
202
+ }
203
+
204
+ if (attempts >= 80) console.log('\n[TIMEOUT] Check orchestrator_status manually.');
205
+ } finally {
206
+ client.close();
207
+ }
208
+ }
209
+
210
+ main().catch(err => { console.error('\n[FATAL]', err.message); process.exit(1); });
@@ -0,0 +1,211 @@
1
+ ---
2
+ title: Plantillas de Comunicación con Clientes
3
+ tags: [plantillas, comunicacion, email, respuesta, cierre, escalacion, empatia]
4
+ description: Templates reutilizables para las situaciones más frecuentes de soporte
5
+ ---
6
+
7
+ # Plantillas de Comunicación con Clientes
8
+
9
+ Usar estas plantillas como base y personalizar siempre con el nombre del cliente
10
+ y los detalles específicos del caso. Una respuesta genérica es peor que una tardía.
11
+
12
+ ---
13
+
14
+ ## Respuesta inicial — Acuse de recibo
15
+
16
+ ```
17
+ Asunto: Re: [Asunto original] — Ticket #[ID]
18
+
19
+ Hola [Nombre],
20
+
21
+ Recibimos tu ticket y ya lo tenemos en cola.
22
+
23
+ Prioridad asignada: [P1/P2/P3/P4]
24
+ Tiempo estimado de primera respuesta: [X horas/minutos]
25
+
26
+ [Si es P1/P2]: Un miembro de nuestro equipo se está asignando ahora mismo a este caso.
27
+
28
+ [Si necesitamos info adicional]: Para poder ayudarte más rápido, ¿podrías enviarnos:
29
+ - [dato específico 1]
30
+ - [dato específico 2]
31
+
32
+ Seguimos en contacto.
33
+
34
+ [Nombre del agente]
35
+ Equipo de Soporte
36
+ ```
37
+
38
+ ---
39
+
40
+ ## Respuesta con solución — L1
41
+
42
+ ```
43
+ Asunto: Re: [Asunto original] — Ticket #[ID] [Resuelto]
44
+
45
+ Hola [Nombre],
46
+
47
+ Investigamos el problema que reportaste y encontramos la causa.
48
+
49
+ **¿Qué estaba pasando?**
50
+ [Explicación breve en términos del cliente, sin jerga técnica]
51
+
52
+ **Cómo resolverlo:**
53
+ 1. [Paso 1]
54
+ 2. [Paso 2]
55
+ 3. [Paso 3]
56
+
57
+ **Cómo verificar que funciona:**
58
+ [Describir qué debe ver el cliente si la solución funcionó]
59
+
60
+ Si seguís teniendo problemas o la solución no funciona en tu caso, respondé a este email
61
+ y lo revisamos juntos.
62
+
63
+ [Nombre del agente]
64
+ Equipo de Soporte
65
+ ```
66
+
67
+ ---
68
+
69
+ ## Escalación a L2 — Notificación al cliente
70
+
71
+ ```
72
+ Asunto: Re: [Asunto original] — Ticket #[ID] [Actualización]
73
+
74
+ Hola [Nombre],
75
+
76
+ Quisimos darte una actualización sobre tu caso.
77
+
78
+ Revisamos el problema y determinamos que requiere una investigación técnica más profunda
79
+ por parte de nuestro equipo de ingeniería de soporte.
80
+
81
+ **Próximo paso:** Un técnico especializado tomará el caso.
82
+ **Tiempo estimado de respuesta:** [según SLA del plan]
83
+
84
+ Mientras tanto, [si hay workaround: "podés usar este workaround temporal: [descripción]"].
85
+
86
+ Te mantendremos informado de cada avance.
87
+
88
+ [Nombre del agente]
89
+ Equipo de Soporte
90
+ ```
91
+
92
+ ---
93
+
94
+ ## Pedido de información adicional
95
+
96
+ ```
97
+ Asunto: Re: [Asunto original] — Ticket #[ID] [Necesitamos más info]
98
+
99
+ Hola [Nombre],
100
+
101
+ Estamos investigando el problema. Para poder reproducirlo y encontrar la solución
102
+ más rápido, necesitamos que nos ayudes con esta información:
103
+
104
+ 1. **[Dato específico 1]:** [explicar por qué lo necesitamos si no es obvio]
105
+ 2. **[Dato específico 2]:** [explicar por qué]
106
+ 3. **Pasos exactos para reproducir el problema:** [si no los tenemos]
107
+
108
+ [Opcional: "Podés enviarnos capturas de pantalla o los logs de la consola del navegador
109
+ (F12 → Console) si hay errores visibles."]
110
+
111
+ Una vez que tengamos esta info, continuamos la investigación de inmediato.
112
+
113
+ [Nombre del agente]
114
+ Equipo de Soporte
115
+ ```
116
+
117
+ ---
118
+
119
+ ## Actualización de incidente — Status update (template periódico)
120
+
121
+ ```
122
+ Asunto: [INCIDENTE #ID] Actualización de estado — [HH:MM]
123
+
124
+ Hola [Nombre / Lista de clientes afectados],
125
+
126
+ Les compartimos una actualización del incidente que está afectando [descripción breve].
127
+
128
+ **Estado actual:** [Investigando / Identificada la causa / Aplicando fix / En monitoreo]
129
+
130
+ **Qué hicimos desde la última actualización:**
131
+ - [Acción 1]
132
+ - [Acción 2]
133
+
134
+ **Próximos pasos:**
135
+ - [Paso 1] — responsable: [rol]
136
+ - [Paso 2]
137
+
138
+ **Tiempo estimado de resolución:** [ETA actualizado o "Sin ETA confirmado aún, próxima actualización en X minutos"]
139
+
140
+ Seguimos trabajando en esto. Próxima actualización: [hora].
141
+
142
+ [Nombre]
143
+ Equipo de Soporte / Operaciones
144
+ ```
145
+
146
+ ---
147
+
148
+ ## Cierre de ticket
149
+
150
+ ```
151
+ Asunto: Re: [Asunto original] — Ticket #[ID] [Cerrado]
152
+
153
+ Hola [Nombre],
154
+
155
+ Confirmamos que el problema fue resuelto y cerramos el ticket.
156
+
157
+ **Resumen de lo que pasó:**
158
+ [2-3 líneas explicando el issue y la causa]
159
+
160
+ **Cómo lo resolvimos:**
161
+ [1-2 líneas con la solución aplicada]
162
+
163
+ **Para que no vuelva a ocurrir:**
164
+ [Si aplica: qué cambió o qué puede hacer el cliente para evitarlo]
165
+
166
+ Si el problema vuelve a aparecer o tenés alguna pregunta adicional, respondé a este email
167
+ y reabrimos el caso de inmediato.
168
+
169
+ ¿Pudimos ayudarte bien? Nos ayudaría mucho conocer tu opinión: [link encuesta CSAT]
170
+
171
+ [Nombre del agente]
172
+ Equipo de Soporte
173
+ ```
174
+
175
+ ---
176
+
177
+ ## Comunicado de apertura de incidente (público / status page)
178
+
179
+ ```
180
+ **[INCIDENTE] Problemas con [nombre del servicio/módulo]**
181
+ [Fecha] — [HH:MM] (UTC-3)
182
+
183
+ Estamos investigando un problema que afecta a [descripción del impacto al usuario].
184
+ Los usuarios pueden experimentar [síntomas concretos: errores, lentitud, etc.].
185
+
186
+ Nuestro equipo está trabajando activamente en la resolución.
187
+ Próxima actualización: [hora].
188
+ ```
189
+
190
+ ---
191
+
192
+ ## Comunicado de cierre de incidente (público / status page)
193
+
194
+ ```
195
+ **[RESUELTO] Incidente en [nombre del servicio/módulo]**
196
+ [Fecha] — [HH:MM] (UTC-3)
197
+
198
+ El incidente fue resuelto a las [hora]. El servicio está funcionando con normalidad.
199
+
200
+ **Duración total:** [X horas Y minutos]
201
+ **Clientes afectados:** [descripción sin números exactos si es sensible]
202
+
203
+ **Qué pasó:** [Descripción técnica accesible, sin exponer vulnerabilidades]
204
+
205
+ **Qué hicimos:** [Acciones de resolución]
206
+
207
+ **Para que no vuelva a ocurrir:** [Medidas preventivas]
208
+
209
+ Pedimos disculpas por el inconveniente. Estamos comprometidos con [uptime objetivo].
210
+ Si tenés preguntas, contactá a soporte: [email/portal].
211
+ ```
@@ -0,0 +1,106 @@
1
+ ---
2
+ title: Protocolo de Escalación
3
+ tags: [escalacion, l1, l2, l3, incidente, protocolo, guardia]
4
+ description: Cuándo y cómo escalar tickets e incidentes, con responsables y canales
5
+ ---
6
+
7
+ # Protocolo de Escalación
8
+
9
+ ## Niveles de escalación
10
+
11
+ ### L1 → L2: Escalación Técnica
12
+
13
+ **Cuándo:** ver criterios en manejo-de-tickets.md
14
+
15
+ **Cómo:**
16
+ 1. Actualizar el ticket con todo el contexto recopilado
17
+ 2. Cambiar estado a ESCALADO_L2
18
+ 3. Asignar al equipo técnico (o al técnico de guardia si es P1/P2)
19
+ 4. Notificar al cliente: "Escalamos tu caso a nuestro equipo técnico especializado. Te contactaremos en [tiempo según SLA]"
20
+ 5. Hacer handoff verbal (Slack/Teams) para P1/P2
21
+
22
+ **Información obligatoria en el handoff:**
23
+ - Resumen del problema en 3 líneas
24
+ - Pasos ya intentados y resultados
25
+ - Información del entorno del cliente
26
+ - Historial de tickets relacionados del mismo cliente
27
+ - Nivel de urgencia y SLA restante
28
+
29
+ ---
30
+
31
+ ### L2 → L3: Escalación a Ingeniería
32
+
33
+ **Cuándo:**
34
+ - Bug confirmado en el código (no configuración)
35
+ - Requiere acceso a producción con permisos de ingeniería
36
+ - Issue de seguridad de cualquier tipo
37
+ - Pérdida de datos confirmada
38
+ - L2 lleva más de 2 horas sin avance en un P1
39
+
40
+ **Cómo:**
41
+ 1. Crear un bug report en el sistema de issues de ingeniería (Jira/Linear/GitHub Issues)
42
+ 2. Incluir: steps to reproduce, expected vs actual, logs relevantes, impacto al cliente
43
+ 3. Vincular el bug al ticket de soporte
44
+ 4. Notificar al Engineering Manager con el bug report
45
+ 5. Mantener el ticket de soporte abierto y actualizar al cliente
46
+ 6. No cerrar el ticket hasta que ingeniería confirme el fix deployado
47
+
48
+ ---
49
+
50
+ ### Escalación a Dirección
51
+
52
+ **Cuándo:**
53
+ - Cliente Enterprise amenaza con churn o acciones legales
54
+ - SLA incumplido por más de 2x el tiempo prometido
55
+ - Incident P1 que afecta a más del 10% de la base de clientes
56
+ - Issue de seguridad con posible exposición de datos de clientes
57
+ - Segunda reapertura del mismo ticket por el mismo cliente
58
+
59
+ **Quién notificar:**
60
+ - Customer Success Manager (siempre)
61
+ - Director de Customer Experience (si es Enterprise o impacto > 5 clientes)
62
+ - CEO (solo si hay impacto reputacional, legal o de seguridad significativo)
63
+
64
+ ---
65
+
66
+ ## Guardia de incidentes P1/P2
67
+
68
+ ### Roles en guardia
69
+
70
+ | Rol | Responsabilidad | Contacto |
71
+ |-----|-----------------|----------|
72
+ | Ingeniero de Guardia | Diagnóstico técnico y fix | [definir en tu empresa] |
73
+ | CS Manager de Guardia | Comunicación con cliente y coordinación | [definir en tu empresa] |
74
+ | Engineering Manager | Decisiones de arquitectura o rollback | [definir en tu empresa] |
75
+
76
+ ### Cómo activar la guardia (fuera de horario)
77
+ 1. Llamar al número de emergencias del Ingeniero de Guardia
78
+ 2. Si no responde en 5 minutos, llamar al Engineering Manager
79
+ 3. Abrir el canal de War Room en Slack: `#incident-[fecha]-[descripción-breve]`
80
+ 4. Invitar a CS Manager, Ingeniero de Guardia, y Engineering Manager
81
+
82
+ ### War Room — reglas
83
+ - Un solo responsable de comunicación con el cliente (CS Manager)
84
+ - Un solo responsable técnico de coordinar el fix (Ingeniero de Guardia)
85
+ - Actualizar el canal cada 15 minutos con estado
86
+ - No hacer cambios en producción sin anunciarlo en el canal con al menos 2 minutos de anticipación
87
+ - Documentar todo en tiempo real (se usa para el postmortem)
88
+
89
+ ---
90
+
91
+ ## Postmortem
92
+
93
+ ### Cuándo es obligatorio
94
+ - Todo incidente P1
95
+ - Incidentes P2 que duraron más de 4 horas
96
+ - Cualquier incidente donde el SLA fue incumplido significativamente
97
+ - Bugs que causaron pérdida de datos aunque sea parcial
98
+
99
+ ### Cuándo realizarlo
100
+ - Draft del postmortem: dentro de las 24 horas post-resolución
101
+ - Review con el equipo: dentro de los 3 días hábiles post-resolución
102
+ - Publicación (versión resumida para clientes): opcional, según impacto y política
103
+
104
+ ### Principio: postmortem blameless
105
+ El objetivo es entender los sistemas y procesos, nunca culpar personas.
106
+ Preguntar "¿por qué el sistema permitió que esto pasara?" en lugar de "¿quién cometió el error?".
@@ -0,0 +1,101 @@
1
+ ---
2
+ title: Proceso de Manejo de Tickets de Soporte
3
+ tags: [proceso, tickets, atencion, workflow, l1, l2, l3]
4
+ description: Guía completa del proceso de atención desde la recepción hasta el cierre del ticket
5
+ ---
6
+
7
+ # Proceso de Manejo de Tickets
8
+
9
+ ## Ciclo de vida de un ticket
10
+
11
+ ```
12
+ NUEVO → EN_TRIAGE → EN_ATENCIÓN → ESPERANDO_CLIENTE → RESUELTO → CERRADO
13
+ ↓
14
+ ESCALADO_L2 → ESCALADO_L3 → RESUELTO
15
+ ```
16
+
17
+ ### Estados y sus significados
18
+
19
+ | Estado | Significado | Quién puede cambiarlo |
20
+ |--------|-------------|----------------------|
21
+ | NUEVO | Ticket recibido, sin asignar | Sistema (automático) |
22
+ | EN_TRIAGE | Siendo clasificado por triage-agent | Sistema / L1 |
23
+ | EN_ATENCIÓN | Asignado y trabajando activamente | L1, L2, L3 |
24
+ | ESPERANDO_CLIENTE | Pedimos info, esperamos respuesta | L1, L2 |
25
+ | ESCALADO_L2 | Requiere investigación técnica | L1 |
26
+ | ESCALADO_L3 | Requiere ingeniería o es incidente crítico | L2 |
27
+ | RESUELTO | Solución entregada, pendiente confirmación del cliente | L1, L2, L3 |
28
+ | CERRADO | Confirmado resuelto o 48hs sin respuesta tras resolución | Sistema / cliente |
29
+
30
+ ---
31
+
32
+ ## Canales de entrada y prioridad default
33
+
34
+ | Canal | Prioridad default | Notas |
35
+ |-------|------------------|-------|
36
+ | Teléfono de emergencias | P1 automático | Solo Enterprise, fuera de horario |
37
+ | Chat en vivo | P2 | Si el cliente dice que es urgente |
38
+ | Email directo al CS Manager | P2 | Escalar a L2 inmediato |
39
+ | Portal de soporte | Según formulario | El cliente selecciona la prioridad |
40
+ | Email de soporte general | P3 | Default para consultas |
41
+ | Redes sociales | P3 | Mover al portal oficial |
42
+
43
+ ---
44
+
45
+ ## Cuándo escalar a L2
46
+
47
+ Escalar inmediatamente a L2 cuando:
48
+ - El issue requiere acceso a logs del servidor o base de datos
49
+ - La solución de KB no funcionó después de 2 intentos documentados
50
+ - El cliente reporta pérdida de datos (aunque sea parcial)
51
+ - El bug no está documentado y no hay workaround conocido
52
+ - El cliente tiene plan Enterprise y lleva más de 1 hora sin solución para P2
53
+
54
+ **Al escalar a L2:** incluir siempre en el ticket:
55
+ 1. Pasos ya intentados y sus resultados
56
+ 2. Información del entorno del cliente (versión, OS, navegador, etc.)
57
+ 3. Mensajes de error completos (no solo capturas de pantalla)
58
+ 4. Horario en que el cliente puede ser contactado
59
+
60
+ ---
61
+
62
+ ## Cuándo escalar a L3 / activar protocolo de incidente
63
+
64
+ Activar el protocolo de incidente crítico cuando:
65
+ - El issue afecta a más de 1 cliente simultáneamente con el mismo síntoma
66
+ - Hay pérdida de datos confirmada o sospechada
67
+ - El sistema está completamente caído (no solo degradado)
68
+ - El issue tiene potencial impacto en seguridad
69
+ - L2 lleva más de 2 horas sin encontrar el root cause en un P1
70
+
71
+ ---
72
+
73
+ ## Buenas prácticas de atención
74
+
75
+ ### Apertura del ticket
76
+ - Responder siempre dentro del SLA aunque no tengamos solución
77
+ - Si necesitamos tiempo para investigar, confirmarlo: "Recibimos tu ticket, estamos investigando y te respondemos en [tiempo]"
78
+ - No decir "revisaremos tu caso" sin un tiempo concreto
79
+
80
+ ### Durante la investigación
81
+ - Actualizar el ticket con cada hallazgo aunque no sea la solución
82
+ - Si el cliente pregunta el estado, responder en menos de 1 hora durante horario hábil
83
+ - Si el SLA está por vencerse, notificar proactivamente con un nuevo ETA
84
+
85
+ ### Cierre del ticket
86
+ - Siempre preguntar si la solución resolvió el problema antes de cerrar
87
+ - Esperar 48 horas la respuesta del cliente tras marcar como RESUELTO
88
+ - Incluir siempre un resumen de qué pasó y cómo se resolvió (útil para la KB)
89
+ - Invitar a completar la encuesta de satisfacción
90
+
91
+ ---
92
+
93
+ ## Métricas de calidad
94
+
95
+ | Métrica | Objetivo | Crítico |
96
+ |---------|----------|---------|
97
+ | First Response Time (FRT) | Dentro del SLA 95% de los tickets | < 90% |
98
+ | Resolution Time | Dentro del SLA 85% de los tickets | < 75% |
99
+ | CSAT (Customer Satisfaction) | > 4.2 / 5.0 promedio mensual | < 3.8 |
100
+ | First Contact Resolution (FCR) | > 70% de tickets L1 | < 60% |
101
+ | Reapertura de tickets | < 5% | > 10% |
@@ -0,0 +1,94 @@
1
+ ---
2
+ title: Coberturas de Soporte por Plan
3
+ tags: [planes, cobertura, soporte, enterprise, professional, starter]
4
+ description: Qué está incluido y qué no en cada plan de soporte
5
+ ---
6
+
7
+ # Coberturas de Soporte por Plan
8
+
9
+ ## Plan Enterprise
10
+
11
+ ### Incluye
12
+ - Soporte 24/7/365 para P1 y P2 por teléfono, email y chat
13
+ - SLA garantizado con créditos por incumplimiento
14
+ - Ingeniero de cuenta dedicado (Technical Account Manager)
15
+ - Acceso a canal de Slack privado con el equipo de soporte e ingeniería
16
+ - Revisiones técnicas trimestrales
17
+ - Early access a nuevas funcionalidades
18
+ - Capacitación del equipo (hasta 4 horas por trimestre)
19
+ - Onboarding personalizado (hasta 20 horas)
20
+
21
+ ### No incluye
22
+ - Desarrollo de features a medida (requiere contrato de desarrollo)
23
+ - Integración con sistemas de terceros no documentados
24
+ - Soporte a código personalizado no desarrollado por nosotros
25
+ - Data recovery de datos eliminados por el cliente (evaluar caso a caso)
26
+
27
+ ---
28
+
29
+ ## Plan Professional
30
+
31
+ ### Incluye
32
+ - Soporte en horario hábil (L-V 9:00-18:00) para todas las prioridades
33
+ - Soporte fuera de horario para P1 únicamente (respuesta en 4 horas)
34
+ - Portal de soporte con priorización
35
+ - Acceso a base de conocimiento y documentación completa
36
+ - Webinars mensuales de producto
37
+ - Onboarding básico (hasta 4 horas)
38
+
39
+ ### No incluye
40
+ - Soporte telefónico (solo email y portal)
41
+ - TAM dedicado
42
+ - Canal de Slack privado
43
+ - Revisiones técnicas proactivas
44
+
45
+ ---
46
+
47
+ ## Plan Starter
48
+
49
+ ### Incluye
50
+ - Soporte en horario hábil ART (L-V 9:00-18:00)
51
+ - Portal de soporte con formulario de tickets
52
+ - Acceso a base de conocimiento y documentación
53
+ - Foro de comunidad de usuarios
54
+
55
+ ### No incluye
56
+ - Soporte fuera de horario (ninguna prioridad)
57
+ - Chat en vivo
58
+ - Prioridad sobre otros tickets
59
+
60
+ ---
61
+
62
+ ## Qué nunca está incluido en ningún plan
63
+
64
+ - Consultoría de arquitectura o diseño de soluciones (servicio separado)
65
+ - Desarrollo o modificación de código del cliente
66
+ - Soporte a versiones EOL (End of Life) — ver política de versiones
67
+ - Recovery de datos si el cliente borró información hace más de 30 días
68
+ - Soporte en idiomas distintos al español e inglés
69
+
70
+ ---
71
+
72
+ ## Política de créditos por incumplimiento de SLA (Enterprise)
73
+
74
+ | Incumplimiento | Crédito |
75
+ |---------------|---------|
76
+ | FRT fuera de SLA en P1 | 5% del MRR del mes |
77
+ | Resolution Time fuera de SLA en P1 | 10% del MRR del mes |
78
+ | FRT fuera de SLA en P2 | 2% del MRR del mes |
79
+ | Resolution Time fuera de SLA en P2 | 5% del MRR del mes |
80
+
81
+ **Límite de créditos:** máximo 30% del MRR mensual por mes calendario.
82
+ Los créditos se aplican en la próxima factura. No son transferibles ni canjeables por dinero.
83
+
84
+ ---
85
+
86
+ ## Versiones soportadas
87
+
88
+ | Versión | Estado | Soporte hasta |
89
+ |---------|--------|---------------|
90
+ | v3.x (latest) | Activo — soporte completo | Indefinido |
91
+ | v2.x | Mantenimiento — solo bugs críticos y seguridad | 31/12/2026 |
92
+ | v1.x | EOL — sin soporte | Venció 31/12/2025 |
93
+
94
+ Clientes en versiones EOL deben migrar para recibir soporte.
@@ -0,0 +1,104 @@
1
+ ---
2
+ title: Niveles de Servicio (SLA)
3
+ tags: [sla, prioridad, tiempos, soporte, acuerdo]
4
+ description: Definición de prioridades, tiempos de respuesta y resolución por plan y tier de soporte
5
+ ---
6
+
7
+ # Niveles de Servicio (SLA)
8
+
9
+ ## Definición de Prioridades
10
+
11
+ ### P1 — Crítico
12
+ **Definición:** Sistema o servicio completamente caído. Sin workaround disponible. Impacto en producción.
13
+
14
+ **Ejemplos:**
15
+ - Plataforma inaccesible para todos o gran parte de los usuarios
16
+ - Pérdida de datos en producción
17
+ - Brecha de seguridad activa
18
+ - Funcionalidad de pago o facturación no disponible
19
+
20
+ ### P2 — Alto
21
+ **Definición:** Funcionalidad core degradada. Hay workaround pero es significativamente limitante.
22
+
23
+ **Ejemplos:**
24
+ - Módulo principal con rendimiento muy degradado (> 5x más lento de lo normal)
25
+ - Feature crítica del negocio no disponible para un segmento de usuarios
26
+ - Integraciones clave caídas (pagos, autenticación)
27
+
28
+ ### P3 — Medio
29
+ **Definición:** Bug o problema que afecta una feature no crítica. Hay workaround razonable.
30
+
31
+ **Ejemplos:**
32
+ - Error en un reporte o export que tiene alternativa
33
+ - UI con comportamiento incorrecto pero funcional
34
+ - Notificaciones no enviándose pero datos disponibles en la plataforma
35
+
36
+ ### P4 — Bajo
37
+ **Definición:** Consulta, mejora sugerida, cosmético o comportamiento no esperado sin impacto operativo.
38
+
39
+ **Ejemplos:**
40
+ - Pregunta de "cómo hacer X"
41
+ - Solicitud de nueva funcionalidad
42
+ - Texto o label incorrecto en la interfaz
43
+
44
+ ---
45
+
46
+ ## Tiempos de Respuesta y Resolución por Plan
47
+
48
+ ### Plan Enterprise
49
+
50
+ | Prioridad | Primera respuesta | Actualización de progreso | Resolución objetivo |
51
+ |-----------|-------------------|--------------------------|---------------------|
52
+ | P1 | 15 minutos | Cada 30 minutos | 4 horas |
53
+ | P2 | 1 hora | Cada 2 horas | 8 horas hábiles |
54
+ | P3 | 4 horas hábiles | Diaria si está abierto | 3 días hábiles |
55
+ | P4 | 1 día hábil | Semanal | 10 días hábiles |
56
+
57
+ **Horario de cobertura P1/P2:** 24/7/365
58
+
59
+ ### Plan Professional
60
+
61
+ | Prioridad | Primera respuesta | Resolución objetivo |
62
+ |-----------|-------------------|---------------------|
63
+ | P1 | 1 hora | 8 horas hábiles |
64
+ | P2 | 4 horas hábiles | 2 días hábiles |
65
+ | P3 | 1 día hábil | 5 días hábiles |
66
+ | P4 | 2 días hábiles | 15 días hábiles |
67
+
68
+ **Horario de cobertura:** Lunes a viernes 9:00-18:00 (zona horaria del cliente)
69
+
70
+ ### Plan Starter
71
+
72
+ | Prioridad | Primera respuesta | Resolución objetivo |
73
+ |-----------|-------------------|---------------------|
74
+ | P1 | 4 horas hábiles | 2 días hábiles |
75
+ | P2 | 1 día hábil | 5 días hábiles |
76
+ | P3 | 2 días hábiles | 10 días hábiles |
77
+ | P4 | 5 días hábiles | Best effort |
78
+
79
+ **Horario de cobertura:** Lunes a viernes 9:00-18:00 ART
80
+
81
+ ---
82
+
83
+ ## Cómputo del SLA
84
+
85
+ - El reloj del SLA **empieza cuando el ticket se recibe**, no cuando es asignado
86
+ - El SLA se **pausa** cuando esperamos información del cliente (estado: "Esperando cliente")
87
+ - El SLA se **reanuda** cuando el cliente responde
88
+ - El SLA **se cumple** cuando el cliente confirma resolución o cuando han pasado 48hs sin respuesta tras nuestra solución
89
+ - Los **días feriados** del país del cliente no cuentan en planes Professional y Starter (sí cuentan en Enterprise P1/P2)
90
+
91
+ ---
92
+
93
+ ## Escalación por Incumplimiento de SLA
94
+
95
+ Si el SLA está en riesgo (>75% del tiempo consumido sin resolución):
96
+ 1. Notificar al Team Lead de Soporte
97
+ 2. Escalar automáticamente a L2 si está en L1
98
+ 3. Notificar proactivamente al cliente con actualización de estado y nuevo ETA
99
+
100
+ Si el SLA se incumple:
101
+ 1. Notificar al Director de Customer Success
102
+ 2. Registrar el breach en el sistema de métricas
103
+ 3. Analizar en la reunión semanal de soporte
104
+ 4. Evaluar compensación según política de créditos