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: <您于此处预先定义的应用密钥>
* 
为确保您的 webhook 身份验证最终会过期,PTC 建议使用具有相应到期日期/时间的应用程序密钥。
主体
application/json - 输入到工作流,且名称必须与 webhook 触发器中指定输入参数名称相匹配的 JSON 有效负载。
例如,如果工作流使用 webhook 进行定义,并且以下两个输入参数:
名称:"param1",类型:"STRING"
名称:"param2",类型:"XML"
返回 STRING 输出,则 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>"
}
]
}