ServiceNow
透過 ServiceNow 連接器,您可以在 ServiceNow 資料庫中執行插入、刪除、更新和讀取作業。
事前準備
使用 ServiceNow 連接器前,請先完成下列工作:
- 在 Google Cloud 專案中:
- 確認已設定網路連線。如要瞭解網路模式,請參閱「網路連線」。
- 將 roles/connectors.admin IAM 角色授予設定連結器的使用者。
- 將下列 IAM 角色授予要用於連接器的服務帳戶:
roles/secretmanager.viewerroles/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」(讀取)。
- 在「名稱」部分,從第一個下拉式選單中選取「資料表 [sys_db_object]」,然後從第二個下拉式選單中選取「--無--」。
- 在「Requires role」(必要角色) 部分中,按兩下「Insert a new row....」(插入新列...) 文字方塊,然後搜尋並選取所需角色。
- 按一下「提交」,建立 ACL 物件。
- 將含有已建立 ACL 的角色指派給驗證使用者。如要執行這項操作,請依序前往「User Administration」(使用者管理) >「Users」(使用者) > 選取驗證使用者 >「Roles」(角色) >「Edit」(編輯) ...> 。 然後從集合中新增角色。
取得 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」欄位中輸入位址。
- 如要建立私人連線,請選取「主機位址」,並使用 HTTPS 通訊協定新增為 SAP Gateway 建立的端點附件。
如要建立與後端系統的公開連線,並加強安全性,可以為連線設定靜態輸出 IP 位址,然後設定防火牆規則,只允許特定靜態 IP 位址。
如要輸入其他目的地,請按一下「+新增目的地」。
- 點按「下一步」。
- 目的地類型:選取目的地類型。
-
在「Authentication」(驗證) 部分,輸入驗證詳細資料。
- 選取「驗證類型」,然後輸入相關詳細資料。
Servicenow 連線支援下列驗證類型:
- 使用者名稱和密碼
- 點按「下一步」。
如要瞭解如何設定這些驗證類型,請參閱「設定驗證」。
- 選取「驗證類型」,然後輸入相關詳細資料。
- 如果已啟用事件訂閱功能,連線建立頁面會顯示「事件訂閱詳細資料」部分。如要瞭解如何設定事件訂閱詳細資料,請參閱「設定事件訂閱」。
- 檢查:檢查連結和驗證詳細資料。
- 點選「建立」。
設定驗證機制
根據要使用的驗證方式輸入詳細資料。
-
使用者名稱和密碼
- 使用者名稱:用於連線的 ServiceNow 使用者名稱。
- 密碼:Secret Manager 密鑰,內含與 ServiceNow 使用者名稱相關聯的密碼。
設定事件訂閱項目
如果您已啟用事件訂閱功能,請在「Event Subscription Details」(事件訂閱詳細資料) 區段中輸入下列值:
- 驗證權杖:(選用) 從 Secret Manager 選取驗證權杖密鑰,然後從「Secret Version」(密鑰版本)下拉式選單選取對應的密鑰版本。
- HMAC 演算法:選取用於加密回應酬載的 HMAC 演算法。
- HMAC 密鑰:如果您選取 HMAC 演算法,請從「Secret Version」(密鑰版本) 下拉式選單中,選取 HMAC 金鑰的 Secret Manager 密鑰和對應的密鑰版本。
- 啟用私人連線:選取這個選項,即可透過私人連線安全地監聽事件。
- 輸入下列無法傳送郵件的設定:
- Dead-letter 專案 ID:您已設定 dead-letter Pub/Sub 主題的 Google Cloud 專案 ID。
- 死信主題:要寫入未處理事件詳細資料的 Pub/Sub 主題。
建立連線後的步驟
如要完成事件訂閱設定,您必須向 ServiceNow 應用程式註冊 Webhook 網址。因此,連線建立成功後,請執行下列額外步驟:
- 前往新建立連線的連線詳細資料頁面,然後複製事件訂閱的 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清單會是空白。 - 作業: 作業是指您可對實體執行的活動。您可以對實體執行下列任一操作:
從可用清單中選取實體,系統會產生該實體可用的作業清單。如需作業的詳細說明,請參閱「連結器」工作中的實體作業。 不過,如果連接器不支援任何實體作業,
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動作,然後按一下「完成」。 - 在「連線器」任務的「任務輸入內容」部分,按一下
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動作,然後按一下「完成」。 - 在「連線器」任務的「任務輸入內容」部分,按一下
connectorInputPayload,然後在Default Value欄位中輸入類似下列的值:{ "SysId": "440c3995471fe1104593a6b5316d4384" }
這個範例會透過「成功」參數傳回下載作業是 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清單中選取「Incident」。 - 選取
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 驗證身分的密碼。 |
| proxy_ssltype | ENUM | 否 | 連線至 ProxyServer Proxy 時要使用的 SSL 類型。支援的值包括:AUTO、ALWAYS、NEVER、TUNNEL |
| include_system_tables | BOOLEAN | 否 | 控制是否要公開系統資料表。 |
| filter_tables | STRING | 否 | 以半形逗號分隔的清單指定所需資料表。 |
在整合中,使用 Servicenow 連線
建立連線後,Apigee Integration 和 Application Integration 都會提供該連線。您可以在整合中透過「連接器」工作使用連線。