Core · Multi-canal nativo
Canales
Cada canal es un adaptador que traduce eventos externos al formato interno de OpenClaw. Usas el mismo agente en Telegram, WhatsApp o web — con estado compartido si el usuario se identifica (teléfono, email, userId).
Canales soportados
Telegram
TelegramChannel
Bot API. Soporta inline keyboards, payments, voice.
WhatsApp Business
WhatsAppBusinessChannel
Via BSP oficial (Meta). Plantillas y sesiones de 24h.
Slack
SlackChannel
Events API. Hilos, reacciones, DMs y canales.
Web Chat
WebWidget
Widget embebible. Streaming nativo, adjuntos.
API HTTP
APIChannel
Endpoint REST para integrar en tu app/backend.
EmailChannel
IMAP/SMTP. Responde a hilos y clasifica entradas.
Voz
VoiceChannel
Deepgram STT + ElevenLabs/OpenAI TTS. Twilio/Jambonz.
SMS
SMSChannel
Via Twilio/MessageBird. Respuesta corta con límites.
Patrón estándar
import { TelegramChannel, WhatsAppBusinessChannel, WebWidget } from '@openclaw/sdk/channels';
// Mismo agente en 3 canales
await Promise.all([
new TelegramChannel({
botToken: process.env.TG_TOKEN!,
agent: supportAgent,
}).start(),
new WhatsAppBusinessChannel({
phoneNumberId: process.env.WA_PHONE_ID!,
accessToken: process.env.WA_TOKEN!,
agent: supportAgent,
}).start(),
new WebWidget({
agent: supportAgent,
origin: 'https://tusitio.com',
}).start(),
]);Identidad unificada
Cuando un mismo usuario aparece en múltiples canales, OpenClaw puede unificar su estado si proporcionas un identityResolver.
claw.identityResolver(async (event) => {
// event.channel: 'telegram' | 'whatsapp' | 'web'
// event.raw: { phone, email, userId, ... }
const customer = await db.customer.findByIdentifier({
phone: event.raw.phone,
email: event.raw.email,
});
return customer?.id ?? null;
});Handoff a humano
Todos los canales soportan handoff con contexto completo. El agente transfiere a un humano cuando la confianza cae, la política lo exige o el usuario lo pide.
supportAgent.on('handoff_requested', async (ctx) => {
await zendesk.createTicket({
customerId: ctx.userId,
channel: ctx.channel,
transcript: ctx.conversation, // últimas N vueltas
summary: ctx.summary, // resumen del agente
priority: ctx.metadata.priority,
});
});Anterior
Modelos y routing
Siguiente
Tool use