Enviar notificaciones de Slack desde una interfaz web


1Introducción

Este mini tutorial explica cómo crear una interfaz web simple que envía notificaciones a un canal de Slack.

Necesitarás crear una aplicación de Slack. Una vez creada la aplicación, puedes generar una URL de webhook y seleccionar el canal que se asociará a ella.
Este proceso se describe en detalle en la documentación de Slack.


2Configuración del proyecto

Si ya tienes un proyecto Temma existente, puedes saltarte este paso.

Si tu proyecto Temma no se va a usar para servir un sitio web (y no vas a usar plantillas Smarty), instala la versión mínima con:

$ composer create-project digicreon/temma-project-api mon_api

Si quieres crear un proyecto Temma completo, incluyendo la renderización web, instálalo así:

$ composer create-project digicreon/temma-project-web mon_site

3Configuración

Mantendremos la configuración al mínimo, con solo lo estrictamente necesario.

Edita el archivo etc/temma.php :

<?php

return [
    'application' => [
        'dataSources' => [
            // definición de la fuente de datos de Slack
            'slack' => 'slack://WEBHOOK'
        ],
    ],
];

Reemplaza WEBHOOK con el token de webhook proporcionado por Slack, sin el prefijo https://.
Ejemplo: hooks.slack.com/services/TXXXXXXXX/BYYYYYYYY/ZZZZZZZZZZZZZZZZZZZZZZZZ


4Controlador

Vamos a crear un controlador Message con tres acciones, correspondientes a las tres rutas:

  • /message/form: Muestra el formulario de envío del mensaje
  • /message/notify: Procesa el formulario enviado y envía el mensaje a Slack
  • /message/sent: Muestra un mensaje de confirmación

Crea el archivo controller/Message.php:

<?php

/** Controlador Message. */
class Message extends \Temma\Web\Controller {
    /** Muestra el formulario. */
    public function form() {
    }
    /** Envía la notificación a Slack. */
    public function notify() {
        // recupera el mensaje
        $message = $_POST['message'] ?? null;
        // si el mensaje está vacío, redirige al formulario
        if (!$message)
            return $this->_redirect('/message/form');
        // envía el mensaje a Slack
        $this->slack[''] = $message;
        // redirige a la confirmación
        $this->_redirect('/message/sent');
    }
    /** Muestra el mensaje de confirmación. */
    public function sent() {
    }
}

Las acciones form y sent no hacen nada más que renderizar una página.

La acción notify envía la notificación a Slack (solo si el mensaje no está vacío) y luego redirige en consecuencia: si está vacío, de vuelta al formulario; si es válido, a la página de confirmación.


5Plantillas Smarty

Edita el archivo templates/message/form.tpl :

<html>
<body>
    <form method="post" action="/message/notify">
        Tu mensaje:
        <input type="text" name="message">
        <input type="submit" value="Enviar">
    </form>
</body>
</html>

Edita el archivo templates/message/sent.tpl :

<html>
<body>
    Tu mensaje ha sido enviado a Slack.
</body>
</html>