Lo más importante. Integración con servicios externos.

Al elegir el reemplazo utilizado por nuestro sistema de mensajería, me encontré con una descripción de Mattermost y decidí probarlo. Una de las ventajas del sistema descrito es su integración simple con servicios de terceros, los llamados "ganchos" (ganchos salientes y entrantes). Se trata de configurar la interacción a través de enlaces con sistemas externos y este artículo será (en nuestro caso particular, es zabbix y glpi).


Primera parte Integración con GLPI


Dado que, en nuestro trabajo, utilizamos GLPI para contabilizar equipos, software, conexiones, registro de llamadas de soporte técnico, sería lógico organizar la posibilidad de que los usuarios envíen aplicaciones a TP desde lo más importante.


API


GLPI tiene http rest api para la integración con servicios externos. La documentación está disponible en el sistema instalado en el enlace http: //glpi/apirest.php/#glossary (donde "glpi" es la dirección de su servidor).


Después de pensar un poco sobre la tarea, se decidió implementar el algoritmo de intercambio en php, a favor de esta solución es el hecho de que php ya está instalado en el sistema y el script se ingresó orgánicamente en glpi y está disponible en http: //glpi/mm.php . El resultado es un tipo de "proxy" que recibe una solicitud de la mayoría, se convierte al formato deseado y envía el GLPI. Todas las solicitudes http se envían en formato JSON.


El procedimiento de trabajo consta de 5 partes:


  1. Recibir una solicitud de materia
  2. Inicialización de sesión en glpi
  3. Recuperando datos de una solicitud
  4. Envío de datos a glpi
  5. Sesión de clausura

Antes de continuar con la descripción del código del script, realizaremos trabajos preparatorios tanto en materia como en glpi.


GLPI


  1. Creemos el usuario del servicio de asistencia, en nombre de qué solicitudes se crearán, y al ingresar a la configuración de este usuario, generaremos tokens:
    imagen
    El círculo en rojo será user_token.
  2. En la configuración del sistema, debe agregar un cliente para interactuar con la API. Para hacer esto, vaya a "Configuración" -> "General" -> "API" y haga clic en el botón "Agregar cliente", agregue un registro y genere un token (app_token)

imagen


  1. Para identificar la fuente de solicitudes en el sistema, agregue una entrada al directorio "Fuentes de solicitudes" y vaya a la entrada que acaba de agregar, recuerde su identificación (encerrada en un círculo rojo)
    imagen

Esto completa la configuración de la API en GLPI.


Más importante


En el menú del cliente de Mattermost, vaya a "Inegración" -> "Webhooks salientes", haga clic en "Agregar" y agregue una entrada. En la pantalla, enfaticé los campos significativos. Aquí deberíamos hacer una digresión: en la mayoría de los casos, el "disparador" para comenzar el procedimiento para enviar una solicitud es una palabra o frase que, indicada al comienzo del mensaje, en realidad inicia el proceso. En nuestro caso, la palabra clave es "112" (aquí hay una asociación directa con el Ministerio de Emergencias).


imagen


Se puede agregar el nombre de usuario predeterminado y el enlace al avatar (o no se puede agregar), ya que estos parámetros se transferirán en la solicitud. Pero para que la materia pueda procesar estos parámetros, en la configuración del servidor debe cambiar un par de opciones en el archivo /opt/mattermost/config/config.json


"EnablePostUsernameOverride": true, "EnablePostIconOverride": true, 

Esto completa la configuración. Es hora de pasar a escribir código. El script se copia en el directorio raíz con archivos glpi, en mi caso es /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); } ?> 

El resultado de este script será una solicitud adicional en el sistema de registro de incidentes en GLPI. En imágenes, se ve así:


Escribimos un mensaje en lo más importante:


imagen


Vamos al "Soporte" de GLPI -> "Aplicaciones" y debería aparecer un nuevo mensaje en la lista:


imagen


Al hacer clic en el encabezado del mensaje, se abrirá información más detallada (los campos cuyos valores se transmiten en el script se encierran en rojo)


imagen


En esta configuración, el envío de mensajes a GLPI desde Mattermost puede considerarse completo. Después de haber trabajado un poco en el código, nada le impedirá implementar un cambio en el tipo de solicitud (incidente o solicitud).

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


All Articles