أكثر أهمية. التكامل مع الخدمات الخارجية

عند اختيار البديل الذي يستخدمه نظام المراسلة لدينا ، صادفت وصفًا لـ 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.


GLPI


  1. دعونا ننشئ مستخدم مكتب المساعدة ، الذي سيتم إنشاء الطلبات نيابة عنه ، والذهاب إلى إعدادات هذا المستخدم ، سنقوم بإنشاء الرموز:
    الصورة
    الشخص الذي يحاط بدائرة باللون الأحمر سيكون user_token.
  2. في إعدادات النظام ، تحتاج إلى إضافة عميل للتفاعل مع API. للقيام بذلك ، انتقل إلى "الإعدادات" -> "عام" -> "واجهة برمجة التطبيقات" وانقر فوق الزر "إضافة عميل" ، وقم بإضافة سجل وإنشاء رمز مميز (app_token)

الصورة


  1. لتحديد مصدر الطلبات في النظام ، أضف إدخالًا إلى الدليل "مصادر الطلبات" والذهاب إلى الإدخال المضافة للتو ، وتذكر معرفه (محاط بدائرة باللون الأحمر)
    الصورة

هذا يكمل إعداد API في GLPI.


أكثر أهمية


في قائمة Mattermost client ، انتقل إلى "Inegration" -> "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 "الدعم" -> "التطبيقات" وستظهر رسالة جديدة في القائمة:


الصورة


من خلال النقر فوق رأس الرسالة ، سيتم فتح مزيد من المعلومات التفصيلية (الحقول التي يتم نقل قيمها في البرنامج النصي باللون الأحمر)


الصورة


في هذا الإعداد ، يمكن اعتبار إرسال الرسائل إلى GLPI من Mattermost مكتمل. بعد أن عملت قليلاً على الكود ، لن يمنعك أي شيء من تنفيذ تغيير في نوع الطلب (الحادث أو الطلب).

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


All Articles