Slack es una herramienta cada vez más popular para empresas y equipos que necesitan comunicarse al instante. Si bien puede, en algunos casos, se puede considerar una interrupción diaria, también tiene un gran potencial de automatización, ofreciendo docenas de integraciones para mantener todo en un solo lugar, y está superando lentamente los correos electrónicos.
Hay muchas maneras de integrar sus sistemas con holgura; La plataforma incluso proporciona un BOT de marca que le permite entregar recordatorios o mensajes en su espacio de trabajo digital. Y para más mejoras de colaboración, pruebe estos almacenamiento en la nube Opciones.
Slack ofrece diversas entidades que podrían considerarse 'bots':
En este tutorial, estaremos buscando particularmente en 'usuarios de bots', cómo programarlos (echa un vistazo a nuestra guía a la Los mejores editores de código Para hacer su vida más fácil) y hacer que se ajusten a sus necesidades. Esto presupone que tiene acceso a un espacio flojo donde puede agregar integraciones de aplicaciones. Si aún no eres parte de uno, son libres de crear.
En lo que sigue, construimos una aplicación NODEJS para post-para y responder a mensajes particulares en un canal de flojos. Utilizamos el módulo 'SLACKBOTS', que es una envoltura para la API de mensajería en tiempo real.
¿También está interesado en hacer un sitio web? Elige un brillante Creador de sitios web y top Alojamiento web Servicio para ir con él.
Este tutorial asume que tiene instalado ningún nodo. Si no, hazlo ahora. Entonces Descargar los activos Necesitarás. Le hemos proporcionado un punto de partida y marco para el tutorial.
En todo momento, hacemos uso de módulos como 'SLACKBOTS' y 'NODE-SLACK-Subir'. Se pueden obtener ejecutando el comando de instalación.
npm install
Estamos utilizando la integración de "USUARIO DE BOT" para Slack. Para hacerlo, debemos obtener un token al ir a 'https: // & lt; yousslackworkspace & gt; .slack.com / apps / a0f7ys25r-bots' y haga clic en "Agregar configuración".
Elija un nombre de usuario para su bot (podemos anular esta programación en una etapa posterior) y confirmar.
Invita al bot al canal deseado.
Al crear un usuario de bot, obtendrá un token en el siguiente formato:
xoxb-000000-000000-x0x0xxxxx0xxxx0x
Copia el token para el siguiente paso.
Hacemos uso de variables de entorno (un archivo '.env') para evitar la codificación dura y revelando tokens y claves secretos, como el token de flojo que hemos generado, y el nombre del canal en su espacio de trabajo de flojo privado.
Adelante y complete el archivo '.env' con su token y el nombre del canal al que ha invitado al usuario bot.
SLACK_TOKEN = XOXB- & LT; YourToken & GT;
SLACK_CHANNEL = & LT; NOMBRE DE CANAL Y GT;
Este siguiente paso nos lleva a 2 archivos: 'index.js', que tendremos un breve mirada, y 'bin / lib / bot.js', donde se lleva a cabo la mayor parte de nuestro desarrollo. En el archivo de índice, creemos que instanciamos nuestro bot dándole un nombre, que es 'WDMBOT'.
En 'bot.js' Controlamos los parámetros de cada instancia con nombre, token, etc.
// index.js
Const Bot = requieren ('./ bin / lib / bot'). init
('Wdmbot');
//bot.js
const botparams = {
icon_emoji: ': robot_face:',
as_user: falso
};
Deja que Bot;
FUNCIÓN INITBOT (BotName) {
bot = nuevo SLACKBOT ({
Token: process.env.slack_token,
Nombre: BotName
});
}
Eche un vistazo a la función 'EnviarMessage'. Utilizamos el método 'postto'. Esto manejará la publicación a cualquier tipo de canal, público o privado. Si solo desea publicar en canales privados, podría usar 'posttogroup' en su lugar (o 'posttoChannel' para un público). Para enviar nuestro primer mensaje, podemos agregar código en 'initbot'.
FUNCIÓN INITBOT (BotName) {
bot = / * ver arriba * /
EnviarMessage ('¡Estoy aquí!');
}
// ahora ejecuta 'Inicio NPM'
Debería haber notado que aparece un mensaje de WDMBOT en su canal. Vale la pena señalar que en 'Botparams', 'as_user' se establece en falso, lo que nos permite anular el nombre y la imagen. Si se establece en VERDADERO, usará el nombre y la imagen que estableció al obtener el token.
Podrías cambiar el bot Emoji a una imagen así:
Const Botparams = {
icon_url: 'https://pbs.twimg.com/
Perfil_Images / 976112552081010688 /
Wllqvj8d_400x400.jpg ',
as_user: falso
};
Los mensajes de publicación son útiles, pero para que el BOT sea más interactivo, debemos poder identificar las publicaciones de otros usuarios en el canal. Escuchemos el evento del mensaje y luego veamos qué sucede cuando nos escribimos en canal. Deberíamos ver diferentes tipos de mensajes registrados, como 'user_typing' o 'mensaje'.
FUNCIÓN INITBOT (BotName) {
bot = / * ver arriba * /
bot.on ('mensaje', datos = & gt; {
console.log (datos);
});
}
A continuación, queremos responder a los mensajes entrantes del tipo de 'mensaje', y tal vez a una frase o palabra clave específica, para evitar responder a todo todo. Nos aseguramos de comparar cuerdas en minúsculas si queremos coincidir con una frase exacta. También podríamos ver si un mensaje 'incluye ()' una palabra en particular.
bot.on ('mensaje', datos = & gt; {
if (Data.Type === 'MENSAJE') {
if (Data.Text.ToloweCase () === 'donde
¿eres tú?') {
EnviarMessage ('¡Estoy aquí!');
}
}
});
Los mensajes enviados por los usuarios de BOT tienen varias propiedades, como un subtipo de 'bot_message' y un bot_id. Es posible que desee restringir responder a los mensajes publicados por humanos para evitar los bucles infinitos de los robots que se responden a sí mismos o entre sí, si su respuesta incluye una de las palabras clave que está escuchando.
bot.on ('mensaje', datos = & gt; {
if (DATA.TYPE === 'MENSAJE' & AMP; & AMP; DATOS.
subtipo! == 'bot_message') {
if (Data.Text.tolowercase ().
incluye ('hola')) {
SendMessage ('Hola, soy un bot!');
}
}
});
Para dar una respuesta más personalizada, puede aprovechar la ID de usuario del mensaje al que está respondiendo. Slack convertirá automáticamente una identificación al nombre de usuario cuando se incluya en las etiquetas '& lt; @ & gt;'. Identificar a quién le responde puede ser útil, especialmente si los miembros de un canal múltiples están interactuando con su BOT simultáneamente.
bot.on ('mensaje', datos = & gt; {
if (DATA.TYPE === 'MENSAJE' & AMP; & AMP; DATOS.
subtipo! == 'bot_message') {
if (Data.Text.tolowercase ().
incluye ('hola')) {
sendmessage ('hola & lt; @ $ {data.user}
& gt; ¡Soy un bot!');
}
}
});
Los bots también pueden editar sus respuestas. Solo lo suyo, sin embargo. Entonces, si esperaba un bot de tipografía que corrigiera tus mensajes automáticamente cuando se equivoca, eso no es posible con la configuración actual.
Para actualizar el mensaje, definimos una nueva función y un booleano global que usaremos en nuestra demostración.
Deja que ChangreRePly = False;
Función UpdateMessage (MessageParams) {
bot.updatemessage (MessageParams.Channel,
MessageParams.ts, MessageParams.Text,
botparams);
}
Intentemos actualizar el texto que nos envía el bot. En este caso, en un evento de mensajes, debemos responder a un mensaje de BOT entrante, por lo que coincidiremos con esa condición para la actualización, y también usamos la marca de tiempo del mensaje original para actualizarse. Eso es tan flojo puede identificar qué mensaje actualizar, en caso de que otros sean publicados en el medio.
Si (Data.Type === 'MENSAJE' & AMP; & AMP; DATA.SUBTYPE! ==
'bot_message' & amp; & amp; data.text) {
if (Data.Text.Includes ('Actualizar')) {
EnviarMessage ('Voy a actualizar en 5
segundos');
Changerneplemente = verdadero;
}
}
if (Data.Type === 'MENSAJE' & AMP; & AMP; DATA.SUBTYPE ===
'bot_message' & amp; & amp; Changerneply) {
cambialmente = falso;
Settimeout (() = & gt; {
updatemessage ({canal: data.channel,
TS: DATA.TS, TEXTO: 'He actualizado'});
}, 5000);
}
Los mensajes efímeros son, ya que el nombre podría sugerir, temporal. También son visibles solo para un usuario y pueden ser eliminados por ellos. Esos tipos de mensajes pueden ser útiles como una punta o recordatorio que no necesita permanecer permanentemente.
if (Data.Text.tolowercase (). Incluye ('hr')) {
EphemeralMessage ({
Canal: Data.Channel,
usuario: data.user,
Texto: 'Si necesita ponerse en contacto con HR,
su correo electrónico es [email protected] '
});
}
// la función que estamos llamando
Función EphemeralMessage (MessageParams) {
bot.Postefemeral (MessageParams.Channel,
MessageParams.User, MessageParams.Text,
botparams);
}
Los diferentes métodos tomarán un parámetro de usuario ligeramente diferente (ID o nombre, que es diferente del Display_Name y Real_Name). Sin embargo, solo la ID de usuario está disponible en los eventos de mensajes. Por lo tanto, podemos implementar una búsqueda de nombre de usuario al obtener a todos los usuarios y coincidir con la identificación.
Función Async GetUsername (UserID) {
devuelva await bot.getusers ()
.Ten (datos = & gt; {
Deja que Miembro = DATA.MEMBERS.FIND
(usuario = & gt; {
devolver usuario.id === userid;
});
devolver miembro.nombre;
})
.catch (err = & gt; console.log (error));
}
Con la nueva búsqueda de usuarios, ahora podemos enviar mensajes directos a un usuario, cuando los mensajes efímeros simplemente no lo harán. Tenga en cuenta que los mensajes directos se consideran un canal nuevo / diferente, con una identificación diferente que el canal original. También puede implementar una búsqueda de canales de la misma manera que el usuario que hemos hecho anteriormente.
// en el evento de mensaje
if (Data.Text.tolowercase (). Incluye ('bot')) {
senddm ({
usuario: data.user,
Texto: '¿Cómo puedo ayudar?'
});
}
// la función que estamos llamando
Función Async Senddm (MessageParams) {
Deja que el usuario = AWAIT GETUSERNAME
(MessageParams.User);
devuelva bot.postmessagetouser (usuario, mensaje
Params.text, botparams, (err, datos) = & gt; {
console.log (error)
});
}
Los usuarios de BOT también tienen permisos para cargar archivos e imágenes a un canal. Sin embargo, esta funcionalidad no está cubierta por 'SLACKBOTS', por lo que tenemos que instanciar a un nuevo cargador, como se demuestra a continuación. También prepare una carpeta 'Activos' en la raíz de su proyecto, con algunas imágenes en ella.
Preparemos una llamada a 'SENDIMAGE ()', definida en el siguiente paso.
// en initbot ()
Uploader = NUEVO SLACKULOAD (Process.Env.
Slack_token);
// en el evento de mensaje
if (Data.Text.Includes ('Imagen')) {
Si (! data.upload) {
/ * En este caso, no hay mensaje.
subtipo,
así que verificamos que no está activado por un
Mensaje de carga anterior * /
Deje que la imagen = DATA.TEXT.SPLIT ('') ;
enviando ('esta es la imagen que
querido ', imagen);
}
}
Subimos imágenes usando el módulo de carga y sistema de archivos (FS). Siempre que el mensaje de un usuario esté en el formato "Image & LT; ImageName.Extension & GT;", y dicho archivo existe en la carpeta 'Activos', la imagen se leerá y se cargará. Si no, enviamos un mensaje regular (incluso podría ser un efímero).
Función enviando (mensaje, imagen) {
uploader.uploadfile ({
Archivo: Fs.CreaterEstream (Path.Join
(__DIRNAME, '../../assets/$mis}')),
MIMETYPE: 'Imagen / *',
Tipo de archivo: '*',
Título: Imagen,
Comentario: Mensaje,
Canales: canal
}, (err, datos) = & gt; {
if (err) {
EnviarMessage ('Lo siento, no puedo encontrar
$ {image} ');
}
});
}
Puede publicar en múltiples canales con el mismo usuario bot, siempre que sea miembro de cada canal donde esté esperando una respuesta. Creemos una función 'postoall' y actualice las variables de entorno para tener nombres de canales como valores separados por comas.
Const Canals = Process.env.Slack_Channel.
separar(',');
Const Channel = canales ;
Función postttoall (mensaje) {
canales.foreach (canal = & gt; {
bot.postto (canal, mensaje, botparams);
});
}
Ocasionalmente, es posible que desee usar canales para depurar, o responder a los eventos de manera diferente con el mismo BOT en diferentes canales. Depende de usted entrenar su convención de nombres de canal. Asumiremos por el siguiente ejemplo que SLACK_CHANNEL = WDM-Tutorial, WDM-tutorial-depuración.
Función SplitMessages (Mensaje, Depuración) {
canales.foreach (canal = & gt; {
const msg = canal.includes ('depuración')
? DEBUGMESSAYA: MENSAJE;
bot.postto (canal, msg, botparams);
});
}
Hemos estado codificando las respuestas directamente en el mensaje. Avanzando, para que las cosas sean más manejables, es posible que desee almacenar desencadenantes y respuestas, ya sea en una base de datos o en formato JSON, y cambiar entre ellos dependiendo de las condiciones cumplidas.
// Artículo de respuesta de ejemplo
{
Entrada: 'HR',
inputmatch: 'Incluir',
Respuesta: 'Si necesita ponerse en contacto con HR,
su correo electrónico es [email protected] ',
Compensación de responsabilidad: 'efímero'
}
Hay algunas otras propiedades útiles disponibles en la API holgada. Con suerte, este tutorial habrá dado una visión general de lo que es posible para todas sus necesidades de bot. Se pueden encontrar otros recursos leyendo el Documentación de 'SLACKBOTS' , o el completo Documentación API SLACK .
Este artículo se publicó originalmente en el número 289 de la revista Creative Web Design Design Diseñador web . Comprar emito 289 aquí o Suscríbete al diseñador web aquí .
Artículos relacionados:
[dieciséis] (Crédito de la imagen: Antony Ward) En mayas, las formas de mezcla, o los objetivos de morph, ya que también se..
[dieciséis] (Crédito de la imagen: Getty Images) Si sus gafas siguen empañando cuando llevas una mascarilla, no estás solo..
[dieciséis] Página 1 de 5: Ver y cambiar HTML, CSS & AMP; Js Ver y cambiar HTML, CSS..
[dieciséis] Habiendo graduado el verano pasado, todavía soy bastante nuevo en el mundo de la ilustración independiente. Sin embargo,..
Cuando estés pintando agua ondulante con algo en él, estás tomando la tarea de pintar un reflejo interrumpido. Esto puede ser difícil de imaginar, así que a menudo me gusta hacer mi prop..
[dieciséis] Dibujo con tinta Produce vastas posibilidades. Hay formas simples pero efectivas de crear hermosas texturas orgá..
[dieciséis] La pintura 'Alla prima' (es decir, pintar mojado en húmedo, en una sesión es la técnica ideal para abrazar la naturalez..
Si usted es un diseñador web, es una buena posibilidad de que Photoshop esté actualmente abierto y corriendo en su computadora. Vamos a enfrentarlo: Photoshop siempre ha sido el caballo de ..