- Los comandos slash y los bots permiten ejecutar acciones y automatizar flujos sin salir de Slack.
- Responde a slash en menos de 3s o usa response_url; elige in_channel o ephemeral según el caso.
- Con Bolt, Socket Mode y buenas prácticas de seguridad se construyen bots fiables y escalables.
- ChatOps centraliza conversación y operación, acelerando despliegues, soporte e incidencias.
Si trabajas en Slack, ya habrás notado que la plataforma no es solo chat: es una base para automatizar tareas, centralizar alertas y ejecutar acciones sin salir de la conversación. Ahí entran los comandos de barra y los bots inteligentes: dos pilares que, bien combinados, convierten Slack en una auténtica consola operativa.
En las próximas líneas vas a encontrar una guía completa —y muy práctica— para dominar comandos slash personalizados, webhooks entrantes y bots, conectarlos con tus herramientas (CI/CD, CRM, calendarios, WordPress, etc.) y llevar tu ChatOps a otro nivel con ideas, código y buenas prácticas.
Comandos slash y bots en Slack: qué son y por qué importan
Un comando slash es una instrucción iniciada por el usuario (por ejemplo, /deploy staging) que dispara una llamada HTTP a tu servidor con datos del contexto (equipo, canal, usuario, texto) y espera una respuesta. Los bots, por su parte, son aplicaciones que escuchan eventos como mensajes, menciones o interacciones para responder y ejecutar flujos de trabajo de forma programática.
¿Qué ganamos con esto? Menos cambio de contexto, más trazabilidad y una colaboración fluida: puedes crear tareas, lanzar un despliegue, consultar un informe o abrir un modal sin abandonar el canal. Si te suena a ChatOps, vas por buen camino.
Cómo funciona un comando slash por dentro
Cuando alguien escribe un comando (por ejemplo, /test hola!), Slack envía una petición HTTP a la URL que hayas configurado en tu app. Esa petición llega con parámetros clave del contexto. Un ejemplo típico de los campos que recibirás:
token=gIkuvaNzQIHg97ATvDxqgjtO
team_id=T0001
team_domain=acme
channel_id=C2147483705
channel_name=general
user_id=U2147483697
user_name=admin
command=/test
text=hola!
response_url=https://hooks.slack.com/commands/1234/5678
Con esa información puedes validar la llamada (con el token o firma), decidir qué hacer según el canal o el usuario y, sobre todo, responder. Hay dos opciones: responder en la propia petición en menos de 3 segundos o devolver un 200 vacío y contestar después al response_url (modo asíncrono) si el proceso tarda.
La respuesta es JSON y puede ser pública para todos en el canal o visible solo para quien lanzó el comando. Los campos clave son text, response_type (in_channel o ephemeral) y los attachments/blocks si quieres enriquecer el mensaje. Un ejemplo simple:
{
"text": "¡Hola Mundo!",
"response_type": "in_channel",
"attachments": [
{ "text": "Adjunto de prueba" }
]
}
Si tu lógica supera los 3 segundos, no pasa nada: devuelve un 200 sin cuerpo y usa el response_url cuando tengas el resultado. Así evitas que Slack muestre un error al usuario que ejecutó el comando, manteniendo una experiencia fluida.
Incoming Webhooks: envía mensajes a Slack cuando quieras
Los webhooks entrantes son una URL exclusiva a la que puedes POSTear JSON para publicar mensajes en un canal, incluso sin que nadie haya ejecutado un comando. Puedes definir canal, nombre del bot y avatar por defecto, y sobreescribirlos mensaje a mensaje si lo necesitas.
Por ejemplo, para avisar que alguien ha llamado al timbre de la oficina, basta con un curl apuntando al webhook con el payload adecuado. Fácil para automatizar avisos, resúmenes o notificaciones de eventos desde tu servidor o scripts:
curl -X POST --data-urlencode 'payload={
"channel": "#general",
"username": "ElFantasmaDeLaPuerta",
"text": "Llamaron al timbre",
"icon_emoji": ":ghost:"
}' https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX
¿Formato de mensajes? Puedes añadir títulos, enlaces, colores, imágenes, thumbs, saltos de línea con \n y emojis. El Message Builder de Slack te ayuda a probar diseños y ver cómo quedarán los adjuntos antes de ponerlos en producción.
Diseño de mensajes: in_channel vs ephemeral y adjuntos
El campo response_type decide la visibilidad: in_channel para todo el mundo o ephemeral para el usuario que lanzó el comando. Los adjuntos aportan color, imagen y enlaces, y puedes incluir desde un title_link hasta un image_url para enriquecer la experiencia.
Ejemplo inspirador de adjunto con imagen y color: título, enlace al recurso, image_url y el color de la barra lateral. Añade \\n para forzar saltos de línea y combina bloques si quieres algo más moderno que attachments, manteniendo un look consistente con tu marca.
Apps, bots y Slackbot: diferencias y cuándo usar cada uno
Una app de Slack es un contenedor de funcionalidades: comandos slash, webhooks, eventos y bots. Un bot es el usuario programático que publica mensajes y reacciona a eventos. Tu app puede incluir uno o varios bots, o incluso no tener ninguno si solo usas webhooks y slash commands.
Ventaja extra: empaquetar todo en una app te ayuda a ahorrar en el límite de integraciones del plan gratuito (cada app consume una sola “ranura” aunque incluya slash, webhooks y bot), y facilita que otros equipos instalen la solución en sus espacios de trabajo.
Instalar y descubrir bots: dónde encontrarlos y cómo añadirlos
Para instalar bots puedes ir al Directorio de Aplicaciones de Slack, buscar la herramienta (Asana, Zoom, Trello, Salesforce, Google Drive…) y pulsar “Agregar a Slack”. El navegador pedirá permisos y, tras autorizar, el bot quedará listo para usarse en tu workspace.
Desde Slack, en la barra lateral, baja a “Aplicaciones” y pulsa “Agregar aplicaciones” para encontrar la que necesitas. Una vez instalada, configura permisos, canales y opciones de notificación para que el bot empiece a trabajar contigo en segundos.
ChatOps en Slack: operar desde el chat con IA y automatización
ChatOps consiste en llevar comandos, flujos y alertas al chat donde ya ocurre la conversación. Nació en la comunidad DevOps (Hubot popularizó el concepto) y hoy la IA generativa permite interacciones más naturales: pedir diagnósticos en lenguaje natural o generar comandos a partir de una frase sencilla.
Beneficios claros: menos fragmentación entre herramientas, mejor trazabilidad y respuesta más rápida ante incidencias. Hay equipos que reportan una reducción media del 21 % en el tiempo de resolución gracias a acciones coordinadas desde el propio canal.
Casos de uso y ejemplos reales
Con bots y slash commands puedes automatizar desde recordatorios hasta despliegues. Algunas ideas útiles que ya usa mucha gente en Slack para mejorar la productividad y colaboración:
- Gestión del conocimiento con Guru: búsqueda en tu base interna e integración directa en Slack para contestar sin salir del chat.
- Videollamadas con Zoom: crea reuniones con /zoom y comparte pizarras con previsualización en el canal.
- Proyectos con Trello o Asana: pega un enlace y verás miembros, comentarios y estado; crea tareas con un comando de barra.
- Onboarding con Aloha: presentaciones automáticas y guía contextual para nuevos fichajes.
- Automatizaciones con Zapier: trae eventos de calendario, leads o publicaciones a un canal y dispara flujos en minutos.
Además, puedes montar flujos de aprobaciones rápidas, check-ins diarios con bots tipo Geekbot, recopilación de enlaces con Paperbot, o notificaciones de repos con GitHub para tener la actividad técnica en tu canal de ingeniería.
Construir tu bot con Node.js y Bolt: del cero a responder en Slack
Crear una app con bot es mucho más sencillo con Bolt para JavaScript, el framework oficial de Slack. Pasos típicos: entras en api.slack.com, creas “Una app desde cero”, das nombre y eliges tu workspace, marcas que tendrá bot y revisas los permisos en OAuth (por ejemplo chat:write para publicar).
Instala la app en el workspace, copia el Bot Token (xoxb-…) y el Signing Secret desde “Información básica”. En tu proyecto Node.js, guarda credenciales en .env y arranca un servidor Bolt minimalista que ya podrá recibir eventos y publicar mensajes.
const { App } = require("@slack/bolt");
require("dotenv").config();
const app = new App({
token: process.env.SLACK_BOT_TOKEN,
signingSecret: process.env.SLACK_SIGNING_SECRET
});
(async () => {
await app.start(process.env.PORT || 3000);
console.log("⚡️ Bot en marcha");
})();
Consejo rápido: usa process.env.PORT para el puerto en despliegues; no lo fijes a mano. A partir de aquí, podrás añadir listeners para comandos (app.command), mensajes (app.message) o interacciones de UI (botones, forms).
Socket Mode: eventos sin exponer un endpoint público
Si no quieres abrir un endpoint HTTP, activa Socket Mode. Genera un App-Level Token (xapp-…), agrega los scopes connections:write y authorizations:read, habilita el modo en tu app y añade configuración en Bolt para que use WebSockets.
const app = new App({
token: process.env.SLACK_BOT_TOKEN,
signingSecret: process.env.SLACK_SIGNING_SECRET,
socketMode: true,
appToken: process.env.APP_TOKEN
});
Con esto, Slack se conectará a tu app por WebSockets y recibirás eventos en tiempo real sin túneles ni proxies. Ideal para desarrollo local y para apps que dependen mucho de interacciones rápidas.
Comandos slash bien hechos: validación, ACK y respuestas ricas
Define tus comandos en la consola de Slack (Slash Commands), asigna una URL o usa Socket Mode, y escucha con app.command(«/tu_comando», …). Acusa recibo con ack() en menos de 3 segundos y luego responde con say() o mediante el response_url si el trabajo requiere tiempo.
Piensa en la UX: mezcla mensajes ephemeral para pedir parámetros o confirmar acciones y mensajes in_channel para anunciar resultados al equipo. Añade bloques/attachments con botones para rollback, asignar, aprobar o abrir modales.
Ejemplo avanzado con API externa: Kinsta + Slack
Un caso práctico muy útil consiste en conectar Slack con la API de Kinsta para gestionar sitios de WordPress desde el chat: consultar el estado de una operación, limpiar caché o reiniciar el motor PHP. La app Bolt recibe el comando y hace llamadas REST autenticadas con un token.
Empieza guardando la base de la API y las cabeceras con tu KINSTA_API_KEY en variables:
const KinstaAPIUrl = "https://api.kinsta.com/v2";
const getHeaders = { Authorization: `Bearer ${process.env.KINSTA_API_KEY}` };
const postHeaders = {
"Content-Type": "application/json",
Authorization: `Bearer ${process.env.KINSTA_API_KEY}`
};
Para obtener el ID de entorno desde el nombre del sitio (comando /environment_id [SiteName]), primero listas sitios de la compañía, localizas el que coincide y luego pides sus entornos:
async function getAllSites() {
const q = new URLSearchParams({ company: process.env.KINSTA_COMPANY_ID });
const r = await fetch(`${KinstaAPIUrl}/sites?${q}`, { headers: getHeaders });
return r.json();
}
async function getEnvironmentId(siteId) {
const r = await fetch(`${KinstaAPIUrl}/sites/${siteId}/environments`, { headers: getHeaders });
return r.json();
}
Después, implementas comandos operativos: /clear_site_cache [environment_id] y /restart_php_engine [environment_id], que son POSTs sencillos:
async function clearSiteCache(environmentId) {
const r = await fetch(`${KinstaAPIUrl}/sites/tools/clear-cache`, {
method: "POST",
headers: postHeaders,
body: JSON.stringify({ environment_id: environmentId })
});
return r.json();
}
async function restartPHPEngine(environmentId) {
const r = await fetch(`${KinstaAPIUrl}/sites/tools/restart-php`, {
method: "POST",
headers: postHeaders,
body: JSON.stringify({ environment_id: environmentId })
});
return r.json();
}
Y por último, el estado de una operación con /operation_status [operation_id], que consulta el endpoint de operaciones para informar del progreso al canal en tiempo real.
Eventos y UX conversacional: más allá de los comandos
Los bots no viven solo de slash. Suscríbelos a eventos de mensajes para que respondan a palabras clave, escuchen menciones con @ y conviertan una reacción emoji en un disparador (por ejemplo, añadir :eyes: para reclamar una tarea).
Un patrón potente es unirlo a RAG (búsqueda aumentada por recuperación): tu bot consulta la base de conocimiento y contesta con el fragmento y el enlace más relevantes, reduciendo la cháchara de “¿dónde está el link de…?”.
Buenas prácticas: seguridad, rendimiento y cuidados
Solicita solo los scopes mínimos (p. ej., chat:write, reactions:read) y evita dar acceso de más. Protege tokens OAuth y secretos de firma, usa rotación periódica y almacena todo en variables de entorno (.env), nunca en el repositorio.
Registra entradas, salidas y errores para depurar, pero evita guardar historiales completos de Slack innecesariamente. Si necesitas memoria, usa almacenamiento de sesión a corto plazo. Ojo con datos sensibles y políticas de retención.
Diseña mensajes de reserva: si algo falla, devuelve un “No he entendido eso, prueba ‘ayuda’” en lugar de silencio. Y no olvides hacer ack() rápido; si la operación es pesada, responde después con el webhook response_url.
Cuida el diseño: usa attachments o bloques, \\n para saltos de línea, icon_emoji o icon_url para el avatar, y elige bien in_channel vs ephemeral según el momento. Fija un mensaje con comandos disponibles o crea un Canvas con ayuda rápida.
ChatOps en acción: despliegues, incidencias y soporte
Imagina /deploy staging y el bot mostrando progreso y logs en tiempo real, con botones para abortar o promover a producción. Todo queda en el hilo, listo para auditoría y aprendizaje cruzado.
En incidencias, el bot publica alertas con datos clave y atajos para escalar, diagnosticar o hacer rollback. La conversación aporta contexto compartido y acelera la respuesta sin buscar “dónde está pasando qué”.
En soporte, automatiza respuestas frecuentes, enruta peticiones al equipo correcto y conecta el CRM para ver datos del cliente. El resultado: menos tiempos muertos y más foco en resolver lo importante.
Cómo empezar con tu propio slash / bot paso a paso
1) Crea la app en api.slack.com, 2) añade un bot y scopes básicos (chat:write, commands), 3) instala la app y copia xoxb y Signing Secret, 4) configura Socket Mode si quieres evitar endpoints públicos, 5) define uno o dos comandos con casos útiles (p. ej., /meme, /deploy), 6) publica mensajes de prueba con un webhook entrante.
Cuando esté funcionando, documenta comandos y ejemplos en un mensaje fijado o en la App Home (habilita que te puedan escribir por DM). Forma al equipo, recoge feedback y prioriza qué automatizar después.
La combinación de comandos slash, webhooks y bots convierte Slack en una plataforma operativa donde conversación y ejecución van de la mano: puedes disparar tareas, consultar servicios externos, coordinar respuestas y documentarlo todo en el mismo sitio; con una app bien diseñada, seguridad cuidada y una pizca de ChatOps, tu equipo ganará agilidad, visibilidad y menos caos sin salir del canal.
Redactor apasionado del mundo de los bytes y la tecnología en general. Me encanta compartir mis conocimientos a través de la escritura, y eso es lo que haré en este blog, mostrarte todo lo más interesante sobre gadgets, software, hardware, tendencias tecnológicas, y más. Mi objetivo es ayudarte a navegar por el mundo digital de forma sencilla y entretenida.