Métodos¶
Sistema de Alarmas¶
El sistema de alarmas de BotCenter permite programar la ejecución diferida de nodos del bot en un momento específico en el futuro. Este sistema está diseñado para casos de uso como recordatorios, timeouts, seguimientos automáticos, y cualquier funcionalidad que requiera ejecutar acciones después de un período determinado.
Arquitectura del Sistema¶
El sistema de alarmas utiliza una arquitectura distribuida basada en AWS SQS (Simple Queue Service) para garantizar la confiabilidad y escalabilidad:
- Programación de Alarmas: Cuando se ejecuta
set-alarm, se envía un mensaje a una cola SQS de AWS - Procesamiento Externo: Un servicio externo procesa los mensajes programados en la fecha/hora especificada
- Activación: Cuando llega el momento, se realiza una llamada HTTP POST al endpoint
/api/v2/bot/trigger_node - Ejecución: El nodo especificado se ejecuta con el contexto original preservado
Componentes Técnicos¶
- AlarmScheduler: Maneja la comunicación con AWS SQS
- AlarmsHandler: Gestiona la configuración y programación de alarmas
- ApiV2TriggerNode: Endpoint que recibe y procesa las alarmas activadas
- Cola SQS:
actions-to-schedule(configurable por ambiente)
set-alarm¶
Esta función programa la ejecución de un bot-node después de un tiempo específico. set-alarm tiene cuatro parámetros:
- context: El contexto actual del bot (requerido)
- function_name: El nombre del bot-node que se ejecutará (requerido)
- alarm_due_time: Fecha y hora de ejecución en formato
%Y-%m-%dT%H:%M:%S(año, mes, día, hora, minuto, segundo) - alarm_key: Identificador único de la alarma para propósitos de logging y tracking
Ejemplo Básico¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
Ejemplo con Delay¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | |
Casos de Uso Comunes¶
- Recordatorios: Enviar mensajes de seguimiento después de un período específico
- Timeouts: Manejar sesiones que han estado inactivas por mucho tiempo
- Seguimientos: Contactar usuarios después de completar una acción
- Escalación: Transferir conversaciones no resueltas después de un tiempo límite
Requisitos y Limitaciones¶
Requisitos¶
- Datos del Usuario: La alarma solo se programa si el contexto contiene información válida del usuario (canal, ID de usuario)
- Bot Desplegado: Las alarmas funcionan tanto en desarrollo como en producción
- Conectividad: Requiere acceso a AWS SQS y conectividad HTTP para la activación
Limitaciones¶
- Precisión Temporal: La precisión depende del servicio externo que procesa la cola SQS
- Contexto Estático: El contexto se preserva tal como estaba al momento de programar la alarma
- Sin Cancelación: No existe funcionalidad nativa para cancelar alarmas una vez programadas
¿Se Puede Cancelar una Alarma?¶
Respuesta: No, actualmente no existe funcionalidad para cancelar alarmas.
El sistema actual no proporciona:
- Función cancel-alarm
- Función remove-alarm
- Función delete-alarm
- Ningún mecanismo para cancelar alarmas programadas
Una vez que se ejecuta set-alarm exitosamente, la alarma quedará programada y se ejecutará en el momento especificado. Esto es una limitación del diseño actual del sistema.
Posibles Alternativas¶
Si necesitas funcionalidad similar a cancelación de alarmas, puedes:
- Validación en el Nodo de Alarma: Verificar condiciones en el nodo que se ejecuta cuando se activa la alarma
- Estados en Contexto: Usar variables de contexto para determinar si la acción de la alarma debe ejecutarse
- Logging: Usar
alarm_keypara identificar y rastrear alarmas específicas en los logs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
Configuración Técnica¶
Variables de Entorno¶
1 2 3 4 | |
Estructura del Mensaje SQS¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | |
Debugging y Monitoreo¶
- Logs: Buscar por
alarm_keyen los logs del sistema - Subject: El campo
subjectcombina el canal y user_id para identificación única - Contexto: El contexto original se preserva completamente en la activación
translate¶
Esta función nos permite reemplazar un substring por el valor de una valiable del contexto, entregándo el resultado.
translate tiene dos parámetros: el contexxto y el string que será modificado, éste último debe tener el siguiente formato:
'Algún texto y la {{VARIEBLE-DE-CONTEXTO}}' donde el texto entre llaves es el nombre de la variable en contexto.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
answer-for-intent¶
Esta función te entrega una respuesta a una 'Intención' para que funcione, necesitamos entregarle el contexto y el identificador de la intención. Así, una vez hemos definido la relación Pregunta y Respuesta, cuando llamemos esta función recibiremos una de las posibles respuestas para esa intención.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | |
string-find-similar¶
string-find-similar requiere dos parametros: la palabra que usaremos para buscar como string y una lista de strings con las opciones de palabras a encontrar.
Esta función retornará la palabra de la lista que sea más similar a la palabra buscada, de no encontrar algo lo suficientemente similar en la lista retornará vacío (nil)
1 2 3 4 5 6 7 8 9 | |