Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP
Code

Cómo crear una interfaz Slack para tu aplicación PHP

by
Difficulty:IntermediateLength:LongLanguages:

Spanish (Español) translation by Rolando Gonzalez (you can also view the original English article)

Si has estado siguiendo el desarrollo de herramientas de comunicación de la oficina en los últimos años, estoy seguro que has oído hablar bastante sobre Slack. En el nivel superficial, Slack es sólo otra aplicación de chat diseñada para las empresas, pero debido a su atención al detalle y su extensibilidad, muchos comentaristas están diciendo que la herramienta cambiará dramáticamente cómo trabajaremos en el futuro.

Como desarrolladores, nos encontramos en una buena posición para saltar en la tendencia y pensar en que manera podemos utilizar Slack como una interfaz de usuario basada en chat para nuestras aplicaciones.

Es por eso, en este tutorial, aprenderás cómo comenzar a integrar tu aplicación PHP para Slack, enviando mensajes a un canal de Slack y responder a los comandos slash.

Puedes descargar el código fuente para el tutorial desde el repositorio de GitHub, o crearlo tu mismo mientras avanzas en el tutorial.

Código del tutorial consta de dos partes:

  • una escueta pero completa interfaz para comunicarse con Slack
  • un simple script de ejemplo que utiliza la clase de Slack para enviar notificaciones y responder a un comando de slash

Vamos a empezar.

1. Crear tu aplicación y conectarla a Slack

Una rápida búsqueda en Google para el término "Slack PHP" nos da varias interfaces Slack diferentes creados por otros desarrolladores, Así que podrías comenzar con un proyecto existente y engancharlo a tu aplicación.

Pero la API no es complicada en lo absoluto, por lo que no hay razón para no tener algo de diversión y enfoque del proyecto de inicio a fin. De esta manera, sabrás lo que está en la API (y su integración). Siempre es bueno desmitificar un poco las cosas.

El núcleo de este tutorial es la construcción de una interfaz de Slack, pero para utilizarla y probarla, también necesitaremos una aplicación. Para ello, decidí ir con una simple aplicación de PHP que no utiliza ningún framework.

Aquí es cómo funciona la aplicación de ejemplo:

  1. La primera vez que ejecutas la aplicación, verás un botón de "Añadir a Slack" para conectar la aplicación a un canal de Slack.
  2. Clic en el botón te guiará a través de la autenticación basada en Slack OAuth. Cuando la aplicación recibe un token de acceso de Slack, lo guardará en un archivo de texto para que posteriormente puede utilizarlo para comunicarse con Slack.
  3. Cuando la autenticación basada en OAuth es completada, la aplicación mostrará un simple campo de texto que puede utilizarse para enviar simpáticas notificaciones ("Oh sí, soy un robot!") a tu canal de Slack.
  4. Por último, detrás de escenas, la aplicación responderá a comandos slash que tu o tus compañeros de equipo escriban en el canal vinculado a Slack.
This is what our example application will look like

Puedes ejecutar la aplicación en un servidor habilitado con PHP en la web, o sigue las instrucciones de este tutorial para ejecutarlo en tu máquina de desarrollo personal.

El demo de la aplicación es solo para fines demostrativos, por lo que al final, probablemente tomarás la interfaz de Slack y la conectarás a tu WordPress, Laravel u otro proyecto PHP existente. A lo largo del tutorial, voy a compartir algunas ideas acerca de cómo puedes utilizar la clase de interfaz en una aplicación real en lugar de nuestra simple aplicación demo.

Paso 1: Crea tu aplicación PHP

En primer lugar, vamos a comenzar creando la arquitectura básica del proyecto y poner todos los ficheros en su lugar.

Si has descargado el código fuente de GitHub, puedes observar rápidamente estos pasos para estar seguro que entiendes como está organizado el código y despues puedes moverte al proximo paso.

Dentro del directorio del proyecto, crea la estructura de archivos siguiente:

  1. index.php: El archivo de la aplicación de ejemplo descrito anteriormente.
  2. slack-interface: Un directorio que contendrá la interfaz de Slack que voy a ir creando en este tutorial. El directorio tendra tres archivos:
    1. slack-interface/class-slack.php: La clase interfaz de Slack.
    2. slack-interface/class-slack-access.php Una clase para mantener la información de acceso de Slacky pasarla a la aplicación mediante la interfaz.
    3. slack-interface/class-slack-api-exception.php Una clase de excepción para pasar errores desde la interfaz al código usado.

Luego, con los archivos en su lugar, vamos a añadir contenidos a cada uno de ellos por lo que contamos con el framework para el desarrollo de la funcionalidad actual.

Comienza agregando el formulario principal en HTML  enel archivo index.php:

Echemos un vistazo al contenido del script y lo que hay en él en este momento:

  • En las líneas 7-13, primero se incluyen los archivos de librería y luego se notifica a PHP que vamos a utilizar las clases SlackSlack_API_Exception del namespace (nombre reservado) Slack_Interface La clase y los archivos no existen todavía, pero vamos a llegar pronto a ellos.
  • A continuación, hay dos placeholders (marcadores) para funciones auxiliares. La primera función de ayuda, initialize_slack_interface (líneas 19-26), establecerá la clase Slack para la sesión actual.
  • La segunda función auxiliar, do_action (líneas 28-45) se utilizará para manejar otras acciones menos procesar la página, por ejemplo, publicar el mensaje enviado a su canal de Slack, pero también recibe entrada de comandos slash de Slack.
  • Después de las funciones de ayuda, está la "principal"  funcionalidad de nuestra pequeña aplicación. En primer lugar, la aplicación inicializa el objeto Slack (línea 52). Luego, en las líneas 54-59, comprueba si se ha solicitado una acción mediante el parámetro action (acción). Si es así, la aplicación ejecuta la acción utilizando nuestra función de ayuda do_action.
  • El resto del script es HTML básico (y algunos CSS, que escribí en el mismo archivo para mantener las cosas simples) esto muestra el formulario que ves en la imagen de arriba.

A continuación, añade algunos contenidos en los archivos de la clase que conformarán nuestra interfaz de Slack.

En class-slack.php, agrega el código siguiente:

La clase no contiene ninguna funcionalidad aun, excepto en el constructor y la definición de la URL raíz de la API de Slack. En la línea 2, también notarás que la clase se coloca en un namespace (espacio de nombre), Slack_Interface.

Del mismo modo, en class-slack-access.php, agregue el código siguiente:

Por último, agregue el siguiente contenido a class-slack-api-exception.php:

Ahora, hemos creado el framework para nuestra aplicación de Slack y estamos listos para comenzar a añadir funcionalidad.

Pero primero, necesitamos poner la aplicación disponible en la web para que Slack puede comunicarse con ella.

Paso 2: Haz que tu servidor est disponible en Internet

Antes de poder registrar tu aplicación con Slack y hacer que reciba llamadas de Slack, primero necesitas que esté accesible en internet.

Los comandos de slash también requieren que la aplicación está utilizando HTTPS. Si no te preocupan los comandos y simplemente deseas que tu aplicación pueda enviar notificaciones, puedes omitir esta parte. Para este tutorial, sin embargo, como recibirá comandos de slash es una gran parte de lo que queremos hacer, necesitamos una solución que nos de soporte HTTPS.

Si su servidor web ya tiene configurado HTTPS, es una forma natural de proceder.

Otra opción, en la fase de desarrollo, es utilizar un servicio de túnel como localtunnel. Localtunnel da a tu servidor una dirección URL segura en la web que puede ser apuntada a tu servidor web, ejecutado en tu máquina local. Mientras que no es una solución para aplicaciones de en vivo, cuando se prueba la funcionalidad, simplifican tu flujo de trabajo (sin necesidad de subir archivos a un servidor) y le da soporte HTTPS.

Para empezar, instala localtunnel según las instrucciones en la Página Web.

Luego, inicia tu servidor web, observa los puertos que están escuchando en tu servidor.

Y por último, una vez que el servidor esté corriendo, inicia localtunnel desde terminal de comandos usando el siguiente comando. Reemplaza your_subdomain con tu subdominio y your_port con el puerto del servidor web que prefieras:

Si tu subdominio solicitado está disponible, localtunnel inicia, y puedes acceder a tu servidor a través de la direccin https://your_subdomain.localtunnel.me.

Tunneling started

Paso 3: Registrar una nueva aplicación Slack

Una vez que el servidor pueda ser accedido desde internet, es tiempo de registrar una nueva aplicacion Slack.

Para crear una aplicación Slack, inicia sesión con tu cuenta de Slack y visite la página de New Application (nueva aplicación). También puedes encontrar el enlace a esta página haciendo clic en My Apps (mis aplicaciones) en la esquina superior derecha de tu consola Slack API

You will find the Add New Application link on your My Apps page

La página de la nueva aplicación se ve así:

The New Application page

En esta página, especifique la información sobre tu aplicación y haga clic en crear aplicación para guardarlo:

  • Nombre de aplicación: Un nombre para identificar tu aplicación en la lista de aplicaciones, pero también en cualquier mensaje envíes a Slack. Yo escogí "Slack Tutotorial".
  • Equipo: El equipo para que la aplicación estará disponible. Cuando tu aplicación esté lista, puedes enviarla al directorio de la aplicación. En ese momento, el equipo de Slack revisará y, si todo sale bien, hará tu aplicación disponible a todo el mundo.
  • Breve descripción: Una descripción que se mostrará a los usuarios cuando ellos estén conectando tu aplicación a sus canales de Slack. Si solo estás probando, puedes dejar esto vacío por ahora. Lo mismo pasa con el enlace a las instrucciones de instalación y campo de información de la aplicación.
  • Icono: Un ícono que se mostrará a los usuarios cuando vayan a conectar tu aplicación a sus canales de Slack, así como cada mensaje publicado por tu aplicación.
  • Redirect URI(s): Una dirección URL que Slack redirigirá a los usuarios cuando hayan completado la autenticación. Veremos esto en más detalle en los pasos 5 y 6, pero ahora, sólo tienes que configurar el campo para que apunte a index.php?action=oauth en tu aplicación, por ejemplo, https://your_subdomain.localtunnel.me/slack-integration/index.php?action=oauth.

Cuando se ha creado la definición de aplicación Slack, verás que aparece en la página de My Apps. Allí, puedes editar la información de la aplicación si es necesario y copiar sus credenciales de la API (listadas en una sección denominada información de OAuth) para su integración:

OAuth Information

Paso 4: Almacenar las credenciales de la API en tu aplicación

A continuación, como almacenarás las credenciales de la API en tu aplicación PHP, es bueno tomar algún tiempo para pensar acerca de cómo hacerlo lo mas seguro posible.

En general, no se considera como una buena práctica para cometer tal información sensible al control de versiones. En cambio, puedes ir con una de las siguientes opciones:

  • Almacenar las credenciales en una base de datos puede ser una buena idea, por ejemplo, en un plugin para WordPress donde cada usuario tendrá su propias credenciales de la API y que deseas que sea capaz de establecer sus credenciales directamente en el panel de Admin.
  • Otra opción (Un poco más segura que la anterior) es definir las credenciales como constantes en un archivo de configuración directamente en el servidor (de nuevo, si trabajas con WordPress, wp-config.php sería una elección natural). Sólo asegúrate de que el archivo de configuración no está expuesto al mundo exterior (o comprometidos con control de versiones).
  • Por último, puede establecer el identificador de cliente y el secreto como variables de entorno en el servidor. Esta manera, la información no es almacenada en un archivo que puede ser filtrado accidentalmente fuera de la aplicación.

En nuestra implementación, lo haremos con una combinación de los dos últimos métodos. Para hacer que la interfaz de Slack conozca sobre las credenciales de la API, agrega dos nuevas funciones a la clase Slack:

Las dos funciones son copias casi exactas de cada una, así que vamos a ir a través de la primera, get_client_id, para tener una idea de lo que hacen:

  • En primer lugar, en las líneas 7-10, la función comprueba si el ID del cliente se ha almacenado en una constante llamada SLACK_CLIENT_ID. Si se define esta constante, la función devuelve su valor.
  • Si la constante no ha sido definida, la función continúa comprobando si existe una variable de entorno con el mismo nombre (líneas 12-15).
  • Por último, si no se ha encontrado ningún ID de cliente, la función devuelve una cadena vacía.

Para utilizar esto, agrega tus credenciales de acceso al inicio del index.php, o mejor aún, un archivo PHP aparte que incluirás en index.php pero excluyelo de tu control de versiones:

Paso 5: Crear una estructura de datos para almacenar información de autorización

Ahora que hemos guardado las credenciales de la aplicación, es tiempo de pasar al siguiente nivel de autenticación: permitiendo a los usuarios a agregar la aplicación a sus cuentas de Slack.

El flujo de autenticación consta de tres pasos:

  1. Si el usuario aún no ha agregado la aplicación a Slack, un boton "Add to Slack" se mostrará en la aplicación.
  2. Después de hacer clic en el botón, el usuario deberá autorizar a la aplicación para publicar notificaciones y responder a los comandos en un canal de Slack.
  3. Cuando el usuario autoriza la aplicación, tu aplicación recibe un código temporal que luego intercambia a un sistema de información de autenticación permanente usando la API de Slack.

Empezaremos a implementar pronto el flujo, pero en primer lugar, necesitaremos un método para almacenar y utilizar la información de autenticación una vez que hemos recibido de Slack.

Para ello, usaremos la clase Slack_Access, que hemos creado anteriormente en el tutorial.

En la parte superior de la clase, primero definimos las variables para almacenar los datos de la autorización:

A continuación, implementa el constructor para leer los valores de estas variables de un arreglo que se pasa como parámetro:

El constructor inicializa las variables a los valores pasados en el arreglo $data, o valores vacíos si el dato no está presente en los atributos del arreglo.

Después de el constructor, agrega una función para comprobar si se ha inicializado el objeto con datos válidos:

Entonces, para almacenar los datos de autenticación, agrega la siguiente función:

La función devuelve una cadena con formato JSON que contiene los datos de autorización.

En una aplicación real, probablemente querrás atar la información de autorización a las cuentas de usuario y guardar los datos JSON junto con la información de usuario. Sin embargo, en nuestra aplicación de ejemplo, una vez más, vamos a ir con un enfoque simple: asumiremos que sólo un usuario (usted) usará la aplicación, y tan sólo tendremos que almacenar un conjunto de credenciales de OAuth.

Pero primero, vamos a pasar a la clase Slack y aprovechar la funcionalidad que acabas de agregar a Slack_Access.

Implementa el constructor para configurar el objeto de acceso para la instancia actual de Slack:

Después el constructor, agrega una función para comprobar si los datos de autorización del objeto Slack se han establecido:

Paso 6: Mostrar el botn de Agregar a Slack

Con la estructura de datos en su lugar, podemos empezar a utilizar los controles de autorización en la aplicación principal y mostrar el botón de "Añadir a Slack".

Observe que mientras la propia clase Slack_Access se puede utilizar en la mayoría de las aplicaciones más o menos como es, la solución utilizada en index.php es sólo con fines de demostración: como no tenemos una base de datos o gestión de usuarios, simplemente se salvan las credenciales de acceso con formato JSON de to_json en un archivo de texto.

En este punto, el archivo aún no existe, que significa que la aplicación todavía no ha añadido ninguna cuenta de Slack, y debe mostrar el botón de "Añadir a Slack" en lugar del campo de texto.

Para implementar el sistema de almacenamiento sencillo, empieza por cambiar index.php función initialize_slack_interface con los siguientes:

En las líneas 9-14, la función lee los datos de la autorización como una cadena de un archivo de texto denominado access.txt si el archivo existe. Si el archivo no existe, se inicializa la cadena JSON con un hash vacio.

Luego, en la línea 17, los datos se analizan en un arreglo para pasarlos a la interfaz de Slack (en la línea 19).

Ahora, estamos listos para poner todo junto y hacer nuestra pequeña aplicación mostrar el botón de "Añadir a Slack" si no se encuentran datos de autorización.

Al final del index.php, reemplaza el formulario con el siguiente fragmento de código:

En el fragmento de código, en la línea 1, notará que el formulario está ahora rodeado de un control is_authenticated para que un usuario no pueda verlo antes de autorizar la aplicación.

Luego, en el else, en las líneas 8-12, el código muestra ahora el botón "Añadir a Slack".

Vamos a echar un vistazo a lo que está dentro de la etiqueta a del botón:

  • En primer lugar, el botón apunta al usuario hacia la autorización OAuth de Slack (oauth/autorizar).
  • Usando el parámetro scope, la aplicación puede definir los permisos que necesita el usuario para permitir que: en nuestro caso, necesitamos webhooks entrante (incoming-webhook) para publicar las notificaciones y la posibilidad de añadir nuevos comandos slash (commands). Para una lista completa de los permisos disponibles, consulte la documentación de la API.
  • Por último, el enlace debe incluir la clave pública de la aplicación (clinet_id), que almacenamos en nuestra aplicación anteriormente en el tutorial.

El resto es sólo HTML básico para mostrar la imagen del botón.

Ahora, cuando abra la aplicación en su navegador, esto es lo que deberías ver:

The Add to Slack button

Paso 7: Completar la autenticación OAuth

Ahora, el botón de "Añadir a Slack" está situado. ¿Pero qué sucede cuando el usuario hace clic en él?

Primero, el usuario verá la página de autenticación de la aplicación de Slack, que se ve así:

Give the Slack application access to one your Teams channels

Entonces, si todo se luce bien al usuario, él o ella hará clic en el botón Autorizar, en este momento la ejecución te devuelve a tu aplicación.

Te recuerdas cuando definimos la aplicación de Slack, establecimos una dirección URL para callback (devolución de llamada) (YOUR_URL/index.php?action=oauth).

Para manejar este callback (devolución de llamada), vamos a usar el sistema de acciones que hemos creado anteriormente en este tutorial. En tu aplicación real, deberás aplicar el callback URL de una manera que funcione bien para la plataforma que estás utilizando. Por ejemplo, en WordPress, podrías crear un permalink personalizado utilizando el rewrite engine (motor de reescritura).

Sin embargo, mientras que la forma de recibir el callback se difiere de acuerdo con la aplicación, lo que hacemos con los datos recibidos de Slack sigue siendo lo mismo.

Reemplaza la función aun vacía do_action con lo siguiente:

Cuando el usuario regresa de la lógica de autorización, esta función se llama con $action con el valor de 'oauth'. Junto con la solicitud, la aplicación recibe un token una sola vez, que se lee en la línea 17.

Luego, en la línea 21, para completar la autorización, la función llama a una función en nuestra clase Slack, do_oauth.

Como recordarás, al inicializar la interfaz de Slack, tratamos de cargar los datos de autenticación desde un archivo de texto access.txt. Cuando no encuentra el archivo, la aplicación decidió que el usuario todavía no había autenticado la solicitud y mostraba el botón "Añadir a Slack".

Ahora, después de la autenticación OAuth ha sido completada con éxito, en la línea 23, la función guarda los datos en ese archivo.

Pero antes de llegar allí, para completar el flujo de autenticación, todavía tenemos que implementar la función do_oauth en la clase de Slack.

Esta función llamará a la API de Slack para intercambiar el código que se pasa a la función de callback de OAuth con datos de autentificación que pueden ser almacenados permanentemente y utilizamos para comunicarnos con Slack hasta que el usuario revoque la autorización.

Para ello, necesitamos una manera de hacer una petición HTTP al servidor de Slack. Hay muchas maneras de hacer las solicitudes HTTP en PHP, y lo que presento aquí no es la única manera. Por ejemplo, si estás desarrollando para WordPress, puedes escoger wp_remote_get y wp_remote_post.

Esta vez, sin embargo, para mantener todo independiente de cualquier framework en particular, decidí hacerlo una librería gratuita con una sintaxis hermosa y limpia, Request.

Instala la biblioteca de acuerdo con las instrucciones en su página web. En el código fuente en el repositorio de GitHub Tuts +, encontrarás la configuración para composer para incluir la libreria a nuestra aplicación.

Una vez que haya instalado Request (o la opción de librería HTTP), agregue la función de do_oauth a la clase de Slack:

Veamos la función línea por línea:

En las líneas 14-18, la función inicializa los parámetros de la solicitud HTTP. Cabe destacar el identificador del cliente y el secreto se pasan como opciones de solicitud para utilizar el mecanismo de autenticación básica de HTTP.

En la línea 21, te darás cuenta de que nos envía solo una vez el token recibido en la función de callback a la API de Slack para identificar la solicitud.

La solicitud POST se envía en la línea 23. Entonces, la función procede analizando de la respuesta y ajusta los datos de autorización (líneas 33-44) si todo fue bien, o devuelveuna excepción (líneas 28-31) si hubo un error con la solicitud.

Ahora, el flujo de "Añadir a Slack" está listo. Cuando lo intentes, veras lo siguiente:

The authentication flow was completed successfully

También, si te fijas en tu directorio del proyecto, debes encontrar un archivo de texto denominado access.txt, con los datos de autenticación almacenados en ella.

Ahora, estamos listos para la parte más divertida: hacer que la aplicación envíe a tu canal de Slack.

2. Enviar una notificación a un canal de Slack

Publicar notificaciones a un canal de Slack es una manera poderosa de mantener un equipo actualizado sobre los eventos que son importantes para ellos. Una tienda web puede enviar notificaciones de nuevas compras, un software de seguimiento de fallos automáticamente podría notificar a los desarrolladores, y la lista continúa.

En nuestro ejemplo, como ya se ha visto en la interfaz de usuario anterior, enviaremos cualquier notificación que el usuario envía usando el campo de texto.

Pero la funcionalidad para el envío de cualquier otro tipo de notificaciones es el mismo, por lo que una vez que esté listo, puedes usar el mismo código para enviar tus propias notificaciones más complejas.

Paso 1: Crear una función para el envío de una notificación

En la clase Slack, agrega la siguiente función:

La publicación de una notificación a un canal de Slack se hace usando un webhook (gancho web), una URL de autorización específica que Slack expone a la aplicacion para publicar en el canal.

No prestamos mucha atención a lo anterior en el flujo de "Añadir a Slack", pero si nos fijamos en los datos en Slack_Access otra vez, notarás que Slack devuelve un campo llamado incoming_webhook. Este campo es un arreglo con dos campos dentro de ella: la URL donde debemos publicar nuestras notificaciones y el canal que el usuario seleccion para los mensajes de la aplicacion.

Para acceder a esos datos, agrega las siguientes dos funciones a la clase Slack_Access:

Ahora, volvamos a la función anterior send_notification y mira cómo estas funciones son utilizadas para enviar la notificación.

En la línea 19, notarás que la solicitud HTTP es enviada una URL incoming webhook (gancho web entrante) guardada en los datos de autorizacion.

Y más tarde, en la línea 24, el canal es pasado en los parámetros de la petición, junto con el texto y los datos adjuntos que desea publicar.

Paso 2: Utilizar la notificación que envía la función en la aplicación de ejemplo

Ahora que hemos implementado la función de envío de notificaciones, vamos a agregarle la funcionalidad a nuestra interfaz de usuario y prueba.

Agrega la siguiente nuevo case (caso) a la función do_action en index.php:

Este fragmento de código lee el mensaje de los parámetros de la petición (línea 3) y utiliza la función send_notification que acabamos de crear para publicar en Slack (línea 6).

Como formulario se creó ya al principio del tutorial, ahora estás listo para enviar tu primer mensaje a tu canal de Slack. Escribe algo en el campo de texto y Pulsa Intro para enviar el formulario.

Entonces, echa un vistazo a tu canal Slack para ver tu mensaje:

The bot just sent its first message

Paso 3: Use los adjuntos para hacer tus notificaciones más informativas

En la función de send_notification, probablemente notaste un parámetro llamado attachments (archivos adjuntos). No lo mencioné aun como no encaja tan bien con la aplicación de ejemplo. Sin embargo, los attachments (adjuntos) son una potente forma de pasar información más interesante sobre eventos de la aplicación al canal de Slack, y probablemente querrás utilizarlos en tus aplicaciones.

Por lo tanto, vamos a experimentar un poco con los adjuntos modificando un poco la llamada send_notification del paso 2. Reemplaza la llamada $slack->send_notification() con el siguiente código:

El archivo adjunto especificado en el código anterior es una notificación imaginaria acerca de la adición de una nueva receta de pan en una base de datos de recetas. Está allí sólo como un ejemplo, así que Anímate y modifícalo para ver cómo los cambios realizados afectan el resultado en el canal de Slack.

  • fallback: un mensaje de texto requerido que se muestra si no se puede mostrar el archivo adjunto.
  • title: un título para el adjunto, estilo usando una tipografía más grande.
  • title_link: una dirección URL que se abre cuando el usuario hace clic en el enlace. En nuestro ejemplo, Esto demostraría la receta.
  • text: texto que aparecerá dentro del adjunto.
  • color: el color de la línea en el lado izquierdo del adjunto.
  • fields: una lista de campos de datos para mostrar en los adjuntos. En el ejemplo, se utilizan para mostrar información acerca de la receta.
  • image_url: Una dirección URL a una imagen para mostrar en el archivo adjunto.

Esto es lo que verás cuando publiques la notificación con el adjuntos especificado arriba:

A Slack notification with an attachment

Jugar con los parámetros y verás cómo los cambios afectan los mensajes publicados en tu canal de lack: modifica los atributos, envia una nueva notificación y echa un vistazo a lo que ha cambiado.

Para obtener más información acerca de los adjuntos, mira la documentación de Slack.

3. Has tu aplicación responda a comandos Slash

La aplicación ahora puede hablar con Slack. A continuación, vamos a hacer que la comunicación funcione también al revés: añadiendo comandos slash, podemos hacer que Slack trabaje como interfaz para nuestra aplicación.

En una aplicación del mundo real, esto tiene muchos casos de uso. Marca un error como solucionado, marcar un pedido como enviado, o pidiendo un chiste son unos vienen a la mente.

Vamos a seguir adelante y poner en práctica la solicitud de la broma a publicar una broma cuando alguien escriba /broma en el canal de Slack.

Paso 1: Definir un comando de slash

En primer lugar, visite la página de configuración de la aplicación de Slack para definir el nuevo comando slash.

Desplázate hacia abajo hasta la sección con el título, Slash Commands (barra de comandos) y has clic en Create new command (crear nuevo comando).

Slash Commands

En la siguiente pantalla, introduce la información necesaria para especificar el comando nuevo y has clic en Save (guardar).

Create New Command

Aquí están breves descripciones de los campos de esta página:

  • Command: El comando slash, incluido el carácter slash (/ barra). Por ejemplo, /joke.
  • Request  URL: La URL en el servidor que debe llamarse cuando alguien escribe este comando slash en un canal de Slack. Aquí es donde localtunnel nos ayuda: la URL debe ser HTTPS y disponible para internet. Utilice el siguiente formato de dirección URL para hacer que la URL que solicita sea compatible con la funcionalidad que construiremos en el paso 2: YOUR_SERVER/index.php?action=command.
  • Short Description: Una descripción que se muestra en la ventana emergente de autocompletar cuando alguien está escribiendo el comando.
  • Usage Hint: Si el comando toma parámetros, usted puede describirlos aquí. Este texto también es visible en el cuadro de diálogo de autocompletar.

Después de guardar el comando, usted encontrará su nuevo comando que se muestra en la sección Slash Commands (barra de comandos). Puedes utilizar los botones para editarlo o borrarlo.

Slash Commands now include the joke command

A continuación la lista de comandos, encontrarás una cadena etiquetada Verification Token (Token de verificación).

Puede utilizar este token para comprobar que los comandos ciertamente vienen de Slack antes de ejecutarlos. Almacena el símbolo (token) en la aplicación de la misma manera que hiciste con el ID de cliente y el secreto anteriormente en el tutorial, por ejemplo mediante la adición de una constante al inicio del index.php:

Paso 2: Crea un sistema para realizar un seguimiento de barra de comandos en tu aplicación

Ahora, Slack permitirá identificar el comando cuando alguien escribe en la ventana de chat Slack (puedes probarlo ahora para que veasla ventana emergente de autocompletar).

Cuando el usuario envía el comando, Slack llamará nuestro servidor en la URL de solicitud especificada en el paso anterior. Ahora, tendremos que implementar la funcionalidad para hacer que nuestra aplicación responda a él correctamente.

Puedes añadir más de un comando de barra para la aplicación de Slack, es bueno tener un varios comandos de  barra. Por eso comenzaremos por crear un sistema para realizar un seguimiento de comandos en la aplicación.

En primer lugar, en la clase Slack, agrega la siguiente variable que contenga los comandos:

En el constructor de la clase, agrega una línea para inicializar el arreglo:

A continuación, crea una función para añadir un nuevo comando de barra al arreglo:

Ahora que tienes una lista de comandos de barra, agrega una función para ejecutar un comando:

Vamos a ir a través de la función para ver lo que hace:

En primer lugar, en las líneas 8-12, la función recoge datos de los parámetros de petición:

  • token se utiliza para verificar que la solicitud es una comando válida de Slack.
  • command contiene el comando de barra que debe ser ejecutado.
  • text es la cadena de texto que se ha escrito después del comando. Puede ser utilizado para pasar parámetros a tu comando de barra.
  • user_name es el nombre de usuario del usuario que envió el comando de barra.

En la línea 15, la función hace la verificación comparando el token que se pasó en los parámetros de la petición a la que tenemos almacenadas en el paso anterior.

Si el token es válido, la función continua ejecutando el comando, si alguno con el nombre del comando especificado ha sido registrado en la clase de Slack. La ejecución del comando se realiza en la línea 20, donde la función hace una llamada a la función de callback especificada para el comando.

Luego, en la línea 21, la respuesta es codificada en una cadena JSON y la muestra. Observe que la función termina con una llamada de exit para asegurarse de que nada más llega impreso después de la respuesta.

Para completar la funcionalidad, agregue la función get_command_token para recuperar el token de verificación del comando de la aplicación:

La funcionalidad de comando de barra en la clase Slack está ahora completada, y todo lo que queda por hacer antes de que podamos implementar nuestro primer comando es conectar la URL de callcbak a este código.

Para ello, añade una nuevo case en la función de do_action en index.php:

Paso 3: Registre y compruebe el comando de barra

Ahora que hemos creado un sistema para el manejo de comandos de barra en nuestra aplicación, vamos a utilizarlo para implementar la funcionalidad del comando /joke.

En primer lugar, al final de la función initialize_slack_interface, agregue las siguientes líneas de código para registrar el comando y pasar el nombre de la función que manejará el comando:

A continuación, cree la función:

Como esta función se creó como una demo, no hace mucho: al azar escoge uno de los chistes y devuelvelos en un formato esperado por Slack.

Nota que aunque esta función de comando no tiene ningún parámetro, para un ejemplo más complejo, se pueden añadir dos parámetros: $text para acceder a los datos que el usuario escribió después del comando y $user_name para obtener el nombre del usuario que ha enviado el comando.

Para probar el comando, siga adelante y escriba /joke en el canal de Slack.

The application tells a joke

Conclusión e Ideas para el futuro

Has completado el tutorial y sabes como integrar tu aplicación PHP con Slack. Durante el tutorial, también has construido herramientas para el envío de notificaciones a un canal de Slack, así como responder a los comandos que los usuarios escriben directamente en Slack.

El siguiente paso es poner estas ideas a trabajar de verdad.

Pensar sobre tu aplicación y busca lugares donde hablar con Slack y escuchar a los comandos de Slack podrían hacer la experiencia más útil y agradable para tus usuarios y ponlos en práctica.

La plataforma está evolucionando rápidamente, y así es la API. Mantén la vista hacia dónde va y construye algo increíble!

¡Sé el primero en conocer las nuevas traducciones–sigue @tutsplus_es en Twitter!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.