Envoyer des notifications Slack depuis une interface web


1Présentation

Ce mini-tutoriel a pour but de créer une interface web permettant d'envoyer des notifications sur un canal Slack.

Vous devrez créer une application Slack. Une fois cette application créée, vous pourrez créer un webhook en choisissant le canal auquel ce webhook sera lié.
Tout ce processus est expliqué dans cette documentation Slack.


2Création du projet

Si vous avez déjà un projet Temma existant, vous pouvez sauter cette étape.

Si le projet Temma ne servira pas à servir un site web, et que vous n'aurez pas à traiter des templates Smarty, vous pouvez installer le projet avec la commande suivante 

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

Si par contre vous souhaitez créer un projet Temma complet, qui pourra aussi servir pour un site web, installez-le de cette manière :

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

3Configuration

Nous nous en tiendrons à une configuration minimale, contenant le strict nécessaire.

Éditez le fichier etc/temma.php :

<?php

return [
    'application' => [
        'dataSources' => [
            // définition de la source de données connectée à Slack
            'slack' => 'slack://WEBHOOK'
        ],
    ],
];

Remplacez WEBHOOK par le webhook fourni par Slack, sans le préfixe https://.
Exemple : hooks.slack.com/services/TXXXXXXXX/BYYYYYYYY/ZZZZZZZZZZZZZZZZZZZZZZZZ


4Contrôleur

Nous allons créer un contrôleur Message avec trois actions, correspondant aux trois URLs gérées :

  • /message/form : Affiche le formulaire de saisie de message
  • /message/notify : Traite le message envoyé par le formulaire, et l'envoie à Slack
  • /message/sent : Affiche un message de confirmation d'envoi

Pour cela, créez le fichier controller/Message.php :

<?php

/** Contrôleur Message. */
class Message extends \Temma\Web\Controller {
    /** Action qui affiche le formulaire d'envoi. */
    public function form() {
    }
    /** Action qui fait l'envoi de la notification. */
    public function notify() {
        // récupération du message
        $message = $_POST['message'] ?? null;
        // vérification que le message n'est pas vide
        if (!$message)
            return $this->_redirect('/message/form');
        // envoi du message sur Slack
        $this->slack[''] = $message;
        // redirection
        $this->_redirect('/message/sent');
    }
    /** Action qui affiche la confirmation d'envoi. */
    public function sent() {
    }
}

Les actions form et sent ne font aucun traitement à part afficher une page web.

L'action notify envoie la notification (si le message reçu n'est pas vide) et fait une redirection.
Si le message est vide, elle fait une redirection vers le formulaire ; sinon la redirection est faite vers la page de confirmation.


5Templates Smarty

Éditez le fichier templates/message/form.tpl :

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

Éditez le fichier templates/message/sent.tpl :

<html>
<body>
    Votre message a été envoyé sur Slack.
</body>
</html>