Enviar Notificações do Slack a Partir de uma Interface Web


1Introdução

Este mini tutorial explica como criar uma interface web simples que envia notificações para um canal do Slack.

Você precisará criar um aplicativo Slack. Depois que o aplicativo for criado, você pode gerar uma URL de webhook e selecionar o canal a ser associado a ela.
Esse processo é descrito em detalhes na documentação do Slack.


2Configuração do Projeto

Se você já tem um projeto Temma existente, pode pular esta etapa.

Se o seu projeto Temma não vai ser usado para servir um site (e você não vai usar templates Smarty), instale a versão mínima com:

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

Se você quiser criar um projeto Temma completo, incluindo a renderização web, instale-o desta forma:

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

3Configuração

Vamos manter a configuração mínima, apenas com o que é estritamente necessário.

Edite o arquivo etc/temma.php :

<?php

return [
    'application' => [
        'dataSources' => [
            // definição da fonte de dados do Slack
            'slack' => 'slack://WEBHOOK'
        ],
    ],
];

Substitua WEBHOOK pelo token de webhook fornecido pelo Slack, sem o prefixo https://.
Exemplo: hooks.slack.com/services/TXXXXXXXX/BYYYYYYYY/ZZZZZZZZZZZZZZZZZZZZZZZZ


4Controlador

Vamos criar um controlador Message com três ações, correspondentes às três rotas:

  • /message/form: exibe o formulário de envio de mensagem
  • /message/notify: processa o formulário enviado e manda a mensagem para o Slack
  • /message/sent: exibe uma mensagem de confirmação

Crie o arquivo controller/Message.php:

<?php

/** Controlador Message. */
class Message extends \Temma\Web\Controller {
    /** Exibe o formulário. */
    public function form() {
    }
    /** Envia a notificação para o Slack. */
    public function notify() {
        // recupera a mensagem
        $message = $_POST['message'] ?? null;
        // se a mensagem estiver vazia, redireciona para o formulário
        if (!$message)
            return $this->_redirect('/message/form');
        // envia a mensagem para o Slack
        $this->slack[''] = $message;
        // redireciona para a confirmação
        $this->_redirect('/message/sent');
    }
    /** Exibe a mensagem de confirmação. */
    public function sent() {
    }
}

As ações form e sent não fazem nada além de renderizar uma página.

A ação notify envia a notificação para o Slack (somente se a mensagem não estiver vazia) e depois redireciona de acordo: se vazia, de volta ao formulário; se válida, para a página de confirmação.


5Templates Smarty

Edite o arquivo templates/message/form.tpl :

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

Edite o arquivo templates/message/sent.tpl :

<html>
<body>
    Sua mensagem foi enviada para o Slack.
</body>
</html>