iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
IT 管理

iTop:開源 ITSM 與 CMDB 解決方案 系列 第 21

如何在 iTop 配置 SMTP 來推送通知

  • 分享至 

  • xImage
  •  

接下來的服務台、事故、問題以及變更管理都會有工作流程與物件生命週期的狀態,並根據不同的狀態來通知使用者進行互動,所以我們必須先將 iTop 配置 SMTP 來推送通知。

iTop 將物件生命週期的概念融入了通知系統,允許物件在建立、進入、離開某個狀態或者達到某些門檻時來推送通知,使得我們可以很靈活的定義郵件的通知規則。

iTop 的通知系統主要分成兩個部分:

  • Triggers:定義何時需要發送通知,例如當工單達到已分配狀態時。
  • Actions:定義將執行的操作,例如發送電子郵件、發送內部消息或者啟動 Webhook。

點選 Configuration 選單的 Notifications

可以在這邊自訂 Trigger、 Email Actions 與 Webhook Actions

Trigger
若要建立 Trigger,您必須選擇要建立的 Trigger 類型如下:

  • 物件進入給定狀態時觸發
  • 物件離開給定狀態時觸發
  • 物件建立時觸發
  • 刪除物件時觸發
  • 在物件提及時觸發器
  • 當物件被修改時觸發
  • 下載附件時觸發
  • 下載文件時觸發
  • 當達到 TTR 或 TTO 的門檻值時觸發
  • 當從 iTop 入口網站更新物件時觸發

可以透過其他擴充功能添加更多 Trigger 類型,例如 Notify On Expiration 與 Send Updates by Email。

任何類型的 Trigger 都需要指定以下參數

  • Description:描述 Trigger 的用途
  • Target Class:該觸發器適用的物件類別,例如 Ticket。
  • Filter:限制 Trigger 應用的物件,若未填寫則預期該類別的所有物件。

Triggered Actions 則可以設定觸發後要執行的動作,我們可以關聯多個動作並設定它們執行的優先順序。

Email Actions
Email Action 是用於格式化要傳送的訊息的模板,定義訊息的主題、內容、以及寄件者和收件者。預設情況下,iTop 會以 MIME 類型 text/html 發送所有包含訊息主體的電子郵件。

Email Action 的必填欄位如下:

  • Name:描述 Email Action 的用途
  • Subject:訊息的主題
  • Body:訊息的主體部分,可以使用下面描述的 placeholder 動態生成,例如 You have been mentioned by $current_contact->friendlyname$ in $this->hyperlink()$。
  • From(Email):靜態電子郵件地址或 placeholder,例如 $current_contact->email$。
  • To / Cc / Bcc:至少指定用於收件者的欄位之一,例如 SELECT Person WHERE id = :mentioned->id。

物件查詢語言(簡稱 OQL)是 iTop 專門用於查詢物件的語言,目標是隱藏數據模型實際 SQL 架構的複雜性,提供一種安全的、高效且簡單的語法。

目前 OQL 語法僅實現了 SELECT 語句如下

SELECT
    [output_specification FROM]
    class_reference
    [class_joined]
    [WHERE expression]
    [UNION oql_query]
  • output_specification:指定要檢索的物件類別,則預設為 class_reference。
  • class_reference:指定要查詢的物件類別。
  • class_joined:表示要聯結的類別
  • where_condition:表示過濾的條件。
  • oql_query:將另一個 OQL 查詢結果將添加到 SELECT 的結果中

我們會在許多地方使用 OQL 查詢,如收件者、稽核規則、通知等等。

例如 To / Cc / Bcc 收件者分別使用不同的查詢語法如下:

// The caller in To:
SELECT Person WHERE id= :this->caller_id

// In Cc the contacts linked to the Ticket:
SELECT Contact 
JOIN lnkContactToTicket AS L ON L.contact_id = Contact.id 
WHERE L.ticket_id = :this->id

// In Bcc the member of the team to which the Ticket is dispatched:
SELECT Person AS P 
JOIN lnkPersonToTeam AS L ON L.person_id=P.id
WHERE L.team_id = :this->team_id

關於 OQL 更多的語法範例,請參考下列網址。
https://www.itophub.io/wiki/page?id=3_2_0%3Aoql%3Aoql_examples

Email Notification
若您沒有公開對外的 SMTP 寄信服務,請參考如何在 Azure 設定 SendGrid SMTP 發信。
https://medium.com/@jieshiun/%E5%A6%82%E4%BD%95%E5%9C%A8-azure-%E8%A8%AD%E5%AE%9A-sendgrid-smtp-%E7%99%BC%E4%BF%A1-f02ab6074f2d

點選 Configuration 選單的 General Configuration

使用 SMTP 傳輸時,可以在 iTop 設定檔中設定以下參數:

  • email_asynchronous:是否啟用非同步傳送
  • email_default_sender_address:寄件者的電子郵件
  • email_transport:傳送電子郵件的方法
  • email_transport_smtp.encryption:加密的方式
  • email_transport_smtp.host:SMTP 的主機名稱或 IP 位址
  • email_transport_smtp.username:認證使用者
  • email_transport_smtp.password:驗證密碼
  • email_transport_smtp.port:連接埠號碼

設定檔可以參考如下

// email_asynchronous: If set, the emails are sent off line, which requires cron.php to be activated. Exception: some features like the email test utility will force the serialized mode
 // default: false
 'email_asynchronous' => false,

 // email_default_sender_address: Default address provided in the email from header field.
 // default: ''
 'email_default_sender_address' => 'your_sendgrid_verified_sender_address',

 // email_default_sender_label: Default label provided in the email from header field.
 // default: ''
 'email_default_sender_label' => '',

 // email_transport: Mean to send emails: PHPMail (uses the function mail()), SMTP (implements the client protocol) or SMTP_OAuth (connect to the server using OAuth 2.0)
 // default: 'PHPMail'
 'email_transport' => 'SMTP',

 // email_transport_smtp.encryption: tls or ssl (optional)
 // default: ''
 'email_transport_smtp.encryption' => 'ssl',

 // email_transport_smtp.host: host name or IP address (optional)
 // default: 'localhost'
 'email_transport_smtp.host' => 'smtp.sendgrid.net',

 // email_transport_smtp.password: Authentication password (optional)
 // default: ''
 'email_transport_smtp.password' => 'your_sendgrid_key',

 // email_transport_smtp.port: port number (optional)
 // default: 25
 'email_transport_smtp.port' => '465',

 // email_transport_smtp.username: Authentication user (optional)
 // default: ''
 'email_transport_smtp.username' => 'apikey',

您可以使用 email.test.php 來測試 PHP 郵件配置並進行故障排除,點選 Configuration 選單的 Notifications,可以找到測試頁面。

http://your_itop_ip/setup/email.test.php

輸入收件人與寄件者的電子郵件,點選 Next。

測試郵件成功發送

測試郵件的內容如下

發送電子郵件是一個回應相對較慢的操作,像是在 iTop 建立或更新工單時,可能會發出多封電子郵件,這需要幾秒鐘才能完成。

我們可以透過伺服器的例行性工作排程進行非同步的通知,提升應用程式的回應速度與增加使用者體驗。

sudo crontab -u www-data -e

編輯 crontab 以每 1 分鐘執行一次腳本

*/1 * * * * /usr/bin/php /var/www/html/itop/webservices/cron.php --param_file=/etc/itop-cron.params >> /var/log/itop-cron.log 2>&1

記得將 email_asynchronous 參數設定為 true 就可以了

今天的分享就到這邊,感謝收看。

參考文件

  1. https://www.itophub.io/wiki/page?id=latest%3Aadmin%3Anotifications
  2. https://www.itophub.io/wiki/page?id=3_2_0%3Aoql%3Aoql_syntax

上一篇
iTop Hub 簡介
下一篇
iTop 服務管理(Service Management)簡介
系列文
iTop:開源 ITSM 與 CMDB 解決方案 32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言