ServiceNow
透過 ServiceNow 連接器,您可以在 ServiceNow 資料庫中執行插入、刪除、更新及讀取作業。
事前準備
使用 ServiceNow 連接器前,請先完成下列工作:
- 在 Google Cloud 專案中:
- 確認已設定網路連線。如要瞭解網路模式,請參閱「網路連線」。
- 將 roles/connectors.admin IAM 角色授予設定連線器的使用者。
- 將下列 IAM 角色授予要用於連接器的服務帳戶:
roles/secretmanager.viewer
roles/secretmanager.secretAccessor
服務帳戶是特殊的 Google 帳戶類型,主要用於代表需要驗證且必須取得授權才能存取 Google API 資料的非人類使用者。如果您沒有服務帳戶,請建立服務帳戶。詳情請參閱「建立服務帳戶」。
- 啟用下列服務:
secretmanager.googleapis.com
(Secret Manager API)connectors.googleapis.com
(Connectors API)
如要瞭解如何啟用服務,請參閱「啟用服務」。
如果專案先前未啟用這些服務或權限,系統會在設定連結器時提示您啟用。
-
在 ServiceNow 執行個體中提供下列資料表的存取權:
- sys_db_object
- sys_dictionary
- sys_glide_object
連接器必須取得這項權限,才能連結至您的資料。如要授予存取權,請按照下列步驟操作:
- 在 ServiceNow 應用程式中,依序前往「System Security」>「Access Controls (ACL)」。
- 選取「新增」,建立存取權控管物件。
- 在「Type」(類型) 部分選取「record」(記錄)。
- 在「Operation」(作業) 部分,選取「read」(讀取)。
- 在「名稱」部分,從第一個下拉式選單中選取「Table [sys_db_object]」,然後從第二個下拉式選單中選取「--None--」。
- 在「Requires role」(必要角色) 部分,按兩下「Insert a new row....」(插入新列...) 文字方塊,然後搜尋並選取所需角色。
- 按一下「提交」,建立 ACL 物件。
- 將含有已建立 ACL 的角色指派給驗證使用者。如要執行這項操作,請依序前往「使用者管理」>「使用者」> 選取驗證使用者 >「角色」>「編輯...」> 。 然後從集合中新增角色。
取得 ServiceNow 執行個體網址、使用者名稱和密碼。
設定連接器
連線專屬於資料來源。也就是說,如果您有多個資料來源,則必須為每個資料來源建立個別的連線。如要建立連線,請按照下列步驟操作:
- 在 Cloud 控制台中,前往「Integration Connectors」>「Connections」頁面,然後選取或建立 Google Cloud 專案。
- 按一下「+ 建立新連線」,開啟「建立連線」頁面。
- 在「位置」部分中,選擇連線位置。
- 區域:從下拉式清單中選取位置。
如需所有支援的地區清單,請參閱「位置」一文。
- 點按「下一步」。
- 區域:從下拉式清單中選取位置。
- 在「連線詳細資料」部分,完成下列步驟:
- 連接器:從可用連接器的下拉式清單中選取「Servicenow」。
- 連接器版本:從可用版本的下拉式清單中選取連接器版本。
- 在「連線名稱」欄位中,輸入連線執行個體的名稱。
連線名稱必須符合下列條件:
- 連線名稱可使用英文字母、數字或連字號。
- 字母必須為小寫。
- 連線名稱開頭須為英文字母,結尾則須為英文字母或數字。
- 連結名稱不得超過 49 個字元。
- 如果連接器支援事件訂閱,連接名稱開頭不得為「goog」前置字串。
- 視需要輸入連線執行個體的「Description」(說明)。
- 或者,可啟用 Cloud Logging,然後選取記錄層級。記錄層級預設為
Error
。 - 服務帳戶:選取具備必要角色的服務帳戶。
- 如要將連線用於事件訂閱,請選取「啟用事件訂閱」。選取這個選項後,會顯示下列選項:
- 啟用事件訂閱功能,並使用實體和動作:選取這個選項,即可將連線用於事件訂閱和連接器作業 (實體和動作)。
- 只啟用事件訂閱項目:選取這個選項,即可只將連線用於事件訂閱。如果選取這個選項,請按一下「下一步」,然後設定事件訂閱。
- 包含系統資料表:選取這個選項可擷取儲存安全性資料和中繼資料的系統資料表。只有具備管理員角色的使用者可以存取這些表格。
- 篩選資料表:以半形逗號分隔的清單指定資料表。使用這個欄位篩選要讓連線擷取的資料表,而非擷取所有資料表。
- 顯示值:指定連線是否必須從資料庫擷取顯示值、實際值,或兩者皆是。
- TRUE:傳回所有欄位的顯示值。
- FALSE:傳回資料庫中的實際值。
- ALL:傳回實際值和顯示值。
- 視需要設定「連線節點設定」:
- 節點數量下限:輸入連線節點數量下限。
- 節點數量上限:輸入連線節點數量上限。
節點是用來處理交易的連線單位 (或備用資源)。連線處理的交易量越多,就需要越多節點;反之,處理的交易量越少,需要的節點就越少。如要瞭解節點對連接器定價的影響,請參閱「 連線節點定價」。如未輸入任何值,系統預設會將節點下限設為 2 (提高可用性),節點上限則設為 50。
- 選用:按一下「+ 新增標籤」,以鍵/值組合的形式為連線新增標籤。
- 點按「下一步」。
注意:如果決定將這個連線屬性設為「true」,由於 Servicenow API 的限制,所有傳回的欄位都會是「String」類型。
- 在「目的地」部分,輸入要連線的遠端主機 (後端系統) 詳細資料。
- 目的地類型:選取目的地類型。
- 如要指定目的地主機名稱或 IP 位址,請選取「主機地址」,然後在「主機 1」欄位中輸入地址。
- 如要建立私人連線,請選取「Endpoint attachment」(端點連結),然後從「Endpoint Attachment」(端點連結) 清單中選擇所需連結。
如要建立與後端系統的公開連線,並加強安全性,建議為連線設定靜態輸出 IP 位址,然後設定防火牆規則,只允許特定靜態 IP 位址。
如要輸入其他目的地,請按一下「+新增目的地」。
- 點按「下一步」。
- 目的地類型:選取目的地類型。
-
在「Authentication」(驗證) 部分中,輸入驗證詳細資料。
- 選取「驗證類型」並輸入相關詳細資料。
Servicenow 連線支援下列驗證類型:
- 使用者名稱和密碼
- 點按「下一步」。
如要瞭解如何設定這些驗證類型,請參閱「設定驗證」。
- 選取「驗證類型」並輸入相關詳細資料。
- 如果已啟用事件訂閱功能,連線建立頁面會顯示「事件訂閱詳細資料」部分。如要瞭解如何設定事件訂閱詳細資料,請參閱「設定事件訂閱」。
- 檢查:檢查連線和驗證詳細資料。
- 點選「建立」。
設定驗證機制
根據要使用的驗證方式輸入詳細資料。
-
使用者名稱和密碼
- 使用者名稱:用於連線的 ServiceNow 使用者名稱。
- 密碼:Secret Manager 密鑰,內含與 ServiceNow 使用者名稱相關聯的密碼。
設定事件訂閱項目
如果您已啟用事件訂閱功能,請在「Event Subscription Details」(事件訂閱詳細資料) 區段中輸入下列值:
- 驗證權杖:(選用) 從「Secret Version」下拉式選單中,選取驗證權杖的 Secret Manager 密鑰和對應的密鑰版本。
- HMAC 演算法:選取用於加密回應酬載的 HMAC 演算法。
- HMAC 密鑰:如果您選取 HMAC 演算法,請從「Secret Version」(密鑰版本) 下拉式選單中,選取 HMAC 金鑰的 Secret Manager 密鑰和對應的密鑰版本。
- 啟用私人連線:選取這個選項後,即可透過私人連線安全地監聽事件。
- 輸入下列無法傳送郵件的設定:
- Dead-letter 專案 ID:您已設定 dead-letter Pub/Sub 主題的 Google Cloud 專案 ID。
- 無效信件主題:要寫入未處理事件詳細資料的 Pub/Sub 主題。
建立連結後的步驟
如要完成事件訂閱設定,您必須向 ServiceNow 應用程式註冊 Webhook URL。因此,連線建立成功後,請執行下列額外步驟:
- 前往新建立連線的詳細資料頁面,然後複製事件訂閱項目的 Webhook URL。
- 登入 ServiceNow 應用程式,然後執行下列操作:
- 在「所有 > 業務規則 > 執行時間」頁面中,選取要監聽的作業。
- 按一下「進階」分頁標籤。系統會開啟指令碼編輯器。
- 輸入 JavaScript,向回呼網址傳送要求。要求包含酬載,只要發生任何已啟用的作業,就會觸發酬載。以下是 JavaScript 範例:
範本
(function executeRule(current, previous /*null when async*/ ) { var request = new sn_ws.RESTMessageV2(); request.setEndpoint('WEBHOOK_URL'); // here you must the listener url where you want send the event payload request.setHttpMethod('POST'); var authToken = "AUTHENTICATION_TOKEN" request.setRequestHeader("authorization", authToken); request.setRequestHeader("Accept", "application/json"); request.setRequestHeader('Content-Type', 'application/json'); request.setRequestBody("{\"eventType\":\"" + "EVENT_TYPE" + CUSTOM_FIELDS "\"}"); var data = request.getRequestBody(); var secretKey = "SECRET_KEY"; var signature = SncAuthentication.encode(data, secretKey, "ENCRYPTION_ALGORITHM"); request.setRequestHeader("hmacauthorization",signature); var response = request.execute(); })(current, previous);
取代下列項目:
- WEBHOOK_URL:事件訂閱的 Webhook 網址,您可從 Integration Connectors 的連線詳細資料頁面取得。
- AUTHENTICATION_TOKEN:您為連線設定的驗證權杖實際文字。
- EVENT_TYPE:您在 ServiceNow 觸發條件中設定的事件類型實際文字。
- CUSTOM_FIELDS:要求主體一律必須包含
eventType
欄位。除了這個欄位,您也可以根據需求新增其他欄位。 - SECRET_KEY:您為連線設定的密鑰實際文字。
- ENCRYPTION_ALGORITHM:應為下列任一值:
- HmacSHA224
- HmacSHA256
- HmacSHA384
- HmacSHA512
演算法應與您為連線設定的演算法相同。
範例
(function executeRule(current, previous /*null when async*/ ) { var request = new sn_ws.RESTMessageV2(); request.setEndpoint('https://webhook.site/bb37937e-24ea-19b3-9dcd-84eca77f60eg'); // here you must the listener url where you want send the event payload request.setHttpMethod('POST'); var authToken = "YWRtaW46ZkVpNypxVzhCL3VY" request.setRequestHeader("authorization", authToken); request.setRequestHeader("Accept", "application/json"); request.setRequestHeader('Content-Type', 'application/json'); request.setRequestBody("{\"caller_id\":\"" + current.caller_id + "\",\"eventType\":\"" + "service_now_event_type_1" + "\",\"company\":\"" + current.company + "\",\"number\":\"" + current.number + "\",\"description\":\"" + current.description + "\",\"FirstName\":\"" + current.u_firstname + "\",\"LastName\":\"" + current.u_lastname + "\",\"status\":\"" + current.u_status + "\",\"Element\":\"" + current.getElement() + "\",\"category\":\"" + current.category + "\",\"opened_at\":\"" + current.opened_at + "\",\"opened_by\":\"" + current.opened_by + "\",\"location\":\"" + current.location + "\",\"salesforceId\":\"" + current.u_salesforceid + "\"}"); //fields you want var data = request.getRequestBody(); var secretKey = "YWRtaW46ZkVpNypxVzhCL3VY"; // var MAC_ALG_4 = "HmacSHA384"; var MAC_ALG_3 = "HmacSHA256"; // var MAC_ALG_5 = "HmacSHA512"; // var MAC_ALG_2 = "HmacSHA224"; var signature = SncAuthentication.encode(data, secretKey, MAC_ALG_3); request.setRequestHeader("hmacauthorization",signature); var response = request.execute(); })(current, previous);
連線設定範例
本節列出建立連線時設定的各個欄位範例值。
基本驗證連線類型
欄位名稱 | 詳細資料 |
---|---|
位置 | us-central1 |
連接器 | Servicenow |
連接器版本 | 1 |
連線名稱 | google-cloud-servicenow-conn |
服務帳戶 | Your_Project_Number@serviceaccount |
顯示值 | 是 |
節點數量下限 | 2 |
節點數量上限 | 50 |
目的地類型 | 主機位址 |
主機 1 | https://Your-domainname.com |
使用者名稱 | User_name |
密碼 | 密碼 |
密鑰版本 | 1 |
連線設定範例
本節列出您為建立 ServiceNow 連線設定的各個欄位範例值。
ServiceNow 網路連線類型
欄位名稱 | 詳細資料 |
---|---|
位置 | us-central1 |
連接器 | ServiceNow |
連接器版本 | 1 |
連線名稱 | gcp-servicenow-conn |
服務帳戶 | SERVICE_ACCOUNT_NAME@serviceaccount |
節點數量下限 | 2 |
節點數量上限 | 50 |
目的地類型 | 主機位址 |
主機 1 | https://host_name.com |
使用者名稱 | 使用者名稱 |
密碼 | 密碼 |
密鑰版本 | 1 |
實體、作業和動作
所有整合連接器都會為所連應用程式的物件提供抽象層。您只能透過這個抽象化程序存取應用程式的物件。抽象化會以實體、作業和動作的形式呈現。
- 實體: 實體可以視為已連結應用程式或服務中的物件,或是屬性集合。實體的定義因連接器而異。舉例來說,在資料庫連接器中,資料表是實體;在檔案伺服器連接器中,資料夾是實體;在訊息系統連接器中,佇列是實體。
不過,連接器可能不支援或沒有任何實體,在這種情況下,
Entities
清單會是空白。 - 作業: 作業是指您可以在實體上執行的活動。您可以對實體執行下列任一操作:
從可用清單中選取實體,系統會產生該實體可用的作業清單。如需作業的詳細說明,請參閱 Connectors 工作的實體作業。 不過,如果連接器不支援任何實體作業,系統就不會在
Operations
清單中列出這些不支援的作業。 - 動作: 動作是透過連接器介面提供給整合的第一類函式。動作可讓您變更一或多個實體,且因連接器而異。一般來說,動作會有一些輸入參數和輸出參數。不過,連接器可能不支援任何動作,此時
Actions
清單會是空白。
動作
本節列出 ServiceNow 連線支援的所有動作。
UploadAttachment 動作
這項動作會將檔案上傳為指定記錄的附件。
UploadAttachment 動作的輸入參數
參數名稱 | 資料類型 | 必填 | 說明 |
---|---|---|---|
內容 | 字串 | 否 | 要上傳為檔案的字串內容。 |
ContentBytes | 字串 | 否 | 要上傳為檔案的位元組內容。 |
HasBytes | 布林值 | 否 | 是否要以位元組形式上傳內容。 |
資料表名稱 | 字串 | 否 | 要附加檔案的資料表名稱。 |
TableSysId | 字串 | 否 | 您要附加檔案的 TableName 所指定資料表中的記錄 Sys_id。 |
UploadAttachment 動作的輸出參數
這項操作會從上傳的實體傳回一組參數
如要瞭解如何設定 UploadAttachment
動作,請參閱範例。
DownloadAttachment 動作
這項動作可從特定記錄下載附加檔案。
DownloadAttachment 動作的輸入參數
參數名稱 | 資料類型 | 必填 | 說明 |
---|---|---|---|
SysId | 字串 | 是 | 附件檔案的 Sys_id。 |
HasBytes | 布林值 | 否 | 是否要以位元組形式下載內容。 |
DownloadAttachment 動作的輸出參數
這項動作會透過「成功」參數傳回下載作業是 True 還是 False,如果是 True,則會輸出 DownloadAttachment 的內容
如要瞭解如何設定 DownloadAttachment
動作,請參閱範例。
範例
本節說明如何使用這個連接器執行部分實體作業和動作。
範例 - 上傳事件的附件
- 在「
Configure connector task
」對話方塊中,按一下Actions
。 - 選取
UploadAttachment
動作,然後按一下「完成」。 - 在「Connectors」(連結器) 任務的「Task Input」(任務輸入內容) 區段中,按一下
connectorInputPayload
,然後在Default Value
欄位中輸入類似下列的值:{ "Content": "File is uploaded", "TableName": "Incident", "TableSysId": "018f4057473ae5104593a6b5316d4357" }
這個範例會將酬載中的內容值上傳為附件,並傳回上傳實體的參數集。如果動作成功,UploadAttachment
工作項目的 connectorOutputPayload
回應參數會包含類似下列內容的值:
{ "SysId": "a667f5d1939be110ff87352d6cba10fc", "FileName": "7043426257788756581.connector.txt", "TableSysId": "018f4057473ae5104593a6b5316d4357", "TableName": "Incident", "DownloadLink": "https://gcp.service-now.com/api/now/v1/attachment/a667f5d1939be110ff87352d6cba10fc/file", "ContentType": "text/plain", "SizeBytes": "16", "ChunkSizeBytes": "700000", "Compressed": "true", "SizeCompressed": "36", "SysTags": "", "ImageHeight": "", "ImageWidth": "", "AverageImageColor": "", "SysModCount": "0", "Hash": "807e96c2942c41ad699d004a9d6a74595c84fab09111d479b6bbe013d5debff6", "State": "pending", "SysUpdatedBy": "gcp2", "SysUpdatedOn": "2023-06-07 07:23:34", "SysCreatedBy": "gcp2", "SysCreatedOn": "2023-06-07 07:23:34", "encryption_context": "" }
範例 - 下載事件的附件
- 在「
Configure connector task
」對話方塊中,按一下Actions
。 - 選取
DownloadAttachment
動作,然後按一下「完成」。 - 在「Connectors」(連結器) 任務的「Task Input」(任務輸入內容) 區段中,按一下
connectorInputPayload
,然後在Default Value
欄位中輸入類似下列的值:{ "SysId": "440c3995471fe1104593a6b5316d4384" }
這個範例會透過 Success 參數傳回下載作業是 True 還是 False,如果是 True,則會輸出 DownloadAttachment 的內容。如果動作成功,DownloadAttachment
工作項目的 connectorOutputPayload
回應參數會包含類似下列內容的值:
[{ "Success": "True" }, { "Content": " A Simple Text File \r\n\r\n\r\n This is a small demonstration .txt file - \r\n just for use in the Virtual Mechanics tutorials. More text. And more \r\n text. And more text. And more text. And more text. \r\n And more text. And more text. And more text. And more text. And more \r\n text. And more text. Boring, zzzzz. And more text. And more text. And \r\n more text. And more text. And more text. And more text. And more text. \r\n And more text. And more text. \r\n And more text. And more text. And more text. And more text. And more \r\n text. And more text. And more text. Even more. Continued on page 2 ...\r\n Simple PDF File 2 \r\n ...continued from page 1. Yet more text. And more text. And more text. \r\n And more text. And more text. And more text. And more text. And more \r\n text. Oh, how boring typing this stuff. But not as boring as watching \r\n paint dry. And more text. And more text. And more text. And more text. \r\n Boring. More, a little more text. The end, and just as well. " }]
實體作業範例
本節說明如何使用這個連接器執行部分實體作業。
範例 - 取得「Incident」實體的單一記錄
- 在「
Configure connector task
」對話方塊中,按一下Entities
。 - 從
Entity
清單中選取「事件」。 - 選取「
GET
」作業,然後按一下「完成」。 - 將實體 ID 設為「0c5f3cece1b12010f877971dea0b1449」,這是要傳遞的金鑰。如要設定實體 ID,請在「資料對應」的「資料對應器」部分,按一下「開啟資料對應編輯器」,然後在「輸入值」欄位中輸入
"0c5f3cece1b12010f877971dea0b1449"
,並選擇 EntityId 做為本機變數。
系統限制
每個節點的 ServiceNow 連接器每秒最多可處理 10 筆交易,超出此限制的交易會遭到節流。根據預設,Integration Connectors 會為連線分配 2 個節點 (以提高可用性)。
如要瞭解 Integration Connectors 適用的限制,請參閱「限制」一文。
使用 Terraform 建立連線
您可以使用 Terraform 資源建立新連線。
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
如要查看用於建立連線的 Terraform 範本範例,請參閱範本範例。
使用 Terraform 建立這項連線時,您必須在 Terraform 設定檔中設定下列變數:
參數名稱 | 資料類型 | 必填 | 說明 |
---|---|---|---|
proxy_enabled | BOOLEAN | 否 | 選取這個核取方塊,即可為連線設定 Proxy 伺服器。 |
proxy_auth_scheme | ENUM | 否 | 用於向 ProxyServer Proxy 驗證的驗證類型。支援的值包括:BASIC、DIGEST、NONE |
proxy_user | STRING | 否 | 用於向 ProxyServer Proxy 驗證的使用者名稱。 |
proxy_password | SECRET | 否 | 用於向 ProxyServer 代理程式驗證的密碼。 |
proxy_ssltype | ENUM | 否 | 連線至 ProxyServer Proxy 時要使用的 SSL 類型,支援的值包括:AUTO、ALWAYS、NEVER、TUNNEL |
include_system_tables | BOOLEAN | 否 | 控制是否要公開系統資料表。 |
filter_tables | STRING | 否 | 在逗號分隔的清單中指定所需資料表。 |
在整合中建立 ServiceNow 連線
建立連線後,Apigee Integration 和 Application Integration 都會提供該連線。您可以在整合中透過「連接器」工作使用連線。