Dans cet article nous allons voir comment envoyer des notifications dans un channel Slack depuis une application PHP très simplement grâce aux Webhooks de Slack.

Paramétrage de Slack

Pour communiquer avec Slack nous avons besoin de créer une “App” puis de paramétrer un “Hook” pour se faire :

1 / Connectez vous à Slack et allez à l’adresse suivante : https://api.slack.com/apps

2 / Cliquez sur “Create New App”, donnez un nom à votre application et choisissez votre workspace

3 / Cliquez sur “Incoming Webhooks”

4 / Cliquez sur “On” pour activer, puis sur “Add New Webhook to Workspace” tout en bas

5 / Choisissez votre channel puis cliquez sur “Allow”

6 / De retour sur la page “Incoming Webhooks”, allez dans la section “Sample curl request..” vous aurez une commande curl pour tester la connexion, exemple :

curl -X POST -H 'Content-type: application/json' --data '{"text":"Hello, World!"}' https://hooks.slack.com/services/xxx/xxx/xxx

7 / Juste en dessous, gardez de côté l’url “Webhook URL”

Le paramétrage de Slack est terminée c’était très rapide, maintenant passons au code !

Créer une fonction d’alerte Slack en PHP

Pour envoyer des notifications Slack nous allons tout simplement traduire la commande curl, vu en 6, en code PHP.

Pour se faire nous avons besoin d’un client http, nous allons utiliser le client de symfony. Pour l’installer on utilise composer avec la commande suivante :

composer require symfony/http-client

On passe au code :

<?php

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

// J'importe le client http de symfony
use Symfony\Component\HttpClient\HttpClient;

// Je défini une constante pour l'url Webhook
define('SLACK_WEBHOOK_URL', 'https://hooks.slack.com/services/xxx/xxx/xxx');

// Je créé ma fonction pour envoyer un message passé en paramètre
function slack($text) {
    // Je créé une instance du client http
    $client = HttpClient::create();
    // J'envoi ma requête http avec la méthode POST, avec la Webhook url
    // et avec le payload json qui contient mon message texte
    $response = $client->request('POST', SLACK_WEBHOOK_URL , [
      'json' => ['text' => $text]
    ]);
}

// J'appelle ma fonction avec mon message
slack('Hello World from PHP !');
slack('So easy');

Voilà c’est terminé, amusez-vous bien avec Slack !