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 +3 -1
- package/dist/src/prompts.js +5 -0
- package/package.json +1 -1
- package/templates/base/orchestrator/soporte/flows/atencion-ticket.yaml +159 -0
- package/templates/base/orchestrator/soporte/flows/incidente-critico.yaml +218 -0
- package/templates/base/orchestrator/soporte/orchestrator.yaml +98 -0
- package/templates/base/orchestrator/soporte/test-flow.mjs +210 -0
- package/templates/base/orchestrator/soporte/vault/comunicacion/plantillas.md +211 -0
- package/templates/base/orchestrator/soporte/vault/lecciones/.gitkeep +0 -0
- package/templates/base/orchestrator/soporte/vault/procesos/escalacion.md +106 -0
- package/templates/base/orchestrator/soporte/vault/procesos/manejo-de-tickets.md +101 -0
- package/templates/base/orchestrator/soporte/vault/productos/coberturas-de-soporte.md +94 -0
- package/templates/base/orchestrator/soporte/vault/sla/niveles-de-servicio.md +104 -0
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
|
-
:
|
|
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',
|
package/dist/src/prompts.js
CHANGED
|
@@ -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
|
@@ -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
|
+
```
|
|
File without changes
|
|
@@ -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
|