接下來的服務台、事故、問題以及變更管理都會有工作流程與物件生命週期的狀態,並根據不同的狀態來通知使用者進行互動,所以我們必須先將 iTop 配置 SMTP 來推送通知。
iTop 將物件生命週期的概念融入了通知系統,允許物件在建立、進入、離開某個狀態或者達到某些門檻時來推送通知,使得我們可以很靈活的定義郵件的通知規則。
iTop 的通知系統主要分成兩個部分:
點選 Configuration 選單的 Notifications
可以在這邊自訂 Trigger、 Email Actions 與 Webhook Actions
Trigger
若要建立 Trigger,您必須選擇要建立的 Trigger 類型如下:
可以透過其他擴充功能添加更多 Trigger 類型,例如 Notify On Expiration 與 Send Updates by Email。
任何類型的 Trigger 都需要指定以下參數
Triggered Actions 則可以設定觸發後要執行的動作,我們可以關聯多個動作並設定它們執行的優先順序。
Email Actions
Email Action 是用於格式化要傳送的訊息的模板,定義訊息的主題、內容、以及寄件者和收件者。預設情況下,iTop 會以 MIME 類型 text/html
發送所有包含訊息主體的電子郵件。
Email Action 的必填欄位如下:
物件查詢語言(簡稱 OQL)是 iTop 專門用於查詢物件的語言,目標是隱藏數據模型實際 SQL 架構的複雜性,提供一種安全的、高效且簡單的語法。
目前 OQL 語法僅實現了 SELECT 語句如下
SELECT
[output_specification FROM]
class_reference
[class_joined]
[WHERE expression]
[UNION oql_query]
我們會在許多地方使用 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: 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 就可以了
今天的分享就到這邊,感謝收看。
參考文件