最重要。 外部サービスとの統合

メッセージングシステムの代替品を選択して、Mattermostの説明に出会い、試してみることにしました。 説明したシステムの利点の1つは、いわゆる「フック」(発信フックおよび着信フック)と呼ばれるサードパーティのサービスと簡単に統合できることです。 これは、外部システムとのフックを介した相互作用のセットアップに関するものであり、この記事はそうなります(この例では、zabbixとglpiです)。







パート1 GLPIとの統合



私たちの仕事では、機器、ソフトウェア、接続、技術サポートコールの登録にGLPIを使用しているため、ユーザーがアプリケーションを何でもTPに送信する可能性を整理することは論理的です。







API



GLPIには、外部サービスと統合するためのhttp rest APIがあります。 このドキュメントは、インストールされたシステムのリンクhttp://glpi/apirest.php/#glossary (「glpi」はサーバーのアドレス)で入手できます。







タスクについて少し考えて、phpに交換アルゴリズムを実装することにしました。このソリューションを支持するのは、phpが既にシステムにインストールされ、スクリプトが有機的にglpiに入力され、 http://glpi/mm.phpで利用できるという事実です。 結果は、ある種の「プロキシ」であり、重要なものから要求を受け取り、目的の形式に変換してGLPIを送信します。 すべてのhttp要求はJSON形式で送信されます。







作業手順は5つの部分で構成されています。







  1. マターモストからリクエストを受信する
  2. glpiでのセッションの初期化
  3. リクエストからデータを取得する
  4. glpiへのデータの送信
  5. 閉会セッション


スクリプトコードの説明に進む前に、重要事項とglpiの両方で準備作業を実行します。







GLPI



  1. リクエストを作成するためにヘルプデスクユーザーを作成し、このユーザーの設定に進み、トークンを生成します。

    画像

    赤で囲まれたものはuser_tokenです。
  2. システム設定で、APIを操作するクライアントを追加する必要があります。 これを行うには、[設定]-> [全般]-> [API]に移動して[クライアントの追加]ボタンをクリックし、レコードを追加してトークン(app_token)を生成します


画像







  1. システム内のリクエストのソースを特定するには、「リクエストのソース」ディレクトリにエントリを追加し、追加したばかりのエントリに移動して、そのIDを覚えておいてください(赤丸)

    画像


これで、GLPIでのAPIのセットアップが完了しました。







最重要



Mattermostクライアントメニューで、[統合]-> [発信Webhooks]に移動し、[追加]をクリックしてエントリを追加します。 画面では、重要なフィールドを強調しました。 ここで余談をする必要があります。最も重要なことは、要求送信手順を開始するための「トリガー」は単語またはフレーズであり、メッセージの先頭に示されて実際にプロセスを開始することです。 私たちの場合、トリガーワードは「112」です(緊急事態省との直接の関係があります)。







画像







これらのパラメータはリクエストで転送されるため、デフォルトのユーザー名とアバターへのリンクを追加できます(または追加できません)。 ただし、これらのパラメーターを処理できるようにするには、サーバー設定で/opt/mattermost/config/config.jsonファイルのいくつかのオプションを変更する必要があります







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





これでセットアップは完了です。 それでは、コードの記述に移りましょう。 スクリプトはglpiファイルと共にルートディレクトリにコピーされます。私の場合は/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); } ?>
      
      





このスクリプトの結果は、GLPIのインシデント登録システムに追加されたクエリになります。 写真では、次のようになります。







私たちは最も重要なメッセージを書きます:







画像







GLPI「サポート」->「アプリケーション」に移動すると、リストに新しいメッセージが表示されます。







画像







メッセージヘッダーをクリックすると、より詳細な情報が開きます(スクリプトで値が送信されるフィールドは赤で囲まれています)







画像







この設定では、MattermostからGLPIにメッセージを送信することは完了したと見なすことができます。 コードに少し手を加えても、リクエストの種類(インシデントまたはリクエスト)の変更を実装することを妨げるものは何もありません。








All Articles