Lampson como motor
Canales
Un canal conecta un agente con una plataforma de mensajería: el agente contesta los mensajes de tus clientes. Lampson trae dos y cada canal es un plugin, así que puedes agregar los que necesites:
- Telegram — un bot, gratis y sin intermediarios.
- Chatwoot — una bandeja que ya une WhatsApp, Instagram, Facebook, email y el chat web: un solo canal cubre todo eso.
Para todos, Lampson pone lo mismo: una conversación por cliente, el buzón que junta los mensajes en ráfaga en una respuesta, el «escribiendo…» mientras el agente trabaja, las fotos como imagen para los modelos con visión, los permisos y la traza.
Comandos§
lampson channel list # cada canal: encendido, agente, modo, URL del webhook
lampson channel on telegram # encender (decisión tuya, como un plugin)
lampson channel setup telegram # dejarlo funcionando
lampson channel off telegram
En la web: Canales en el panel izquierdo — encender, ver el modo y el agente, «configurar» y los últimos eventos.
Qué agente contesta: LAMPSON_CHANNEL_<CANAL>_AGENT=tienda en ~/lampson/.env (por ejemplo LAMPSON_CHANNEL_TELEGRAM_AGENT). Si no lo defines, el agente por defecto. → Agentes
Con o sin URL pública§
Una plataforma avisa de los mensajes nuevos llamando a una URL (un webhook). Si tu Lampson tiene URL pública (lampson --domain o un túnel), lampson channel setup registra ese webhook.
Sin URL pública — Lampson en la PC de tu casa — los canales que lo permiten (Telegram) funcionan igual: lampson channel setup los pasa a modo sin URL pública y es Lampson quien le pide los mensajes nuevos a la plataforma. No hace falta dominio ni túnel; solo que el workspace esté encendido (con el hub corriendo, un workspace con canales queda encendido).
Telegram§
1. En Telegram, habla con @BotFather, /newbot, y copia el token. 2. En ~/lampson/.env: ``sh LAMPSON_TELEGRAM_TOKEN=123456789:AA… LAMPSON_TELEGRAM_WEBHOOK_SECRET=una-frase-larga-cualquiera LAMPSON_CHANNEL_TELEGRAM_AGENT=tienda ` 3. En la carpeta del proyecto: `sh lampson channel on telegram lampson channel setup telegram ``
Con URL pública, setup registra el webhook con el secreto (Telegram lo manda en cada aviso y Lampson rechaza lo que no lo traiga). Sin URL pública, pasa a modo sin URL pública.
Qué hace el canal: contesta los mensajes nuevos de personas (ignora ediciones, mensajes de otros bots y posts de canales); una foto llega al agente como imagen, con su texto; audios, archivos y ubicaciones llegan como una nota; las respuestas largas se parten en mensajes de hasta 4000 caracteres, cortando en un salto de línea.
Si el token del bot quedó escrito en algún lugar compartido, regenéralo en @BotFather (/revoke) y cámbialo en el.env.
Chatwoot§
En prueba. El canal sigue la documentación oficial de Chatwoot y pasa nuestros tests contra un Chatwoot simulado, pero todavía no lo probamos contra una instancia real. Si lo usas y algo no anda, avísanos.
1. En Chatwoot: Ajustes → Integraciones → Webhooks → URL https://tu-lampson/w/<workspace>/ch/chatwoot, evento message_created. Copia el secreto que te muestra. 2. Un token de acceso (tu perfil, o un agent bot) con permiso para responder. 3. En ~/lampson/.env: ``sh LAMPSON_CHATWOOT_URL=https://app.chatwoot.com LAMPSON_CHATWOOT_TOKEN=… LAMPSON_CHATWOOT_WEBHOOK_SECRET=… LAMPSON_CHANNEL_CHATWOOT_AGENT=tienda ` 4. lampson channel on chatwoot`.
El canal verifica la firma de Chatwoot, contesta solo los mensajes entrantes y públicos (sus propias respuestas y las notas privadas se ignoran: si no, el bot se contestaría a sí mismo) y pasa las imágenes adjuntas como imagen. Chatwoot necesita una URL pública para llegar a Lampson.
Escribir tu propio canal§
Un canal es un plugin con "channel" en su plugin.json. Puede no tener herramientas para el modelo:
{
"name": "mi-canal",
"description": "Mi plataforma de mensajería",
"kind": "exec",
"command": "node canal.js",
"config": ["MICANAL_TOKEN"],
"channel": {"agent": "", "typing": true, "poll": false}
}
"config" le pasa al plugin sus secretos desde el .env: LAMPSON_MICANAL_TOKEN llega como PLUGIN_MICANAL_TOKEN. El plugin recibe la acción en PLUGIN_TOOL y sus datos (JSON) en PLUGIN_ARGS, e imprime un JSON por stdout:
| acción | recibe | imprime |
|---|---|---|
receive | el webhook crudo: {method, path, query, headers, body} (el body exacto, para verificar firmas) | {"messages": [{"thread", "text", "sent_at"?, "from"?, "images"?, "meta"?}], "http"?: {"status", "body"}} |
send | {thread, text, meta, agent, session, batch} | lo que quieras; una salida que empieza con ERROR cuenta como fallo |
typing (opcional) | {thread, meta} | — |
setup (opcional) | {"mode": "webhook", "webhook_url"} o {"mode": "poll"} | un mensaje para la persona |
poll (opcional) | {cursor} | {"messages": [...], "cursor": <el siguiente>} |
El webhook de un canal es https://tu-lampson/w/<workspace>/ch/<canal>: Lampson le contesta a la plataforma enseguida y el agente trabaja aparte. Lo que send recibe en meta es lo que receive devolvió para el último mensaje del lote (los ids de tu plataforma). Cada canal lleva un log en .lampson/channels/<canal>.log.
También puedes pedírselo al agente: «haz un canal para Discord» — lo escribe con este contrato, lo valida y te pide encenderlo.