Pasar al contenido principal

Cómo desarrollar una aplicación de Pomodoro para Slack en PHP

Introducción

Slack es una de las herramientas más extendidas a nivel de comunicación de forma profesional y permite integrar con múltiples aplicaciones o plugins. Un ejemplo sería Google Calendar, que permite configurarlo para que en la propia aplicación muestre las reuniones más próximas. Por tanto Slack puede llegar a considerarse una de las herramientas más importantes para la organización de un equipo si se usa de una manera responsable.

Presentación de la API de Slack

Slack tiene una muy buena documentación de su API, además de una amplia comunidad de desarrolladores que usan su aplicación, por lo que si no encuentras algo o tienes dudas accediendo a la página oficial de Slack, lo podrás encontrar en foros de desarrollo como Stack Overflow.

La librería

Aunque podríamos desarrollar la integración con la API de Slack completamente desde cero, no es eficiente reinventar la rueda, ya que el objetivo del artículo es tener una aplicación funcional en pocos pasos y de forma sencilla.

Dicho esto, os presento la librería que vamos a usar: jolincode/slack-php-api. Es una librería de Composer, por lo que la vamos a importar al proyecto usando este sistema de gestión de paquetes. Además tiene bastantes métodos de Slack que nos pueden llegar a ser útiles y que van actualizando cada cierto tiempo.

Cookbook

Ingredientes:

  • Composer
  • Php
  • Tener un workspace de Slack donde hacer pruebas

Pasos:

  • Crea una nueva carpeta donde estará situado el proyecto.
  • Ejecuta composer init para poder importar las librerías necesarias para este proyecto.
  • Importa las librerías según se indica en el manual de instalación de la librería de Slack

Quedará algo así en tu composer:

... 
   "require": {
        "symfony/http-client": "^5.2",
        "nyholm/psr7": "^1.3",
        "jolicode/slack-php-api": "^3.0",
    }
  • Copia este snippet en un archivo pomodoro.php en la raíz del proyecto. Por ejemplo:
<?php

require __DIR__ . '/vendor/autoload.php';

use JoliCode\Slack\ClientFactory;
use JoliCode\Slack\Exception\SlackErrorResponse;

// Token de slack.
$user_token = 'xoxp-XXXX-XXXX-XXXX-XXXX';
$client = new ClientFactory($user_token);
try {
  $status = [
    // Mensaje de estado.
    "status_text" => 'Pomodoro time!!',
    // Icono de estado.
    "status_emoji" => ':tomato:',
    // Duración o tiempo que va a permanecer el estado.
    "status_expiration" => strtotime('+25 minutes'),
  ];
  $status_json = json_encode($status);
  $result = $client->usersProfileSet([
    "profile" => $status_json,
  ]);

  echo 'Estado actualizado.' . PHP_EOL;
} catch (SlackErrorResponse $e) {
  echo 'Fallo al actualizar el estado.', PHP_EOL, $e->getMessage() . PHP_EOL;
}
  • Reemplaza el "user_token" de ejemplo 'xoxp-XXXX-XXXX-XXXX-XXXX' por el que se genera en el siguiente paso (obtener el token de usuario).

Obtener un token de usuario de Slack

Estos son los pasos para obtener el token del usuario registrado actualmente en Slack, por lo que no se podrá sobreescribir el estado de otros usuarios siguiendo estos pasos.

  • Accede a la api de Slack con tu usuario y ve a "Your apps"
  • Crea una nueva aplicación seleccionando el botón "Create New App"
  • Después de crear la aplicación, ve a "Features/OAuth & Permissions" en la barra lateral izquierda.
  • Ves a "User Token Scopes" y añade el permiso de "users.profile:write" seleccionando el botón de "Add an OAuth Scope". Este permiso es el que le permitirá a la aplicación sobreescribir tu estado de usuario.
  • Selecciona en "Settings/Install App" y elige un workspace para instalar la aplicación.
  • Después de instalar la aplicación obtendrás un "OAuth Access Token" que será algo cómo:
    xoxp-XXXX-XXXX-XXXX-XXXX

 

Ejecutar el script de PHP

Si ya tienes instalado PHP en tu equipo, recuerda añadir al snippet de PHP anterior el token de Slack para poder actualizar el perfil.

Ya solo tienes que ejecutar el script desde una consola de Bash.

bash$ php /RUTA_DEL_SCRIPT/pomodoro.php

Verás que el estado de tu perfil se ha actualizado, tanto el mensaje como el icono de forma temporal si todo ha salido bien.

Conclusiones

Ahora que ya conoces la librería de Slack, te invito a que pruebes con diferentes métodos, por ejemplo, enviar un mensaje a un canal en específico. También puedes probar a crear un bot aunque para ello te hará falta tener un servidor donde esté alojado.

Recuerda que según los métodos que utilices tendrás que concederles los permisos específicos a la aplicación y tendrás que reinstalarla en el workspace. Por ejemplo si me voy al método para enviar un mensaje en el chat veremos que el scope requerido para el usuario es chat:write.

Posibles mejoras

Has aprendido a cambiar el estado de tu perfil en Slack, pero la aplicación de Slack también te permite que bajo ciertos comandos que escribas en el chat llamados slash commands se hagan ciertas acciones, con eso se podría crear un comando para que en el caso de escribir /pomodoro start por ejemplo, cambie el estado del perfil.

Proyecto original

Puedes ver el proyecto original en el que se ha bastado este artículo en github con el nombre slack_pomodoro.

Otros proyectos

PHP
Eduardo Morales Alberti

Eduardo Morales

Drupal developer