I am creating a custom connector that has one webhook trigger. The body of the trigger is dynamic, based on the trigger parameters (workflow_id and node_id). I have defined the x-ms-notification-content extension for my (subscribe) trigger method with a reference to the schema model.
The web request schema model has the x-ms-dynamic-schema extension and passes the workflowId and nodeId parameters to the method that provides the JSON schema.
When the trigger is added to a workflow, I have verified that the Subscription_GetWorkflowSchema operation is called with the expected parameters and valid JSON Schema is sent for the response. Everything appears to be correct, but dynamic content is unavailable to the proceeding actions.
Is it possible to request dynamic content for a webhook trigger in this manner? If so, what I am missing? Everything appears to be correct but the dynamic content is unavailable. Any insight into this issue would be greatly appreciated.
Here is my OpenAPI definition:
{
"swagger": "2.0",
"info": {
"version": "8.10.0",
"title": "HighGear REST API (8.10.0)"
},
"host": "test.highgear.app",
"basePath": "/HighGear",
"schemes": [
"https"
],
"consumes": [],
"produces": [],
"paths": {
"/api/8.10.0/workflow/subscription/subscribe": {
"x-ms-notification-content": {
"schema": {
"$ref": "#/definitions/WebRequestSchema"
}
},
"post": {
"tags": [
"Subscription"
],
"summary": "When Task Enters Web Request Node",
"description": "Get the available workflow and node ids",
"operationId": "Subscription_Subscribe",
"x-ms-trigger": "single",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "model",
"in": "body",
"required": true,
"schema": {
"description": "POST model for Subscribe",
"type": "object",
"properties": {
"workflow_id": {
"format": "int32",
"description": "The workflow id",
"type": "integer",
"readOnly": false,
"title": "Workflow Id",
"x-ms-dynamic-values": {
"operationId": "Subscription_ListNodes",
"value-path": "workflow_id",
"value-title": "workflow_name"
},
"x-ms-visibility": "important"
},
"node_id": {
"format": "int32",
"description": "The node id",
"type": "integer",
"readOnly": false,
"title": "Node Id",
"x-ms-dynamic-values": {
"operationId": "Subscription_ListNodes",
"value-path": "node_id",
"value-title": "line_caption"
},
"x-ms-visibility": "important"
},
"url": {
"description": "The hook URL",
"type": "string",
"readOnly": false,
"x-ms-notification-url": true,
"x-ms-visibility": "internal",
"title": "URL"
},
"label": {
"description": "The subscription label, for reference",
"type": "string",
"readOnly": false,
"x-ms-visibility": "important"
}
},
"required": [
"workflow_id",
"node_id",
"url",
"label"
]
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/ExceptionResponse"
}
},
"403": {
"description": "Unauthorized",
"schema": {
"$ref": "#/definitions/ExceptionResponse"
}
},
"404": {
"description": "Not Found",
"schema": {
"$ref": "#/definitions/ExceptionResponse"
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"$ref": "#/definitions/ExceptionResponse"
}
}
},
"x-ms-visibility": "important"
}
},
"/api/8.10.0/workflow/subscription/available": {
"get": {
"tags": [
"Subscription"
],
"summary": "List available subscription web request nodes",
"description": "If the expected nodes are not visible, check that the service account is listed in the node and that the workflow is published.",
"operationId": "Subscription_ListNodes",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/SubscriptionNodeResponseModel"
}
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/ExceptionResponse"
}
},
"403": {
"description": "Unauthorized",
"schema": {
"$ref": "#/definitions/ExceptionResponse"
}
},
"404": {
"description": "Not Found",
"schema": {
"$ref": "#/definitions/ExceptionResponse"
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"$ref": "#/definitions/ExceptionResponse"
}
}
}
}
},
"/api/8.10.0/workflow/subscription/workflow/{workflowId}/node/{nodeId}/schema": {
"get": {
"tags": [
"Subscription"
],
"summary": "Get the data schema for a workflow web request node",
"operationId": "Subscription_GetWorkflowNodeSchema",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "workflowId",
"in": "path",
"description": "",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "nodeId",
"in": "path",
"description": "",
"required": true,
"type": "integer",
"format": "int32"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/ExceptionResponse"
}
},
"403": {
"description": "Unauthorized",
"schema": {
"$ref": "#/definitions/ExceptionResponse"
}
},
"404": {
"description": "Not Found",
"schema": {
"$ref": "#/definitions/ExceptionResponse"
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"$ref": "#/definitions/ExceptionResponse"
}
}
},
"x-ms-visibility": "internal"
}
}
},
"definitions": {
"ExceptionResponse": {
"description": "A model for an exception returned from the REST API",
"type": "object",
"properties": {
"message": {
"description": "The message of the error",
"type": "string",
"readOnly": false
}
}
},
"SubscriptionNodeResponseModel": {
"description": "Response model for available subscription nodes",
"type": "object",
"properties": {
"workflow_id": {
"format": "int32",
"description": "The workflow id",
"type": "integer",
"readOnly": false
},
"workflow_name": {
"description": "The workflow name",
"type": "string",
"readOnly": false
},
"node_id": {
"format": "int32",
"description": "The node id",
"type": "integer",
"readOnly": false
},
"line_caption": {
"description": "The line caption",
"type": "string",
"readOnly": false
}
}
},
"WebRequestSchema": {
"description": "Webhook Response",
"type": "object",
"x-ms-dynamic-properties": {
"operationId": "Subscription_GetWorkflowNodeSchema",
"itemValuePath": "model",
"parameters": {
"workflowId": {
"parameterReference": "model/workflow_id"
},
"nodeId": {
"parameterReference": "model/node_id"
}
}
},
"x-ms-dynamic-schema": {
"operationId": "Subscription_GetWorkflowNodeSchema",
"parameters": {
"workflowId": {
"parameter": "workflowId"
},
"nodeId": {
"parameter": "nodeId"
}
},
"value-path": "schema"
}
}
},
"parameters": {},
"responses": {},
"securityDefinitions": {
"API Key": {
"type": "apiKey",
"in": "header",
"name": "API_KEY"
}
},
"security": [
{
"API Key": []
}
],
"tags": []
}
Here is the JSON for the dynamic schema:
{
"schema": {
"type": "object",
"additionalProperties": true,
"properties": {
"fields": {
"type": "object",
"properties": {
"owner": {
"title": "Customer",
"type": "object",
"properties": {
"contact_id": {
"type": "integer"
},
"name": {
"type": "string"
},
"email_address": {
"type": "string"
}
}
},
"assignee": {
"title": "Assignee",
"type": "array",
"items": {
"type": "object",
"properties": {
"contact_id": {
"type": "integer"
},
"name": {
"type": "string"
},
"email_address": {
"type": "string"
}
}
}
},
"brief_description": {
"title": "Brief Description",
"type": "string"
},
"extended_description": {
"title": "Extended Description",
"type": "object",
"properties": {
"text": {
"type": "string"
},
"html": {
"type": "string"
}
}
},
"status": {
"title": "Status",
"type": "string"
},
"task_id": {
"type": "integer"
}
}
}
}
}
}