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>