ThingWorx Flow > Creación y gestión de activadores > Creación e invocación de un flujo de trabajo mediante un webhook
Creación e invocación de un flujo de trabajo mediante un webhook
Utilice un webhook para iniciar flujos de trabajo desde sistemas externos. El webhook proporciona un URL que se puede invocar desde otros sistemas para llamar al servidor ThingWorx con el fin de iniciar el flujo de trabajo.
Adición de un webhook
Realice los siguientes pasos para añadir un webhook a un flujo de trabajo:
1. Abra el flujo de trabajo en el que desea añadir el webhook.
2. Pulse en y, a continuación, pulse en o pulse dos veces en . Aparece la ventana Activador.
3. Seleccione Webhook. Se abre la ventana Configuración de webhook.
El URL que se puede utilizar para ejecutar el flujo de trabajo aparece en el campo URL.
4. Seleccione la casilla de verificación Asíncrono para ejecutar el webhook de forma asíncrona.
Cuando un webhook se ejecuta de forma asíncrona, se devuelve inmediatamente la llamada al webhook y no se espera a que el flujo de trabajo se complete.
5. En la sección Entradas, pulse en Añadir para especificar los parámetros de entrada que se transfieren al flujo de trabajo cuando se llama al webhook. Para cada parámetro, introduzca la siguiente información:
a. Nombre: nombre del parámetro de entrada.
b. Descripción: descripción del parámetro de entrada.
c. Tipo base: tipo base del parámetro de entrada.
Pulse en Añadir para añadir varios parámetros de entrada. Pulse en para borrar cualquier parámetro de entrada que se haya añadido.
6. Pulse en Terminado.
Una vez que se haya definido un webhook en el flujo de trabajo, se puede definir un parámetro de retorno del flujo de trabajo. El sistema externo puede obtener y procesar los resultados a partir del resultado de la ejecución del flujo de trabajo. Asegúrese de definir el webhook para que se ejecute de forma sincrónica a fin de que el sistema externo obtenga el parámetro de retorno.
Para definir el parámetro de devolución, realice lo siguiente:
1. Pulse en y, a continuación, pulse en o pulse dos veces en . Se abre la ventana Salida.
2. Seleccione el valor de Tipo base de los datos que se deben devolver.
3. En el campo Datos, asigne una salida de la última acción del flujo de trabajo para que devuelva un valor al webhook.
4. Pulse en TERMINADO.
Invocación de un Webhook
Después de definir un webhook en un flujo de trabajo, utilice el URL del webhook para iniciar la ejecución del flujo de trabajo. Utilice una solicitud HTTP con el mecanismo estándar para invocar las API de REST de ThingWorx.
En la siguiente tabla se proporciona información sobre la configuración de la solicitud HTTP:
Componente de solicitud HTTP
Valor
Método
POST
Cabeceras
Accept: application/json
Content-Type: application/json
Authorization: Basic <nombre de usuario/contraseña codificados>
O bien
appkey: <clave de aplicación predefinida aquí>
* 
Para garantizar que la autenticación de webhook finalmente caduque, PTC recomienda utilizar una clave de aplicación con la fecha y hora de vencimiento adecuadas.
Cuerpo
application/json: una carga útil JSON con entradas en el flujo de trabajo, donde los nombres deben coincidir con los nombres de parámetro de entrada especificados en el webhook.
Por ejemplo, si el flujo de trabajo se define con un webhook, los dos parámetros de entrada siguientes:
Nombre: "param1", Tipo: "STRING"
Nombre: "param2", Tipo: "STRING"
y se devuelve una salida STRING, la carga útil JSON en el cuerpo de la solicitud HTTP es la siguiente:
{"param1": "This is a string parameter", "param2": "<xml><field1>helloworld</field1></xml>"}
Para las pruebas, se pueden invocar flujos de trabajo que tienen webhooks mediante una herramienta como, por ejemplo, Postman o curl. El siguiente ejemplo se utiliza para invocar un 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>"}
Si el webhook se define para que se ejecute de manera asíncrona, la solicitud para invocar el webhook se ejecuta inmediatamente y no se devuelven datos del flujo de trabajo en la respuesta HTTP.
Si el webhook se define para ejecutarse de manera asíncrona, la solicitud para invocar el webhook espera hasta que se complete el flujo de trabajo y los datos del flujo de trabajo se devuelven en la respuesta HTTP. El formato de respuesta sigue las convenciones de invocación del servicio de ThingWorx y se determina según la cabecera Aceptar de la solicitud HTTP.
En este caso, la respuesta está en formato JSON, como se indica a continuación:
{
"dataShape": {
"fieldDefinitions": {
"result": {
"name": "result",
"description": "result",
"baseType": "STRING",
"ordinal": 0,
"aspects": {}
}
}
},
"rows": [
{
"result": "<workflow result here>"
}
]
}
¿Fue esto útil?