Das Wichtigste. Integration mit externen Diensten

Als ich mich für den von unserem Messaging-System verwendeten Ersatz entschied, stieß ich auf eine Beschreibung von Mattermost und beschloss, es auszuprobieren. Einer der Vorteile des beschriebenen Systems ist die einfache Integration in Dienste von Drittanbietern, die sogenannten "Hooks" (ausgehende und eingehende Hooks). Hier geht es darum, die Interaktion über Hooks mit externen Systemen einzurichten, und dieser Artikel wird es sein (in unserem speziellen Fall handelt es sich um zabbix und glpi).


Teil Eins Integration mit GLPI


Da wir bei unserer Arbeit GLPI verwenden, um Geräte, Software, Verbindungen und die Registrierung von technischen Supportanrufen zu berücksichtigen, wäre es logisch, dass Benutzer Anwendungen von größter Bedeutung an TP senden.


API


GLPI verfügt über eine http rest-API für die Integration mit externen Diensten. Die Dokumentation dazu finden Sie im installierten System unter dem Link http: //glpi/apirest.php/#glossary (wobei "glpi" die Adresse Ihres Servers ist).


Nachdem ein wenig über die Aufgabe nachgedacht wurde, wurde beschlossen, den Austauschalgorithmus auf PHP zu implementieren. Für diese Lösung ist die Tatsache, dass PHP bereits im System installiert ist und das Skript organisch in glpi eingegeben wurde und unter http: //glpi/mm.php verfügbar ist. Das Ergebnis ist eine Art "Proxy", der eine Anfrage von mattermost empfängt, in das gewünschte Format konvertiert und den GLPI sendet. Alle http-Anforderungen werden im JSON-Format gesendet.


Der Arbeitsablauf besteht aus 5 Teilen:


  1. Empfangen einer Anfrage von mattermost
  2. Sitzungsinitialisierung in glpi
  3. Daten aus einer Anfrage abrufen
  4. Senden von Daten an glpi
  5. Abschlusssitzung

Bevor wir mit der Beschreibung des Skriptcodes fortfahren, werden wir vorbereitende Arbeiten sowohl in Materie als auch in Glpi durchführen.


GLPI


  1. Lassen Sie uns den Helpdesk-Benutzer erstellen, für den Anforderungen erstellt werden, und in den Einstellungen dieses Benutzers werden Token generiert:
    Bild
    Der rot eingekreiste wird user_token sein.
  2. In den Systemeinstellungen müssen Sie einen Client hinzufügen, um mit der API zu interagieren. Gehen Sie dazu zu "Einstellungen" -> "Allgemein" -> "API" und klicken Sie auf die Schaltfläche "Client hinzufügen", fügen Sie einen Datensatz hinzu und generieren Sie ein Token (app_token)

Bild


  1. Um die Quelle der Anforderungen im System zu identifizieren, fügen Sie einen Eintrag zum Verzeichnis "Quellen der Anforderungen" hinzu und gehen Sie in den gerade hinzugefügten Eintrag. Denken Sie an dessen ID (rot eingekreist).
    Bild

Damit ist die API-Einrichtung in GLPI abgeschlossen.


Das Wichtigste


Gehen Sie im Mattermost-Client-Menü zu "Integration" -> "Ausgehende Webhooks", klicken Sie auf "Hinzufügen" und fügen Sie einen Eintrag hinzu. Auf dem Bildschirm habe ich die wichtigen Felder hervorgehoben. Hier sollten wir einen Exkurs machen: Im Wesentlichen ist der „Auslöser“ zum Starten der Prozedur zum Senden einer Anfrage ein Wort oder eine Phrase, die, wie am Anfang der Nachricht angegeben, den Prozess tatsächlich startet. In unserem Fall lautet das Auslösewort „112“ (hier besteht eine direkte Verbindung zum Notfallministerium).


Bild


Der Standardbenutzername und der Link zum Avatar können hinzugefügt werden (oder Sie können ihn nicht hinzufügen), da diese Parameter in der Anforderung übertragen werden. Damit mattermost diese Parameter verarbeiten kann, müssen Sie in den Servereinstellungen einige Optionen in der Datei /opt/mattermost/config/config.json ändern


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

Damit ist die Einrichtung abgeschlossen. Es ist Zeit, mit dem Schreiben von Code fortzufahren. Das Skript wird mit glpi-Dateien in das Stammverzeichnis kopiert, in meinem Fall ist 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); } ?> 

Das Ergebnis dieses Skripts ist eine zusätzliche Anforderung im Vorfallregistrierungssystem in GLPI. In Bildern sieht es so aus:


Wir schreiben eine Nachricht in höchstem Maße:


Bild


Wir gehen zum GLPI "Support" -> "Anwendungen" und eine neue Nachricht sollte in der Liste erscheinen:


Bild


Durch Klicken auf den Nachrichtenkopf werden detailliertere Informationen geöffnet (die Felder, deren Werte im Skript übertragen werden, sind rot eingekreist).


Bild


Bei dieser Einstellung kann das Senden von Nachrichten von Mattermost an GLPI als abgeschlossen betrachtet werden. Nachdem Sie ein wenig am Code gearbeitet haben, hindert Sie nichts daran, eine Änderung der Art der Anforderung (Vorfall oder Anforderung) vorzunehmen.

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


All Articles