Actualmente en la empresa en la que trabajo, y en varias anteriores, estamos usando slack como herramienta de comunicación. Como me gusta trastear con emacs e intentar integrar todo he estado buscando como instalar el modo slack pero no me ha quedado claro.

En la web oficial a parte de explicar bastante bien como conseguir el token me ha parecido demasiado escaso el resto sobre la instalación, así que he decidido documentar como lo he acabado instalando.

Instalando el paquete

La mejor forma de instalar un paquete actualmente en emacs es a través de use-package. Si aún no lo estás utilizando te recomiendo que lo reviséis.

  (use-package slack
    :ensure t)

Con esto simplemente instalamos el paquete, podría poner toda la configuración junta como en la documentación original, pero es justo el motivo por el que me resultaba confuso, así que lo mejor será ir paso a paso

Obteniendo el token

Para obtener el token tenemos dos formas, la sencilla y la complicada, he probado las dos, y me he quedado con la sencilla, ya que para la complicada tenemos que crear nuestra propia app de slack y si no tenemos permisos de administrador del equipo o si como en mi caso ya estamos usando 10 apps, el limite de uso gratuito, pues no vamos a poder usarlo. Para la forma dificil lo mejor es seguir los pasos de la documentación del paquete.

La forma sencilla es la siguiente:

  • Abrimos el cliente web de slack, y accedemos a nuestro equipo (team):
  • Abrimos el inspector del navegador que estemos usando. Botón derecho sobre la web e inspeccionar elemento.
  • Dentro buscamos "xoxs", donde encontraremos el token que necesitamos. Lo copiamos.

Esto es lo único que necesitamos. Llevo poco usándolo y no se si ese token se regenera con el tiempo, yo lo hice por primera vez hace un par de días y me sigue funcionando, si caduca pues o bien lo hacemos por el método difícil o cuando caduque buscamos el token actualizado de la misma manera.

Probando el token

Ahora que tenemos el token, antes de meternos en la conexión a través de configuración, lo mejor es probar la conexión a través de comandos.

Ejecutamos M-x slack-start Esto nos irá pidiendo los datos de conexión.

Aquí es donde no queda nada claro en la documentación oficial que datos deberemos meter, ya que si hemos utilizado la forma sencilla de sacar un token no tenemos ni client ni secret.

Esto son los datos que debemos introducir:

Team Name: Nombre del equipo, en mi caso Devops Chat. Da lo mismo si no es exacto, por dentro lo sacará del token.

Client Id: Lo dejamos en blanco, pulsamos enter

Client Secret: Lo dejamos en blanco, pulsamos enter

Token: Aquí es donde debemos meter el token que hemos sacado del navegador.

Si todo ha ido bien ya tendremos una conexión completa donde podremos probar el modo, ojo esto no la almacenará en ningún sitio, tenemos que registrar el equipo en la configuración de nuestro emacs, para cuando lo abramos e iniciemos slack sepa a que equipos conectarse.

Configuración completa

Esta sería una configuración completa, con use-package, donde ya se registra un equipo y unos canales a los que queremos conectarnos.

  (use-package slack
    :commands (slack-start)
    :init
    (setq slack-prefer-current-team t)
    :config
    (slack-register-team
     :name "DevOps Chat"
     :default t
     :client-id ""
     :client-secret ""
     :token "xoxs-aaaaaaaaaa-bbbbbbbbbbbb-cccccccccccc-dddddddd"
     :subscribed-channels '(aws ideas nix docker)
     :full-and-display-names t
     ))

Como podéis ver el token que he pegado no es real, debéis reemplazarlo con el vuestro, este token está asociado a vuestro usuario así que no lo hagáis público, ya que con ese token cualquier persona podría publicar en vuestro nombre.

BUG TimeOut

REQUEST [error] Callback is not called when stopping process! Explicitly calling from timer.

Casualmente cuando estaba escribiendo los ejemplos de este post me topé con un bug en el modo.

Solo he usado el equipo de DevOps Chat porque es un grupo público donde poder coger capturas, pero en el día a día uso el slack de mi empresa.

En el slack del trabajo hay pocos usuarios y no me ha dado ningún problema, pero al sacar el listado de conversaciones del ejemplo me da un error del tipo REQUEST [error] Callback is not called when stopping process! Explicitly calling from timer..

Creo que esto es debido a la cantidad de mensajes y usuarios que hay en ese equipo, he probado a cambiar el timeout a un número mucho mayor, por defecto son 5 segundos y parece que funciona.

(setq slack-request-timeout 240)

En mi caso me ha valido con 240, en tu caso quizá no te haga falta tanto tiempo, o incluso setear nada.

Os dejo el enlace al bug en github por si necesitais mas información.

Comprobando la instalación

Para comprobar lo mas sencillo es comenzar una conversación con el bot de slack, para ello realizaremos los siguientes pasos:

  • Actualizamos el listado de conversaciones directas M-x slack-im-list-update. Nos pedirá el team, podemos usar el tabulador para seleccionarlo (es en este paso cuando puede dar el error del que he hablado antes).
  • Seleccionamos el chat M-x slack-im-select Igual que en el caso anterior con el tabulador veremos la lista de posibles salas.
  • Saludamos con un "hello", a ver si el bot nos responde.

Finalizando

No quiero entrar en mas detalles porque como he comentado antes solo llevo un par de días utilizando y me queda mucho por probar aún y experimentar, lo que vaya aprendiendo lo iré publicando por el blog, mientras tanto podéis continuar con la documentación oficial.

Y como siempre cualquier duda o corrección del post, puedes dejarme un comentario.