Referencia: Chat y Canales
@chatController()
Decorador de clase. Registra un controlador de chat que gestiona mensajes entrantes.
import { chatController } from '@wabot-dev/framework'
@chatController()export class MiController { }La clase se vuelve inyectable. Puede recibir dependencias vía constructor.
@chatBot(MindsetClass)
Decorador de parámetro de constructor. Inyecta una instancia de ChatBot configurada con el mindset indicado.
import { chatBot, ChatBot } from '@wabot-dev/framework'
@chatController()export class MiController { constructor( @chatBot(MiMindset) private bot: ChatBot, @chatBot(OtroMindset) private bot2: ChatBot, ) {}}ChatBot
Servicio que procesa mensajes a través del mindset y el modelo de IA.
| Método | Descripción |
|---|---|
sendMessage(message, onReply) | Envía un mensaje al LLM. onReply se llama con cada fragmento de respuesta. |
this.bot.sendMessage(ctx.message, (respuesta) => { ctx.reply(respuesta)})El método es sincrónico — inicia el procesamiento y retorna de inmediato. Las respuestas se entregan vía callback.
Chat
Entidad que representa una conversación. Se inyecta directamente en controladores y módulos.
import { Chat } from '@wabot-dev/framework'
@chatController()export class MiController { constructor( @chatBot(MiMindset) private bot: ChatBot, private chat: Chat, // instancia del chat actual ) {}}| Propiedad | Tipo | Descripción |
|---|---|---|
id | string | Identificador único del chat. |
type | 'PRIVATE' | 'GROUP' | Tipo de conversación. |
createdAt | Date | Fecha de creación del chat. |
IReceivedMessage
Objeto recibido en los métodos handler del controlador.
| Propiedad / Método | Tipo | Descripción |
|---|---|---|
message | string | Texto del mensaje enviado por el usuario. |
reply(text) | (text: string) => void | Envía una respuesta al usuario en el canal de origen. |
@cmd()onMessage(ctx: IReceivedMessage) { const texto = ctx.message ctx.reply('Hola!')}Canales
@cmd()
Canal de línea de comandos. No requiere configuración. Útil para desarrollo y testing local.
import { cmd } from '@wabot-dev/framework'
@cmd()onMessage(ctx: IReceivedMessage) { }@whatsApp(config)
Canal de WhatsApp Business Cloud API.
import { whatsApp, str } from '@wabot-dev/framework'| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
number | string | ConfigReference<string> | Sí | Número de teléfono del negocio (formato internacional sin +). |
accessToken | string | ConfigReference<string> | No | Token de acceso de WhatsApp Cloud API. |
businessNumberId | string | ConfigReference<string> | No | ID del número de negocio en Meta. |
// Literal@whatsApp({ number: '573001234567' })
// Con config helpers (recomendado)@whatsApp({ number: str`whatsapp.number`, // WHATSAPP_NUMBER accessToken: str`whatsapp.access_token`, // WHATSAPP_ACCESS_TOKEN businessNumberId: str`whatsapp.business_number_id`, // WHATSAPP_BUSINESS_NUMBER_ID})@telegram(config)
Canal de Telegram Bot API.
import { telegram } from '@wabot-dev/framework'| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
botToken | string | Sí | Token del bot obtenido desde BotFather. |
@telegram()no admite config helpers — usaprocess.envdirectamente.
@telegram({ botToken: process.env.TELEGRAM_BOT_TOKEN! })@socket(config)
Canal WebSocket (Socket.IO).
import { socket, str } from '@wabot-dev/framework'| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
namespace | string | ConfigReference<string> | Sí | Namespace de Socket.IO. |
handshakeMidlewares | IConstructor<IHandshakeMiddleware>[] | No | Middlewares que validan la conexión en el handshake inicial. |
@socket({ namespace: str`socket.namespace:chat` })
@socket({ namespace: 'ventas', handshakeMidlewares: [AuthMiddleware],})IHandshakeMiddleware:
import { IHandshakeMiddleware } from '@wabot-dev/framework'
@injectable()export class AuthMiddleware implements IHandshakeMiddleware { async handle(socket: Socket, next: (err?: Error) => void) { const token = socket.handshake.auth.token if (!isValid(token)) return next(new Error('Unauthorized')) next() }}Config helpers para canales
Los config helpers crean referencias diferidas a variables de entorno. Se evalúan cuando el canal se registra, no cuando el módulo se importa.
import { str, num, bool } from '@wabot-dev/framework'
str`ruta.al.valor` // string requerido → RUTA_AL_VALORstr`ruta.al.valor:default` // string con valor por defectonum`ruta.al.valor:3000` // númerobool`ruta.al.valor:false` // booleanLa ruta se convierte a mayúsculas con guiones bajos: whatsapp.access_token → WHATSAPP_ACCESS_TOKEN.