ThingWorx Flow > 建立及管理觸發器 > 使用 Webhook 觸發器建立及呼叫工作流程
使用 Webhook 觸發器建立及呼叫工作流程
使用 webhook 觸發器從外部系統啟動工作流程。webhook 觸發器提供的 URL 可從其他系統來呼叫,以便進一步呼叫 ThingWorx 伺服器來啟動工作流程。
新增 Webhook
完成下列步驟,將 webhook 觸發器新增至工作流程:
1. 開啟您要在其中新增 webhook 觸發器的工作流程。
2. 按一下 ,然後按一下 或連按兩下 。「觸發器」視窗即會顯示。
3. 選取 Webhook。Webhook 組態視窗即會開啟。
執行工作流程時必須使用的 URL 會顯示在 URL 欄位中。
4. 選取「非同步」核取方塊來以非同步方式執行 webhook。
若以非同步方式執行 webhook,則對 webhook 的呼叫會立即傳回,且不會等待工作流程完成。
5. 「輸入」部份底下,按一下「新增」來指定呼叫 webhook 時會傳遞到工作流程的輸入參數。針對每個參數,輸入下列資訊:
a. 「名稱」- 輸入參數的名稱。
b. 「描述」- 輸入參數的描述。
c. 「基礎類型」- 輸入參數的基礎類型。
按一下「新增」可新增多個輸入參數。或者,按一下 可刪除您新增的任何輸入參數。
6. 按一下「完成」
在工作流程中定義 webhook 觸發器之後,可以從工作流程定義傳回參數。外部系統可以從工作流程執行中取得及處理結果。請確保將 webhook 觸發器定義為針對外部系統同步執行,以取得傳回參數。
欲定義傳回參數,請執行下列操作:
1. 按一下 ,然後按一下 或連按兩下 。「輸出」視窗即會開啟。
2. 選取要傳回之資料的「基礎類型」
3. 「資料」欄位中,對應工作流程中最後一個動作的輸出,以將值傳回至 webhook。
4. 按一下「完成」
呼叫 Webhook
在工作流程上定義 webhook 之後,使用 webhook 的 URL 來啟動工作流程執行。將 HTTP 請求與標準機制搭配使用,以呼叫 ThingWorx REST API。
下表提供了有關配置 HTTP 請求的資訊:
HTTP 請求元件
方法
POST
標題
Accept: application/json
Content-Type: application/json
Authorization: Basic <編碼使用者名稱/密碼>
appkey: <此處為您預先定義的 app 金鑰>
* 
為了確保您的 webhook 驗證最終到期,PTC 建議使用具有適當到期日/時間的應用程式金鑰。
本文
application/json - 具有工作流程輸入的 JSON 裝載,其中名稱與 webhook 觸發器中所指定的輸入參數名稱必須相符。
例如,如果工作流程是使用 webhook 定義的,則下列兩個輸入參數:
名稱:"param1",類型:"STRING"
名稱:"param2",類型:"XML"
會傳回字串輸出,HTTP 請求本文中的 JSON 裝載如下所示:
{"param1": "This is a string parameter", "param2": "<xml><field1>helloworld</field1></xml>"}
若要進行測試,可以使用類似 Postman 或 curl 的工具來呼叫具有 webhook 的工作流程。下列範例用來呼叫 webhook 觸發器:
curl --request POST \
--url https://<server>/Thingworx/Things/FlowThing/Services/webhook_flow \
--header 'Accept: application/json' \
--header 'Authorization: Basic <encoded_user_name_password>'
--header 'Content-Type: application/json' \
--header 'cache-control: no-cache' \
--data '{ "param1": "This is a string parameter", "param2": "<xml><field>helloworld</field></xml>"}
如果將 webhook 設定為非同步執行,則會立即傳回呼叫 webhook 的請求,且在 HTTP 回應中不會傳回工作流程資料。
如果將 webhook 設定為同步執行,則呼叫 webhook 的請求會保持等待,直到工作流程完成,且在 HTTP 回應中傳回工作流程資料為止。回應格式遵循 ThingWorx 服務呼叫慣例,且由 HTTP 請求中的「接受」標題決定。
在此例中,回應為 JSON 格式,如下所示:
{
"dataShape": {
"fieldDefinitions": {
"result": {
"name": "result",
"description": "result",
"baseType": "STRING",
"ordinal": 0,
"aspects": {}
}
}
},
"rows": [
{
"result": "<workflow result here>"
}
]
}