最重要的。 与外部服务集成

在选择我们的消息传递系统使用的替代品时,我遇到了对Mattermost的描述,并决定尝试一下。 所描述的系统的优点之一是其与第三方服务的简单集成,即所谓的“挂钩”(发送和接收挂钩)。 那是关于通过挂钩与外部系统建立交互,本文将是(在我们的特殊情况下,它是zabbix和glpi)。


第一部分 与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中进行准备工作。


格里菲


  1. 让我们创建一个代表要创建请求的帮助台用户,并进入该用户的设置,我们将生成令牌:
    图片
    用红色圈起来的一个将是user_token。
  2. 在系统设置中,您需要添加客户端以与API进行交互。 为此,请转到“设置”->“常规”->“ API”,然后单击“添加客户端”按钮,添加一条记录并生成令牌(app_token)

图片


  1. 要识别系统中的请求源,请在目录“请求源”中添加一个条目,然后进入刚刚添加的条目中,记住其ID(用红色圈出)
    图片

这样就完成了GLPI中的API设置。


最重要的


在“最重要的客户端”菜单中,转到“ Inegration”->“ Outgoing Webhooks”,单击“ Add”并添加一个条目。 在屏幕上,我强调了重要的领域。 在这里,我们应该做个题外话:最重要的是,用于启动发送请求过程的“触发器”是单词或短语,在消息的开头表示该单词或短语实际上是在启动过程。 在我们的例子中,触发词是“ 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发送消息已经完成。 在代码上做了一些工作之后,没有什么会阻止您实现对请求类型(事件或请求)的更改。

Source: https://habr.com/ru/post/zh-CN442402/


All Articles