Escolhendo a substituição usada pelo nosso sistema de mensagens, deparei-me com uma descrição do Mattermost e decidi experimentá-lo. Uma das vantagens do sistema descrito é sua simples integração com serviços de terceiros, os chamados "ganchos" (ganchos de saída e de entrada). Trata-se de configurar a interação por meio de ganchos com sistemas externos e este artigo será (no nosso caso particular, é zabbix e glpi).
Parte I Integração com GLPI
Como, em nosso trabalho, usamos o GLPI para contabilizar equipamentos, software, conexões, registro de chamadas de suporte técnico, seria lógico organizar a possibilidade de os usuários enviarem aplicativos para o TP o mais importante possível.
API
O GLPI possui http rest api para integração com serviços externos. A documentação para isso está disponível no sistema instalado no link http: //glpi/apirest.php/#glossary (onde "glpi" é o endereço do seu servidor).
Tendo pensado um pouco sobre a tarefa, foi decidido implementar o algoritmo de troca no php, em favor desta solução é o fato de o php já estar instalado no sistema e o script ter sido digitado organicamente no glpi e estar disponível em http: //glpi/mm.php . O resultado é um tipo de "proxy" que recebe uma solicitação do mais importante, converte para o formato desejado e envia o GLPI. Todas as solicitações http são enviadas no formato JSON.
O procedimento de trabalho consiste em 5 partes:
- Recebendo uma solicitação do mais importante
- Inicialização da sessão no glpi
- Recuperando dados de uma solicitação
- Enviando dados para a glpi
- Sessão de encerramento
Antes de prosseguir com a descrição do código do script, realizaremos o trabalho preparatório tanto na matéria quanto na glpi.
GLPI
- Vamos criar o usuário do helpdesk, em nome de quais solicitações serão criadas e, indo para as configurações desse usuário, geraremos tokens:

Aquele circulado em vermelho será user_token. - Nas configurações do sistema, você precisa adicionar um cliente para interagir com a API. Para fazer isso, vá para "Configurações" -> "Geral" -> "API" e clique no botão "Adicionar cliente", adicione um registro e gere um token (app_token)

- Para identificar a origem das solicitações no sistema, adicione uma entrada no diretório "Fontes de solicitações" e, na entrada recém-adicionada, lembre-se de seu ID (circulado em vermelho)

Isso conclui a configuração da API no GLPI.
Mais importante
No menu do cliente Mattermost, vá para "Integração" -> "Webhooks de saída", clique em "Adicionar" e adicione uma entrada. Na tela, enfatizei os campos significativos. Aqui devemos fazer uma digressão: o mais importante, o "gatilho" para iniciar o procedimento de envio de uma solicitação é uma palavra ou frase que, sendo indicada no início da mensagem, realmente inicia o processo. No nosso caso, a palavra-chave é "112" (aqui existe uma associação direta com o Ministério de Emergências).

O nome de usuário padrão e o link para o avatar podem ser adicionados (ou você não pode adicioná-lo), pois esses parâmetros serão transferidos na solicitação. Mas, para que o processo possa processar esses parâmetros, nas configurações do servidor, você precisa alterar algumas opções no arquivo /opt/mattermost/config/config.json
"EnablePostUsernameOverride": true, "EnablePostIconOverride": true,
Isso completa a instalação. É hora de começar a escrever código. O script é copiado para o diretório raiz com arquivos glpi, no meu caso é /var/www/html/glpi/mm.php
<?php
O resultado desse script será uma solicitação adicional no sistema de registro de incidentes no GLPI. Nas imagens, fica assim:
Escrevemos uma mensagem no mais importante:

Vamos ao GLPI "Suporte" -> "Aplicativos" e uma nova mensagem deve aparecer na lista:

Ao clicar no cabeçalho da mensagem, informações mais detalhadas serão abertas (os campos cujos valores são transmitidos no script são circulados em vermelho)

Nesta configuração, o envio de mensagens para o GLPI da Mattermost pode ser considerado completo. Tendo trabalhado um pouco no código, nada o impedirá de implementar uma alteração no tipo de solicitação (incidente ou solicitação).