Skip to content

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étodoDescripció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
) {}
}
PropiedadTipoDescripción
idstringIdentificador único del chat.
type'PRIVATE' | 'GROUP'Tipo de conversación.
createdAtDateFecha de creación del chat.

IReceivedMessage

Objeto recibido en los métodos handler del controlador.

Propiedad / MétodoTipoDescripción
messagestringTexto del mensaje enviado por el usuario.
reply(text)(text: string) => voidEnví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'
CampoTipoRequeridoDescripción
numberstring | ConfigReference<string>Número de teléfono del negocio (formato internacional sin +).
accessTokenstring | ConfigReference<string>NoToken de acceso de WhatsApp Cloud API.
businessNumberIdstring | ConfigReference<string>NoID 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'
CampoTipoRequeridoDescripción
botTokenstringToken del bot obtenido desde BotFather.

@telegram() no admite config helpers — usa process.env directamente.

@telegram({ botToken: process.env.TELEGRAM_BOT_TOKEN! })

@socket(config)

Canal WebSocket (Socket.IO).

import { socket, str } from '@wabot-dev/framework'
CampoTipoRequeridoDescripción
namespacestring | ConfigReference<string>Namespace de Socket.IO.
handshakeMidlewaresIConstructor<IHandshakeMiddleware>[]NoMiddlewares 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_VALOR
str`ruta.al.valor:default` // string con valor por defecto
num`ruta.al.valor:3000` // número
bool`ruta.al.valor:false` // boolean

La ruta se convierte a mayúsculas con guiones bajos: whatsapp.access_tokenWHATSAPP_ACCESS_TOKEN.