Mais importante. Integração com serviços externos

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:


  1. Recebendo uma solicitação do mais importante
  2. Inicialização da sessão no glpi
  3. Recuperando dados de uma solicitação
  4. Enviando dados para a glpi
  5. 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


  1. 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:
    imagem
    Aquele circulado em vermelho será user_token.
  2. 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)

imagem


  1. 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)
    imagem

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).


imagem


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 # GLPI     $app_token = '7uizyyildM71x84j1UxeABXTuCHdPoLRW45Tx2wG'; $user_app_token ='dZdCqc10Xhb1TxCT4OsXp8qqDSEqILASf2wZot0w'; #    (  ,    ) $requesttypes_id = '7'; #    GLPI (1 - , 2 - ) $type = '1'; #      $postData = file_get_contents('php://input'); $data = json_decode($postData, true); #  json  MatterMost.       #         #$message_text = $data["text"]; #$user_name = $data["user_name"]; #$user_id = $data["user_id"]; #$channel_name = $data["channel_name"]; #$channel_id = $data["channel_id"]; #$team_domain = $data["team_domain"]; #$team_id = $data["team_id"]; #$post_id = $data["post_id"]; #  "112"  ,    4 . $message_text = substr($data["text"],4); #   POST ,      mattermost #HTTP/1.1 200 OK header('Content-Type: application/json'); $reply = array( 'response_type' => 'comment', 'text'=> '      ' ); echo json_encode($reply); #     glpi #        #         if( $curl = curl_init() ) { curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Authorization: user_token '.$user_app_token, 'App-Token: '.$app_token)); curl_setopt($curl, CURLOPT_URL, 'http://glpi/apirest.php/initSession'); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $out = curl_exec($curl); $session = json_decode($out, true); $session_token = $session["session_token"]; #echo $session_token; curl_close($curl); } #       $json = array( 'input'=> array( 'name'=>'  '.$data["user_name"], 'requesttypes_id'=>$requesttypes_id, 'content'=>$message_text, 'type'=>$type ) ); #   if( $curl = curl_init() ) { curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'App-Token: '.$app_token, 'Session-token: '.$session_token)); curl_setopt($curl, CURLOPT_URL, 'http://glpi/apirest.php/Ticket'); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($json)); $out = curl_exec($curl); curl_close($curl); } #   if( $curl = curl_init() ) { curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'App-Token: '.$app_token, 'Session-token: '.$session_token)); curl_setopt($curl, CURLOPT_URL, 'http://glpi/apirest.php/killSession'); curl_setopt($curl, CURLOPT_POST, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $out = curl_exec($curl); curl_close($curl); } ?> 

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:


imagem


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


imagem


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)


imagem


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).

Source: https://habr.com/ru/post/pt442402/


All Articles