Pet proyect de un bot para el Slack de LeanMind 💙
Necesitas el fichero .env en la raiz del proyecto, puedes duplicar el fichero .env.sample y modificar los valores:
# Api
API_PORT // El puerto por el que se levantará express para los comandos
MAINTENANCE // Si está en true, las peticiones que se hagan a la Api, devolverá un mensaje indicando que está en mantenimiento
# Slack
SLACK_SIGNING_SECRET // El 'Signing secret' de slack, sin este secret no se ejecutará ningún comando
SLACK_TOKEN // Token de la aplicación de Slack empieza por "xoxb"
# MongoDB
MONGODB_DATABASE // El nombre de la base de datos que se utilizará en mongodb
MONGODB_URI // La URI para conectar con la base de datos
# TheCatAPI
CAT_TOKEN // El token de TheCatAPI para consumir imágenes de gatitos :3
Para obtener el BOT_TOKEN hay que crear una aplicación de slack en api.slack.com/apps
Una vez creado el bot, deberías estar en las sección Basic Information tendrás un desplegable "Add features and functionality", entraremos en donde dice Bot y te redireccionará a la sección App Home donde actualizaremos los scopes dándole al botón en verde "Review Scopes to Add". Vamos al apartado de Scopes y añadiremos los siguientes Bot Token Scopes en base a los métodos que estamos consumiendo de Slack:
| Method | Bot Scopes |
|---|---|
/chat.postMessage |
chat:write |
/conversations.members |
channels:read, groups:read, im:read, mpim:read |
/views.open |
No scope required |
Una vez tengamos los scopes actualizados, podremos instalar el bot en nuestro workspace, podremos hacerlo al principio de la misma página donde actualizaste los scopes. Ya tendrémos disponible el token del bot que debería comenzar por xoxb.
Ahora, para poder consumir nuestras funcionalidades nos faltaría crear los Slash Commands y el Interactivity command. Para ello vamos al apartado de *Slash Commands en el menú izquierdo donde podremos crear nuestros comandos, rellenaremos todos los campos necesarios con los comandos que tenemos en la documentación de funcionalidades.
Teniendo los Slash Commands tendríamos que ir al apartado Interactivity para añadir un último endpoint {URL}/interactive, donde dice Request URL. Éste se utilizará para los comandos con "varios pasos", es decir, que si lanzas un comando y te devuelve un modal o un mensaje interactivo en el que tendrás que introducir información o habrán botones con acciones, irán a tráves del endpoint de Interactivity, para diferenciarlos, estamos utilizando el external_id para identificar el siguiente paso que deberá hacer.
Si revisas en el apartado Basic Information deberías tener los slash commands, los bots y los permisos marcados además de la app instalada en tu workspace de desarrollo. También tendrás el SLACK_SIGNING_SECRET que equivale al Verification Token
Estamos utilizando TheCatAPI para obtener imágenes aleatorias de gatitos, con ponerlo en producción sería suficiente, si no está el token, devolverá siempre la misma url de una imagen. Creándote una cuenta en TheCatAPI podrás obtener el token.
Tenemos estos scripts:
build // Genera la carpeta dist
start // Arranca la app
start:dev // Arranca la app y se actualizará al guardar
test // Lanza los tests
test:watch // Lanza los tests y se relanzarán al guardar
Si nunca has utilizado node, se arrancarían utilizando el comando npm run <script> siendo script uno de los anteriores mencionados
- Clonar el repositorio
- Configurar el
.envhaciendo una copia de.env.sampley actualizando las variables. - Instalar los paquetes de node con
npm install - Exponer tu ip local para poder acceder a los comandos desde slack (se recomienda
ngrok) - Actualizar los slash commands y el endpoint de interactive con la url que te da
ngrok - Levantar la base de datos con docker
docker-compose up database(no tiene seguridad user-pass) - Arrancar la aplicación en watch
npm run start:dev
- Clonar el repositorio
- Configurar el
.env.prod - Levantar todo con docker
docker-compose up
- actions: Las acciones programadas, los endpoints y la interactividad harán las acciones que hay en esta carpeta, dependiendo de la acción
- models: Aquí están los Modelos de datos, DTOs e Interfaces
- scheduler: Aquí es donde se realizarán las acciones programadas
- services
- api: Los slash commands y la interactividad entrarán a través de la API
- cat: El servicio que nos proporciona imágenes de gatos
- database: Es donde se accederá a la base de datos
- mongodb: Es la implementación de la base de datos que estamos utilizando actualmente
- file: Es el servicio que se encargará de escribir en ficheros
- i18n: Aquí se encontrará todo lo relacionado con los textos y traducciones de la aplicación
- logger: Aquí están todos los logs para tener un control de lo que va sucediendo en la aplicación
- platform: Aquí están todas las plataformas en las que se utiliza o se podría utilizar el bot
- slack: Es el que conecta con slack a través de los endpoints
- methods: Aquí estarán todos los métodos que utilizaremos de slack
- props: Son los métodos para recuperar las propiedades de cada acción
- views: Son objetos que slack reconocerá como vistas
- slack: Es el que conecta con slack a través de los endpoints
- schedule: Es donde se crearán las fechas o intervalos de las acciones programadas
- tests: Aquí están principalmente los builders de los tests que están con sus respectivos servicios
- Slack API: https://api.slack.com/
- Methods: https://api.slack.com/methods
- Emojis para Slack (nombres): https://emojipedia.org/slack