diff --git a/sample/solution/BlastBoxWorkflows_1_0_0_1.zip b/sample/solution/BlastBoxWorkflows_1_0_0_1.zip
new file mode 100644
index 0000000..2da66f4
Binary files /dev/null and b/sample/solution/BlastBoxWorkflows_1_0_0_1.zip differ
diff --git a/sample/solution/src/BlastBoxWorkflows/Other/Customizations.xml b/sample/solution/src/BlastBoxWorkflows/Other/Customizations.xml
new file mode 100644
index 0000000..014c84f
--- /dev/null
+++ b/sample/solution/src/BlastBoxWorkflows/Other/Customizations.xml
@@ -0,0 +1,119 @@
+
+
+
+
+
+ /Workflows/BlastBoxWeeklyInventoryHealth-44D64F96-1130-9B19-8209-34093D4416A3.json
+ 1
+ 0
+ 5
+ 0
+ 4
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 2
+ 1
+ 1
+ 1.0
+ 1
+ 0
+ 1
+ 1
+ none
+
+
+
+
+
+ /Workflows/BlastBoxPostSalesService-62D468F3-4A55-1BA5-2EC3-AE1A4B3A4B35.json
+ 1
+ 0
+ 5
+ 0
+ 4
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 2
+ 1
+ 1
+ 1.0
+ 1
+ 0
+ 1
+ 1
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Human review
+ /providers/Microsoft.PowerApps/apis/shared_advancedapprovals
+ 1
+ 0
+ 0
+ 1
+
+
+ Human review
+ /providers/Microsoft.PowerApps/apis/shared_advancedapprovals
+ 1
+ 0
+ 0
+ 1
+
+
+ Human review
+ /providers/Microsoft.PowerApps/apis/shared_advancedapprovals
+ 1
+ 0
+ 0
+ 1
+
+
+ Agent
+ /providers/Microsoft.PowerApps/apis/shared_agentnode
+ 1
+ 0
+ 0
+ 1
+
+
+ Office 365 Outlook
+ /providers/Microsoft.PowerApps/apis/shared_office365
+ 1
+ 0
+ 0
+ 1
+
+
+ When a new email arrives
+ /providers/Microsoft.PowerApps/apis/shared_office365
+ 1
+ 0
+ 0
+ 1
+
+
+
+ 1033
+
+
\ No newline at end of file
diff --git a/sample/solution/src/BlastBoxWorkflows/Other/Solution.xml b/sample/solution/src/BlastBoxWorkflows/Other/Solution.xml
new file mode 100644
index 0000000..19abd73
--- /dev/null
+++ b/sample/solution/src/BlastBoxWorkflows/Other/Solution.xml
@@ -0,0 +1,85 @@
+
+
+ BlastBoxWorkflows
+
+
+
+
+ 1.0.0.1
+ 0
+
+ CAT
+
+
+
+
+
+
+ cat
+ 76486
+
+
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+ 2
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sample/solution/src/BlastBoxWorkflows/Workflows/BlastBoxPostSalesService-62D468F3-4A55-1BA5-2EC3-AE1A4B3A4B35.json b/sample/solution/src/BlastBoxWorkflows/Workflows/BlastBoxPostSalesService-62D468F3-4A55-1BA5-2EC3-AE1A4B3A4B35.json
new file mode 100644
index 0000000..0271b27
--- /dev/null
+++ b/sample/solution/src/BlastBoxWorkflows/Workflows/BlastBoxPostSalesService-62D468F3-4A55-1BA5-2EC3-AE1A4B3A4B35.json
@@ -0,0 +1,3861 @@
+{
+ "properties": {
+ "connectionReferences": {
+ "shared_office365-1": {
+ "api": {
+ "name": "shared_office365"
+ },
+ "connection": {
+ "connectionReferenceLogicalName": "new_sharedoffice365_37c07"
+ },
+ "runtimeSource": "embedded",
+ "connectionName": "shared-office365-b79141e6-d6f8-42c6-b914-3eb3d2491190"
+ },
+ "shared_advancedapprovals": {
+ "api": {
+ "name": "shared_advancedapprovals"
+ },
+ "connection": {
+ "connectionReferenceLogicalName": "new_sharedadvancedapprovals_00cb31fc"
+ },
+ "runtimeSource": "embedded",
+ "connectionName": "be923ac0d38a430a90ba2395510118d3"
+ },
+ "shared_office365": {
+ "api": {
+ "name": "shared_office365"
+ },
+ "connection": {
+ "connectionReferenceLogicalName": "new_sharedoffice365_d3c797ce"
+ },
+ "runtimeSource": "embedded",
+ "connectionName": "b50f648118a44456949c0348eb03bc33"
+ },
+ "shared_agentnode-2": {
+ "api": {
+ "name": "shared_agentnode"
+ },
+ "connection": {
+ "connectionReferenceLogicalName": "new_sharedagentnode_a4edece2"
+ },
+ "runtimeSource": "embedded",
+ "connectionName": "49c44ba139d44a72b5bcf4ef9c809fe6"
+ },
+ "shared_advancedapprovals-1": {
+ "api": {
+ "name": "shared_advancedapprovals"
+ },
+ "connection": {
+ "connectionReferenceLogicalName": "new_sharedadvancedapprovals_693c4742"
+ },
+ "runtimeSource": "embedded",
+ "connectionName": "8a6c46550ec24046aec0a37279897ca4"
+ }
+ },
+ "definition": {
+ "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
+ "contentVersion": "1.0.0.0",
+ "parameters": {
+ "$authentication": {
+ "defaultValue": {},
+ "type": "SecureObject"
+ },
+ "$connections": {
+ "defaultValue": {},
+ "type": "Object"
+ }
+ },
+ "triggers": {
+ "When_a_new_email_arrives": {
+ "type": "OpenApiConnectionNotification",
+ "inputs": {
+ "parameters": {
+ "folderPath": "Id::AAMkAGJhNzZhMjFhLWIwMmQtNDllOC1hNjYwLTQ4NzI4Mjg4NDcyOQAuAAAAAADUlIVU6wZISLwUfI-WrtyAAQAEl1rPER--S6jrwcM0kjSGAAAAAAEMAAA=",
+ "importance": "Any",
+ "subjectFilter": "BlastBox Customer Service"
+ },
+ "host": {
+ "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365",
+ "operationId": "OnNewEmailV3",
+ "connectionName": "shared_office365"
+ }
+ },
+ "splitOn": "@triggerOutputs()?['body/value']",
+ "metadata": {
+ "associatedData": {
+ "graph": {
+ "name": "BlastBox Post Sales Service",
+ "nodes": [
+ {
+ "id": "start-ee6d2ba4-6711-46df-873b-8ff4e5362436",
+ "name": "When a new email arrives",
+ "type": "start",
+ "version": 1,
+ "position": {
+ "x": 100,
+ "y": 545.5
+ },
+ "data": {
+ "config": {
+ "triggerType": "connector",
+ "connector": {
+ "apiName": "shared_office365",
+ "operationName": "OnNewEmailV3",
+ "connectionName": "shared_office365",
+ "inputs": {
+ "folderPath": "Id::AAMkAGJhNzZhMjFhLWIwMmQtNDllOC1hNjYwLTQ4NzI4Mjg4NDcyOQAuAAAAAADUlIVU6wZISLwUfI-WrtyAAQAEl1rPER--S6jrwcM0kjSGAAAAAAEMAAA=",
+ "importance": "Any",
+ "subjectFilter": "BlastBox Customer Service"
+ },
+ "displayName": "When a new email arrives",
+ "iconUri": "https://res-1.cdn.office.net/files/fabric-cdn-prod_20251008.001/assets/brand-icons/product/svg/outlook_48x1.svg",
+ "brandColor": "#0078D4",
+ "operationType": "OpenApiConnectionNotification",
+ "parametersSchema": {
+ "type": "object",
+ "properties": {
+ "to": {
+ "type": "string",
+ "title": "To",
+ "x-ms-dynamic-list": {
+ "builtInOperation": "AadGraph.GetUsers",
+ "parameters": {},
+ "itemValuePath": "mail"
+ },
+ "format": "email",
+ "description": "Recipient email addresses separated by semicolons (If any match, the trigger will run).",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "to"
+ },
+ "cc": {
+ "type": "string",
+ "title": "CC",
+ "x-ms-dynamic-list": {
+ "builtInOperation": "AadGraph.GetUsers",
+ "parameters": {},
+ "itemValuePath": "mail"
+ },
+ "format": "email",
+ "description": "CC recipient email addresses separated by semicolons (If any match, the trigger will run).",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "cc"
+ },
+ "toOrCc": {
+ "type": "string",
+ "title": "To or CC",
+ "x-ms-dynamic-list": {
+ "builtInOperation": "AadGraph.GetUsers",
+ "parameters": {},
+ "itemValuePath": "mail"
+ },
+ "format": "email",
+ "description": "To or CC recipient email addresses separated by semicolons (If any match, the trigger will run).",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "toOrCc"
+ },
+ "from": {
+ "type": "string",
+ "title": "From",
+ "x-ms-dynamic-list": {
+ "builtInOperation": "AadGraph.GetUsers",
+ "parameters": {},
+ "itemValuePath": "mail"
+ },
+ "format": "email",
+ "description": "Sender email addresses separated by semicolons (If any match, the trigger will run).",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "from"
+ },
+ "includeAttachments": {
+ "type": "boolean",
+ "title": "Include Attachments",
+ "description": "Should the response of the trigger include the attachments content.",
+ "default": false,
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "includeAttachments"
+ },
+ "subjectFilter": {
+ "type": "string",
+ "title": "Subject Filter",
+ "description": "String to look for in the subject line.",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "subjectFilter"
+ },
+ "folderPath": {
+ "type": "string",
+ "title": "Folder",
+ "x-ms-dynamic-tree": {
+ "settings": {
+ "canSelectParentNodes": true,
+ "canSelectLeafNodes": false
+ },
+ "open": {
+ "operationId": "OnFilePickerOpen",
+ "parameters": {
+ "operation": {
+ "value": "MailFolders"
+ }
+ },
+ "itemsPath": "value",
+ "itemValuePath": "Id",
+ "itemTitlePath": "DisplayName",
+ "itemFullTitlePath": "Path",
+ "itemIsParent": "(IsFolder eq true)"
+ },
+ "browse": {
+ "operationId": "OnFilePickerBrowse",
+ "parameters": {
+ "id": {
+ "selectedItemValuePath": "Id"
+ },
+ "operation": {
+ "value": "MailFolders"
+ }
+ },
+ "itemsPath": "value",
+ "itemValuePath": "Id",
+ "itemTitlePath": "DisplayName",
+ "itemFullTitlePath": "Path",
+ "itemIsParent": "(IsFolder eq true)"
+ }
+ },
+ "description": "Mail folder to check for new emails.",
+ "default": "Inbox",
+ "x-ms-property-name-alias": "folderPath"
+ },
+ "importance": {
+ "type": "string",
+ "title": "Importance",
+ "description": "Importance of the email (Any, High, Normal, Low).",
+ "default": "Any",
+ "enum": [
+ "Any",
+ "Low",
+ "Normal",
+ "High"
+ ],
+ "x-ms-visibility": "advanced",
+ "x-ms-enum-values": [
+ {
+ "displayName": "Any",
+ "value": "Any"
+ },
+ {
+ "displayName": "Low",
+ "value": "Low"
+ },
+ {
+ "displayName": "Normal",
+ "value": "Normal"
+ },
+ {
+ "displayName": "High",
+ "value": "High"
+ }
+ ],
+ "x-ms-property-name-alias": "importance"
+ },
+ "fetchOnlyWithAttachment": {
+ "type": "boolean",
+ "title": "Only with Attachments",
+ "description": "If set to true, only emails with an attachment will be retrieved. Emails without any attachments will be skipped. If set to false, all emails will be retrieved.",
+ "default": false,
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "fetchOnlyWithAttachment"
+ }
+ },
+ "required": []
+ },
+ "triggerBatchMode": "Batch",
+ "outputSchema": {
+ "200": {
+ "type": "object",
+ "properties": {
+ "body": {
+ "type": "object",
+ "properties": {
+ "value": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "from": {
+ "type": "string",
+ "title": "From",
+ "format": "email",
+ "description": "The mailbox owner and sender of the message",
+ "x-ms-visibility": "important",
+ "x-ms-property-name-alias": "from"
+ },
+ "toRecipients": {
+ "type": "string",
+ "title": "To",
+ "format": "email",
+ "description": "The recipients for the message",
+ "x-ms-visibility": "important",
+ "x-ms-property-name-alias": "toRecipients"
+ },
+ "ccRecipients": {
+ "type": "string",
+ "title": "CC",
+ "format": "email",
+ "description": "The Cc recipients for the message",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "ccRecipients"
+ },
+ "bccRecipients": {
+ "type": "string",
+ "title": "BCC",
+ "format": "email",
+ "description": "The Bcc recipients for the message",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "bccRecipients"
+ },
+ "replyTo": {
+ "type": "string",
+ "title": "Reply To",
+ "format": "email",
+ "description": "The email addresses to use when replying",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "replyTo"
+ },
+ "subject": {
+ "type": "string",
+ "title": "Subject",
+ "description": "The subject of the message",
+ "x-ms-visibility": "important",
+ "x-ms-property-name-alias": "subject"
+ },
+ "body": {
+ "type": "string",
+ "title": "Body",
+ "description": "The body of the message",
+ "x-ms-visibility": "important",
+ "x-ms-property-name-alias": "body"
+ },
+ "importance": {
+ "type": "string",
+ "title": "Importance",
+ "description": "The importance of the message (low, normal, high)",
+ "enum": [
+ "low",
+ "normal",
+ "high"
+ ],
+ "x-ms-property-name-alias": "importance"
+ },
+ "bodyPreview": {
+ "type": "string",
+ "title": "Body Preview",
+ "description": "The preview of the message",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "bodyPreview"
+ },
+ "hasAttachments": {
+ "type": "boolean",
+ "title": "Has Attachment",
+ "description": "Indicates whether the message has attachments",
+ "x-ms-property-name-alias": "hasAttachments"
+ },
+ "id": {
+ "type": "string",
+ "title": "Message Id",
+ "description": "The unique identifier of the message",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "id"
+ },
+ "internetMessageId": {
+ "type": "string",
+ "title": "Internet Message Id",
+ "description": "The message ID in the format specified by RFC2822",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "internetMessageId"
+ },
+ "conversationId": {
+ "type": "string",
+ "title": "Conversation Id",
+ "description": "The Id of the conversation the email belongs to",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "conversationId"
+ },
+ "receivedDateTime": {
+ "type": "string",
+ "title": "Received Time",
+ "format": "date-time",
+ "description": "The date and time the message was received",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "receivedDateTime"
+ },
+ "isRead": {
+ "type": "boolean",
+ "title": "Is Read",
+ "description": "Indicates whether the message has been read",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "isRead"
+ },
+ "attachments": {
+ "type": "array",
+ "title": "Attachments",
+ "items": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "title": "Attachment Id",
+ "description": "Attachment Id",
+ "x-ms-property-name-alias": "id"
+ },
+ "name": {
+ "type": "string",
+ "title": "Name",
+ "description": "Attachment name",
+ "x-ms-property-name-alias": "name"
+ },
+ "contentBytes": {
+ "type": "string",
+ "title": "Content",
+ "format": "byte",
+ "description": "Attachment content",
+ "x-ms-property-name-alias": "contentBytes"
+ },
+ "contentType": {
+ "type": "string",
+ "title": "Content-Type",
+ "description": "Attachment content type",
+ "x-ms-property-name-alias": "contentType"
+ },
+ "size": {
+ "type": "integer",
+ "title": "Size",
+ "format": "int64",
+ "description": "The size in bytes of the attachment",
+ "x-ms-property-name-alias": "size"
+ },
+ "isInline": {
+ "type": "boolean",
+ "title": "Is Inline",
+ "description": "Set to true if this is an inline attachment",
+ "x-ms-property-name-alias": "isInline"
+ },
+ "lastModifiedDateTime": {
+ "type": "string",
+ "title": "Last Modified DateTime",
+ "format": "date-time",
+ "description": "The date and time when the attachment was last modified",
+ "x-ms-property-name-alias": "lastModifiedDateTime"
+ },
+ "contentId": {
+ "type": "string",
+ "title": "Content Id",
+ "description": "Content Id",
+ "x-ms-property-name-alias": "contentId"
+ }
+ },
+ "required": [],
+ "description": "File Attachment"
+ },
+ "description": "The file attachments for the message",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "attachments"
+ },
+ "isHtml": {
+ "type": "boolean",
+ "title": "Is HTML",
+ "description": "Is Html?",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "isHtml"
+ },
+ "sensitivityLabelInfo": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "sensitivityLabelId": {
+ "type": "string",
+ "title": "sensitivityLabelId",
+ "description": "SensitivityLabel Id.",
+ "x-ms-property-name-alias": "sensitivityLabelId"
+ },
+ "name": {
+ "type": "string",
+ "title": "name",
+ "description": "SensitivityLabel name.",
+ "x-ms-property-name-alias": "name"
+ },
+ "displayName": {
+ "type": "string",
+ "title": "displayName",
+ "description": "SensitivityLabel displayName info",
+ "x-ms-property-name-alias": "displayName"
+ },
+ "tooltip": {
+ "type": "string",
+ "title": "tooltip",
+ "description": "SensitivityLabel details on tooltip.",
+ "x-ms-property-name-alias": "tooltip"
+ },
+ "priority": {
+ "type": "integer",
+ "title": "priority",
+ "format": "int32",
+ "description": "SensitivityLabel priority.",
+ "x-ms-property-name-alias": "priority"
+ },
+ "color": {
+ "type": "string",
+ "title": "color",
+ "description": "SensitivityLabel color.",
+ "x-ms-property-name-alias": "color"
+ },
+ "isEncrypted": {
+ "type": "boolean",
+ "title": "isEncrypted",
+ "description": " is SensitivityLabel Encrypted.",
+ "x-ms-property-name-alias": "isEncrypted"
+ },
+ "isEnabled": {
+ "type": "boolean",
+ "title": "isEnabled",
+ "description": "Whether SensitivityLabel is Enabled.",
+ "x-ms-property-name-alias": "isEnabled"
+ },
+ "isParent": {
+ "type": "boolean",
+ "title": "isParent",
+ "description": "Whether SensitivityLabel is Parent.",
+ "x-ms-property-name-alias": "isParent"
+ },
+ "parentSensitivityLabelId": {
+ "type": "string",
+ "title": "parentSensitivityLabelId",
+ "description": "Parent SensitivityLabel Id.",
+ "x-ms-property-name-alias": "parentSensitivityLabelId"
+ }
+ },
+ "required": []
+ },
+ "x-ms-property-name-alias": "sensitivityLabelInfo"
+ }
+ },
+ "required": [],
+ "description": "Graph Client Receive Email Message"
+ },
+ "description": "A list of the response objects",
+ "x-ms-property-name-alias": "body/value"
+ }
+ },
+ "required": [],
+ "description": "Represents a wrapper object for batch trigger response",
+ "x-ms-property-name-alias": "body"
+ }
+ }
+ }
+ }
+ }
+ },
+ "outcomes": [
+ {
+ "id": "default",
+ "label": "Default",
+ "outcomeSchema": {
+ "type": "object",
+ "properties": {
+ "from": {
+ "type": "string",
+ "title": "From",
+ "format": "email",
+ "description": "The mailbox owner and sender of the message",
+ "x-ms-visibility": "important",
+ "x-ms-property-name-alias": "body/from"
+ },
+ "toRecipients": {
+ "type": "string",
+ "title": "To",
+ "format": "email",
+ "description": "The recipients for the message",
+ "x-ms-visibility": "important",
+ "x-ms-property-name-alias": "body/toRecipients"
+ },
+ "ccRecipients": {
+ "type": "string",
+ "title": "CC",
+ "format": "email",
+ "description": "The Cc recipients for the message",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "body/ccRecipients"
+ },
+ "bccRecipients": {
+ "type": "string",
+ "title": "BCC",
+ "format": "email",
+ "description": "The Bcc recipients for the message",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "body/bccRecipients"
+ },
+ "replyTo": {
+ "type": "string",
+ "title": "Reply To",
+ "format": "email",
+ "description": "The email addresses to use when replying",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "body/replyTo"
+ },
+ "subject": {
+ "type": "string",
+ "title": "Subject",
+ "description": "The subject of the message",
+ "x-ms-visibility": "important",
+ "x-ms-property-name-alias": "body/subject"
+ },
+ "body": {
+ "type": "string",
+ "title": "Body",
+ "description": "The body of the message",
+ "x-ms-visibility": "important",
+ "x-ms-property-name-alias": "body/body"
+ },
+ "importance": {
+ "type": "string",
+ "title": "Importance",
+ "description": "The importance of the message (low, normal, high)",
+ "enum": [
+ "low",
+ "normal",
+ "high"
+ ],
+ "x-ms-property-name-alias": "body/importance"
+ },
+ "bodyPreview": {
+ "type": "string",
+ "title": "Body Preview",
+ "description": "The preview of the message",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "body/bodyPreview"
+ },
+ "hasAttachments": {
+ "type": "boolean",
+ "title": "Has Attachment",
+ "description": "Indicates whether the message has attachments",
+ "x-ms-property-name-alias": "body/hasAttachments"
+ },
+ "id": {
+ "type": "string",
+ "title": "Message Id",
+ "description": "The unique identifier of the message",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "body/id"
+ },
+ "internetMessageId": {
+ "type": "string",
+ "title": "Internet Message Id",
+ "description": "The message ID in the format specified by RFC2822",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "body/internetMessageId"
+ },
+ "conversationId": {
+ "type": "string",
+ "title": "Conversation Id",
+ "description": "The Id of the conversation the email belongs to",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "body/conversationId"
+ },
+ "receivedDateTime": {
+ "type": "string",
+ "title": "Received Time",
+ "format": "date-time",
+ "description": "The date and time the message was received",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "body/receivedDateTime"
+ },
+ "isRead": {
+ "type": "boolean",
+ "title": "Is Read",
+ "description": "Indicates whether the message has been read",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "body/isRead"
+ },
+ "attachments": {
+ "type": "array",
+ "title": "Attachments",
+ "items": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "title": "Attachment Id",
+ "description": "Attachment Id",
+ "x-ms-property-name-alias": "id"
+ },
+ "name": {
+ "type": "string",
+ "title": "Name",
+ "description": "Attachment name",
+ "x-ms-property-name-alias": "name"
+ },
+ "contentBytes": {
+ "type": "string",
+ "title": "Content",
+ "format": "byte",
+ "description": "Attachment content",
+ "x-ms-property-name-alias": "contentBytes"
+ },
+ "contentType": {
+ "type": "string",
+ "title": "Content-Type",
+ "description": "Attachment content type",
+ "x-ms-property-name-alias": "contentType"
+ },
+ "size": {
+ "type": "integer",
+ "title": "Size",
+ "format": "int64",
+ "description": "The size in bytes of the attachment",
+ "x-ms-property-name-alias": "size"
+ },
+ "isInline": {
+ "type": "boolean",
+ "title": "Is Inline",
+ "description": "Set to true if this is an inline attachment",
+ "x-ms-property-name-alias": "isInline"
+ },
+ "lastModifiedDateTime": {
+ "type": "string",
+ "title": "Last Modified DateTime",
+ "format": "date-time",
+ "description": "The date and time when the attachment was last modified",
+ "x-ms-property-name-alias": "lastModifiedDateTime"
+ },
+ "contentId": {
+ "type": "string",
+ "title": "Content Id",
+ "description": "Content Id",
+ "x-ms-property-name-alias": "contentId"
+ }
+ },
+ "required": [],
+ "description": "File Attachment"
+ },
+ "description": "The file attachments for the message",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "body/attachments"
+ },
+ "isHtml": {
+ "type": "boolean",
+ "title": "Is HTML",
+ "description": "Is Html?",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "body/isHtml"
+ },
+ "sensitivityLabelInfo": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "sensitivityLabelId": {
+ "type": "string",
+ "title": "sensitivityLabelId",
+ "description": "SensitivityLabel Id.",
+ "x-ms-property-name-alias": "sensitivityLabelId"
+ },
+ "name": {
+ "type": "string",
+ "title": "name",
+ "description": "SensitivityLabel name.",
+ "x-ms-property-name-alias": "name"
+ },
+ "displayName": {
+ "type": "string",
+ "title": "displayName",
+ "description": "SensitivityLabel displayName info",
+ "x-ms-property-name-alias": "displayName"
+ },
+ "tooltip": {
+ "type": "string",
+ "title": "tooltip",
+ "description": "SensitivityLabel details on tooltip.",
+ "x-ms-property-name-alias": "tooltip"
+ },
+ "priority": {
+ "type": "integer",
+ "title": "priority",
+ "format": "int32",
+ "description": "SensitivityLabel priority.",
+ "x-ms-property-name-alias": "priority"
+ },
+ "color": {
+ "type": "string",
+ "title": "color",
+ "description": "SensitivityLabel color.",
+ "x-ms-property-name-alias": "color"
+ },
+ "isEncrypted": {
+ "type": "boolean",
+ "title": "isEncrypted",
+ "description": " is SensitivityLabel Encrypted.",
+ "x-ms-property-name-alias": "isEncrypted"
+ },
+ "isEnabled": {
+ "type": "boolean",
+ "title": "isEnabled",
+ "description": "Whether SensitivityLabel is Enabled.",
+ "x-ms-property-name-alias": "isEnabled"
+ },
+ "isParent": {
+ "type": "boolean",
+ "title": "isParent",
+ "description": "Whether SensitivityLabel is Parent.",
+ "x-ms-property-name-alias": "isParent"
+ },
+ "parentSensitivityLabelId": {
+ "type": "string",
+ "title": "parentSensitivityLabelId",
+ "description": "Parent SensitivityLabel Id.",
+ "x-ms-property-name-alias": "parentSensitivityLabelId"
+ }
+ },
+ "required": []
+ },
+ "x-ms-property-name-alias": "body/sensitivityLabelInfo"
+ }
+ },
+ "required": [],
+ "description": "Graph Client Receive Email Message"
+ }
+ }
+ ]
+ },
+ "measured": {
+ "width": 240,
+ "height": 66
+ }
+ },
+ {
+ "id": "classifyOnInlineAgent-cf2f15e8-2660-4732-b934-7431240f433b",
+ "name": "Classify",
+ "type": "classifyOnInlineAgent",
+ "version": 1,
+ "position": {
+ "x": 666,
+ "y": 470
+ },
+ "data": {
+ "config": {
+ "input": "Mail input:\n@{triggerOutputs()?['body/body']}",
+ "categories": [
+ {
+ "id": "f1efd1a5-76cc-4a05-a432-8d5b2fcc0839",
+ "name": "Order Shipment Issue",
+ "description": "The customer reports a problem with the delivery or shipment of an order they placed: it is late, hasn't arrived, is stuck in transit, or they're asking where it is or when it will come. The product itself is not reported as faulty - the issue is getting it to them."
+ },
+ {
+ "id": "1e11370e-7602-466a-904f-0242d972063c",
+ "name": "Order Defect Issue",
+ "description": "The customer reports that an item they have already received is faulty, damaged, dead on arrival, or does not work as expected, and wants it replaced, exchanged, or refunded. The issue is the condition of the product, not its delivery."
+ }
+ ],
+ "examples": [
+ {
+ "id": "8414fb0e-fdf8-490c-8673-049b9fe33019",
+ "input": "My order delivery is late, it was supposed to arrive a week ago",
+ "label": "Order Shipment Issue"
+ },
+ {
+ "id": "d852f490-49b3-441c-b8e1-31e2312e1260",
+ "input": "Tracking hasn't updated in days and my console still isn't here, where is it?",
+ "label": "Order Shipment Issue"
+ },
+ {
+ "id": "df406401-8377-4aa7-9903-cb8db13e984b",
+ "input": "My BlastBox OMEGA is not turning on. It is brand new, I just received it yesterday",
+ "label": "Order Defect Issue"
+ },
+ {
+ "id": "0868bbb2-bbee-4f39-9fe0-92ada42eaf02",
+ "input": "The controller that came with my order is faulty, the buttons don't respond",
+ "label": "Order Defect Issue"
+ }
+ ],
+ "model": "GPT55Chat",
+ "connectionName": "shared_agentnode-2",
+ "inputRich": {
+ "segments": [
+ {
+ "type": "static",
+ "value": "Mail input:\n"
+ },
+ {
+ "type": "token",
+ "value": "Body",
+ "tokenRef": {
+ "type": "step",
+ "stepId": "start-ee6d2ba4-6711-46df-873b-8ff4e5362436",
+ "stepName": "When a new email arrives",
+ "outputName": "body/body",
+ "outputDisplayName": "Body",
+ "outputType": "string",
+ "outputAlias": "body/body"
+ }
+ }
+ ]
+ }
+ },
+ "outcomes": [
+ {
+ "id": "category:f1efd1a5-76cc-4a05-a432-8d5b2fcc0839",
+ "label": "Order Shipment Issue"
+ },
+ {
+ "id": "category:1e11370e-7602-466a-904f-0242d972063c",
+ "label": "Order Defect Issue"
+ },
+ {
+ "id": "default-category",
+ "label": "Other"
+ }
+ ]
+ },
+ "measured": {
+ "width": 240,
+ "height": 217
+ }
+ },
+ {
+ "id": "canvasNote-a592e707-ed7b-4419-b23f-4a1265cb05c5",
+ "name": "Note",
+ "type": "canvasNote",
+ "version": 1,
+ "position": {
+ "x": 98.549469803334972,
+ "y": 261.79066867419533
+ },
+ "width": 250,
+ "height": 150,
+ "style": {
+ "width": 250,
+ "height": 150
+ },
+ "data": {
+ "config": {
+ "markdown": "Customer email arrives in Inbox with enquiry. Subject filter is \"BlastBox Customer Service\", a Post-Sales entry point",
+ "color": "yellow"
+ },
+ "outcomes": []
+ },
+ "measured": {
+ "width": 250,
+ "height": 150
+ }
+ },
+ {
+ "id": "agent-c795e6ad-eef4-47c5-b492-88ca35dbef9c",
+ "name": "Review Order, Stock & Weather",
+ "type": "agent",
+ "version": 1,
+ "position": {
+ "x": 943.92304030058176,
+ "y": 176.11393192308859
+ },
+ "data": {
+ "config": {
+ "mode": "inline",
+ "instructions": "",
+ "botSchemaName": "",
+ "isHitlEscalationEnabled": false,
+ "webSearchEnabled": false,
+ "inlineInstructions": "You handle a customer shipment enquiry about an order that is late or has not arrived. Work only from the tools; never invent orders, stock, dates or prices. You do never request the return yourself, this is a step to be taken later \n\nCustomer enquiry: {triggerOutputs()?['body/body']}\n\nSteps:\n1. Look up the order from the name, email or order number in the enquiry. If you cannot find a single matching order, request human assistance rather than guessing.\n2. Check the stock and fulfilment status of the ordered item. If it is out of stock or delayed, get its restock/ETA date.\n3. Estimate a realistic new ETA, factoring in the current weather at the order's destination address.\n4. Determine whether an in‑stock substitute product exists that the customer could exchange instead (e.g. a higher console model). \n5. Determine the options available according to the applicable return policy for the case. Options should be only two or three linked to the possible outcomes: Wait, Return (with the cash refund options available, ignore refund as points and indicate we are only not offering this option at the moment), Refund.\n\nReturn these outputs:\n- Summary: Customer-facing summary to state the current status, the new estimated ETA and why, and lay out the options plainly. No greeting, no sign‑off, no citations, only the findings and options.\n- SubstituteExists: 'Yes' is an an in‑stock substitute product was found\n- ReturnInstruction: One line indicating which order and item to return/refund and with what conditions.\n- ExchangeInstruction: One line indicating which order/item to exchange, for which substitute SKU and with what conditions. Empty if no substitute exists.\n\nSummary format: Write `Summary` as short, clean HTML using only `
`, ``, ` `, `` and `` tags. Two short paragraphs:\n1. Open with \"Dear customer,\" to start, then line break,\n2. Start first paragraph with \"We've detected that…\" - state the issue and, for a shipment case, the new estimated ETA.\n3. Continue second paragraph with \"We can offer you…\" - briefly list the options that apply.\n4. Close with \"Thank you -* The BlastBox Team*\" in a separate line.",
+ "outputMode": "structured-simple",
+ "inlineModel": "claude-opus-5",
+ "connectionName": "shared_agentnode-2",
+ "inlineTools": [
+ {
+ "id": "ca023e2a-2af4-4f7b-8229-67f6b1113336",
+ "connectorId": "shared_msnweather",
+ "operationId": "CurrentWeather",
+ "displayName": "Get current weather",
+ "description": "Get the current weather for a location.",
+ "connectionReferenceName": "b1072dd0220d4fbd8a2db07ef073e482",
+ "authMode": "invoker",
+ "isMcp": false,
+ "iconUri": "https://conn-afd-prod-endpoint-bmc9bqahasf3grgk.b01.azurefd.net/releases/v1.0.1802/1.0.1802.4640/msnweather/icon.png",
+ "brandColor": "#0078D4",
+ "connectionId": "b1072dd0220d4fbd8a2db07ef073e482"
+ }
+ ],
+ "simpleProperties": [
+ {
+ "id": "4c494ef5-5ac7-4950-836f-b58ddbc95282",
+ "name": "Summary",
+ "type": "string",
+ "description": ""
+ },
+ {
+ "id": "717ef18e-1907-40c4-b628-a61d2e5c4c0f",
+ "name": "SubstituteExists",
+ "type": "boolean",
+ "description": ""
+ },
+ {
+ "id": "a64fc2f8-7694-495a-b9aa-314eebd25240",
+ "name": "ReturnInstruction",
+ "type": "string",
+ "description": ""
+ },
+ {
+ "id": "278dc930-4d6d-4cea-9a58-ff2602a226f1",
+ "name": "ExchangeInstruction",
+ "type": "string",
+ "description": ""
+ }
+ ],
+ "jsonSchema": {
+ "type": "object",
+ "properties": {
+ "Summary": {
+ "type": "string"
+ },
+ "SubstituteExists": {
+ "type": "boolean"
+ },
+ "ReturnInstruction": {
+ "type": "string"
+ },
+ "ExchangeInstruction": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Summary",
+ "SubstituteExists",
+ "ReturnInstruction",
+ "ExchangeInstruction"
+ ]
+ }
+ },
+ "outcomes": [
+ {
+ "id": "default",
+ "label": "Default",
+ "outcomeSchema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Agent Response",
+ "description": "Aggregated message text emitted before the structured output (may be null)"
+ },
+ "activities": {
+ "type": "array",
+ "description": "Bot response activities (typing, message, and event types)"
+ },
+ "structuredOutput": {
+ "type": "object",
+ "properties": {
+ "Summary": {
+ "type": "string"
+ },
+ "SubstituteExists": {
+ "type": "boolean"
+ },
+ "ReturnInstruction": {
+ "type": "string"
+ },
+ "ExchangeInstruction": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Summary",
+ "SubstituteExists",
+ "ReturnInstruction",
+ "ExchangeInstruction"
+ ],
+ "title": ""
+ }
+ },
+ "required": [
+ "activities",
+ "structuredOutput"
+ ]
+ }
+ }
+ ]
+ },
+ "measured": {
+ "width": 275,
+ "height": 66
+ },
+ "selected": true
+ },
+ {
+ "id": "agent-0a2ca1d4-b735-4d6c-bbed-55834b22195b",
+ "name": "Review Order & Policy",
+ "type": "agent",
+ "version": 1,
+ "position": {
+ "x": 949,
+ "y": 545.5
+ },
+ "data": {
+ "config": {
+ "mode": "inline",
+ "instructions": "\nee",
+ "botSchemaName": "",
+ "isHitlEscalationEnabled": true,
+ "webSearchEnabled": false,
+ "inlineInstructions": "You assess a customer enquiry about a received item that may be defective, and decide what our policy allows. Ground every ruling in your tools; never invent policy numbers, fees, orders or dates. You do never request the return yourself, this is a step to be taken later \n\nCustomer Enquiry: {triggerOutputs()?['body/body']}\n\nSteps:\n1. Find the order from the name, email or order number provided. If the details the customer gives do not reconcile with the order on file - the name or email doesn't match the order, the order can't be found, or the item isn't on that order - do not proceed on assumption: request human assistance and explain exactly what doesn't match. Only ask the human to clear ambiguity in the field that does not match the customer indications, do not ask for more information than the strictly necessary.\n2. If the order reconciles, establish whether the fault is a manufacturing defect versus accidental/physical damage, and check it against our return/warranty policy (window, restocking fee, warranty swap). Never make a conclusion on the outcome of the applicability of the return without searching first the organization's policy. \n3. Classify the outcome and explain your reasoning.\n\nThen return these outputs:\n- Return: Where applicable = policy clearly allows return/refund/exchange; other = not fully covered but extreme / ambiguous / grey‑area (may be an exception); or clearly not covered or not justified\n- Summary: Two lines with the rationale behind the policy applicability or rejection. No greeting, citations or commentary. A concise assessment of policy coverage, visible to both the customer and tstore manager. Maximum 2 bullet points, no more than 600 characters. Exclude other type of details. \n- ReturnInstruction: One line for the fulfilment agent: which order and item to return/refund/exchange and why",
+ "outputMode": "structured-simple",
+ "inlineModel": "claude-opus-5",
+ "connectionName": "shared_agentnode-2",
+ "simpleProperties": [
+ {
+ "id": "d290ecea-95d1-4343-b5fc-886b5237df61",
+ "name": "Return",
+ "type": "enum",
+ "description": "",
+ "enumValues": [
+ "applicable",
+ "other"
+ ]
+ },
+ {
+ "id": "72af3677-c728-4ec5-94ad-cdc68bdaaf09",
+ "name": "Summary",
+ "type": "string",
+ "description": ""
+ },
+ {
+ "id": "d0e3e7cf-131b-47b1-af8d-ce64c56a9dcd",
+ "name": "ReturnInstruction",
+ "type": "string",
+ "description": ""
+ }
+ ],
+ "instructionsRich": {
+ "segments": [
+ {
+ "type": "static",
+ "value": "\nee"
+ }
+ ]
+ },
+ "inlineTools": [
+ {
+ "id": "f5f5a22e-bea5-4ecd-a5c1-7c653e4e948e",
+ "connectorId": "shared_advancedapprovals",
+ "operationId": "RequestForInformation",
+ "displayName": "Advanced Approvals — Request for information",
+ "description": "Ask a human for additional information.",
+ "connectionReferenceName": "new_sharedadvancedapprovals_00cb31fc",
+ "connectionId": "be923ac0d38a430a90ba2395510118d3",
+ "parameters": {
+ "channel": "Outlook",
+ "assignedTo": "3f1848f3-2d5c-4958-9033-c9a92b6aed59"
+ }
+ }
+ ],
+ "jsonSchema": {
+ "type": "object",
+ "properties": {
+ "Return": {
+ "type": "string",
+ "enum": [
+ "applicable",
+ "other"
+ ]
+ },
+ "Summary": {
+ "type": "string"
+ },
+ "ReturnInstruction": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Return",
+ "Summary",
+ "ReturnInstruction"
+ ]
+ }
+ },
+ "outcomes": [
+ {
+ "id": "default",
+ "label": "Default",
+ "outcomeSchema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Agent Response",
+ "description": "Aggregated message text emitted before the structured output (may be null)"
+ },
+ "activities": {
+ "type": "array",
+ "description": "Bot response activities (typing, message, and event types)"
+ },
+ "structuredOutput": {
+ "type": "object",
+ "properties": {
+ "Return": {
+ "type": "string",
+ "enum": [
+ "applicable",
+ "other"
+ ]
+ },
+ "Summary": {
+ "type": "string"
+ },
+ "ReturnInstruction": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Return",
+ "Summary",
+ "ReturnInstruction"
+ ],
+ "title": ""
+ }
+ },
+ "required": [
+ "activities",
+ "structuredOutput"
+ ]
+ }
+ }
+ ]
+ },
+ "measured": {
+ "width": 240,
+ "height": 66
+ },
+ "selected": false
+ },
+ {
+ "id": "agent-2444168a-b2f6-48b5-bb75-75d94e0cf8aa",
+ "name": "Trigger Order Return/Exchange",
+ "type": "agent",
+ "version": 1,
+ "position": {
+ "x": 2437.5384005009705,
+ "y": 352.78760701358158
+ },
+ "data": {
+ "config": {
+ "mode": "inline",
+ "instructions": "",
+ "botSchemaName": "",
+ "isHitlEscalationEnabled": false,
+ "webSearchEnabled": false,
+ "inlineInstructions": "Action the return or exchange described below for the customer's order, using the Order Management tools. \nDo exactly what the instruction says, do not re‑decide eligibility, that has already been determined upstream.\n\nReturn or exchange action to perform:\n {variables('ReturnNote')}\n\nOriginal customer email:\n{triggerOutputs()?['body/body']}\n\nOnce the return or exchange is registered, send a single confirmation email - only to the customer address provided, never any other address - telling them it's done, what to expect next in one liner (label, refund or replacement timing). Do not include any citations, links, or URLs in the sent email. \n\nCustomer email: {triggerOutputs()?['body/from']}\nSubject: \"BlastBox Service – Your return/exchange is confirmed\"\nBody:\n\"Dear Customer,\n\nWe are pleased to inform you that [notes on the action performed]. You will receive [note on the applicable product, and or refund to be received by the customer]. \n\nThank you,\n*The BlastBox Team*\"\n",
+ "outputMode": "text",
+ "inlineModel": "claude-opus-5",
+ "connectionName": "shared_agentnode-2",
+ "inlineTools": [
+ {
+ "id": "bd68b02a-817d-4c70-b0a3-4c30a986b6ab",
+ "connectorId": "shared_office365",
+ "operationId": "SendEmailV2",
+ "displayName": "Send an email",
+ "description": "This operation sends an email message.",
+ "connectionReferenceName": "shared-office365-b79141e6-d6f8-42c6-b914-3eb3d2491190",
+ "authMode": "invoker",
+ "isMcp": false,
+ "iconUri": "https://res-1.cdn.office.net/files/fabric-cdn-prod_20251008.001/assets/brand-icons/product/svg/outlook_48x1.svg",
+ "brandColor": "#0078D4",
+ "connectionId": "shared-office365-b79141e6-d6f8-42c6-b914-3eb3d2491190"
+ }
+ ]
+ },
+ "outcomes": [
+ {
+ "id": "default",
+ "label": "Default",
+ "outcomeSchema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Agent Response",
+ "description": "The agent response text"
+ },
+ "activities": {
+ "type": "array",
+ "description": "Bot response activities (typing, message, and event types)"
+ }
+ },
+ "required": [
+ "activities"
+ ]
+ }
+ }
+ ]
+ },
+ "measured": {
+ "width": 276,
+ "height": 66
+ },
+ "selected": false
+ },
+ {
+ "id": "connector-7492932a-4693-4b1e-91dc-313e11fd221b",
+ "name": "Human Review: Exception",
+ "type": "connector",
+ "version": 1,
+ "position": {
+ "x": 1561.3846397996119,
+ "y": 650.26991438913478
+ },
+ "data": {
+ "config": {
+ "apiName": "shared_advancedapprovals",
+ "operationName": "RequestForInformation",
+ "displayName": "Human review",
+ "paletteIconHint": "humanReview",
+ "connectionName": "shared_advancedapprovals-1",
+ "operationType": "OpenApiConnectionWebhook",
+ "iconUri": "https://static.powerapps.com/resource/ppcr/releases/v1.0.1819/1.0.1819.4798/advancedapprovals/icon.png",
+ "parameters": {
+ "RequestForInformationInput/channel": "Outlook",
+ "RequestForInformationInput/title": "Action needed: Review Return Policy Exception",
+ "RequestForInformationInput/message": "Dear manager,\n\nA customer return/refund request has been flagged as not covered under policy and needs your attention. \n\nApprove to apply an exception and initiate a return/exchange, or reject to decline. Thank you.\n\nCase assessment (AI-generated):\n\n@{body('agent-0a2ca1d4-b735-4d6c-bbed-55834b22195b')?['structuredOutput/Summary']} ",
+ "RequestForInformationInput/assignedTo": "@{triggerOutputs()?['body/from']}",
+ "RequestForInformationInput/input": {
+ "type": "object",
+ "properties": {
+ "boolean": {
+ "title": "Approve",
+ "type": "boolean",
+ "x-ms-content-hint": "BOOLEAN",
+ "x-ms-dynamically-added": true,
+ "description": "Please select yes or no"
+ }
+ },
+ "required": [
+ "boolean"
+ ]
+ }
+ },
+ "parametersSchema": {
+ "type": "object",
+ "properties": {
+ "RequestForInformationInput": {
+ "type": "object",
+ "properties": {
+ "title": {
+ "type": "string",
+ "title": "Title",
+ "description": "Specify the title of the request.",
+ "x-ms-visibility": "important",
+ "x-ms-property-name-alias": "RequestForInformationInput/title"
+ },
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Specify the message for the request.",
+ "x-ms-visibility": "important",
+ "x-ms-property-name-alias": "RequestForInformationInput/message"
+ },
+ "assignedTo": {
+ "type": "string",
+ "title": "Assigned to (first to respond)",
+ "x-ms-dynamic-list": {
+ "builtInOperation": "AadGraph.GetUsers",
+ "parameters": {},
+ "itemValuePath": "mail",
+ "itemTitlePath": "displayName"
+ },
+ "format": "email",
+ "description": "Recipient email addresses, UPNs, or Microsoft Entra user ids separated by semicolons. The response from the first user to respond to the request is used.",
+ "x-ms-visibility": "important",
+ "x-ms-property-name-alias": "RequestForInformationInput/assignedTo"
+ },
+ "channel": {
+ "type": "string",
+ "title": "Channel",
+ "description": "Set this to the notification channel for the request based on user query. Choose one of: Outlook or Teams. Defaults to Outlook if not specified. Use Teams if the user mentions Teams, flow bot, or teams bot.",
+ "default": "Outlook",
+ "enum": [
+ "Outlook",
+ "Teams"
+ ],
+ "x-ms-visibility": "important",
+ "x-ms-enum-values": [
+ {
+ "displayName": "Outlook",
+ "value": "Outlook"
+ },
+ {
+ "displayName": "Teams",
+ "value": "Teams"
+ }
+ ],
+ "x-ms-property-name-alias": "RequestForInformationInput/channel"
+ },
+ "input": {
+ "type": "object",
+ "title": "Input",
+ "properties": {},
+ "required": [],
+ "description": "Input definition.",
+ "x-ms-visibility": "important",
+ "x-ms-property-name-alias": "RequestForInformationInput/input"
+ }
+ },
+ "required": [
+ "assignedTo",
+ "channel",
+ "input",
+ "message",
+ "title"
+ ],
+ "description": "Request information",
+ "x-ms-property-name-alias": "RequestForInformationInput"
+ }
+ },
+ "required": [
+ "RequestForInformationInput"
+ ]
+ }
+ },
+ "outcomes": [
+ {
+ "id": "default",
+ "label": "Default",
+ "outcomeSchema": {
+ "type": "object",
+ "properties": {
+ "boolean": {
+ "title": "Approve",
+ "type": "boolean",
+ "x-ms-content-hint": "BOOLEAN",
+ "x-ms-dynamically-added": true,
+ "description": "Please select yes or no"
+ }
+ },
+ "required": [
+ "boolean"
+ ]
+ }
+ }
+ ]
+ },
+ "measured": {
+ "width": 242,
+ "height": 66
+ }
+ },
+ {
+ "id": "ifElse-16a2c329-a4a3-4d03-822d-4148fac6c339",
+ "name": "Approval Condition",
+ "type": "ifElse",
+ "version": 1,
+ "position": {
+ "x": 1845.6923198998059,
+ "y": 612.30847358758263
+ },
+ "data": {
+ "config": {
+ "conditions": [
+ {
+ "id": "a1be36bb-5825-4ddd-88cd-142f82444df3",
+ "name": "If exception approved",
+ "expression": "{\n \"and\": [\n {\n \"equals\": [\n \"@body('connector-7492932a-4693-4b1e-91dc-313e11fd221b')?['boolean']\",\n \"Yes\"\n ]\n }\n ]\n}"
+ }
+ ]
+ },
+ "outcomes": [
+ {
+ "id": "condition:a1be36bb-5825-4ddd-88cd-142f82444df3",
+ "label": "If exception approved"
+ },
+ {
+ "id": "else",
+ "label": "Else"
+ }
+ ]
+ },
+ "measured": {
+ "width": 240,
+ "height": 169
+ }
+ },
+ {
+ "id": "connector-9ccb141c-3277-4402-b045-e4569768d047",
+ "name": "Send reply: No refund",
+ "type": "connector",
+ "version": 1,
+ "position": {
+ "x": 2163,
+ "y": 775
+ },
+ "data": {
+ "config": {
+ "apiName": "shared_office365",
+ "displayName": "Office 365 Outlook",
+ "iconUri": "https://res-1.cdn.office.net/files/fabric-cdn-prod_20251008.001/assets/brand-icons/product/svg/outlook_48x1.svg",
+ "brandColor": "#0078D4",
+ "operationName": "ReplyToV3",
+ "parametersSchema": {
+ "type": "object",
+ "properties": {
+ "messageId": {
+ "type": "string",
+ "title": "Message Id",
+ "description": "Id of the email to reply to.",
+ "minLength": 1,
+ "x-ms-property-name-alias": "messageId"
+ },
+ "replyParameters": {
+ "type": "object",
+ "title": "Details of the email reply.",
+ "properties": {
+ "To": {
+ "type": "string",
+ "title": "To",
+ "format": "email",
+ "description": "Example: recipient1@domain.com; recipient2@domain.com",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "replyParameters/To"
+ },
+ "Cc": {
+ "type": "string",
+ "title": "CC",
+ "format": "email",
+ "description": "Example: recipient1@domain.com; recipient2@domain.com",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "replyParameters/Cc"
+ },
+ "Bcc": {
+ "type": "string",
+ "title": "BCC",
+ "format": "email",
+ "description": "Example: recipient1@domain.com; recipient2@domain.com",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "replyParameters/Bcc"
+ },
+ "Subject": {
+ "type": "string",
+ "title": "Subject",
+ "description": "Email subject (if empty, the original subject used).",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "replyParameters/Subject"
+ },
+ "Body": {
+ "type": "string",
+ "title": "Body",
+ "format": "html",
+ "description": "Content of the email.",
+ "x-ms-property-name-alias": "replyParameters/Body"
+ },
+ "ReplyAll": {
+ "type": "boolean",
+ "title": "Reply All",
+ "description": "True to reply to all recipients. (default: False)",
+ "x-ms-property-name-alias": "replyParameters/ReplyAll"
+ },
+ "Importance": {
+ "type": "string",
+ "title": "Importance",
+ "description": "Pick an importance. (default: Low)",
+ "enum": [
+ "Low",
+ "Normal",
+ "High"
+ ],
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "replyParameters/Importance"
+ },
+ "Attachments": {
+ "type": "array",
+ "title": "Attachments",
+ "items": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string",
+ "title": "Name",
+ "description": "Attachment name",
+ "x-ms-property-name-alias": "Name"
+ },
+ "ContentBytes": {
+ "type": "string",
+ "title": "Content",
+ "format": "byte",
+ "description": "Attachment content",
+ "x-ms-property-name-alias": "ContentBytes"
+ }
+ },
+ "required": [
+ "ContentBytes",
+ "Name"
+ ],
+ "description": "Attachment"
+ },
+ "description": "Details of attachments to be sent along with the reply.",
+ "x-ms-property-name-alias": "replyParameters/Attachments"
+ }
+ },
+ "required": [],
+ "description": "Details of the email reply.",
+ "x-ms-property-name-alias": "replyParameters"
+ },
+ "mailboxAddress": {
+ "type": "string",
+ "title": "Original Mailbox Address",
+ "x-ms-dynamic-list": {
+ "builtInOperation": "AadGraph.GetUsers",
+ "parameters": {},
+ "itemValuePath": "mail"
+ },
+ "description": "Address of the shared mailbox to reply from.",
+ "x-ms-property-name-alias": "mailboxAddress"
+ }
+ },
+ "required": [
+ "messageId",
+ "replyParameters"
+ ]
+ },
+ "parameters": {
+ "replyParameters/Importance": "Low",
+ "messageId": "@{triggerOutputs()?['body/id']}",
+ "replyParameters/Body": "Dear customer,
We have assessed your enquiry and have concluded that your case does not apply for a refund or exchange under our current policy.
Findings summary:
@{body('agent-0a2ca1d4-b735-4d6c-bbed-55834b22195b')?['structuredOutput/Summary']}
We apologise for any inconvenience this may cause to you. If you need further information about our policies, please visit our site.
Thank you,
The BlastBox Team
",
+ "replyParameters/Subject": "BlastBox Service - Your enquiry",
+ "replyParameters/To": "@{triggerOutputs()?['body/from']}"
+ },
+ "operationType": "OpenApiConnection",
+ "connectionName": "shared_office365"
+ },
+ "outcomes": [
+ {
+ "id": "default",
+ "label": "Default",
+ "outcomeSchema": {
+ "type": "object",
+ "properties": {}
+ }
+ }
+ ]
+ },
+ "measured": {
+ "width": 240,
+ "height": 66
+ }
+ },
+ {
+ "id": "connector-5f867ed3-6c32-4c2d-b747-251877850d50",
+ "name": "Send reply",
+ "type": "connector",
+ "version": 1,
+ "position": {
+ "x": 1270.6153602003881,
+ "y": 925.616471082732
+ },
+ "data": {
+ "config": {
+ "apiName": "shared_office365",
+ "displayName": "Office 365 Outlook",
+ "iconUri": "https://res-1.cdn.office.net/files/fabric-cdn-prod_20251008.001/assets/brand-icons/product/svg/outlook_48x1.svg",
+ "brandColor": "#0078D4",
+ "operationName": "ReplyToV3",
+ "operationType": "OpenApiConnection",
+ "parameters": {
+ "replyParameters/Importance": "Low",
+ "replyParameters/Body": "Dear customer,
Thanks for getting in touch. We have assessed your enquiry. Here is some useful information for you:
@{body('agent-b6af16be-b502-4322-83cb-bf6f1c2ddf13')?['result']}
Further questions? Please reach out to us or visit our site.
Thank you,
The BlastBox Team
",
+ "messageId": "@{triggerOutputs()?['body/id']}",
+ "replyParameters/To": "@{triggerOutputs()?['body/from']}",
+ "replyParameters/Subject": "BlastBox Service - Your enquiry"
+ },
+ "parametersSchema": {
+ "type": "object",
+ "properties": {
+ "messageId": {
+ "type": "string",
+ "title": "Message Id",
+ "description": "Id of the email to reply to.",
+ "minLength": 1,
+ "x-ms-property-name-alias": "messageId"
+ },
+ "replyParameters": {
+ "type": "object",
+ "title": "Details of the email reply.",
+ "properties": {
+ "To": {
+ "type": "string",
+ "title": "To",
+ "format": "email",
+ "description": "Example: recipient1@domain.com; recipient2@domain.com",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "replyParameters/To"
+ },
+ "Cc": {
+ "type": "string",
+ "title": "CC",
+ "format": "email",
+ "description": "Example: recipient1@domain.com; recipient2@domain.com",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "replyParameters/Cc"
+ },
+ "Bcc": {
+ "type": "string",
+ "title": "BCC",
+ "format": "email",
+ "description": "Example: recipient1@domain.com; recipient2@domain.com",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "replyParameters/Bcc"
+ },
+ "Subject": {
+ "type": "string",
+ "title": "Subject",
+ "description": "Email subject (if empty, the original subject used).",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "replyParameters/Subject"
+ },
+ "Body": {
+ "type": "string",
+ "title": "Body",
+ "format": "html",
+ "description": "Content of the email.",
+ "x-ms-property-name-alias": "replyParameters/Body"
+ },
+ "ReplyAll": {
+ "type": "boolean",
+ "title": "Reply All",
+ "description": "True to reply to all recipients. (default: False)",
+ "x-ms-property-name-alias": "replyParameters/ReplyAll"
+ },
+ "Importance": {
+ "type": "string",
+ "title": "Importance",
+ "description": "Pick an importance. (default: Low)",
+ "enum": [
+ "Low",
+ "Normal",
+ "High"
+ ],
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "replyParameters/Importance"
+ },
+ "Attachments": {
+ "type": "array",
+ "title": "Attachments",
+ "items": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string",
+ "title": "Name",
+ "description": "Attachment name",
+ "x-ms-property-name-alias": "Name"
+ },
+ "ContentBytes": {
+ "type": "string",
+ "title": "Content",
+ "format": "byte",
+ "description": "Attachment content",
+ "x-ms-property-name-alias": "ContentBytes"
+ }
+ },
+ "required": [
+ "ContentBytes",
+ "Name"
+ ],
+ "description": "Attachment"
+ },
+ "description": "Details of attachments to be sent along with the reply.",
+ "x-ms-property-name-alias": "replyParameters/Attachments"
+ }
+ },
+ "required": [],
+ "description": "Details of the email reply.",
+ "x-ms-property-name-alias": "replyParameters"
+ },
+ "mailboxAddress": {
+ "type": "string",
+ "title": "Original Mailbox Address",
+ "x-ms-dynamic-list": {
+ "builtInOperation": "AadGraph.GetUsers",
+ "parameters": {},
+ "itemValuePath": "mail"
+ },
+ "description": "Address of the shared mailbox to reply from.",
+ "x-ms-property-name-alias": "mailboxAddress"
+ }
+ },
+ "required": [
+ "messageId",
+ "replyParameters"
+ ]
+ },
+ "connectionName": "shared_office365"
+ },
+ "outcomes": [
+ {
+ "id": "default",
+ "label": "Default",
+ "outcomeSchema": {
+ "type": "object",
+ "properties": {}
+ }
+ }
+ ]
+ },
+ "measured": {
+ "width": 240,
+ "height": 66
+ }
+ },
+ {
+ "id": "connector-2b4cf3f7-936b-4139-bb61-ac0a14daae6e",
+ "name": "Send context and options",
+ "type": "connector",
+ "version": 1,
+ "position": {
+ "x": 1268.9230403005818,
+ "y": 176.11393192308859
+ },
+ "data": {
+ "config": {
+ "apiName": "shared_office365",
+ "displayName": "Office 365 Outlook",
+ "iconUri": "https://res-1.cdn.office.net/files/fabric-cdn-prod_20251008.001/assets/brand-icons/product/svg/outlook_48x1.svg",
+ "brandColor": "#0078D4",
+ "operationName": "SendMailWithOptions",
+ "connectionName": "shared_office365",
+ "operationType": "OpenApiConnectionWebhook",
+ "parameters": {
+ "optionsEmailSubscription/Message/Importance": "Normal",
+ "optionsEmailSubscription/Message/Subject": "Action Needed: Your Delivery Enquiry",
+ "optionsEmailSubscription/Message/Options": "@{if(body('agent-c795e6ad-eef4-47c5-b492-88ca35dbef9c')?['structuredOutput/SubstituteExists'], 'Wait, Return, Exchange', 'Wait, Return')}",
+ "optionsEmailSubscription/Message/To": "@{triggerOutputs()?['body/from']}",
+ "optionsEmailSubscription/Message/Body": "@{body('agent-c795e6ad-eef4-47c5-b492-88ca35dbef9c')?['structuredOutput/Summary']}",
+ "optionsEmailSubscription/Message/HideHTMLMessage": false,
+ "optionsEmailSubscription/Message/HideMicrosoftFooter": true,
+ "optionsEmailSubscription/Message/ShowHTMLConfirmationDialog": false,
+ "optionsEmailSubscription/Message/UseOnlyHTMLMessage": true,
+ "optionsEmailSubscription/Message/HeaderText": "Action Needed: Your Delivery Enquiry"
+ },
+ "parametersSchema": {
+ "type": "object",
+ "properties": {
+ "optionsEmailSubscription": {
+ "type": "object",
+ "title": "Subscription request for options email",
+ "properties": {
+ "Message": {
+ "type": "object",
+ "properties": {
+ "To": {
+ "type": "string",
+ "title": "To",
+ "x-ms-dynamic-list": {
+ "builtInOperation": "AadGraph.GetUsers",
+ "parameters": {},
+ "itemValuePath": "mail"
+ },
+ "format": "email",
+ "description": "Specify email addresses separated by semicolons like someone@contoso.com",
+ "x-ms-property-name-alias": "optionsEmailSubscription/Message/To"
+ },
+ "Subject": {
+ "type": "string",
+ "title": "Subject",
+ "description": "Subject of the email",
+ "default": "Your input is required",
+ "x-ms-property-name-alias": "optionsEmailSubscription/Message/Subject"
+ },
+ "Options": {
+ "type": "string",
+ "title": "User Options",
+ "description": "List of comma separated options for the email response",
+ "default": "Choice1, Choice2, Choice3",
+ "x-ms-property-name-alias": "optionsEmailSubscription/Message/Options"
+ },
+ "HeaderText": {
+ "type": "string",
+ "title": "Header Text",
+ "description": "Header text for email body",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "optionsEmailSubscription/Message/HeaderText"
+ },
+ "SelectionText": {
+ "type": "string",
+ "title": "Selection Text",
+ "description": "Header text for users options selection",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "optionsEmailSubscription/Message/SelectionText"
+ },
+ "Body": {
+ "type": "string",
+ "title": "Body",
+ "description": "Body of the email",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "optionsEmailSubscription/Message/Body"
+ },
+ "Importance": {
+ "type": "string",
+ "title": "Importance",
+ "description": "Importance",
+ "default": "Normal",
+ "enum": [
+ "Low",
+ "Normal",
+ "High"
+ ],
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "optionsEmailSubscription/Message/Importance"
+ },
+ "Attachments": {
+ "type": "array",
+ "title": "Attachments",
+ "items": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string",
+ "title": "Name",
+ "description": "Attachment name",
+ "x-ms-property-name-alias": "Name"
+ },
+ "ContentBytes": {
+ "type": "string",
+ "title": "Content",
+ "format": "byte",
+ "description": "Attachment content",
+ "x-ms-property-name-alias": "ContentBytes"
+ }
+ },
+ "required": [
+ "ContentBytes",
+ "Name"
+ ],
+ "description": "Attachment"
+ },
+ "description": "Attachments",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "optionsEmailSubscription/Message/Attachments"
+ },
+ "UseOnlyHTMLMessage": {
+ "type": "boolean",
+ "title": "Use only HTML message",
+ "description": "Use only HTML message",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "optionsEmailSubscription/Message/UseOnlyHTMLMessage"
+ },
+ "HideHTMLMessage": {
+ "type": "boolean",
+ "title": "Hide HTML message",
+ "description": "If set to Yes, then the email body is hidden and only message card is displayed. Email clients which do not support actionable messages will display HTML message regardless of the parameter value.",
+ "default": false,
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "optionsEmailSubscription/Message/HideHTMLMessage"
+ },
+ "ShowHTMLConfirmationDialog": {
+ "type": "boolean",
+ "title": "Show HTML confirmation dialog",
+ "description": "If set to Yes then a dialog wil be shown to confirm selected option of HTML message",
+ "default": false,
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "optionsEmailSubscription/Message/ShowHTMLConfirmationDialog"
+ },
+ "HideMicrosoftFooter": {
+ "type": "boolean",
+ "title": "Hide Microsoft footer",
+ "description": "If set to Yes, then the Microsoft footer is hidden in the email body.",
+ "default": false,
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "optionsEmailSubscription/Message/HideMicrosoftFooter"
+ }
+ },
+ "required": [
+ "To"
+ ],
+ "description": "User Options Email Message. This is the message expected as part of user input",
+ "x-ms-property-name-alias": "optionsEmailSubscription/Message"
+ }
+ },
+ "required": [
+ "Message"
+ ],
+ "description": "Subscription request for options email.",
+ "x-ms-property-name-alias": "optionsEmailSubscription"
+ }
+ },
+ "required": [
+ "optionsEmailSubscription"
+ ]
+ }
+ },
+ "outcomes": [
+ {
+ "id": "default",
+ "label": "Default",
+ "outcomeSchema": {
+ "type": "object",
+ "properties": {
+ "body": {
+ "type": "object",
+ "properties": {
+ "SelectedOption": {
+ "type": "string",
+ "description": "User response",
+ "x-ms-property-name-alias": "body/SelectedOption"
+ },
+ "UserEmailAddress": {
+ "type": "string",
+ "description": "User email address. The value is the user's email address for individual users and user ID for the members in Distribution Group or Mail Enabled Security Group.",
+ "x-ms-property-name-alias": "body/UserEmailAddress"
+ },
+ "UserTenantId": {
+ "type": "string",
+ "description": "User tenant ID. The value is the tenant id of the user for both individual users and the members in Distribution Group or Mail Enabled Security Group.",
+ "x-ms-property-name-alias": "body/UserTenantId"
+ },
+ "UserId": {
+ "type": "string",
+ "description": "User ID. The value is the user id for both individual users and the members in Distribution Group or Mail Enabled Security Group.",
+ "x-ms-property-name-alias": "body/UserId"
+ }
+ },
+ "required": [],
+ "description": "Approval Email Response",
+ "x-ms-property-name-alias": "body"
+ }
+ }
+ }
+ }
+ ]
+ },
+ "measured": {
+ "width": 241,
+ "height": 66
+ }
+ },
+ {
+ "id": "ifElse-5d5fffd8-206d-45e5-bc24-6fc4f32b636c",
+ "name": "Choice Condition",
+ "type": "ifElse",
+ "version": 1,
+ "position": {
+ "x": 1552.9230403005818,
+ "y": 124.61393192308859
+ },
+ "data": {
+ "config": {
+ "conditions": [
+ {
+ "id": "6c4633ad-a5c4-4c49-91ac-5a7d4fa0ee07",
+ "name": "If wait until new ETA",
+ "expression": "{\n \"and\": [\n {\n \"equals\": [\n \"@outputs('connector-2b4cf3f7-936b-4139-bb61-ac0a14daae6e')?['body/SelectedOption']\",\n \"Wait\"\n ]\n }\n ]\n}"
+ }
+ ]
+ },
+ "outcomes": [
+ {
+ "id": "condition:6c4633ad-a5c4-4c49-91ac-5a7d4fa0ee07",
+ "label": "If wait until new ETA"
+ },
+ {
+ "id": "else",
+ "label": "Else"
+ }
+ ]
+ },
+ "measured": {
+ "width": 240,
+ "height": 169
+ }
+ },
+ {
+ "id": "agent-b6af16be-b502-4322-83cb-bf6f1c2ddf13",
+ "name": "Call Store Policy Agent",
+ "type": "agent",
+ "version": 1,
+ "position": {
+ "x": 945.61536020038807,
+ "y": 925.616471082732
+ },
+ "data": {
+ "config": {
+ "mode": "invoke",
+ "instructions": "Review the customer enquiry and craft an answer that summarizes the answer to the question, no greeting, citations, or comments.\nThe answer should be no more than two paragraphs or a paragraph and a couple of bullet points. Do not include text formatting such as bold (*text*). \nUse store and BlastPass policy only. If no answer can be found in the policies, indicate it clearly.\n\nCustomer enquiry: @{triggerOutputs()?['body/body']} ",
+ "botSchemaName": "Default_StorePolicyAgent_s9s-u8",
+ "isHitlEscalationEnabled": false,
+ "webSearchEnabled": false,
+ "inlineInstructions": "",
+ "outputMode": "text",
+ "inlineModel": "claude-opus-5",
+ "connectionName": "shared_agentnode-2",
+ "instructionsRich": {
+ "segments": [
+ {
+ "type": "static",
+ "value": "Review the customer enquiry and craft an answer that summarizes the answer to the question, no greeting, citations, or comments.\nThe answer should be no more than two paragraphs or a paragraph and a couple of bullet points. Do not include text formatting such as bold (*text*). \nUse store and BlastPass policy only. If no answer can be found in the policies, indicate it clearly.\n\nCustomer enquiry: "
+ },
+ {
+ "type": "token",
+ "value": "Body",
+ "tokenRef": {
+ "type": "step",
+ "stepId": "start-ee6d2ba4-6711-46df-873b-8ff4e5362436",
+ "stepName": "When a new email arrives",
+ "outputName": "body/body",
+ "outputDisplayName": "Body",
+ "outputType": "string",
+ "outputAlias": "body/body"
+ }
+ },
+ {
+ "type": "static",
+ "value": " "
+ }
+ ]
+ }
+ },
+ "outcomes": [
+ {
+ "id": "default",
+ "label": "Default",
+ "outcomeSchema": {
+ "type": "object",
+ "properties": {
+ "result": {
+ "type": "string",
+ "description": "The agent response text"
+ },
+ "status": {
+ "type": "string",
+ "description": "The completion status (e.g., Completed)"
+ },
+ "conversationId": {
+ "type": "string",
+ "description": "Unique identifier for the conversation"
+ }
+ },
+ "required": [
+ "result",
+ "conversationId"
+ ]
+ }
+ }
+ ]
+ },
+ "measured": {
+ "width": 240,
+ "height": 66
+ }
+ },
+ {
+ "id": "canvasNote-55701c44-ed9e-47e5-9956-8e4262503f3b",
+ "name": "Note 2",
+ "type": "canvasNote",
+ "version": 1,
+ "position": {
+ "x": 648.577425753283,
+ "y": 263.76341058926431
+ },
+ "width": 250,
+ "height": 150,
+ "style": {
+ "width": 250,
+ "height": 150
+ },
+ "data": {
+ "config": {
+ "markdown": "Email is classified as Order Shipment Issue, Order Defect Issue, or Other if this is a post-sale generic enquiry, not tied to a specific order",
+ "color": "yellow"
+ },
+ "outcomes": []
+ },
+ "measured": {
+ "width": 250,
+ "height": 150
+ }
+ },
+ {
+ "id": "canvasNote-3eb5c945-0bd1-4cde-9a53-b43376917c23",
+ "name": "Note 4",
+ "type": "canvasNote",
+ "version": 1,
+ "position": {
+ "x": 3085.1732300126923,
+ "y": 260.34256960025556
+ },
+ "width": 254,
+ "height": 200,
+ "style": {
+ "width": 254,
+ "height": 200
+ },
+ "data": {
+ "config": {
+ "markdown": "Agent builds a contextualized answer, specifying if problem comes from delivery disruptions or stock unavailability and gets new ETA. Next steps options always include \"wait\" and \"return\", and may include \"exchange\" if substitute exists.",
+ "color": "blue"
+ },
+ "outcomes": []
+ },
+ "measured": {
+ "width": 254,
+ "height": 200
+ },
+ "resizing": false
+ },
+ {
+ "id": "canvasNote-c1d662dc-14df-43dc-a503-84fa55f357a4",
+ "name": "Note 5",
+ "type": "canvasNote",
+ "version": 1,
+ "position": {
+ "x": 1840.6153602003881,
+ "y": 883.616471082732
+ },
+ "width": 250,
+ "height": 150,
+ "style": {
+ "width": 250,
+ "height": 150
+ },
+ "data": {
+ "config": {
+ "markdown": "General enquiries are checked by calling existing Store Policy Agent, followed by an email action to send a structured reply to the customer",
+ "color": "green"
+ },
+ "outcomes": []
+ },
+ "measured": {
+ "width": 250,
+ "height": 150
+ }
+ },
+ {
+ "id": "connector-ef8cfaa6-a984-4216-b10a-3408c1c15675",
+ "name": "Send reply: Thanks for waiting",
+ "type": "connector",
+ "version": 1,
+ "position": {
+ "x": 1838.9230403005818,
+ "y": 98.613931923088586
+ },
+ "data": {
+ "config": {
+ "apiName": "shared_office365",
+ "displayName": "Office 365 Outlook",
+ "iconUri": "https://res-1.cdn.office.net/files/fabric-cdn-prod_20251008.001/assets/brand-icons/product/svg/outlook_48x1.svg",
+ "brandColor": "#0078D4",
+ "operationName": "ReplyToV3",
+ "operationType": "OpenApiConnection",
+ "parameters": {
+ "replyParameters/Importance": "Low",
+ "replyParameters/Body": "Dear customer,
Thanks for your patience. We apologise for any inconveniences.
You have chosen to wait for your order. You can keep track of your order from the separate email sent to you. If you experience any other issues, please reach out to us.
Thank you,
The BlastBox Team
",
+ "messageId": "@{triggerOutputs()?['body/id']}",
+ "replyParameters/To": "@{triggerOutputs()?['body/from']}",
+ "replyParameters/Subject": "BlastBox Service - Your enquiry"
+ },
+ "parametersSchema": {
+ "type": "object",
+ "properties": {
+ "messageId": {
+ "type": "string",
+ "title": "Message Id",
+ "description": "Id of the email to reply to.",
+ "minLength": 1,
+ "x-ms-property-name-alias": "messageId"
+ },
+ "replyParameters": {
+ "type": "object",
+ "title": "Details of the email reply.",
+ "properties": {
+ "To": {
+ "type": "string",
+ "title": "To",
+ "format": "email",
+ "description": "Example: recipient1@domain.com; recipient2@domain.com",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "replyParameters/To"
+ },
+ "Cc": {
+ "type": "string",
+ "title": "CC",
+ "format": "email",
+ "description": "Example: recipient1@domain.com; recipient2@domain.com",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "replyParameters/Cc"
+ },
+ "Bcc": {
+ "type": "string",
+ "title": "BCC",
+ "format": "email",
+ "description": "Example: recipient1@domain.com; recipient2@domain.com",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "replyParameters/Bcc"
+ },
+ "Subject": {
+ "type": "string",
+ "title": "Subject",
+ "description": "Email subject (if empty, the original subject used).",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "replyParameters/Subject"
+ },
+ "Body": {
+ "type": "string",
+ "title": "Body",
+ "format": "html",
+ "description": "Content of the email.",
+ "x-ms-property-name-alias": "replyParameters/Body"
+ },
+ "ReplyAll": {
+ "type": "boolean",
+ "title": "Reply All",
+ "description": "True to reply to all recipients. (default: False)",
+ "x-ms-property-name-alias": "replyParameters/ReplyAll"
+ },
+ "Importance": {
+ "type": "string",
+ "title": "Importance",
+ "description": "Pick an importance. (default: Low)",
+ "enum": [
+ "Low",
+ "Normal",
+ "High"
+ ],
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "replyParameters/Importance"
+ },
+ "Attachments": {
+ "type": "array",
+ "title": "Attachments",
+ "items": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string",
+ "title": "Name",
+ "description": "Attachment name",
+ "x-ms-property-name-alias": "Name"
+ },
+ "ContentBytes": {
+ "type": "string",
+ "title": "Content",
+ "format": "byte",
+ "description": "Attachment content",
+ "x-ms-property-name-alias": "ContentBytes"
+ }
+ },
+ "required": [
+ "ContentBytes",
+ "Name"
+ ],
+ "description": "Attachment"
+ },
+ "description": "Details of attachments to be sent along with the reply.",
+ "x-ms-property-name-alias": "replyParameters/Attachments"
+ }
+ },
+ "required": [],
+ "description": "Details of the email reply.",
+ "x-ms-property-name-alias": "replyParameters"
+ },
+ "mailboxAddress": {
+ "type": "string",
+ "title": "Original Mailbox Address",
+ "x-ms-dynamic-list": {
+ "builtInOperation": "AadGraph.GetUsers",
+ "parameters": {},
+ "itemValuePath": "mail"
+ },
+ "description": "Address of the shared mailbox to reply from.",
+ "x-ms-property-name-alias": "mailboxAddress"
+ }
+ },
+ "required": [
+ "messageId",
+ "replyParameters"
+ ]
+ },
+ "connectionName": "shared_office365"
+ },
+ "outcomes": [
+ {
+ "id": "default",
+ "label": "Default",
+ "outcomeSchema": {
+ "type": "object",
+ "properties": {}
+ }
+ }
+ ]
+ },
+ "measured": {
+ "width": 270,
+ "height": 66
+ }
+ },
+ {
+ "id": "canvasNote-258c5821-c40f-4722-8aaf-5467ce81b20f",
+ "name": "Note 4 2",
+ "type": "canvasNote",
+ "version": 1,
+ "position": {
+ "x": 3089.3063813213244,
+ "y": 505.81560548624395
+ },
+ "width": 254,
+ "height": 224,
+ "style": {
+ "width": 254,
+ "height": 224
+ },
+ "data": {
+ "config": {
+ "markdown": "Agent assesses if case qualifies for an automatic return/replacement, if the conditions may still apply due to exceptional circumstances, or if these options are unapplicable. When exception is considered, a human approves/disapproves. ",
+ "color": "red"
+ },
+ "outcomes": []
+ },
+ "measured": {
+ "width": 254,
+ "height": 224
+ },
+ "resizing": false
+ },
+ {
+ "id": "end-2120af3d-79db-4382-8e87-bc95af0281b7",
+ "name": "End 2",
+ "type": "end",
+ "version": 1,
+ "position": {
+ "x": 2766.9230403005827,
+ "y": 351.99952390756692
+ },
+ "data": {
+ "config": {
+ "runStatus": "Succeeded"
+ },
+ "outcomes": []
+ },
+ "measured": {
+ "width": 240,
+ "height": 66
+ }
+ },
+ {
+ "id": "end-59c4f94f-70bb-4161-ada6-11e1284ea27d",
+ "name": "End 1",
+ "type": "end",
+ "version": 1,
+ "position": {
+ "x": 2157.9230403005818,
+ "y": 98.613931923088586
+ },
+ "data": {
+ "config": {
+ "runStatus": "Succeeded"
+ },
+ "outcomes": []
+ },
+ "measured": {
+ "width": 240,
+ "height": 66
+ }
+ },
+ {
+ "id": "end-120d8b37-4a78-416c-a48b-63bd0c976443",
+ "name": "End 3",
+ "type": "end",
+ "version": 1,
+ "position": {
+ "x": 2446,
+ "y": 775
+ },
+ "data": {
+ "config": {
+ "runStatus": "Succeeded"
+ },
+ "outcomes": []
+ },
+ "measured": {
+ "width": 240,
+ "height": 66
+ }
+ },
+ {
+ "id": "end-5c7e1ace-643f-4e2d-bed7-8a71c340bc9b",
+ "name": "End 4",
+ "type": "end",
+ "version": 1,
+ "position": {
+ "x": 1554.6153602003881,
+ "y": 925.616471082732
+ },
+ "data": {
+ "config": {
+ "runStatus": "Succeeded"
+ },
+ "outcomes": []
+ },
+ "measured": {
+ "width": 240,
+ "height": 66
+ }
+ },
+ {
+ "id": "variable-8afe2cac-2766-486e-9d65-cc5f48bae8b6",
+ "name": "Initialize Variables",
+ "type": "variable",
+ "version": 1,
+ "position": {
+ "x": 383,
+ "y": 545.5
+ },
+ "data": {
+ "config": {
+ "assignments": [
+ {
+ "id": "ff3390a0-767b-49f2-9fb1-fe680c5603d6",
+ "variableName": "ReturnNote",
+ "mode": "initialize",
+ "type": "string",
+ "value": ""
+ }
+ ]
+ },
+ "outcomes": [
+ {
+ "id": "default",
+ "label": "Default",
+ "outcomeSchema": {
+ "type": "object",
+ "properties": {},
+ "description": "Variables set by this node"
+ }
+ }
+ ]
+ },
+ "measured": {
+ "width": 240,
+ "height": 66
+ }
+ },
+ {
+ "id": "variable-128b81ff-67d7-4f81-bfcc-9b4b70b9e5b9",
+ "name": "Set Return or Exchange Note",
+ "type": "variable",
+ "version": 1,
+ "position": {
+ "x": 1838.9230403005818,
+ "y": 190.61393192308859
+ },
+ "data": {
+ "config": {
+ "assignments": [
+ {
+ "id": "1e764c92-6e31-4781-bbd5-a60d7fef3a40",
+ "variableName": "ReturnNote",
+ "mode": "set",
+ "value": "@{if(equals(outputs('connector-2b4cf3f7-936b-4139-bb61-ac0a14daae6e')?['body/SelectedOption'], 'Exchange'), body('agent-c795e6ad-eef4-47c5-b492-88ca35dbef9c')?['structuredOutput/ExchangeInstruction'], body('agent-c795e6ad-eef4-47c5-b492-88ca35dbef9c')?['structuredOutput/ReturnInstruction'])}",
+ "type": "string",
+ "valueRich": {
+ "segments": [
+ {
+ "type": "token",
+ "value": "@if(equals(outputs('connector-2b4cf3f7-936b-4139-bb61-ac0a14daae6e')?['body/SelectedOption'], 'Exchange'), body('agent-c795e6ad-eef4-47c5-b492-88ca35dbef9c')?['structuredOutput/ExchangeInstruction'], body('agent-c795e6ad-eef4-47c5-b492-88ca35dbef9c')?['structuredOutput/ReturnInstruction'])",
+ "tokenRef": {
+ "type": "function",
+ "stepId": "function",
+ "stepName": "Logical",
+ "outputName": "if",
+ "outputType": "any",
+ "functionName": "if",
+ "functionCategory": "logical",
+ "rawExpression": "if(equals(outputs('connector-2b4cf3f7-936b-4139-bb61-ac0a14daae6e')?['body/SelectedOption'], 'Exchange'), body('agent-c795e6ad-eef4-47c5-b492-88ca35dbef9c')?['structuredOutput/ExchangeInstruction'], body('agent-c795e6ad-eef4-47c5-b492-88ca35dbef9c')?['structuredOutput/ReturnInstruction'])"
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "outcomes": [
+ {
+ "id": "default",
+ "label": "Default",
+ "outcomeSchema": {
+ "type": "object",
+ "properties": {},
+ "description": "Variables set by this node"
+ }
+ }
+ ]
+ },
+ "measured": {
+ "width": 261,
+ "height": 66
+ }
+ },
+ {
+ "id": "variable-89f2d4e3-1c35-4c8b-be7d-d4822cfc2f4b",
+ "name": "Set Return Note",
+ "type": "variable",
+ "version": 1,
+ "position": {
+ "x": 2163,
+ "y": 550.5
+ },
+ "data": {
+ "config": {
+ "assignments": [
+ {
+ "id": "759e3335-a8d8-47de-a7c4-4272f8cd0092",
+ "variableName": "ReturnNote",
+ "mode": "set",
+ "value": "@{body('agent-0a2ca1d4-b735-4d6c-bbed-55834b22195b')?['structuredOutput/ReturnInstruction']}",
+ "type": "string",
+ "valueRich": {
+ "segments": [
+ {
+ "type": "token",
+ "value": "Return Instruction",
+ "tokenRef": {
+ "type": "step",
+ "stepId": "agent-0a2ca1d4-b735-4d6c-bbed-55834b22195b",
+ "stepName": "Review Order & Policy",
+ "outputName": "structuredOutput/ReturnInstruction",
+ "outputDisplayName": "Return Instruction",
+ "outputType": "string"
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "outcomes": [
+ {
+ "id": "default",
+ "label": "Default",
+ "outcomeSchema": {
+ "type": "object",
+ "properties": {},
+ "description": "Variables set by this node"
+ }
+ }
+ ]
+ },
+ "measured": {
+ "width": 240,
+ "height": 66
+ }
+ },
+ {
+ "id": "ifElse-cd0fb527-6d90-4f39-bf36-82cb41ac68a5",
+ "name": "Policy Condition",
+ "type": "ifElse",
+ "version": 1,
+ "position": {
+ "x": 1274,
+ "y": 494
+ },
+ "data": {
+ "config": {
+ "conditions": [
+ {
+ "id": "bd1e27ce-6244-41cc-90db-d84001928b4b",
+ "name": "If return applicable",
+ "expression": "{\n \"and\": [\n {\n \"equals\": [\n \"@body('agent-0a2ca1d4-b735-4d6c-bbed-55834b22195b')?['structuredOutput/Return']\",\n \"applicable\"\n ]\n }\n ]\n}"
+ }
+ ]
+ },
+ "outcomes": [
+ {
+ "id": "condition:bd1e27ce-6244-41cc-90db-d84001928b4b",
+ "label": "If return applicable"
+ },
+ {
+ "id": "else",
+ "label": "Else"
+ }
+ ]
+ },
+ "measured": {
+ "width": 240,
+ "height": 169
+ }
+ }
+ ],
+ "edges": [
+ {
+ "id": "edge-classifyOnInlineAgent-cf2f15e8-2660-4732-b934-7431240f433b-category:1e11370e-7602-466a-904f-0242d972063c-agent-0a2ca1d4-b735-4d6c-bbed-55834b22195b",
+ "source": "classifyOnInlineAgent-cf2f15e8-2660-4732-b934-7431240f433b",
+ "target": "agent-0a2ca1d4-b735-4d6c-bbed-55834b22195b",
+ "sourceHandle": "category:1e11370e-7602-466a-904f-0242d972063c"
+ },
+ {
+ "id": "edge-connector-7492932a-4693-4b1e-91dc-313e11fd221b-ifElse-16a2c329-a4a3-4d03-822d-4148fac6c339",
+ "source": "connector-7492932a-4693-4b1e-91dc-313e11fd221b",
+ "target": "ifElse-16a2c329-a4a3-4d03-822d-4148fac6c339"
+ },
+ {
+ "id": "edge-ifElse-16a2c329-a4a3-4d03-822d-4148fac6c339-else-connector-9ccb141c-3277-4402-b045-e4569768d047-input",
+ "source": "ifElse-16a2c329-a4a3-4d03-822d-4148fac6c339",
+ "target": "connector-9ccb141c-3277-4402-b045-e4569768d047",
+ "sourceHandle": "else",
+ "targetHandle": "input"
+ },
+ {
+ "id": "edge-agent-c795e6ad-eef4-47c5-b492-88ca35dbef9c-connector-2b4cf3f7-936b-4139-bb61-ac0a14daae6e",
+ "source": "agent-c795e6ad-eef4-47c5-b492-88ca35dbef9c",
+ "target": "connector-2b4cf3f7-936b-4139-bb61-ac0a14daae6e"
+ },
+ {
+ "id": "edge-connector-2b4cf3f7-936b-4139-bb61-ac0a14daae6e-ifElse-5d5fffd8-206d-45e5-bc24-6fc4f32b636c",
+ "source": "connector-2b4cf3f7-936b-4139-bb61-ac0a14daae6e",
+ "target": "ifElse-5d5fffd8-206d-45e5-bc24-6fc4f32b636c"
+ },
+ {
+ "id": "edge-classifyOnInlineAgent-cf2f15e8-2660-4732-b934-7431240f433b-default-category-agent-b6af16be-b502-4322-83cb-bf6f1c2ddf13",
+ "source": "classifyOnInlineAgent-cf2f15e8-2660-4732-b934-7431240f433b",
+ "target": "agent-b6af16be-b502-4322-83cb-bf6f1c2ddf13",
+ "sourceHandle": "default-category"
+ },
+ {
+ "id": "edge-agent-b6af16be-b502-4322-83cb-bf6f1c2ddf13-connector-5f867ed3-6c32-4c2d-b747-251877850d50",
+ "source": "agent-b6af16be-b502-4322-83cb-bf6f1c2ddf13",
+ "target": "connector-5f867ed3-6c32-4c2d-b747-251877850d50"
+ },
+ {
+ "id": "edge-classifyOnInlineAgent-cf2f15e8-2660-4732-b934-7431240f433b-category:f1efd1a5-76cc-4a05-a432-8d5b2fcc0839-agent-c795e6ad-eef4-47c5-b492-88ca35dbef9c",
+ "source": "classifyOnInlineAgent-cf2f15e8-2660-4732-b934-7431240f433b",
+ "target": "agent-c795e6ad-eef4-47c5-b492-88ca35dbef9c",
+ "sourceHandle": "category:f1efd1a5-76cc-4a05-a432-8d5b2fcc0839"
+ },
+ {
+ "id": "edge-canvasNote-a592e707-ed7b-4419-b23f-4a1265cb05c5-canvasNote-55701c44-ed9e-47e5-9956-8e4262503f3b-input",
+ "source": "canvasNote-a592e707-ed7b-4419-b23f-4a1265cb05c5",
+ "target": "canvasNote-55701c44-ed9e-47e5-9956-8e4262503f3b",
+ "targetHandle": "input"
+ },
+ {
+ "id": "edge-ifElse-5d5fffd8-206d-45e5-bc24-6fc4f32b636c-condition:6c4633ad-a5c4-4c49-91ac-5a7d4fa0ee07-connector-ef8cfaa6-a984-4216-b10a-3408c1c15675",
+ "source": "ifElse-5d5fffd8-206d-45e5-bc24-6fc4f32b636c",
+ "target": "connector-ef8cfaa6-a984-4216-b10a-3408c1c15675",
+ "sourceHandle": "condition:6c4633ad-a5c4-4c49-91ac-5a7d4fa0ee07"
+ },
+ {
+ "id": "edge-agent-2444168a-b2f6-48b5-bb75-75d94e0cf8aa-end-2120af3d-79db-4382-8e87-bc95af0281b7",
+ "source": "agent-2444168a-b2f6-48b5-bb75-75d94e0cf8aa",
+ "target": "end-2120af3d-79db-4382-8e87-bc95af0281b7"
+ },
+ {
+ "id": "edge-connector-ef8cfaa6-a984-4216-b10a-3408c1c15675-end-59c4f94f-70bb-4161-ada6-11e1284ea27d",
+ "source": "connector-ef8cfaa6-a984-4216-b10a-3408c1c15675",
+ "target": "end-59c4f94f-70bb-4161-ada6-11e1284ea27d"
+ },
+ {
+ "id": "edge-connector-9ccb141c-3277-4402-b045-e4569768d047-end-120d8b37-4a78-416c-a48b-63bd0c976443",
+ "source": "connector-9ccb141c-3277-4402-b045-e4569768d047",
+ "target": "end-120d8b37-4a78-416c-a48b-63bd0c976443"
+ },
+ {
+ "id": "edge-connector-5f867ed3-6c32-4c2d-b747-251877850d50-end-5c7e1ace-643f-4e2d-bed7-8a71c340bc9b",
+ "source": "connector-5f867ed3-6c32-4c2d-b747-251877850d50",
+ "target": "end-5c7e1ace-643f-4e2d-bed7-8a71c340bc9b"
+ },
+ {
+ "id": "edge-end-5c7e1ace-643f-4e2d-bed7-8a71c340bc9b-canvasNote-c1d662dc-14df-43dc-a503-84fa55f357a4",
+ "source": "end-5c7e1ace-643f-4e2d-bed7-8a71c340bc9b",
+ "target": "canvasNote-c1d662dc-14df-43dc-a503-84fa55f357a4"
+ },
+ {
+ "id": "edge-start-ee6d2ba4-6711-46df-873b-8ff4e5362436-variable-8afe2cac-2766-486e-9d65-cc5f48bae8b6",
+ "source": "start-ee6d2ba4-6711-46df-873b-8ff4e5362436",
+ "target": "variable-8afe2cac-2766-486e-9d65-cc5f48bae8b6"
+ },
+ {
+ "id": "edge-variable-8afe2cac-2766-486e-9d65-cc5f48bae8b6-classifyOnInlineAgent-cf2f15e8-2660-4732-b934-7431240f433b",
+ "source": "variable-8afe2cac-2766-486e-9d65-cc5f48bae8b6",
+ "target": "classifyOnInlineAgent-cf2f15e8-2660-4732-b934-7431240f433b"
+ },
+ {
+ "id": "edge-ifElse-5d5fffd8-206d-45e5-bc24-6fc4f32b636c-else-variable-128b81ff-67d7-4f81-bfcc-9b4b70b9e5b9",
+ "source": "ifElse-5d5fffd8-206d-45e5-bc24-6fc4f32b636c",
+ "target": "variable-128b81ff-67d7-4f81-bfcc-9b4b70b9e5b9",
+ "sourceHandle": "else"
+ },
+ {
+ "id": "edge-variable-128b81ff-67d7-4f81-bfcc-9b4b70b9e5b9-agent-2444168a-b2f6-48b5-bb75-75d94e0cf8aa",
+ "source": "variable-128b81ff-67d7-4f81-bfcc-9b4b70b9e5b9",
+ "target": "agent-2444168a-b2f6-48b5-bb75-75d94e0cf8aa"
+ },
+ {
+ "id": "edge-variable-89f2d4e3-1c35-4c8b-be7d-d4822cfc2f4b-agent-2444168a-b2f6-48b5-bb75-75d94e0cf8aa",
+ "source": "variable-89f2d4e3-1c35-4c8b-be7d-d4822cfc2f4b",
+ "target": "agent-2444168a-b2f6-48b5-bb75-75d94e0cf8aa"
+ },
+ {
+ "id": "edge-ifElse-16a2c329-a4a3-4d03-822d-4148fac6c339-condition:a1be36bb-5825-4ddd-88cd-142f82444df3-variable-89f2d4e3-1c35-4c8b-be7d-d4822cfc2f4b-input",
+ "source": "ifElse-16a2c329-a4a3-4d03-822d-4148fac6c339",
+ "target": "variable-89f2d4e3-1c35-4c8b-be7d-d4822cfc2f4b",
+ "sourceHandle": "condition:a1be36bb-5825-4ddd-88cd-142f82444df3",
+ "targetHandle": "input"
+ },
+ {
+ "id": "edge-ifElse-cd0fb527-6d90-4f39-bf36-82cb41ac68a5-condition:bd1e27ce-6244-41cc-90db-d84001928b4b-variable-89f2d4e3-1c35-4c8b-be7d-d4822cfc2f4b-input",
+ "source": "ifElse-cd0fb527-6d90-4f39-bf36-82cb41ac68a5",
+ "target": "variable-89f2d4e3-1c35-4c8b-be7d-d4822cfc2f4b",
+ "sourceHandle": "condition:bd1e27ce-6244-41cc-90db-d84001928b4b",
+ "targetHandle": "input"
+ },
+ {
+ "id": "edge-ifElse-cd0fb527-6d90-4f39-bf36-82cb41ac68a5-else-connector-7492932a-4693-4b1e-91dc-313e11fd221b-input",
+ "source": "ifElse-cd0fb527-6d90-4f39-bf36-82cb41ac68a5",
+ "target": "connector-7492932a-4693-4b1e-91dc-313e11fd221b",
+ "sourceHandle": "else",
+ "targetHandle": "input"
+ },
+ {
+ "id": "edge-agent-0a2ca1d4-b735-4d6c-bbed-55834b22195b-output-ifElse-cd0fb527-6d90-4f39-bf36-82cb41ac68a5-input",
+ "source": "agent-0a2ca1d4-b735-4d6c-bbed-55834b22195b",
+ "target": "ifElse-cd0fb527-6d90-4f39-bf36-82cb41ac68a5",
+ "sourceHandle": "output",
+ "targetHandle": "input"
+ }
+ ],
+ "connectionReferences": {
+ "shared_office365-1": {
+ "api": {
+ "name": "shared_office365"
+ },
+ "connection": {
+ "connectionReferenceLogicalName": "new_sharedoffice365_37c07"
+ },
+ "runtimeSource": "embedded",
+ "connectionName": "shared-office365-b79141e6-d6f8-42c6-b914-3eb3d2491190"
+ },
+ "shared_advancedapprovals": {
+ "api": {
+ "name": "shared_advancedapprovals"
+ },
+ "connection": {
+ "connectionReferenceLogicalName": "new_sharedadvancedapprovals_00cb31fc"
+ },
+ "runtimeSource": "embedded",
+ "connectionName": "be923ac0d38a430a90ba2395510118d3"
+ },
+ "shared_office365": {
+ "api": {
+ "name": "shared_office365"
+ },
+ "connection": {
+ "connectionReferenceLogicalName": "new_sharedoffice365_d3c797ce"
+ },
+ "runtimeSource": "embedded",
+ "connectionName": "b50f648118a44456949c0348eb03bc33"
+ },
+ "shared_agentnode-2": {
+ "api": {
+ "name": "shared_agentnode"
+ },
+ "connection": {
+ "connectionReferenceLogicalName": "new_sharedagentnode_a4edece2"
+ },
+ "runtimeSource": "embedded",
+ "connectionName": "49c44ba139d44a72b5bcf4ef9c809fe6"
+ },
+ "shared_advancedapprovals-1": {
+ "api": {
+ "name": "shared_advancedapprovals"
+ },
+ "connection": {
+ "connectionReferenceLogicalName": "new_sharedadvancedapprovals_693c4742"
+ },
+ "runtimeSource": "embedded",
+ "connectionName": "8a6c46550ec24046aec0a37279897ca4"
+ }
+ }
+ },
+ "nodeActionMapping": {
+ "variable-8afe2cac-2766-486e-9d65-cc5f48bae8b6": [
+ "Initialize_Variables"
+ ],
+ "agent-c795e6ad-eef4-47c5-b492-88ca35dbef9c": [
+ "Review_Order__Stock___Weather"
+ ],
+ "connector-2b4cf3f7-936b-4139-bb61-ac0a14daae6e": [
+ "Send_context_and_options"
+ ],
+ "connector-ef8cfaa6-a984-4216-b10a-3408c1c15675": [
+ "Send_reply__Thanks_for_waiting"
+ ],
+ "end-59c4f94f-70bb-4161-ada6-11e1284ea27d": [
+ "end-59c4f94f-70bb-4161-ada6-11e1284ea27d"
+ ],
+ "variable-128b81ff-67d7-4f81-bfcc-9b4b70b9e5b9": [
+ "Set_Return_or_Exchange_Note"
+ ],
+ "ifElse-5d5fffd8-206d-45e5-bc24-6fc4f32b636c": [
+ "Choice_Condition"
+ ],
+ "agent-0a2ca1d4-b735-4d6c-bbed-55834b22195b": [
+ "Review_Order___Policy"
+ ],
+ "connector-7492932a-4693-4b1e-91dc-313e11fd221b": [
+ "Human_Review__Exception"
+ ],
+ "connector-9ccb141c-3277-4402-b045-e4569768d047": [
+ "Send_reply__No_refund"
+ ],
+ "end-120d8b37-4a78-416c-a48b-63bd0c976443": [
+ "end-120d8b37-4a78-416c-a48b-63bd0c976443"
+ ],
+ "ifElse-16a2c329-a4a3-4d03-822d-4148fac6c339": [
+ "Approval_Condition"
+ ],
+ "ifElse-cd0fb527-6d90-4f39-bf36-82cb41ac68a5": [
+ "Policy_Condition"
+ ],
+ "variable-89f2d4e3-1c35-4c8b-be7d-d4822cfc2f4b": [
+ "Set_Return_Note"
+ ],
+ "agent-b6af16be-b502-4322-83cb-bf6f1c2ddf13": [
+ "Call_Store_Policy_Agent"
+ ],
+ "connector-5f867ed3-6c32-4c2d-b747-251877850d50": [
+ "Send_reply"
+ ],
+ "end-5c7e1ace-643f-4e2d-bed7-8a71c340bc9b": [
+ "end-5c7e1ace-643f-4e2d-bed7-8a71c340bc9b"
+ ],
+ "classifyOnInlineAgent-cf2f15e8-2660-4732-b934-7431240f433b": [
+ "Classify",
+ "Classify_Switch"
+ ],
+ "agent-2444168a-b2f6-48b5-bb75-75d94e0cf8aa": [
+ "Trigger_Order_Return_Exchange"
+ ],
+ "end-2120af3d-79db-4382-8e87-bc95af0281b7": [
+ "end-2120af3d-79db-4382-8e87-bc95af0281b7"
+ ]
+ }
+ }
+ }
+ }
+ },
+ "actions": {
+ "Initialize_Variables": {
+ "type": "InitializeVariable",
+ "inputs": {
+ "variables": [
+ {
+ "name": "ReturnNote",
+ "type": "String",
+ "value": ""
+ }
+ ]
+ },
+ "metadata": {
+ "description": "Initialize Variables",
+ "nodeId": "variable-8afe2cac-2766-486e-9d65-cc5f48bae8b6"
+ }
+ },
+ "Classify": {
+ "type": "OpenApiConnection",
+ "inputs": {
+ "host": {
+ "apiId": "/providers/Microsoft.PowerApps/apis/shared_agentnode",
+ "connectionName": "shared_agentnode-2",
+ "operationId": "InvokeDefinition"
+ },
+ "parameters": {
+ "body/definition": {
+ "components": [],
+ "environmentVariables": [],
+ "flows": [],
+ "dataverseTableSearchs": [],
+ "dataverseTableSearchGlossaryConfigurations": [],
+ "dataverseTableSearchEntityConfigurations": [],
+ "dataverseTableSearchEntityColumnSynonyms": [],
+ "connectionReferences": [],
+ "connectorDefinitions": [],
+ "aIModelDefinitions": [],
+ "aIPluginOperations": [],
+ "connectedAgentDefinitions": [],
+ "componentCollections": [],
+ "connectedBots": [],
+ "diagnostics": [],
+ "entity": {
+ "authorizedSecurityGroupIds": [],
+ "supportedLanguages": [],
+ "diagnostics": [],
+ "schemaName": "workflow_classifyoninlineagent",
+ "language": 1033,
+ "accessControlPolicy": "Any",
+ "authenticationMode": "Integrated",
+ "authenticationTrigger": "Always",
+ "synchronizationStatus": {
+ "graphDriveItems": [],
+ "diagnostics": [],
+ "lastPublishedDetails": {
+ "diagnosticDetails": [],
+ "diagnostics": [],
+ "authenticationMode": "Integrated",
+ "$kind": "SuccessfulPublishResultDetails"
+ },
+ "$kind": "BotSynchronizationDetails"
+ },
+ "configuration": {
+ "categories": [],
+ "channels": [],
+ "settings": {},
+ "memoryParameters": [],
+ "diagnostics": [],
+ "recognizer": {
+ "diagnostics": [],
+ "$kind": "CLICopilotRecognizer"
+ },
+ "agentSettings": {
+ "conversationStarters": [],
+ "diagnostics": [],
+ "model": {
+ "diagnostics": [],
+ "series": "GPT55Chat",
+ "$kind": "ModelConfig"
+ },
+ "instructions": {
+ "segments": [],
+ "diagnostics": [],
+ "$kind": "Instructions"
+ },
+ "output": {
+ "diagnostics": [],
+ "schema": "{\"type\":\"object\",\"properties\":{\"predictedCategory\":{\"type\":\"string\",\"enum\":[\"Order Shipment Issue\",\"Order Defect Issue\",\"Other\"]}},\"required\":[\"predictedCategory\"]}",
+ "$kind": "StructuredAgentOutput"
+ },
+ "$kind": "AgentSettings"
+ },
+ "$kind": "BotConfiguration"
+ },
+ "$kind": "BotEntity"
+ },
+ "$kind": "BotDefinition"
+ },
+ "body/message": "Classify the following input into one of these categories: Order Shipment Issue, Order Defect Issue, Other\n\nCategory definitions:\n- Order Shipment Issue: The customer reports a problem with the delivery or shipment of an order they placed: it is late, hasn't arrived, is stuck in transit, or they're asking where it is or when it will come. The product itself is not reported as faulty - the issue is getting it to them.\n- Order Defect Issue: The customer reports that an item they have already received is faulty, damaged, dead on arrival, or does not work as expected, and wants it replaced, exchanged, or refunded. The issue is the condition of the product, not its delivery.\n\nExamples:\nInput: \"My order delivery is late, it was supposed to arrive a week ago\" -> Category: \"Order Shipment Issue\"\nInput: \"Tracking hasn't updated in days and my console still isn't here, where is it?\" -> Category: \"Order Shipment Issue\"\nInput: \"My BlastBox OMEGA is not turning on. It is brand new, I just received it yesterday\" -> Category: \"Order Defect Issue\"\nInput: \"The controller that came with my order is faulty, the buttons don't respond\" -> Category: \"Order Defect Issue\"\n\nInput to classify: Mail input:\n@{triggerOutputs()?['body/body']}\n\nRespond with only the category name. If the input does not clearly match any of the categories, respond with \"Other\"."
+ }
+ },
+ "runAfter": {
+ "Initialize_Variables": [
+ "Succeeded"
+ ]
+ },
+ "metadata": {
+ "description": "Classify",
+ "nodeId": "classifyOnInlineAgent-cf2f15e8-2660-4732-b934-7431240f433b"
+ }
+ },
+ "Classify_Switch": {
+ "type": "Switch",
+ "expression": "@outputs('Classify')?['body']?['structuredOutput']?['predictedCategory']",
+ "cases": {
+ "Order Shipment Issue": {
+ "case": "Order Shipment Issue",
+ "actions": {
+ "Review_Order__Stock___Weather": {
+ "type": "OpenApiConnection",
+ "inputs": {
+ "parameters": {
+ "body/definition": {
+ "components": [
+ {
+ "diagnostics": [],
+ "schemaName": "shared_msnweather_CurrentWeather",
+ "displayName": "Get current weather",
+ "description": "Get the current weather for a location.",
+ "dialog": {
+ "toolInputs": [],
+ "toolOutputs": [],
+ "diagnostics": [],
+ "connectorId": "/providers/Microsoft.PowerApps/apis/shared_msnweather",
+ "authMode": "Maker",
+ "connectionReference": "b1072dd0220d4fbd8a2db07ef073e482",
+ "operationId": "CurrentWeather",
+ "$kind": "ConnectorTool"
+ },
+ "$kind": "DialogComponent"
+ }
+ ],
+ "environmentVariables": [],
+ "flows": [],
+ "dataverseTableSearchs": [],
+ "dataverseTableSearchGlossaryConfigurations": [],
+ "dataverseTableSearchEntityConfigurations": [],
+ "dataverseTableSearchEntityColumnSynonyms": [],
+ "connectionReferences": [
+ {
+ "diagnostics": [],
+ "connectionReferenceLogicalName": "b1072dd0220d4fbd8a2db07ef073e482",
+ "connectionId": "b1072dd0220d4fbd8a2db07ef073e482",
+ "connectorId": "/providers/Microsoft.PowerApps/apis/shared_msnweather",
+ "$kind": "ConnectionReference"
+ }
+ ],
+ "connectorDefinitions": [],
+ "aIModelDefinitions": [],
+ "aIPluginOperations": [],
+ "connectedAgentDefinitions": [],
+ "componentCollections": [],
+ "connectedBots": [],
+ "diagnostics": [],
+ "entity": {
+ "authorizedSecurityGroupIds": [],
+ "supportedLanguages": [],
+ "diagnostics": [],
+ "schemaName": "workflow_agentnode",
+ "language": 1033,
+ "accessControlPolicy": "Any",
+ "authenticationMode": "Integrated",
+ "authenticationTrigger": "Always",
+ "synchronizationStatus": {
+ "graphDriveItems": [],
+ "diagnostics": [],
+ "lastPublishedDetails": {
+ "diagnosticDetails": [],
+ "diagnostics": [],
+ "authenticationMode": "Integrated",
+ "$kind": "SuccessfulPublishResultDetails"
+ },
+ "$kind": "BotSynchronizationDetails"
+ },
+ "configuration": {
+ "categories": [],
+ "channels": [],
+ "settings": {},
+ "memoryParameters": [],
+ "diagnostics": [],
+ "recognizer": {
+ "diagnostics": [],
+ "$kind": "CLICopilotRecognizer"
+ },
+ "agentSettings": {
+ "conversationStarters": [],
+ "diagnostics": [],
+ "model": {
+ "diagnostics": [],
+ "series": "claude-opus-5",
+ "$kind": "ModelConfig"
+ },
+ "instructions": {
+ "segments": [],
+ "diagnostics": [],
+ "$kind": "Instructions"
+ },
+ "output": {
+ "diagnostics": [],
+ "schema": "{\"type\":\"object\",\"properties\":{\"Summary\":{\"type\":\"string\"},\"SubstituteExists\":{\"type\":\"boolean\"},\"ReturnInstruction\":{\"type\":\"string\"},\"ExchangeInstruction\":{\"type\":\"string\"}},\"required\":[\"Summary\",\"SubstituteExists\",\"ReturnInstruction\",\"ExchangeInstruction\"]}",
+ "$kind": "StructuredAgentOutput"
+ },
+ "$kind": "AgentSettings"
+ },
+ "$kind": "BotConfiguration"
+ },
+ "$kind": "BotEntity"
+ },
+ "$kind": "BotDefinition"
+ },
+ "body/message": "You handle a customer shipment enquiry about an order that is late or has not arrived. Work only from the tools; never invent orders, stock, dates or prices. You do never request the return yourself, this is a step to be taken later \n\nCustomer enquiry: @{triggerOutputs()?['body/body']}\n\nSteps:\n1. Look up the order from the name, email or order number in the enquiry. If you cannot find a single matching order, request human assistance rather than guessing.\n2. Check the stock and fulfilment status of the ordered item. If it is out of stock or delayed, get its restock/ETA date.\n3. Estimate a realistic new ETA, factoring in the current weather at the order's destination address.\n4. Determine whether an in‑stock substitute product exists that the customer could exchange instead (e.g. a higher console model). \n5. Determine the options available according to the applicable return policy for the case. Options should be only two or three linked to the possible outcomes: Wait, Return (with the cash refund options available, ignore refund as points and indicate we are only not offering this option at the moment), Refund.\n\nReturn these outputs:\n- Summary: Customer-facing summary to state the current status, the new estimated ETA and why, and lay out the options plainly. No greeting, no sign‑off, no citations, only the findings and options.\n- SubstituteExists: 'Yes' is an an in‑stock substitute product was found\n- ReturnInstruction: One line indicating which order and item to return/refund and with what conditions.\n- ExchangeInstruction: One line indicating which order/item to exchange, for which substitute SKU and with what conditions. Empty if no substitute exists.\n\nSummary format: Write `Summary` as short, clean HTML using only ``, ``, ` `, `` and `` tags. Two short paragraphs:\n1. Open with \"Dear customer,\" to start, then line break,\n2. Start first paragraph with \"We've detected that…\" - state the issue and, for a shipment case, the new estimated ETA.\n3. Continue second paragraph with \"We can offer you…\" - briefly list the options that apply.\n4. Close with \"Thank you -* The BlastBox Team*\" in a separate line."
+ },
+ "host": {
+ "apiId": "/providers/Microsoft.PowerApps/apis/shared_agentnode",
+ "connectionName": "shared_agentnode-2",
+ "operationId": "InvokeDefinition"
+ }
+ },
+ "metadata": {
+ "description": "Review Order, Stock & Weather",
+ "nodeId": "agent-c795e6ad-eef4-47c5-b492-88ca35dbef9c"
+ }
+ },
+ "Send_context_and_options": {
+ "type": "OpenApiConnectionWebhook",
+ "inputs": {
+ "parameters": {
+ "optionsEmailSubscription/Message/Importance": "Normal",
+ "optionsEmailSubscription/Message/Subject": "Action Needed: Your Delivery Enquiry",
+ "optionsEmailSubscription/Message/Options": "@{if(body('Review_Order__Stock___Weather')?['structuredOutput/SubstituteExists'], 'Wait, Return, Exchange', 'Wait, Return')}",
+ "optionsEmailSubscription/Message/To": "@{triggerOutputs()?['body/from']}",
+ "optionsEmailSubscription/Message/Body": "@{body('Review_Order__Stock___Weather')?['structuredOutput/Summary']}",
+ "optionsEmailSubscription/Message/HideHTMLMessage": false,
+ "optionsEmailSubscription/Message/HideMicrosoftFooter": true,
+ "optionsEmailSubscription/Message/ShowHTMLConfirmationDialog": false,
+ "optionsEmailSubscription/Message/UseOnlyHTMLMessage": true,
+ "optionsEmailSubscription/Message/HeaderText": "Action Needed: Your Delivery Enquiry"
+ },
+ "host": {
+ "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365",
+ "connectionName": "shared_office365",
+ "operationId": "SendMailWithOptions"
+ }
+ },
+ "runAfter": {
+ "Review_Order__Stock___Weather": [
+ "Succeeded"
+ ]
+ },
+ "metadata": {
+ "description": "Send context and options",
+ "nodeId": "connector-2b4cf3f7-936b-4139-bb61-ac0a14daae6e"
+ }
+ },
+ "Choice_Condition": {
+ "type": "If",
+ "expression": {
+ "and": [
+ {
+ "equals": [
+ "@outputs('Send_context_and_options')?['body/SelectedOption']",
+ "Wait"
+ ]
+ }
+ ]
+ },
+ "actions": {
+ "Send_reply__Thanks_for_waiting": {
+ "type": "OpenApiConnection",
+ "inputs": {
+ "parameters": {
+ "replyParameters/Importance": "Low",
+ "replyParameters/Body": "Dear customer,
Thanks for your patience. We apologise for any inconveniences.
You have chosen to wait for your order. You can keep track of your order from the separate email sent to you. If you experience any other issues, please reach out to us.
Thank you,
The BlastBox Team
",
+ "messageId": "@{triggerOutputs()?['body/id']}",
+ "replyParameters/To": "@{triggerOutputs()?['body/from']}",
+ "replyParameters/Subject": "BlastBox Service - Your enquiry"
+ },
+ "host": {
+ "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365",
+ "connectionName": "shared_office365",
+ "operationId": "ReplyToV3"
+ }
+ },
+ "metadata": {
+ "description": "Send reply: Thanks for waiting",
+ "nodeId": "connector-ef8cfaa6-a984-4216-b10a-3408c1c15675"
+ }
+ },
+ "end-59c4f94f-70bb-4161-ada6-11e1284ea27d": {
+ "type": "Terminate",
+ "inputs": {
+ "runStatus": "Succeeded"
+ },
+ "runAfter": {
+ "Send_reply__Thanks_for_waiting": [
+ "Succeeded"
+ ]
+ },
+ "metadata": {
+ "description": "End 1",
+ "nodeId": "end-59c4f94f-70bb-4161-ada6-11e1284ea27d"
+ }
+ },
+ "Choice_Condition_Terminate_condition_6c4633ad_a5c4_4c49_91ac_5a7d4fa0ee07": {
+ "type": "Terminate",
+ "inputs": {
+ "runStatus": "Failed",
+ "runError": {
+ "code": "PartialJoinNotReached",
+ "message": "Flow execution ended without reaching a downstream merge node. A branch was taken that has no path to a node that other branches merge into. Reopen this flow in the designer and review the Health Center warning that says this node doesn't run when a dead-end branch is taken (code: CROSS_SCOPE_MERGE). Then update the flow so every branch eventually connects to the merge node, or remove the merge."
+ }
+ },
+ "metadata": {
+ "synthetic": true,
+ "reason": "implicit-terminate-for-partial-join"
+ },
+ "runAfter": {
+ "end-59c4f94f-70bb-4161-ada6-11e1284ea27d": [
+ "Succeeded"
+ ]
+ }
+ }
+ },
+ "else": {
+ "actions": {
+ "Set_Return_or_Exchange_Note": {
+ "type": "SetVariable",
+ "inputs": {
+ "name": "ReturnNote",
+ "value": "@{if(equals(outputs('Send_context_and_options')?['body/SelectedOption'], 'Exchange'), body('Review_Order__Stock___Weather')?['structuredOutput/ExchangeInstruction'], body('Review_Order__Stock___Weather')?['structuredOutput/ReturnInstruction'])}"
+ },
+ "metadata": {
+ "description": "Set Return or Exchange Note",
+ "nodeId": "variable-128b81ff-67d7-4f81-bfcc-9b4b70b9e5b9"
+ }
+ }
+ }
+ },
+ "runAfter": {
+ "Send_context_and_options": [
+ "Succeeded"
+ ]
+ },
+ "metadata": {
+ "description": "Choice Condition",
+ "nodeId": "ifElse-5d5fffd8-206d-45e5-bc24-6fc4f32b636c"
+ }
+ }
+ }
+ },
+ "Order Defect Issue": {
+ "case": "Order Defect Issue",
+ "actions": {
+ "Review_Order___Policy": {
+ "type": "OpenApiConnection",
+ "inputs": {
+ "parameters": {
+ "body/definition": {
+ "components": [
+ {
+ "diagnostics": [],
+ "schemaName": "shared_advancedapprovals_RequestForInformation_channel",
+ "variable": {
+ "diagnostics": [],
+ "name": "shared_advancedapprovals_RequestForInformation_channel",
+ "type": "{\"type\":\"string\"}",
+ "defaultValue": "\"Outlook\"",
+ "$kind": "AgentVariable"
+ },
+ "$kind": "GlobalVariableComponent"
+ },
+ {
+ "diagnostics": [],
+ "schemaName": "shared_advancedapprovals_RequestForInformation_assignedTo",
+ "variable": {
+ "diagnostics": [],
+ "name": "shared_advancedapprovals_RequestForInformation_assignedTo",
+ "type": "{\"type\":\"string\"}",
+ "defaultValue": "\"3f1848f3-2d5c-4958-9033-c9a92b6aed59\"",
+ "$kind": "AgentVariable"
+ },
+ "$kind": "GlobalVariableComponent"
+ },
+ {
+ "diagnostics": [],
+ "schemaName": "shared_advancedapprovals_RequestForInformation",
+ "displayName": "Advanced Approvals — Request for information",
+ "description": "Ask a human for additional information.",
+ "dialog": {
+ "toolInputs": [
+ {
+ "diagnostics": [],
+ "name": "channel",
+ "value": {
+ "diagnostics": [],
+ "name": "shared_advancedapprovals_RequestForInformation_channel",
+ "$kind": "ContextVariableReference"
+ },
+ "$kind": "AgentToolInput"
+ },
+ {
+ "diagnostics": [],
+ "name": "assignedTo",
+ "value": {
+ "diagnostics": [],
+ "name": "shared_advancedapprovals_RequestForInformation_assignedTo",
+ "$kind": "ContextVariableReference"
+ },
+ "$kind": "AgentToolInput"
+ }
+ ],
+ "toolOutputs": [],
+ "diagnostics": [],
+ "connectorId": "/providers/Microsoft.PowerApps/apis/shared_advancedapprovals",
+ "authMode": "Maker",
+ "connectionReference": "new_sharedadvancedapprovals_00cb31fc",
+ "operationId": "RequestForInformation",
+ "$kind": "ConnectorTool"
+ },
+ "$kind": "DialogComponent"
+ }
+ ],
+ "environmentVariables": [],
+ "flows": [],
+ "dataverseTableSearchs": [],
+ "dataverseTableSearchGlossaryConfigurations": [],
+ "dataverseTableSearchEntityConfigurations": [],
+ "dataverseTableSearchEntityColumnSynonyms": [],
+ "connectionReferences": [
+ {
+ "diagnostics": [],
+ "connectionReferenceLogicalName": "new_sharedadvancedapprovals_00cb31fc",
+ "connectionId": "be923ac0d38a430a90ba2395510118d3",
+ "connectorId": "/providers/Microsoft.PowerApps/apis/shared_advancedapprovals",
+ "$kind": "ConnectionReference"
+ }
+ ],
+ "connectorDefinitions": [],
+ "aIModelDefinitions": [],
+ "aIPluginOperations": [],
+ "connectedAgentDefinitions": [],
+ "componentCollections": [],
+ "connectedBots": [],
+ "diagnostics": [],
+ "entity": {
+ "authorizedSecurityGroupIds": [],
+ "supportedLanguages": [],
+ "diagnostics": [],
+ "schemaName": "workflow_agentnode",
+ "language": 1033,
+ "accessControlPolicy": "Any",
+ "authenticationMode": "Integrated",
+ "authenticationTrigger": "Always",
+ "synchronizationStatus": {
+ "graphDriveItems": [],
+ "diagnostics": [],
+ "lastPublishedDetails": {
+ "diagnosticDetails": [],
+ "diagnostics": [],
+ "authenticationMode": "Integrated",
+ "$kind": "SuccessfulPublishResultDetails"
+ },
+ "$kind": "BotSynchronizationDetails"
+ },
+ "configuration": {
+ "categories": [],
+ "channels": [],
+ "settings": {},
+ "memoryParameters": [],
+ "diagnostics": [],
+ "recognizer": {
+ "diagnostics": [],
+ "$kind": "CLICopilotRecognizer"
+ },
+ "agentSettings": {
+ "conversationStarters": [],
+ "diagnostics": [],
+ "model": {
+ "diagnostics": [],
+ "series": "claude-opus-5",
+ "$kind": "ModelConfig"
+ },
+ "instructions": {
+ "segments": [],
+ "diagnostics": [],
+ "$kind": "Instructions"
+ },
+ "output": {
+ "diagnostics": [],
+ "schema": "{\"type\":\"object\",\"properties\":{\"Return\":{\"type\":\"string\",\"enum\":[\"applicable\",\"other\"]},\"Summary\":{\"type\":\"string\"},\"ReturnInstruction\":{\"type\":\"string\"}},\"required\":[\"Return\",\"Summary\",\"ReturnInstruction\"]}",
+ "$kind": "StructuredAgentOutput"
+ },
+ "$kind": "AgentSettings"
+ },
+ "$kind": "BotConfiguration"
+ },
+ "$kind": "BotEntity"
+ },
+ "$kind": "BotDefinition"
+ },
+ "body/message": "You assess a customer enquiry about a received item that may be defective, and decide what our policy allows. Ground every ruling in your tools; never invent policy numbers, fees, orders or dates. You do never request the return yourself, this is a step to be taken later \n\nCustomer Enquiry: @{triggerOutputs()?['body/body']}\n\nSteps:\n1. Find the order from the name, email or order number provided. If the details the customer gives do not reconcile with the order on file - the name or email doesn't match the order, the order can't be found, or the item isn't on that order - do not proceed on assumption: request human assistance and explain exactly what doesn't match. Only ask the human to clear ambiguity in the field that does not match the customer indications, do not ask for more information than the strictly necessary.\n2. If the order reconciles, establish whether the fault is a manufacturing defect versus accidental/physical damage, and check it against our return/warranty policy (window, restocking fee, warranty swap). Never make a conclusion on the outcome of the applicability of the return without searching first the organization's policy. \n3. Classify the outcome and explain your reasoning.\n\nThen return these outputs:\n- Return: Where applicable = policy clearly allows return/refund/exchange; other = not fully covered but extreme / ambiguous / grey‑area (may be an exception); or clearly not covered or not justified\n- Summary: Two lines with the rationale behind the policy applicability or rejection. No greeting, citations or commentary. A concise assessment of policy coverage, visible to both the customer and tstore manager. Maximum 2 bullet points, no more than 600 characters. Exclude other type of details. \n- ReturnInstruction: One line for the fulfilment agent: which order and item to return/refund/exchange and why"
+ },
+ "host": {
+ "apiId": "/providers/Microsoft.PowerApps/apis/shared_agentnode",
+ "connectionName": "shared_agentnode-2",
+ "operationId": "InvokeDefinition"
+ }
+ },
+ "metadata": {
+ "description": "Review Order & Policy",
+ "nodeId": "agent-0a2ca1d4-b735-4d6c-bbed-55834b22195b"
+ }
+ },
+ "Policy_Condition": {
+ "type": "If",
+ "expression": {
+ "and": [
+ {
+ "equals": [
+ "@body('Review_Order___Policy')?['structuredOutput/Return']",
+ "applicable"
+ ]
+ }
+ ]
+ },
+ "actions": {},
+ "else": {
+ "actions": {
+ "Human_Review__Exception": {
+ "type": "OpenApiConnectionWebhook",
+ "inputs": {
+ "parameters": {
+ "RequestForInformationInput/channel": "Outlook",
+ "RequestForInformationInput/title": "Action needed: Review Return Policy Exception",
+ "RequestForInformationInput/message": "Dear manager,\n\nA customer return/refund request has been flagged as not covered under policy and needs your attention. \n\nApprove to apply an exception and initiate a return/exchange, or reject to decline. Thank you.\n\nCase assessment (AI-generated):\n\n@{body('Review_Order___Policy')?['structuredOutput/Summary']} ",
+ "RequestForInformationInput/assignedTo": "@{triggerOutputs()?['body/from']}",
+ "RequestForInformationInput/input": {
+ "type": "object",
+ "properties": {
+ "boolean": {
+ "title": "Approve",
+ "type": "boolean",
+ "x-ms-content-hint": "BOOLEAN",
+ "x-ms-dynamically-added": true,
+ "description": "Please select yes or no"
+ }
+ },
+ "required": [
+ "boolean"
+ ]
+ }
+ },
+ "host": {
+ "apiId": "/providers/Microsoft.PowerApps/apis/shared_advancedapprovals",
+ "connectionName": "shared_advancedapprovals-1",
+ "operationId": "RequestForInformation"
+ }
+ },
+ "metadata": {
+ "description": "Human Review: Exception",
+ "nodeId": "connector-7492932a-4693-4b1e-91dc-313e11fd221b"
+ }
+ },
+ "Approval_Condition": {
+ "type": "If",
+ "expression": {
+ "and": [
+ {
+ "equals": [
+ "@body('Human_Review__Exception')?['boolean']",
+ "Yes"
+ ]
+ }
+ ]
+ },
+ "actions": {},
+ "else": {
+ "actions": {
+ "Send_reply__No_refund": {
+ "type": "OpenApiConnection",
+ "inputs": {
+ "parameters": {
+ "replyParameters/Importance": "Low",
+ "messageId": "@{triggerOutputs()?['body/id']}",
+ "replyParameters/Body": "Dear customer,
We have assessed your enquiry and have concluded that your case does not apply for a refund or exchange under our current policy.
Findings summary:
@{body('Review_Order___Policy')?['structuredOutput/Summary']}
We apologise for any inconvenience this may cause to you. If you need further information about our policies, please visit our site.
Thank you,
The BlastBox Team
",
+ "replyParameters/Subject": "BlastBox Service - Your enquiry",
+ "replyParameters/To": "@{triggerOutputs()?['body/from']}"
+ },
+ "host": {
+ "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365",
+ "connectionName": "shared_office365",
+ "operationId": "ReplyToV3"
+ }
+ },
+ "metadata": {
+ "description": "Send reply: No refund",
+ "nodeId": "connector-9ccb141c-3277-4402-b045-e4569768d047"
+ }
+ },
+ "end-120d8b37-4a78-416c-a48b-63bd0c976443": {
+ "type": "Terminate",
+ "inputs": {
+ "runStatus": "Succeeded"
+ },
+ "runAfter": {
+ "Send_reply__No_refund": [
+ "Succeeded"
+ ]
+ },
+ "metadata": {
+ "description": "End 3",
+ "nodeId": "end-120d8b37-4a78-416c-a48b-63bd0c976443"
+ }
+ },
+ "Approval_Condition_Terminate_else": {
+ "type": "Terminate",
+ "inputs": {
+ "runStatus": "Failed",
+ "runError": {
+ "code": "PartialJoinNotReached",
+ "message": "Flow execution ended without reaching a downstream merge node. A branch was taken that has no path to a node that other branches merge into. Reopen this flow in the designer and review the Health Center warning that says this node doesn't run when a dead-end branch is taken (code: CROSS_SCOPE_MERGE). Then update the flow so every branch eventually connects to the merge node, or remove the merge."
+ }
+ },
+ "metadata": {
+ "synthetic": true,
+ "reason": "implicit-terminate-for-partial-join"
+ },
+ "runAfter": {
+ "end-120d8b37-4a78-416c-a48b-63bd0c976443": [
+ "Succeeded"
+ ]
+ }
+ }
+ }
+ },
+ "runAfter": {
+ "Human_Review__Exception": [
+ "Succeeded"
+ ]
+ },
+ "metadata": {
+ "description": "Approval Condition",
+ "nodeId": "ifElse-16a2c329-a4a3-4d03-822d-4148fac6c339"
+ }
+ }
+ }
+ },
+ "runAfter": {
+ "Review_Order___Policy": [
+ "Succeeded"
+ ]
+ },
+ "metadata": {
+ "description": "Policy Condition",
+ "nodeId": "ifElse-cd0fb527-6d90-4f39-bf36-82cb41ac68a5"
+ }
+ },
+ "Set_Return_Note": {
+ "type": "SetVariable",
+ "inputs": {
+ "name": "ReturnNote",
+ "value": "@{body('Review_Order___Policy')?['structuredOutput/ReturnInstruction']}"
+ },
+ "runAfter": {
+ "Policy_Condition": [
+ "Succeeded"
+ ]
+ },
+ "metadata": {
+ "description": "Set Return Note",
+ "nodeId": "variable-89f2d4e3-1c35-4c8b-be7d-d4822cfc2f4b"
+ }
+ }
+ }
+ }
+ },
+ "default": {
+ "actions": {
+ "Call_Store_Policy_Agent": {
+ "type": "OpenApiConnection",
+ "inputs": {
+ "parameters": {
+ "body/prompt": "Review the customer enquiry and craft an answer that summarizes the answer to the question, no greeting, citations, or comments.\nThe answer should be no more than two paragraphs or a paragraph and a couple of bullet points. Do not include text formatting such as bold (*text*). \nUse store and BlastPass policy only. If no answer can be found in the policies, indicate it clearly.\n\nCustomer enquiry: @{triggerOutputs()?['body/body']} ",
+ "body/agentId": "Default_StorePolicyAgent_s9s-u8"
+ },
+ "host": {
+ "apiId": "/providers/Microsoft.PowerApps/apis/shared_agentnode",
+ "connectionName": "shared_agentnode-2",
+ "operationId": "InvokeAgent"
+ }
+ },
+ "metadata": {
+ "description": "Call Store Policy Agent",
+ "nodeId": "agent-b6af16be-b502-4322-83cb-bf6f1c2ddf13"
+ }
+ },
+ "Send_reply": {
+ "type": "OpenApiConnection",
+ "inputs": {
+ "parameters": {
+ "replyParameters/Importance": "Low",
+ "replyParameters/Body": "Dear customer,
Thanks for getting in touch. We have assessed your enquiry. Here is some useful information for you:
@{body('Call_Store_Policy_Agent')?['result']}
Further questions? Please reach out to us or visit our site.
Thank you,
The BlastBox Team
",
+ "messageId": "@{triggerOutputs()?['body/id']}",
+ "replyParameters/To": "@{triggerOutputs()?['body/from']}",
+ "replyParameters/Subject": "BlastBox Service - Your enquiry"
+ },
+ "host": {
+ "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365",
+ "connectionName": "shared_office365",
+ "operationId": "ReplyToV3"
+ }
+ },
+ "runAfter": {
+ "Call_Store_Policy_Agent": [
+ "Succeeded"
+ ]
+ },
+ "metadata": {
+ "description": "Send reply",
+ "nodeId": "connector-5f867ed3-6c32-4c2d-b747-251877850d50"
+ }
+ },
+ "end-5c7e1ace-643f-4e2d-bed7-8a71c340bc9b": {
+ "type": "Terminate",
+ "inputs": {
+ "runStatus": "Succeeded"
+ },
+ "runAfter": {
+ "Send_reply": [
+ "Succeeded"
+ ]
+ },
+ "metadata": {
+ "description": "End 4",
+ "nodeId": "end-5c7e1ace-643f-4e2d-bed7-8a71c340bc9b"
+ }
+ },
+ "Classify_Switch_Terminate_default": {
+ "type": "Terminate",
+ "inputs": {
+ "runStatus": "Failed",
+ "runError": {
+ "code": "PartialJoinNotReached",
+ "message": "Flow execution ended without reaching a downstream merge node. A branch was taken that has no path to a node that other branches merge into. Reopen this flow in the designer and review the Health Center warning that says this node doesn't run when a dead-end branch is taken (code: CROSS_SCOPE_MERGE). Then update the flow so every branch eventually connects to the merge node, or remove the merge."
+ }
+ },
+ "metadata": {
+ "synthetic": true,
+ "reason": "implicit-terminate-for-partial-join"
+ },
+ "runAfter": {
+ "end-5c7e1ace-643f-4e2d-bed7-8a71c340bc9b": [
+ "Succeeded"
+ ]
+ }
+ }
+ }
+ },
+ "runAfter": {
+ "Classify": [
+ "Succeeded"
+ ]
+ }
+ },
+ "Trigger_Order_Return_Exchange": {
+ "type": "OpenApiConnection",
+ "inputs": {
+ "parameters": {
+ "body/definition": {
+ "components": [
+ {
+ "diagnostics": [],
+ "schemaName": "shared_office365_SendEmailV2",
+ "displayName": "Send an email",
+ "description": "This operation sends an email message.",
+ "dialog": {
+ "toolInputs": [],
+ "toolOutputs": [],
+ "diagnostics": [],
+ "connectorId": "/providers/Microsoft.PowerApps/apis/shared_office365",
+ "authMode": "Maker",
+ "connectionReference": "shared-office365-b79141e6-d6f8-42c6-b914-3eb3d2491190",
+ "operationId": "SendEmailV2",
+ "$kind": "ConnectorTool"
+ },
+ "$kind": "DialogComponent"
+ }
+ ],
+ "environmentVariables": [],
+ "flows": [],
+ "dataverseTableSearchs": [],
+ "dataverseTableSearchGlossaryConfigurations": [],
+ "dataverseTableSearchEntityConfigurations": [],
+ "dataverseTableSearchEntityColumnSynonyms": [],
+ "connectionReferences": [
+ {
+ "diagnostics": [],
+ "connectionReferenceLogicalName": "shared-office365-b79141e6-d6f8-42c6-b914-3eb3d2491190",
+ "connectionId": "shared-office365-b79141e6-d6f8-42c6-b914-3eb3d2491190",
+ "connectorId": "/providers/Microsoft.PowerApps/apis/shared_office365",
+ "$kind": "ConnectionReference"
+ }
+ ],
+ "connectorDefinitions": [],
+ "aIModelDefinitions": [],
+ "aIPluginOperations": [],
+ "connectedAgentDefinitions": [],
+ "componentCollections": [],
+ "connectedBots": [],
+ "diagnostics": [],
+ "entity": {
+ "authorizedSecurityGroupIds": [],
+ "supportedLanguages": [],
+ "diagnostics": [],
+ "schemaName": "workflow_agentnode",
+ "language": 1033,
+ "accessControlPolicy": "Any",
+ "authenticationMode": "Integrated",
+ "authenticationTrigger": "Always",
+ "synchronizationStatus": {
+ "graphDriveItems": [],
+ "diagnostics": [],
+ "lastPublishedDetails": {
+ "diagnosticDetails": [],
+ "diagnostics": [],
+ "authenticationMode": "Integrated",
+ "$kind": "SuccessfulPublishResultDetails"
+ },
+ "$kind": "BotSynchronizationDetails"
+ },
+ "configuration": {
+ "categories": [],
+ "channels": [],
+ "settings": {},
+ "memoryParameters": [],
+ "diagnostics": [],
+ "recognizer": {
+ "diagnostics": [],
+ "$kind": "CLICopilotRecognizer"
+ },
+ "agentSettings": {
+ "conversationStarters": [],
+ "diagnostics": [],
+ "model": {
+ "diagnostics": [],
+ "series": "claude-opus-5",
+ "$kind": "ModelConfig"
+ },
+ "instructions": {
+ "segments": [],
+ "diagnostics": [],
+ "$kind": "Instructions"
+ },
+ "$kind": "AgentSettings"
+ },
+ "$kind": "BotConfiguration"
+ },
+ "$kind": "BotEntity"
+ },
+ "$kind": "BotDefinition"
+ },
+ "body/message": "Action the return or exchange described below for the customer's order, using the Order Management tools. \nDo exactly what the instruction says, do not re‑decide eligibility, that has already been determined upstream.\n\nReturn or exchange action to perform:\n @{variables('ReturnNote')}\n\nOriginal customer email:\n@{triggerOutputs()?['body/body']}\n\nOnce the return or exchange is registered, send a single confirmation email - only to the customer address provided, never any other address - telling them it's done, what to expect next in one liner (label, refund or replacement timing). Do not include any citations, links, or URLs in the sent email. \n\nCustomer email: @{triggerOutputs()?['body/from']}\nSubject: \"BlastBox Service – Your return/exchange is confirmed\"\nBody:\n\"Dear Customer,\n\nWe are pleased to inform you that [notes on the action performed]. You will receive [note on the applicable product, and or refund to be received by the customer]. \n\nThank you,\n*The BlastBox Team*\"\n"
+ },
+ "host": {
+ "apiId": "/providers/Microsoft.PowerApps/apis/shared_agentnode",
+ "connectionName": "shared_agentnode-2",
+ "operationId": "InvokeDefinition"
+ }
+ },
+ "runAfter": {
+ "Classify_Switch": [
+ "Succeeded"
+ ]
+ },
+ "metadata": {
+ "description": "Trigger Order Return/Exchange",
+ "nodeId": "agent-2444168a-b2f6-48b5-bb75-75d94e0cf8aa"
+ }
+ },
+ "end-2120af3d-79db-4382-8e87-bc95af0281b7": {
+ "type": "Terminate",
+ "inputs": {
+ "runStatus": "Succeeded"
+ },
+ "runAfter": {
+ "Trigger_Order_Return_Exchange": [
+ "Succeeded"
+ ]
+ },
+ "metadata": {
+ "description": "End 2",
+ "nodeId": "end-2120af3d-79db-4382-8e87-bc95af0281b7"
+ }
+ }
+ },
+ "outputs": {},
+ "metadata": {
+ "telemetryMetadata": {
+ "creationSource": "WorkflowDesigner",
+ "modifiedSources": "WorkflowDesigner"
+ }
+ }
+ },
+ "templateName": null
+ },
+ "schemaVersion": "1.0.0.0"
+}
\ No newline at end of file
diff --git a/sample/solution/src/BlastBoxWorkflows/Workflows/BlastBoxWeeklyInventoryHealth-44D64F96-1130-9B19-8209-34093D4416A3.json b/sample/solution/src/BlastBoxWorkflows/Workflows/BlastBoxWeeklyInventoryHealth-44D64F96-1130-9B19-8209-34093D4416A3.json
new file mode 100644
index 0000000..53f7e4b
--- /dev/null
+++ b/sample/solution/src/BlastBoxWorkflows/Workflows/BlastBoxWeeklyInventoryHealth-44D64F96-1130-9B19-8209-34093D4416A3.json
@@ -0,0 +1,2477 @@
+{
+ "properties": {
+ "connectionReferences": {
+ "shared_agentnode-1": {
+ "api": {
+ "name": "shared_agentnode"
+ },
+ "connection": {
+ "connectionReferenceLogicalName": "new_sharedagentnode_a4edece2"
+ },
+ "runtimeSource": "embedded",
+ "connectionName": "49c44ba139d44a72b5bcf4ef9c809fe6"
+ },
+ "shared_office365-1": {
+ "api": {
+ "name": "shared_office365"
+ },
+ "connection": {
+ "connectionReferenceLogicalName": "new_sharedoffice365_d3c797ce"
+ },
+ "runtimeSource": "embedded",
+ "connectionName": "b50f648118a44456949c0348eb03bc33"
+ },
+ "shared_advancedapprovals-1": {
+ "api": {
+ "name": "shared_advancedapprovals"
+ },
+ "connection": {
+ "connectionReferenceLogicalName": "new_sharedadvancedapprovals_a26545df"
+ },
+ "runtimeSource": "embedded",
+ "connectionName": "8a6c46550ec24046aec0a37279897ca4"
+ }
+ },
+ "definition": {
+ "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
+ "contentVersion": "1.0.0.0",
+ "parameters": {
+ "$authentication": {
+ "defaultValue": {},
+ "type": "SecureObject"
+ },
+ "$connections": {
+ "defaultValue": {},
+ "type": "Object"
+ }
+ },
+ "triggers": {
+ "manual": {
+ "type": "Request",
+ "kind": "Button",
+ "inputs": {
+ "schema": {
+ "type": "object",
+ "properties": {},
+ "required": []
+ }
+ },
+ "metadata": {
+ "associatedData": {
+ "graph": {
+ "name": "BlastBox Weekly Inventory Health",
+ "nodes": [
+ {
+ "id": "start-4b8f612e-9dcd-464b-996f-33cbbf8f4799",
+ "name": "Start",
+ "type": "start",
+ "version": 1,
+ "position": {
+ "x": 322.90660787689546,
+ "y": 693.28772827539547
+ },
+ "data": {
+ "config": {
+ "triggerType": "manual"
+ },
+ "outcomes": [
+ {
+ "id": "default",
+ "label": "Default",
+ "outcomeSchema": {
+ "type": "object",
+ "properties": {},
+ "required": []
+ }
+ }
+ ]
+ },
+ "measured": {
+ "width": 240,
+ "height": 66
+ }
+ },
+ {
+ "id": "canvasNote-4bf9bd4b-1e72-438a-add1-a13e7b9626e7",
+ "name": "Note",
+ "type": "canvasNote",
+ "version": 1,
+ "position": {
+ "x": 312.90660787689546,
+ "y": 521.74231811914547
+ },
+ "width": 250,
+ "height": 150,
+ "style": {
+ "width": 250,
+ "height": 150
+ },
+ "data": {
+ "config": {
+ "markdown": "Set as manual and indicate users to turn on Recurrence to recreate real life scenario without risk of missing turning off the \"Enabled\" workflow toggle",
+ "color": "yellow"
+ },
+ "outcomes": []
+ },
+ "measured": {
+ "width": 250,
+ "height": 150
+ }
+ },
+ {
+ "id": "agent-2d813f06-95ff-4a50-903b-ff36ee884cdc",
+ "name": "Call Inventory & Fullfilment Agent",
+ "type": "agent",
+ "version": 1,
+ "position": {
+ "x": 609.3606287968737,
+ "y": 693.05813766296967
+ },
+ "data": {
+ "config": {
+ "mode": "invoke",
+ "instructions": "Extract the following information for all games and consoles products (BlastBox, MEGA and Galaxu SKUs), excluding accessories (no headsets, cables or others):\n- SKUName\n- State of SKU stock aging: Stale, fresh or other if unknown\n- State of inbound stock order: 'planned' if inbound entry is true, 'unplanned' if false or unknown, 'reorder' if a note to reorder inbound exists\n",
+ "botSchemaName": "Default_InventoryFullfilmentAgent_X-w2GP",
+ "isHitlEscalationEnabled": false,
+ "webSearchEnabled": false,
+ "inlineInstructions": "",
+ "outputMode": "structured-simple",
+ "inlineModel": "Sonnet5",
+ "connectionName": "shared_agentnode-1",
+ "instructionsRich": {
+ "segments": [
+ {
+ "type": "static",
+ "value": "Extract the following information for all games and consoles products (BlastBox, MEGA and Galaxu SKUs), excluding accessories (no headsets, cables or others):\n- SKUName\n- State of SKU stock aging: Stale, fresh or other if unknown\n- State of inbound stock order: 'planned' if inbound entry is true, 'unplanned' if false or unknown, 'reorder' if a note to reorder inbound exists\n"
+ }
+ ]
+ },
+ "simpleProperties": [
+ {
+ "id": "d8ac2073-974d-4008-a45a-8fff32483871",
+ "name": "SKU",
+ "type": "list",
+ "description": "",
+ "listItems": [
+ {
+ "id": "831c997a-d165-400a-8230-c59a6a5f2da9",
+ "name": "SKUName",
+ "type": "string",
+ "description": "The name of the SKU"
+ },
+ {
+ "id": "dfdbd413-a672-41bd-8d0b-84a2f6be5eb5",
+ "name": "StockAge",
+ "type": "enum",
+ "description": "The state of SKU stock aging",
+ "enumValues": [
+ "stale",
+ "fresh",
+ "other"
+ ]
+ },
+ {
+ "id": "9f767652-ba80-45e6-80ed-23d3e1c3e800",
+ "name": "Inbound",
+ "type": "enum",
+ "description": "State of inbound order",
+ "enumValues": [
+ "planned",
+ "unplanned",
+ "reorder"
+ ]
+ }
+ ]
+ }
+ ],
+ "jsonSchema": {
+ "type": "object",
+ "properties": {
+ "SKU": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "SKUName": {
+ "type": "string",
+ "description": "The name of the SKU"
+ },
+ "StockAge": {
+ "type": "string",
+ "enum": [
+ "stale",
+ "fresh",
+ "other"
+ ],
+ "description": "The state of SKU stock aging"
+ },
+ "Inbound": {
+ "type": "string",
+ "enum": [
+ "planned",
+ "unplanned",
+ "reorder"
+ ],
+ "description": "State of inbound order"
+ }
+ },
+ "required": [
+ "SKUName",
+ "StockAge",
+ "Inbound"
+ ]
+ }
+ }
+ },
+ "required": [
+ "SKU"
+ ]
+ }
+ },
+ "outcomes": [
+ {
+ "id": "default",
+ "label": "Default",
+ "outcomeSchema": {
+ "type": "object",
+ "properties": {
+ "result": {
+ "type": "string",
+ "description": "The agent response text"
+ },
+ "status": {
+ "type": "string",
+ "description": "The completion status (e.g., Completed)"
+ },
+ "conversationId": {
+ "type": "string",
+ "description": "Unique identifier for the conversation"
+ },
+ "structuredOutput": {
+ "type": "object",
+ "properties": {
+ "SKU": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "SKUName": {
+ "type": "string",
+ "description": "The name of the SKU"
+ },
+ "StockAge": {
+ "type": "string",
+ "enum": [
+ "stale",
+ "fresh",
+ "other"
+ ],
+ "description": "The state of SKU stock aging"
+ },
+ "Inbound": {
+ "type": "string",
+ "enum": [
+ "planned",
+ "unplanned",
+ "reorder"
+ ],
+ "description": "State of inbound order"
+ }
+ },
+ "required": [
+ "SKUName",
+ "StockAge",
+ "Inbound"
+ ]
+ }
+ }
+ },
+ "required": [
+ "SKU"
+ ],
+ "title": ""
+ }
+ },
+ "required": [
+ "result",
+ "conversationId",
+ "structuredOutput"
+ ]
+ }
+ }
+ ]
+ },
+ "measured": {
+ "width": 294,
+ "height": 66
+ }
+ },
+ {
+ "id": "loop-a4fc4348-44fb-49ea-8236-2acf87569028",
+ "name": "Loop over each gaming SKU",
+ "type": "loop",
+ "version": 1,
+ "position": {
+ "x": 1283.0104430662,
+ "y": 377.64367872431205
+ },
+ "width": 1907,
+ "height": 697,
+ "style": {
+ "width": 1907,
+ "height": 697
+ },
+ "data": {
+ "config": {
+ "loopType": "foreach",
+ "foreach": "@body('agent-2d813f06-95ff-4a50-903b-ff36ee884cdc')?['structuredOutput/SKU']",
+ "foreachRich": {
+ "segments": [
+ {
+ "type": "token",
+ "value": "S K U",
+ "tokenRef": {
+ "type": "step",
+ "stepId": "agent-2d813f06-95ff-4a50-903b-ff36ee884cdc",
+ "stepName": "Call Inventory & Fullfilment Agent",
+ "outputName": "structuredOutput/SKU",
+ "outputDisplayName": "S K U",
+ "outputType": "array"
+ }
+ }
+ ]
+ }
+ },
+ "outcomes": [
+ {
+ "id": "default",
+ "label": "Default"
+ }
+ ]
+ },
+ "measured": {
+ "width": 1907,
+ "height": 697
+ },
+ "resizing": false
+ },
+ {
+ "id": "ifElse-9777a477-05d5-449f-a1a0-3018afd17ef8",
+ "name": "Stock Aging Condition",
+ "type": "ifElse",
+ "version": 1,
+ "position": {
+ "x": 68.393996096193177,
+ "y": 172
+ },
+ "data": {
+ "config": {
+ "conditions": [
+ {
+ "id": "66b1bc7d-62cb-4e20-869a-5c2b0000b523",
+ "name": "If stale or aging",
+ "expression": "{\n \"and\": [\n {\n \"equals\": [\n \"@items('Loop_over_each_gaming_SKU')?['StockAge']\",\n \"stale\"\n ]\n }\n ]\n}"
+ },
+ {
+ "id": "e8648f23-63f8-4da1-a773-1c5b66317e52",
+ "name": "If flagged to reorder inbound",
+ "expression": "{\n \"and\": [\n {\n \"equals\": [\n \"@items('Loop_over_each_gaming_SKU')?['Inbound']\",\n \"reorder\"\n ]\n }\n ]\n}"
+ }
+ ]
+ },
+ "outcomes": [
+ {
+ "id": "condition:66b1bc7d-62cb-4e20-869a-5c2b0000b523",
+ "label": "If stale or aging"
+ },
+ {
+ "id": "condition:e8648f23-63f8-4da1-a773-1c5b66317e52",
+ "label": "If flagged to reorder inbound"
+ },
+ {
+ "id": "else",
+ "label": "Else"
+ }
+ ]
+ },
+ "parentId": "loop-a4fc4348-44fb-49ea-8236-2acf87569028",
+ "measured": {
+ "width": 251,
+ "height": 217
+ }
+ },
+ {
+ "id": "connector-9dc5e271-f730-4189-8ec6-5dfd1d013fd9",
+ "name": "Human Review: Discount Range",
+ "type": "connector",
+ "version": 1,
+ "position": {
+ "x": 731.71649488352523,
+ "y": 80
+ },
+ "data": {
+ "config": {
+ "apiName": "shared_advancedapprovals",
+ "operationName": "RequestForInformation",
+ "displayName": "Human review",
+ "paletteIconHint": "humanReview",
+ "operationType": "OpenApiConnectionWebhook",
+ "iconUri": "https://static.powerapps.com/resource/ppcr/releases/v1.0.1819/1.0.1819.4798/advancedapprovals/icon.png",
+ "brandColor": "#109CD1",
+ "parameters": {
+ "RequestForInformationInput/channel": "Outlook",
+ "RequestForInformationInput/title": "Action needed: SKU Pricing Adjustment",
+ "RequestForInformationInput/message": "Dear store manager,\n\nThe following item has been nominated for a promotion or clearance application based on weekly findings.\n\nSKU: @{items('Loop_over_each_gaming_SKU')?['SKUName']} \n\nWeekly Findings: \n@{body('agent-7d5d1903-f892-41df-a546-95aef444dbd9')?['structuredOutput/Findings']} \n\nIf promotion is chosen, store employees will receive the following guidance:\n\nPromo: \n@{body('agent-7d5d1903-f892-41df-a546-95aef444dbd9')?['structuredOutput/Promo']} \n\nIf clearance is chosen, store employees will receive the following guidance:\n\nClearance:\n@{body('agent-7d5d1903-f892-41df-a546-95aef444dbd9')?['structuredOutput/Clearance']} \n\nPlease select your preferred option, as well as (if desired), maximum and minimum discount to be applied.\n\nThank you",
+ "RequestForInformationInput/assignedTo": "@{string(variables('Email'))}",
+ "RequestForInformationInput/input": {
+ "type": "object",
+ "properties": {
+ "text": {
+ "title": "New Pricing",
+ "type": "string",
+ "x-ms-content-hint": "TEXT",
+ "x-ms-dynamically-added": true,
+ "description": "Please select an option",
+ "enum": [
+ "Accept Promo",
+ "Accept Clearance"
+ ]
+ },
+ "number_1": {
+ "title": "Minimum Discount (%)",
+ "type": "number",
+ "x-ms-content-hint": "NUMBER",
+ "x-ms-dynamically-added": true,
+ "description": "Minimum discount"
+ },
+ "number_2": {
+ "title": "Maximum Discount (%)",
+ "type": "number",
+ "x-ms-content-hint": "NUMBER",
+ "x-ms-dynamically-added": true,
+ "description": "Maximum discount"
+ }
+ },
+ "required": [
+ "text"
+ ]
+ }
+ },
+ "parametersSchema": {
+ "type": "object",
+ "properties": {
+ "RequestForInformationInput": {
+ "type": "object",
+ "properties": {
+ "title": {
+ "type": "string",
+ "title": "Title",
+ "description": "Specify the title of the request.",
+ "x-ms-visibility": "important",
+ "x-ms-property-name-alias": "RequestForInformationInput/title"
+ },
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Specify the message for the request.",
+ "x-ms-visibility": "important",
+ "x-ms-property-name-alias": "RequestForInformationInput/message"
+ },
+ "assignedTo": {
+ "type": "string",
+ "title": "Assigned to (first to respond)",
+ "x-ms-dynamic-list": {
+ "builtInOperation": "AadGraph.GetUsers",
+ "parameters": {},
+ "itemValuePath": "mail",
+ "itemTitlePath": "displayName"
+ },
+ "format": "email",
+ "description": "Recipient email addresses, UPNs, or Microsoft Entra user ids separated by semicolons. The response from the first user to respond to the request is used.",
+ "x-ms-visibility": "important",
+ "x-ms-property-name-alias": "RequestForInformationInput/assignedTo"
+ },
+ "channel": {
+ "type": "string",
+ "title": "Channel",
+ "description": "Set this to the notification channel for the request based on user query. Choose one of: Outlook or Teams. Defaults to Outlook if not specified. Use Teams if the user mentions Teams, flow bot, or teams bot.",
+ "default": "Outlook",
+ "enum": [
+ "Outlook",
+ "Teams"
+ ],
+ "x-ms-visibility": "important",
+ "x-ms-enum-values": [
+ {
+ "displayName": "Outlook",
+ "value": "Outlook"
+ },
+ {
+ "displayName": "Teams",
+ "value": "Teams"
+ }
+ ],
+ "x-ms-property-name-alias": "RequestForInformationInput/channel"
+ },
+ "input": {
+ "type": "object",
+ "title": "Input",
+ "properties": {},
+ "required": [],
+ "description": "Input definition.",
+ "x-ms-visibility": "important",
+ "x-ms-property-name-alias": "RequestForInformationInput/input"
+ }
+ },
+ "required": [
+ "assignedTo",
+ "channel",
+ "input",
+ "message",
+ "title"
+ ],
+ "description": "Request information",
+ "x-ms-property-name-alias": "RequestForInformationInput"
+ }
+ },
+ "required": [
+ "RequestForInformationInput"
+ ]
+ },
+ "connectionName": "shared_advancedapprovals-1"
+ },
+ "outcomes": [
+ {
+ "id": "default",
+ "label": "Default",
+ "outcomeSchema": {
+ "type": "object",
+ "properties": {
+ "text": {
+ "title": "New Pricing",
+ "type": "string",
+ "x-ms-content-hint": "TEXT",
+ "x-ms-dynamically-added": true,
+ "description": "Please select an option",
+ "enum": [
+ "Accept Promo",
+ "Accept Clearance"
+ ]
+ },
+ "number_1": {
+ "title": "Minimum Discount (%)",
+ "type": "number",
+ "x-ms-content-hint": "NUMBER",
+ "x-ms-dynamically-added": true,
+ "description": "Minimum discount"
+ },
+ "number_2": {
+ "title": "Maximum Discount (%)",
+ "type": "number",
+ "x-ms-content-hint": "NUMBER",
+ "x-ms-dynamically-added": true,
+ "description": "Maximum discount"
+ }
+ },
+ "required": [
+ "text"
+ ]
+ }
+ }
+ ]
+ },
+ "parentId": "loop-a4fc4348-44fb-49ea-8236-2acf87569028",
+ "measured": {
+ "width": 280,
+ "height": 66
+ }
+ },
+ {
+ "id": "variable-44f7b1d2-15a0-473c-a3a8-3e8b43eba5c1",
+ "name": "Initialize variables",
+ "type": "variable",
+ "version": 1,
+ "position": {
+ "x": 971.41517384091173,
+ "y": 693.27406219972477
+ },
+ "data": {
+ "config": {
+ "assignments": [
+ {
+ "id": "204918f0-d7f9-4f3a-bc64-8292a93d0b42",
+ "variableName": "Email",
+ "mode": "initialize",
+ "type": "string",
+ "value": "",
+ "valueRich": {
+ "segments": []
+ }
+ },
+ {
+ "id": "7896871f-0599-4302-a7bb-c49679909d80",
+ "variableName": "SKU Index",
+ "mode": "initialize",
+ "type": "array",
+ "value": ""
+ },
+ {
+ "id": "e51f120f-e45a-4b20-a42b-c49c33efc9c7",
+ "variableName": "SKU Array",
+ "mode": "initialize",
+ "type": "array",
+ "value": ""
+ },
+ {
+ "id": "898545b5-55e9-4920-a749-ca87cfa17141",
+ "variableName": "Note Array",
+ "mode": "initialize",
+ "type": "array",
+ "value": ""
+ }
+ ]
+ },
+ "outcomes": [
+ {
+ "id": "default",
+ "label": "Default",
+ "outcomeSchema": {
+ "type": "object",
+ "properties": {},
+ "description": "Variables set by this node"
+ }
+ }
+ ]
+ },
+ "measured": {
+ "width": 240,
+ "height": 66
+ },
+ "selected": true
+ },
+ {
+ "id": "variable-c0edc099-3a8a-41fd-bf72-c4c0204c6a28",
+ "name": "Set SKU: Adjust price",
+ "type": "variable",
+ "version": 1,
+ "position": {
+ "x": 1061.2449534573511,
+ "y": 80
+ },
+ "data": {
+ "config": {
+ "assignments": [
+ {
+ "id": "e7ae29a7-2af7-472a-8ae1-ddca76ff0c1d",
+ "variableName": "SKU Array",
+ "mode": "appendToArray",
+ "value": "@{items('Loop_over_each_gaming_SKU')?['SKUName']}",
+ "type": "array",
+ "valueRich": {
+ "segments": [
+ {
+ "type": "token",
+ "value": "@items('Loop_over_each_gaming_SKU')?['SKUName']",
+ "tokenRef": {
+ "type": "item",
+ "stepId": "Loop_over_each_gaming_SKU",
+ "stepName": "Loop over each gaming SKU (Current item)",
+ "outputName": "SKUName",
+ "outputType": "object",
+ "loopName": "Loop_over_each_gaming_SKU",
+ "outputDisplayName": "item().S K U Name"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "id": "46911275-04db-4a32-8f2e-bd87d5e3d1c7",
+ "variableName": "Note Array",
+ "mode": "appendToArray",
+ "value": "@{concat(\r\n if(equals(body('connector-9dc5e271-f730-4189-8ec6-5dfd1d013fd9')?['text'], 'Accept Promo'), body('agent-7d5d1903-f892-41df-a546-95aef444dbd9')?['structuredOutput/Promo'], body('agent-7d5d1903-f892-41df-a546-95aef444dbd9')?['structuredOutput/Clearance']),\r\n if(not(empty(body('connector-9dc5e271-f730-4189-8ec6-5dfd1d013fd9')?['number_1'])), concat(' Min Discount: ', string(body('connector-9dc5e271-f730-4189-8ec6-5dfd1d013fd9')?['number_1'])), ''),\r\n if(not(empty(body('connector-9dc5e271-f730-4189-8ec6-5dfd1d013fd9')?['number_2'])), concat(' Max Discount: ', string(body('connector-9dc5e271-f730-4189-8ec6-5dfd1d013fd9')?['number_2'])), '')\r\n)}",
+ "type": "array",
+ "valueRich": {
+ "segments": [
+ {
+ "type": "token",
+ "value": "@{concat(\r\n if(equals(body('connector-9dc5e271-f730-4189-8ec6-5dfd1d013fd9')?['text'], 'Accept Promo'), body('agent-7d5d1903-f892-41df-a546-95aef444dbd9')?['structuredOutput/Promo'], body('agent-7d5d1903-f892-41df-a546-95aef444dbd9')?['structuredOutput/Clearance']),\r\n if(not(empty(body('connector-9dc5e271-f730-4189-8ec6-5dfd1d013fd9')?['number_1'])), concat(' Min Discount: ', string(body('connector-9dc5e271-f730-4189-8ec6-5dfd1d013fd9')?['number_1'])), ''),\r\n if(not(empty(body('connector-9dc5e271-f730-4189-8ec6-5dfd1d013fd9')?['number_2'])), concat(' Max Discount: ', string(body('connector-9dc5e271-f730-4189-8ec6-5dfd1d013fd9')?['number_2'])), '')\r\n)}",
+ "tokenRef": {
+ "type": "function",
+ "stepId": "function",
+ "stepName": "String",
+ "outputName": "concat",
+ "outputType": "string",
+ "functionName": "concat",
+ "functionCategory": "string",
+ "rawExpression": "concat(\r\n if(equals(body('connector-9dc5e271-f730-4189-8ec6-5dfd1d013fd9')?['text'], 'Accept Promo'), body('agent-7d5d1903-f892-41df-a546-95aef444dbd9')?['structuredOutput/Promo'], body('agent-7d5d1903-f892-41df-a546-95aef444dbd9')?['structuredOutput/Clearance']),\r\n if(not(empty(body('connector-9dc5e271-f730-4189-8ec6-5dfd1d013fd9')?['number_1'])), concat(' Min Discount: ', string(body('connector-9dc5e271-f730-4189-8ec6-5dfd1d013fd9')?['number_1'])), ''),\r\n if(not(empty(body('connector-9dc5e271-f730-4189-8ec6-5dfd1d013fd9')?['number_2'])), concat(' Max Discount: ', string(body('connector-9dc5e271-f730-4189-8ec6-5dfd1d013fd9')?['number_2'])), '')\r\n)"
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "outcomes": [
+ {
+ "id": "default",
+ "label": "Default",
+ "outcomeSchema": {
+ "type": "object",
+ "properties": {},
+ "description": "Variables set by this node"
+ }
+ }
+ ]
+ },
+ "parentId": "loop-a4fc4348-44fb-49ea-8236-2acf87569028",
+ "measured": {
+ "width": 320,
+ "height": 73
+ }
+ },
+ {
+ "id": "variable-5fa3e06a-8244-4ef1-8fb0-7d10f773f2d4",
+ "name": "Set SKU: Keep price",
+ "type": "variable",
+ "version": 1,
+ "position": {
+ "x": 396.22452074359171,
+ "y": 439
+ },
+ "data": {
+ "config": {
+ "assignments": [
+ {
+ "id": "879f7c7e-0218-450a-9834-7911bac71255",
+ "variableName": "SKU Array",
+ "mode": "appendToArray",
+ "value": "@{items('Loop_over_each_gaming_SKU')?['SKUName']}",
+ "type": "array",
+ "valueRich": {
+ "segments": [
+ {
+ "type": "token",
+ "value": "@{items('Loop_over_each_gaming_SKU')?['SKUName']}",
+ "tokenRef": {
+ "type": "item",
+ "stepId": "Loop_over_each_gaming_SKU",
+ "stepName": "Loop over each gaming SKU (Current item)",
+ "outputName": "SKUName",
+ "outputType": "object",
+ "loopName": "Loop_over_each_gaming_SKU",
+ "outputDisplayName": "item().S K U Name"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "id": "878b1392-913f-4acd-b5ab-0889f562fea1",
+ "variableName": "Note Array",
+ "mode": "appendToArray",
+ "value": "'This item has a good balance of supply and demand. Keep current pricing and store allocation. No action required.'",
+ "type": "array",
+ "valueRich": {
+ "segments": [
+ {
+ "type": "static",
+ "value": "'This item has a good balance of supply and demand. Keep current pricing and store allocation. No action required.'"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "outcomes": [
+ {
+ "id": "default",
+ "label": "Default",
+ "outcomeSchema": {
+ "type": "object",
+ "properties": {},
+ "description": "Variables set by this node"
+ }
+ }
+ ]
+ },
+ "parentId": "loop-a4fc4348-44fb-49ea-8236-2acf87569028",
+ "measured": {
+ "width": 320,
+ "height": 73
+ }
+ },
+ {
+ "id": "agent-7d5d1903-f892-41df-a546-95aef444dbd9",
+ "name": "Review Order History & Policy",
+ "type": "agent",
+ "version": 1,
+ "position": {
+ "x": 393.35380312869643,
+ "y": 80
+ },
+ "data": {
+ "config": {
+ "mode": "inline",
+ "instructions": "",
+ "botSchemaName": "",
+ "isHitlEscalationEnabled": false,
+ "webSearchEnabled": false,
+ "inlineInstructions": "Assess whether the SKU below is a good candidate for a price markdown, and if so propose the pricing scheme, for store‑manager review.\n\nSKU: {items('Loop_over_each_gaming_SKU')?['SKUName']}\n\nSteps:\n1. Review this SKU's recent order/sales history to gauge how well it has been selling. Orders are identified by references beginning with `ORD-`; work from the SKU's order history rather than expecting a single order number.\n2. Check the store's markdown policy to see what applies, and whether the situation fits a promotional markdown (temporary discount, within guardrails) or a clearance markdown (discontinuation, needs manager sign‑off).\n3. Produce the outputs below. For Promo and Clearance, give two short lines describing the proposed pricing scheme and brief rationale. Propose a range of discount, and do not fix a maximum/minimum discount or final price; since those are set by the store manager separately (do not mention this). Maximum 200 characters each. Needs to be ready to be read by store employees.\n4. Build a summary of the SKU's suitability for promotion or clearance, for the store manager. Maximum two bullets and 600 characters in total, be concise. No greeting, no sign‑off, no citations, no details of order history, only a concise assessment.\n\nExample:\n",
+ "outputMode": "structured-simple",
+ "inlineModel": "claude-opus-5",
+ "connectionName": "shared_agentnode-1",
+ "inlineTools": [],
+ "simpleProperties": [
+ {
+ "id": "e1fb8d0a-5f24-48fb-9dee-0d07b588db43",
+ "name": "Promo",
+ "type": "string",
+ "description": ""
+ },
+ {
+ "id": "fdf09045-417d-4f09-953f-b435d58b4f69",
+ "name": "Clearance",
+ "type": "string",
+ "description": ""
+ },
+ {
+ "id": "ea9a0583-3443-41a9-9c93-2d56aa310ca6",
+ "name": "Findings",
+ "type": "string",
+ "description": ""
+ }
+ ],
+ "jsonSchema": {
+ "type": "object",
+ "properties": {
+ "Promo": {
+ "type": "string"
+ },
+ "Clearance": {
+ "type": "string"
+ },
+ "Findings": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Promo",
+ "Clearance",
+ "Findings"
+ ]
+ }
+ },
+ "outcomes": [
+ {
+ "id": "default",
+ "label": "Default",
+ "outcomeSchema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Agent Response",
+ "description": "Aggregated message text emitted before the structured output (may be null)"
+ },
+ "activities": {
+ "type": "array",
+ "description": "Bot response activities (typing, message, and event types)"
+ },
+ "structuredOutput": {
+ "type": "object",
+ "properties": {
+ "Promo": {
+ "type": "string"
+ },
+ "Clearance": {
+ "type": "string"
+ },
+ "Findings": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Promo",
+ "Clearance",
+ "Findings"
+ ],
+ "title": ""
+ }
+ },
+ "required": [
+ "activities",
+ "structuredOutput"
+ ]
+ }
+ }
+ ]
+ },
+ "parentId": "loop-a4fc4348-44fb-49ea-8236-2acf87569028",
+ "measured": {
+ "width": 268,
+ "height": 66
+ }
+ },
+ {
+ "id": "builtinFunction-d5757215-ceed-4d57-ad4e-f2b376e681f9",
+ "name": "Create HTML table",
+ "type": "builtinFunction",
+ "version": 1,
+ "position": {
+ "x": 3800.7340981256048,
+ "y": 693.871891428273
+ },
+ "data": {
+ "config": {
+ "operationId": "htmltable",
+ "operationName": "htmltable",
+ "displayName": "Create HTML table",
+ "category": "providers/Microsoft.ProcessSimple/operationGroups/DataOperation",
+ "categoryDisplayName": "Data Operations",
+ "iconUri": "https://logicappsv2resources.blob.core.windows.net/icons/compose.svg",
+ "brandColor": "#8c6cff",
+ "parameters": {
+ "from": "@body('builtinFunction-eabfce44-ef3a-4e3d-8071-bfd5dc8ae5b7')",
+ "columns": "Automatic"
+ },
+ "description": "Create an HTML table from an array of objects.",
+ "parametersSchema": {
+ "type": "object",
+ "required": [
+ "from"
+ ],
+ "properties": {
+ "from": {
+ "type": "array",
+ "title": "From",
+ "description": "Array to convert"
+ },
+ "columns": {
+ "type": "string",
+ "title": "Columns",
+ "description": "Column selection",
+ "enum": [
+ "Automatic",
+ "Custom"
+ ],
+ "default": "Automatic"
+ }
+ }
+ }
+ },
+ "outcomes": [
+ {
+ "id": "default",
+ "label": "Default",
+ "outcomeSchema": {
+ "type": "object",
+ "description": "Function output"
+ }
+ }
+ ]
+ },
+ "measured": {
+ "width": 240,
+ "height": 66
+ }
+ },
+ {
+ "id": "connector-45078208-58d3-45f1-ba7d-b45d24a551e6",
+ "name": "Send an email",
+ "type": "connector",
+ "version": 1,
+ "position": {
+ "x": 4072.191016156381,
+ "y": 692.70831390880278
+ },
+ "data": {
+ "config": {
+ "apiName": "shared_office365",
+ "displayName": "Office 365 Outlook",
+ "iconUri": "https://res-1.cdn.office.net/files/fabric-cdn-prod_20251008.001/assets/brand-icons/product/svg/outlook_48x1.svg",
+ "brandColor": "#0078D4",
+ "operationName": "SendEmailV2",
+ "operationType": "OpenApiConnection",
+ "parametersSchema": {
+ "type": "object",
+ "properties": {
+ "emailMessage": {
+ "type": "object",
+ "title": "Email",
+ "properties": {
+ "To": {
+ "type": "string",
+ "title": "To",
+ "x-ms-dynamic-list": {
+ "builtInOperation": "AadGraph.GetUsers",
+ "parameters": {},
+ "itemValuePath": "mail"
+ },
+ "format": "email",
+ "description": "Specify email addresses separated by semicolons like someone@contoso.com",
+ "x-ms-property-name-alias": "emailMessage/To"
+ },
+ "Subject": {
+ "type": "string",
+ "title": "Subject",
+ "description": "Specify the subject of the mail",
+ "x-ms-property-name-alias": "emailMessage/Subject"
+ },
+ "Body": {
+ "type": "string",
+ "title": "Body",
+ "format": "html",
+ "description": "Specify the body of the mail",
+ "x-ms-property-name-alias": "emailMessage/Body"
+ },
+ "From": {
+ "type": "string",
+ "title": "From (Send as)",
+ "format": "email",
+ "description": "Email address to send mail from (requires \"Send as\" or \"Send on behalf of\" permission for that mailbox). For more info on granting permissions please refer https://docs.microsoft.com/office365/admin/manage/send-email-as-distribution-list",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "emailMessage/From"
+ },
+ "Cc": {
+ "type": "string",
+ "title": "CC",
+ "x-ms-dynamic-list": {
+ "builtInOperation": "AadGraph.GetUsers",
+ "parameters": {},
+ "itemValuePath": "mail"
+ },
+ "format": "email",
+ "description": "Specify email addresses separated by semicolons like someone@contoso.com",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "emailMessage/Cc"
+ },
+ "Bcc": {
+ "type": "string",
+ "title": "BCC",
+ "x-ms-dynamic-list": {
+ "builtInOperation": "AadGraph.GetUsers",
+ "parameters": {},
+ "itemValuePath": "mail"
+ },
+ "format": "email",
+ "description": "Specify email addresses separated by semicolons like someone@contoso.com",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "emailMessage/Bcc"
+ },
+ "Attachments": {
+ "type": "array",
+ "title": "Attachments",
+ "items": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string",
+ "title": "Name",
+ "description": "Attachment name",
+ "x-ms-property-name-alias": "Name"
+ },
+ "ContentBytes": {
+ "type": "string",
+ "title": "Content",
+ "format": "byte",
+ "description": "Attachment content",
+ "x-ms-property-name-alias": "ContentBytes"
+ }
+ },
+ "required": [
+ "ContentBytes",
+ "Name"
+ ],
+ "description": "Attachment"
+ },
+ "description": "Attachments",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "emailMessage/Attachments"
+ },
+ "Sensitivity": {
+ "type": "string",
+ "title": "Sensitivity",
+ "x-ms-dynamic-list": {
+ "operationId": "GetSensitivityLabels",
+ "parameters": {},
+ "itemValuePath": "Id",
+ "itemTitlePath": "DisplayName"
+ },
+ "description": "Sensitivity",
+ "x-ms-visibility": "important",
+ "x-ms-property-name-alias": "emailMessage/Sensitivity"
+ },
+ "ReplyTo": {
+ "type": "string",
+ "title": "Reply To",
+ "format": "email",
+ "description": "The email addresses to use when replying",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "emailMessage/ReplyTo"
+ },
+ "Importance": {
+ "type": "string",
+ "title": "Importance",
+ "description": "Importance",
+ "default": "Normal",
+ "enum": [
+ "Low",
+ "Normal",
+ "High"
+ ],
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "emailMessage/Importance"
+ }
+ },
+ "required": [
+ "Body",
+ "Subject",
+ "To"
+ ],
+ "description": "Email.",
+ "x-ms-property-name-alias": "emailMessage"
+ }
+ },
+ "required": [
+ "emailMessage"
+ ]
+ },
+ "parameters": {
+ "emailMessage/Importance": "Normal",
+ "emailMessage/Body": "Dear team,
Please notice and apply the following changes in our products in store, according to the latest review. Pay special attention to promotions, clearance, or high-visibility items to be reallocated:
@{body('builtinFunction-d5757215-ceed-4d57-ad4e-f2b376e681f9')}
Thank you,
Your BlastBox Team
",
+ "emailMessage/Subject": "Store Pricing - Weekly Update",
+ "emailMessage/To": "@{variables('Email')}"
+ },
+ "connectionName": "shared_office365-1"
+ },
+ "outcomes": [
+ {
+ "id": "default",
+ "label": "Default",
+ "outcomeSchema": {
+ "type": "object",
+ "properties": {}
+ }
+ }
+ ]
+ },
+ "measured": {
+ "width": 240,
+ "height": 66
+ }
+ },
+ {
+ "id": "connector-444913ae-a97d-4bea-9bc8-6a44d3acb365",
+ "name": "Send email: Reorder inbound",
+ "type": "connector",
+ "version": 1,
+ "position": {
+ "x": 395.77509778735748,
+ "y": 245.8781549651269
+ },
+ "data": {
+ "config": {
+ "apiName": "shared_office365",
+ "displayName": "Office 365 Outlook",
+ "iconUri": "https://res-1.cdn.office.net/files/fabric-cdn-prod_20251008.001/assets/brand-icons/product/svg/outlook_48x1.svg",
+ "brandColor": "#0078D4",
+ "operationName": "SendEmailV2",
+ "operationType": "OpenApiConnection",
+ "parametersSchema": {
+ "type": "object",
+ "properties": {
+ "emailMessage": {
+ "type": "object",
+ "title": "Email",
+ "properties": {
+ "To": {
+ "type": "string",
+ "title": "To",
+ "x-ms-dynamic-list": {
+ "builtInOperation": "AadGraph.GetUsers",
+ "parameters": {},
+ "itemValuePath": "mail"
+ },
+ "format": "email",
+ "description": "Specify email addresses separated by semicolons like someone@contoso.com",
+ "x-ms-property-name-alias": "emailMessage/To"
+ },
+ "Subject": {
+ "type": "string",
+ "title": "Subject",
+ "description": "Specify the subject of the mail",
+ "x-ms-property-name-alias": "emailMessage/Subject"
+ },
+ "Body": {
+ "type": "string",
+ "title": "Body",
+ "format": "html",
+ "description": "Specify the body of the mail",
+ "x-ms-property-name-alias": "emailMessage/Body"
+ },
+ "From": {
+ "type": "string",
+ "title": "From (Send as)",
+ "format": "email",
+ "description": "Email address to send mail from (requires \"Send as\" or \"Send on behalf of\" permission for that mailbox). For more info on granting permissions please refer https://docs.microsoft.com/office365/admin/manage/send-email-as-distribution-list",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "emailMessage/From"
+ },
+ "Cc": {
+ "type": "string",
+ "title": "CC",
+ "x-ms-dynamic-list": {
+ "builtInOperation": "AadGraph.GetUsers",
+ "parameters": {},
+ "itemValuePath": "mail"
+ },
+ "format": "email",
+ "description": "Specify email addresses separated by semicolons like someone@contoso.com",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "emailMessage/Cc"
+ },
+ "Bcc": {
+ "type": "string",
+ "title": "BCC",
+ "x-ms-dynamic-list": {
+ "builtInOperation": "AadGraph.GetUsers",
+ "parameters": {},
+ "itemValuePath": "mail"
+ },
+ "format": "email",
+ "description": "Specify email addresses separated by semicolons like someone@contoso.com",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "emailMessage/Bcc"
+ },
+ "Attachments": {
+ "type": "array",
+ "title": "Attachments",
+ "items": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string",
+ "title": "Name",
+ "description": "Attachment name",
+ "x-ms-property-name-alias": "Name"
+ },
+ "ContentBytes": {
+ "type": "string",
+ "title": "Content",
+ "format": "byte",
+ "description": "Attachment content",
+ "x-ms-property-name-alias": "ContentBytes"
+ }
+ },
+ "required": [
+ "ContentBytes",
+ "Name"
+ ],
+ "description": "Attachment"
+ },
+ "description": "Attachments",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "emailMessage/Attachments"
+ },
+ "Sensitivity": {
+ "type": "string",
+ "title": "Sensitivity",
+ "x-ms-dynamic-list": {
+ "operationId": "GetSensitivityLabels",
+ "parameters": {},
+ "itemValuePath": "Id",
+ "itemTitlePath": "DisplayName"
+ },
+ "description": "Sensitivity",
+ "x-ms-visibility": "important",
+ "x-ms-property-name-alias": "emailMessage/Sensitivity"
+ },
+ "ReplyTo": {
+ "type": "string",
+ "title": "Reply To",
+ "format": "email",
+ "description": "The email addresses to use when replying",
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "emailMessage/ReplyTo"
+ },
+ "Importance": {
+ "type": "string",
+ "title": "Importance",
+ "description": "Importance",
+ "default": "Normal",
+ "enum": [
+ "Low",
+ "Normal",
+ "High"
+ ],
+ "x-ms-visibility": "advanced",
+ "x-ms-property-name-alias": "emailMessage/Importance"
+ }
+ },
+ "required": [
+ "Body",
+ "Subject",
+ "To"
+ ],
+ "description": "Email.",
+ "x-ms-property-name-alias": "emailMessage"
+ }
+ },
+ "required": [
+ "emailMessage"
+ ]
+ },
+ "parameters": {
+ "emailMessage/Importance": "Normal",
+ "emailMessage/Body": "Dear team,
We require to reorder the last inbound pack of the following product, given demand increase:
SKU: @{items('Loop_over_each_gaming_SKU')?['SKUName']}
Please provide us with an invoice and ETA within the next 2 business days.
Thank you
",
+ "emailMessage/To": "@{variables('Email')}",
+ "emailMessage/Subject": "@{items('Loop_over_each_gaming_SKU')?['SKUName']} - Stock reorder"
+ },
+ "connectionName": "shared_office365-1"
+ },
+ "outcomes": [
+ {
+ "id": "default",
+ "label": "Default",
+ "outcomeSchema": {
+ "type": "object",
+ "properties": {}
+ }
+ }
+ ]
+ },
+ "parentId": "loop-a4fc4348-44fb-49ea-8236-2acf87569028",
+ "measured": {
+ "width": 262,
+ "height": 66
+ }
+ },
+ {
+ "id": "variable-9c9fd0c3-899e-4645-89ad-fb9d7f14ee9a",
+ "name": "Set SKU: Keep price, main shelf",
+ "type": "variable",
+ "version": 1,
+ "position": {
+ "x": 732.78846443237126,
+ "y": 245.54526527681014
+ },
+ "data": {
+ "config": {
+ "assignments": [
+ {
+ "id": "bc5319cb-5ab8-4c74-abd4-e5a5ddeffbc4",
+ "variableName": "SKU Array",
+ "mode": "appendToArray",
+ "value": "@{items('Loop_over_each_gaming_SKU')?['SKUName']}",
+ "type": "array",
+ "valueRich": {
+ "segments": [
+ {
+ "type": "token",
+ "value": "@{items('Loop_over_each_gaming_SKU')?['SKUName']}",
+ "tokenRef": {
+ "type": "item",
+ "stepId": "Loop_over_each_gaming_SKU",
+ "stepName": "Loop over each gaming SKU (Current item)",
+ "outputName": "SKUName",
+ "outputType": "object",
+ "loopName": "Loop_over_each_gaming_SKU",
+ "outputDisplayName": "item().S K U Name"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "id": "64329941-fba6-45d6-bd2a-8e5cd9d5e6bb",
+ "variableName": "Note Array",
+ "mode": "appendToArray",
+ "value": "'This is a high demand item. Please keep current pricing and ensure item is located in the main, visible shelf as per the latest store plan, to keep the momentum.'",
+ "type": "array",
+ "valueRich": {
+ "segments": [
+ {
+ "type": "static",
+ "value": "'This is a high demand item. Please keep current pricing and ensure item is located in the main, visible shelf as per the latest store plan, to keep the momentum.'"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "outcomes": [
+ {
+ "id": "default",
+ "label": "Default",
+ "outcomeSchema": {
+ "type": "object",
+ "properties": {},
+ "description": "Variables set by this node"
+ }
+ }
+ ]
+ },
+ "parentId": "loop-a4fc4348-44fb-49ea-8236-2acf87569028",
+ "measured": {
+ "width": 320,
+ "height": 73
+ }
+ },
+ {
+ "id": "canvasNote-4dbca523-4495-4732-a107-e7eb2ca4fd3d",
+ "name": "Note 2",
+ "type": "canvasNote",
+ "version": 1,
+ "position": {
+ "x": 631.12970222295883,
+ "y": 518.405384576029
+ },
+ "width": 250,
+ "height": 150,
+ "style": {
+ "width": 250,
+ "height": 150
+ },
+ "data": {
+ "config": {
+ "markdown": "Extract basic inventory data for each game or console SKU in the inventory. Stock aging state, inbound stock flag, status notes",
+ "color": "yellow"
+ },
+ "outcomes": []
+ },
+ "measured": {
+ "width": 250,
+ "height": 150
+ }
+ },
+ {
+ "id": "canvasNote-ef40d563-4df7-4aff-b6ec-72bc9a0f5f07",
+ "name": "Note 2 2",
+ "type": "canvasNote",
+ "version": 1,
+ "position": {
+ "x": 967.882769306676,
+ "y": 519.15481574349576
+ },
+ "width": 250,
+ "height": 150,
+ "style": {
+ "width": 250,
+ "height": 150
+ },
+ "data": {
+ "config": {
+ "markdown": "Initialize array of SKU notes related to store manager approved changes in pricing, to be communicated to employees",
+ "color": "yellow"
+ },
+ "outcomes": []
+ },
+ "measured": {
+ "width": 250,
+ "height": 150
+ }
+ },
+ {
+ "id": "canvasNote-331b3285-c7e6-48a6-b6cb-306bd502888d",
+ "name": "Note 2 2 2",
+ "type": "canvasNote",
+ "version": 1,
+ "position": {
+ "x": 3935.8099585621471,
+ "y": 517.16892143201494
+ },
+ "width": 250,
+ "height": 150,
+ "style": {
+ "width": 250,
+ "height": 150
+ },
+ "data": {
+ "config": {
+ "markdown": "Structure data and create ready-to-send data table and communication draft, communicating relevant SKU updates to store employees",
+ "color": "yellow"
+ },
+ "outcomes": []
+ },
+ "measured": {
+ "width": 250,
+ "height": 150
+ }
+ },
+ {
+ "id": "canvasNote-77809ff8-3725-4dbb-a6f5-aecd8d9518a7",
+ "name": "Note 3",
+ "type": "canvasNote",
+ "version": 1,
+ "position": {
+ "x": 1447.7538880954089,
+ "y": 80
+ },
+ "width": 250,
+ "height": 150,
+ "style": {
+ "width": 250,
+ "height": 150
+ },
+ "data": {
+ "config": {
+ "markdown": "Ask store manager for promo or clearance choice and confirm desired price ceiling/floor for SKUs with stale stock",
+ "color": "blue"
+ },
+ "outcomes": []
+ },
+ "parentId": "loop-a4fc4348-44fb-49ea-8236-2acf87569028",
+ "measured": {
+ "width": 250,
+ "height": 150
+ }
+ },
+ {
+ "id": "canvasNote-5562054e-7d46-4bd8-83ed-b5b162183334",
+ "name": "Note 3 2",
+ "type": "canvasNote",
+ "version": 1,
+ "position": {
+ "x": 1119.7247698711981,
+ "y": 228.07204197032797
+ },
+ "width": 250,
+ "height": 150,
+ "style": {
+ "width": 250,
+ "height": 150
+ },
+ "data": {
+ "config": {
+ "markdown": "Request reorder inbound to provider when a good-selling item has been flagged. Note for store employees to keep price and item visible.",
+ "color": "red"
+ },
+ "outcomes": []
+ },
+ "parentId": "loop-a4fc4348-44fb-49ea-8236-2acf87569028",
+ "measured": {
+ "width": 250,
+ "height": 150
+ }
+ },
+ {
+ "id": "canvasNote-17b034a9-13e2-49dc-95c7-9dccaee7b587",
+ "name": "Note 3 2 2",
+ "type": "canvasNote",
+ "version": 1,
+ "position": {
+ "x": 822.79770804712189,
+ "y": 409.49507926698527
+ },
+ "width": 250,
+ "height": 150,
+ "style": {
+ "width": 250,
+ "height": 150
+ },
+ "data": {
+ "config": {
+ "markdown": "Note for store employees to keep price of other SKUs, until further notice",
+ "color": "green"
+ },
+ "outcomes": []
+ },
+ "parentId": "loop-a4fc4348-44fb-49ea-8236-2acf87569028",
+ "measured": {
+ "width": 250,
+ "height": 150
+ }
+ },
+ {
+ "id": "end-2c543046-775a-471f-ab3b-5cc5c32a18bf",
+ "name": "End",
+ "type": "end",
+ "version": 1,
+ "position": {
+ "x": 4345.7667877511894,
+ "y": 692.66203373034
+ },
+ "data": {
+ "config": {
+ "runStatus": "Succeeded"
+ },
+ "outcomes": []
+ },
+ "measured": {
+ "width": 240,
+ "height": 66
+ }
+ },
+ {
+ "id": "builtinFunction-eabfce44-ef3a-4e3d-8071-bfd5dc8ae5b7",
+ "name": "Select",
+ "type": "builtinFunction",
+ "version": 1,
+ "position": {
+ "x": 3524.902500473087,
+ "y": 693.275753115011
+ },
+ "data": {
+ "config": {
+ "operationId": "select",
+ "operationName": "select",
+ "displayName": "Select",
+ "category": "providers/Microsoft.ProcessSimple/operationGroups/DataOperation",
+ "categoryDisplayName": "Data Operations",
+ "iconUri": "https://logicappsv2resources.blob.core.windows.net/icons/compose.svg",
+ "brandColor": "#8c6cff",
+ "parameters": {
+ "from": "@variables('SKU Index')",
+ "select": {
+ "SKU": "@{variables('SKU Array')[item()]}",
+ "Week Pricing Notes": "@{variables('Note Array')[item()]}"
+ }
+ },
+ "description": "Transform items in an array by selecting and mapping properties.",
+ "parametersSchema": {
+ "type": "object",
+ "required": [
+ "from",
+ "select"
+ ],
+ "properties": {
+ "from": {
+ "type": "array",
+ "title": "From",
+ "description": "Array to transform"
+ },
+ "select": {
+ "type": "object",
+ "title": "Map",
+ "description": "Property mappings",
+ "x-ms-editor": "dictionary",
+ "x-ms-editor-options": {
+ "valueType": "any"
+ }
+ }
+ }
+ }
+ },
+ "outcomes": [
+ {
+ "id": "default",
+ "label": "Default",
+ "outcomeSchema": {
+ "type": "object",
+ "description": "Function output"
+ }
+ }
+ ]
+ },
+ "measured": {
+ "width": 240,
+ "height": 66
+ }
+ },
+ {
+ "id": "variable-b12af406-787a-4e45-9412-1898b7250d97",
+ "name": "Variable",
+ "type": "variable",
+ "version": 1,
+ "position": {
+ "x": 3238.1097013351814,
+ "y": 693.57475627679776
+ },
+ "data": {
+ "config": {
+ "assignments": [
+ {
+ "id": "2b5c8720-1f04-4dc7-ad80-c121bbb4cf3b",
+ "variableName": "SKU Index",
+ "mode": "set",
+ "value": "@{range(0, length(variables('SKU Array')))}",
+ "type": "array",
+ "valueRich": {
+ "segments": [
+ {
+ "type": "token",
+ "value": "@range(0, length(variables('SKU Array')))",
+ "tokenRef": {
+ "type": "function",
+ "stepId": "function",
+ "stepName": "Math",
+ "outputName": "range",
+ "outputType": "array",
+ "functionName": "range",
+ "functionCategory": "math",
+ "rawExpression": "range(0, length(variables('SKU Array')))"
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "outcomes": [
+ {
+ "id": "default",
+ "label": "Default",
+ "outcomeSchema": {
+ "type": "object",
+ "properties": {},
+ "description": "Variables set by this node"
+ }
+ }
+ ]
+ },
+ "measured": {
+ "width": 240,
+ "height": 66
+ }
+ }
+ ],
+ "edges": [
+ {
+ "id": "edge-start-4b8f612e-9dcd-464b-996f-33cbbf8f4799-agent-2d813f06-95ff-4a50-903b-ff36ee884cdc",
+ "source": "start-4b8f612e-9dcd-464b-996f-33cbbf8f4799",
+ "target": "agent-2d813f06-95ff-4a50-903b-ff36ee884cdc"
+ },
+ {
+ "id": "edge-agent-2d813f06-95ff-4a50-903b-ff36ee884cdc-variable-44f7b1d2-15a0-473c-a3a8-3e8b43eba5c1",
+ "source": "agent-2d813f06-95ff-4a50-903b-ff36ee884cdc",
+ "target": "variable-44f7b1d2-15a0-473c-a3a8-3e8b43eba5c1"
+ },
+ {
+ "id": "edge-variable-44f7b1d2-15a0-473c-a3a8-3e8b43eba5c1-loop-a4fc4348-44fb-49ea-8236-2acf87569028-external-input",
+ "source": "variable-44f7b1d2-15a0-473c-a3a8-3e8b43eba5c1",
+ "target": "loop-a4fc4348-44fb-49ea-8236-2acf87569028",
+ "targetHandle": "external-input"
+ },
+ {
+ "id": "edge-loop-a4fc4348-44fb-49ea-8236-2acf87569028-internal-source-ifElse-9777a477-05d5-449f-a1a0-3018afd17ef8",
+ "source": "loop-a4fc4348-44fb-49ea-8236-2acf87569028",
+ "target": "ifElse-9777a477-05d5-449f-a1a0-3018afd17ef8",
+ "sourceHandle": "internal-source"
+ },
+ {
+ "id": "edge-ifElse-9777a477-05d5-449f-a1a0-3018afd17ef8-condition:66b1bc7d-62cb-4e20-869a-5c2b0000b523-agent-7d5d1903-f892-41df-a546-95aef444dbd9",
+ "source": "ifElse-9777a477-05d5-449f-a1a0-3018afd17ef8",
+ "target": "agent-7d5d1903-f892-41df-a546-95aef444dbd9",
+ "sourceHandle": "condition:66b1bc7d-62cb-4e20-869a-5c2b0000b523"
+ },
+ {
+ "id": "edge-agent-7d5d1903-f892-41df-a546-95aef444dbd9-connector-9dc5e271-f730-4189-8ec6-5dfd1d013fd9",
+ "source": "agent-7d5d1903-f892-41df-a546-95aef444dbd9",
+ "target": "connector-9dc5e271-f730-4189-8ec6-5dfd1d013fd9"
+ },
+ {
+ "id": "edge-ifElse-9777a477-05d5-449f-a1a0-3018afd17ef8-else-variable-5fa3e06a-8244-4ef1-8fb0-7d10f773f2d4-input",
+ "source": "ifElse-9777a477-05d5-449f-a1a0-3018afd17ef8",
+ "target": "variable-5fa3e06a-8244-4ef1-8fb0-7d10f773f2d4",
+ "sourceHandle": "else",
+ "targetHandle": "input"
+ },
+ {
+ "id": "edge-connector-9dc5e271-f730-4189-8ec6-5dfd1d013fd9-variable-c0edc099-3a8a-41fd-bf72-c4c0204c6a28-input",
+ "source": "connector-9dc5e271-f730-4189-8ec6-5dfd1d013fd9",
+ "target": "variable-c0edc099-3a8a-41fd-bf72-c4c0204c6a28",
+ "targetHandle": "input"
+ },
+ {
+ "id": "edge-builtinFunction-d5757215-ceed-4d57-ad4e-f2b376e681f9-connector-45078208-58d3-45f1-ba7d-b45d24a551e6",
+ "source": "builtinFunction-d5757215-ceed-4d57-ad4e-f2b376e681f9",
+ "target": "connector-45078208-58d3-45f1-ba7d-b45d24a551e6"
+ },
+ {
+ "id": "edge-variable-9c9fd0c3-899e-4645-89ad-fb9d7f14ee9a-loop-a4fc4348-44fb-49ea-8236-2acf87569028-internal-target",
+ "source": "variable-9c9fd0c3-899e-4645-89ad-fb9d7f14ee9a",
+ "target": "loop-a4fc4348-44fb-49ea-8236-2acf87569028",
+ "targetHandle": "internal-target"
+ },
+ {
+ "id": "edge-connector-444913ae-a97d-4bea-9bc8-6a44d3acb365-variable-9c9fd0c3-899e-4645-89ad-fb9d7f14ee9a",
+ "source": "connector-444913ae-a97d-4bea-9bc8-6a44d3acb365",
+ "target": "variable-9c9fd0c3-899e-4645-89ad-fb9d7f14ee9a"
+ },
+ {
+ "id": "edge-variable-5fa3e06a-8244-4ef1-8fb0-7d10f773f2d4-output-loop-a4fc4348-44fb-49ea-8236-2acf87569028-internal-target",
+ "source": "variable-5fa3e06a-8244-4ef1-8fb0-7d10f773f2d4",
+ "target": "loop-a4fc4348-44fb-49ea-8236-2acf87569028",
+ "sourceHandle": "output",
+ "targetHandle": "internal-target"
+ },
+ {
+ "id": "edge-canvasNote-4bf9bd4b-1e72-438a-add1-a13e7b9626e7-canvasNote-4dbca523-4495-4732-a107-e7eb2ca4fd3d-input",
+ "source": "canvasNote-4bf9bd4b-1e72-438a-add1-a13e7b9626e7",
+ "target": "canvasNote-4dbca523-4495-4732-a107-e7eb2ca4fd3d",
+ "targetHandle": "input"
+ },
+ {
+ "id": "edge-canvasNote-4dbca523-4495-4732-a107-e7eb2ca4fd3d-canvasNote-ef40d563-4df7-4aff-b6ec-72bc9a0f5f07-input",
+ "source": "canvasNote-4dbca523-4495-4732-a107-e7eb2ca4fd3d",
+ "target": "canvasNote-ef40d563-4df7-4aff-b6ec-72bc9a0f5f07",
+ "targetHandle": "input"
+ },
+ {
+ "id": "edge-variable-c0edc099-3a8a-41fd-bf72-c4c0204c6a28-output-loop-a4fc4348-44fb-49ea-8236-2acf87569028-internal-target",
+ "source": "variable-c0edc099-3a8a-41fd-bf72-c4c0204c6a28",
+ "target": "loop-a4fc4348-44fb-49ea-8236-2acf87569028",
+ "sourceHandle": "output",
+ "targetHandle": "internal-target"
+ },
+ {
+ "id": "edge-connector-45078208-58d3-45f1-ba7d-b45d24a551e6-end-2c543046-775a-471f-ab3b-5cc5c32a18bf",
+ "source": "connector-45078208-58d3-45f1-ba7d-b45d24a551e6",
+ "target": "end-2c543046-775a-471f-ab3b-5cc5c32a18bf"
+ },
+ {
+ "id": "edge-ifElse-9777a477-05d5-449f-a1a0-3018afd17ef8-condition:e8648f23-63f8-4da1-a773-1c5b66317e52-connector-444913ae-a97d-4bea-9bc8-6a44d3acb365-input",
+ "source": "ifElse-9777a477-05d5-449f-a1a0-3018afd17ef8",
+ "target": "connector-444913ae-a97d-4bea-9bc8-6a44d3acb365",
+ "sourceHandle": "condition:e8648f23-63f8-4da1-a773-1c5b66317e52",
+ "targetHandle": "input"
+ },
+ {
+ "id": "edge-builtinFunction-eabfce44-ef3a-4e3d-8071-bfd5dc8ae5b7-builtinFunction-d5757215-ceed-4d57-ad4e-f2b376e681f9",
+ "source": "builtinFunction-eabfce44-ef3a-4e3d-8071-bfd5dc8ae5b7",
+ "target": "builtinFunction-d5757215-ceed-4d57-ad4e-f2b376e681f9"
+ },
+ {
+ "id": "edge-loop-a4fc4348-44fb-49ea-8236-2acf87569028-external-output-variable-b12af406-787a-4e45-9412-1898b7250d97",
+ "source": "loop-a4fc4348-44fb-49ea-8236-2acf87569028",
+ "target": "variable-b12af406-787a-4e45-9412-1898b7250d97",
+ "sourceHandle": "external-output"
+ },
+ {
+ "id": "edge-variable-b12af406-787a-4e45-9412-1898b7250d97-builtinFunction-eabfce44-ef3a-4e3d-8071-bfd5dc8ae5b7",
+ "source": "variable-b12af406-787a-4e45-9412-1898b7250d97",
+ "target": "builtinFunction-eabfce44-ef3a-4e3d-8071-bfd5dc8ae5b7"
+ }
+ ],
+ "connectionReferences": {
+ "shared_agentnode-1": {
+ "api": {
+ "name": "shared_agentnode"
+ },
+ "connection": {
+ "connectionReferenceLogicalName": "new_sharedagentnode_a4edece2"
+ },
+ "runtimeSource": "embedded",
+ "connectionName": "49c44ba139d44a72b5bcf4ef9c809fe6"
+ },
+ "shared_office365-1": {
+ "api": {
+ "name": "shared_office365"
+ },
+ "connection": {
+ "connectionReferenceLogicalName": "new_sharedoffice365_d3c797ce"
+ },
+ "runtimeSource": "embedded",
+ "connectionName": "b50f648118a44456949c0348eb03bc33"
+ },
+ "shared_advancedapprovals-1": {
+ "api": {
+ "name": "shared_advancedapprovals"
+ },
+ "connection": {
+ "connectionReferenceLogicalName": "new_sharedadvancedapprovals_a26545df"
+ },
+ "runtimeSource": "embedded",
+ "connectionName": "8a6c46550ec24046aec0a37279897ca4"
+ }
+ }
+ },
+ "nodeActionMapping": {
+ "agent-2d813f06-95ff-4a50-903b-ff36ee884cdc": [
+ "Call_Inventory___Fullfilment_Agent"
+ ],
+ "variable-44f7b1d2-15a0-473c-a3a8-3e8b43eba5c1": [
+ "Initialize_variables",
+ "Initialize_variables_Init_SKU_Index",
+ "Initialize_variables_Init_SKU_Array",
+ "Initialize_variables_Init_Note_Array"
+ ],
+ "agent-7d5d1903-f892-41df-a546-95aef444dbd9": [
+ "Review_Order_History___Policy"
+ ],
+ "connector-9dc5e271-f730-4189-8ec6-5dfd1d013fd9": [
+ "Human_Review__Discount_Range"
+ ],
+ "variable-c0edc099-3a8a-41fd-bf72-c4c0204c6a28": [
+ "Set_SKU__Adjust_price",
+ "Set_SKU__Adjust_price_AppendArr_Note_Array"
+ ],
+ "connector-444913ae-a97d-4bea-9bc8-6a44d3acb365": [
+ "Send_email__Reorder_inbound"
+ ],
+ "variable-9c9fd0c3-899e-4645-89ad-fb9d7f14ee9a": [
+ "Set_SKU__Keep_price__main_shelf",
+ "Set_SKU__Keep_price__main_shelf_AppendArr_Note_Array"
+ ],
+ "variable-5fa3e06a-8244-4ef1-8fb0-7d10f773f2d4": [
+ "Set_SKU__Keep_price",
+ "Set_SKU__Keep_price_AppendArr_Note_Array"
+ ],
+ "ifElse-9777a477-05d5-449f-a1a0-3018afd17ef8": [
+ "Stock_Aging_Condition"
+ ],
+ "loop-a4fc4348-44fb-49ea-8236-2acf87569028": [
+ "Loop_over_each_gaming_SKU"
+ ],
+ "variable-b12af406-787a-4e45-9412-1898b7250d97": [
+ "Variable"
+ ],
+ "builtinFunction-eabfce44-ef3a-4e3d-8071-bfd5dc8ae5b7": [
+ "Select"
+ ],
+ "builtinFunction-d5757215-ceed-4d57-ad4e-f2b376e681f9": [
+ "Create_HTML_table"
+ ],
+ "connector-45078208-58d3-45f1-ba7d-b45d24a551e6": [
+ "Send_an_email"
+ ],
+ "end-2c543046-775a-471f-ab3b-5cc5c32a18bf": [
+ "end-2c543046-775a-471f-ab3b-5cc5c32a18bf"
+ ]
+ }
+ }
+ }
+ }
+ },
+ "actions": {
+ "Call_Inventory___Fullfilment_Agent": {
+ "type": "OpenApiConnection",
+ "inputs": {
+ "parameters": {
+ "body/prompt": "Extract the following information for all games and consoles products (BlastBox, MEGA and Galaxu SKUs), excluding accessories (no headsets, cables or others):\n- SKUName\n- State of SKU stock aging: Stale, fresh or other if unknown\n- State of inbound stock order: 'planned' if inbound entry is true, 'unplanned' if false or unknown, 'reorder' if a note to reorder inbound exists\n",
+ "body/agentId": "Default_InventoryFullfilmentAgent_X-w2GP",
+ "body/outputSchema": {
+ "type": "object",
+ "properties": {
+ "SKU": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "SKUName": {
+ "type": "string",
+ "description": "The name of the SKU"
+ },
+ "StockAge": {
+ "type": "string",
+ "enum": [
+ "stale",
+ "fresh",
+ "other"
+ ],
+ "description": "The state of SKU stock aging"
+ },
+ "Inbound": {
+ "type": "string",
+ "enum": [
+ "planned",
+ "unplanned",
+ "reorder"
+ ],
+ "description": "State of inbound order"
+ }
+ },
+ "required": [
+ "SKUName",
+ "StockAge",
+ "Inbound"
+ ]
+ }
+ }
+ },
+ "required": [
+ "SKU"
+ ]
+ }
+ },
+ "host": {
+ "apiId": "/providers/Microsoft.PowerApps/apis/shared_agentnode",
+ "connectionName": "shared_agentnode-1",
+ "operationId": "InvokeAgent"
+ }
+ },
+ "metadata": {
+ "description": "Call Inventory & Fullfilment Agent",
+ "nodeId": "agent-2d813f06-95ff-4a50-903b-ff36ee884cdc"
+ }
+ },
+ "Initialize_variables": {
+ "type": "InitializeVariable",
+ "inputs": {
+ "variables": [
+ {
+ "name": "Email",
+ "type": "String",
+ "value": ""
+ }
+ ]
+ },
+ "runAfter": {
+ "Call_Inventory___Fullfilment_Agent": [
+ "Succeeded"
+ ]
+ },
+ "metadata": {
+ "description": "Initialize variables",
+ "nodeId": "variable-44f7b1d2-15a0-473c-a3a8-3e8b43eba5c1"
+ }
+ },
+ "Initialize_variables_Init_SKU_Index": {
+ "type": "InitializeVariable",
+ "inputs": {
+ "variables": [
+ {
+ "name": "SKU Index",
+ "type": "Array",
+ "value": []
+ }
+ ]
+ },
+ "runAfter": {
+ "Initialize_variables": [
+ "Succeeded"
+ ]
+ }
+ },
+ "Initialize_variables_Init_SKU_Array": {
+ "type": "InitializeVariable",
+ "inputs": {
+ "variables": [
+ {
+ "name": "SKU Array",
+ "type": "Array",
+ "value": []
+ }
+ ]
+ },
+ "runAfter": {
+ "Initialize_variables_Init_SKU_Index": [
+ "Succeeded"
+ ]
+ }
+ },
+ "Initialize_variables_Init_Note_Array": {
+ "type": "InitializeVariable",
+ "inputs": {
+ "variables": [
+ {
+ "name": "Note Array",
+ "type": "Array",
+ "value": []
+ }
+ ]
+ },
+ "runAfter": {
+ "Initialize_variables_Init_SKU_Array": [
+ "Succeeded"
+ ]
+ }
+ },
+ "Loop_over_each_gaming_SKU": {
+ "type": "Foreach",
+ "foreach": "@coalesce(body('Call_Inventory___Fullfilment_Agent')?['structuredOutput/SKU'], json('[]'))",
+ "actions": {
+ "Stock_Aging_Condition": {
+ "type": "If",
+ "expression": {
+ "and": [
+ {
+ "equals": [
+ "@items('Loop_over_each_gaming_SKU')?['StockAge']",
+ "stale"
+ ]
+ }
+ ]
+ },
+ "actions": {
+ "Review_Order_History___Policy": {
+ "type": "OpenApiConnection",
+ "inputs": {
+ "parameters": {
+ "body/definition": {
+ "components": [],
+ "environmentVariables": [],
+ "flows": [],
+ "dataverseTableSearchs": [],
+ "dataverseTableSearchGlossaryConfigurations": [],
+ "dataverseTableSearchEntityConfigurations": [],
+ "dataverseTableSearchEntityColumnSynonyms": [],
+ "connectionReferences": [],
+ "connectorDefinitions": [],
+ "aIModelDefinitions": [],
+ "aIPluginOperations": [],
+ "connectedAgentDefinitions": [],
+ "componentCollections": [],
+ "connectedBots": [],
+ "diagnostics": [],
+ "entity": {
+ "authorizedSecurityGroupIds": [],
+ "supportedLanguages": [],
+ "diagnostics": [],
+ "schemaName": "workflow_agentnode",
+ "language": 1033,
+ "accessControlPolicy": "Any",
+ "authenticationMode": "Integrated",
+ "authenticationTrigger": "Always",
+ "synchronizationStatus": {
+ "graphDriveItems": [],
+ "diagnostics": [],
+ "lastPublishedDetails": {
+ "diagnosticDetails": [],
+ "diagnostics": [],
+ "authenticationMode": "Integrated",
+ "$kind": "SuccessfulPublishResultDetails"
+ },
+ "$kind": "BotSynchronizationDetails"
+ },
+ "configuration": {
+ "categories": [],
+ "channels": [],
+ "settings": {},
+ "memoryParameters": [],
+ "diagnostics": [],
+ "recognizer": {
+ "diagnostics": [],
+ "$kind": "CLICopilotRecognizer"
+ },
+ "agentSettings": {
+ "conversationStarters": [],
+ "diagnostics": [],
+ "model": {
+ "diagnostics": [],
+ "series": "claude-opus-5",
+ "$kind": "ModelConfig"
+ },
+ "instructions": {
+ "segments": [],
+ "diagnostics": [],
+ "$kind": "Instructions"
+ },
+ "output": {
+ "diagnostics": [],
+ "schema": "{\"type\":\"object\",\"properties\":{\"Promo\":{\"type\":\"string\"},\"Clearance\":{\"type\":\"string\"},\"Findings\":{\"type\":\"string\"}},\"required\":[\"Promo\",\"Clearance\",\"Findings\"]}",
+ "$kind": "StructuredAgentOutput"
+ },
+ "$kind": "AgentSettings"
+ },
+ "$kind": "BotConfiguration"
+ },
+ "$kind": "BotEntity"
+ },
+ "$kind": "BotDefinition"
+ },
+ "body/message": "Assess whether the SKU below is a good candidate for a price markdown, and if so propose the pricing scheme, for store‑manager review.\n\nSKU: @{items('Loop_over_each_gaming_SKU')?['SKUName']}\n\nSteps:\n1. Review this SKU's recent order/sales history to gauge how well it has been selling. Orders are identified by references beginning with `ORD-`; work from the SKU's order history rather than expecting a single order number.\n2. Check the store's markdown policy to see what applies, and whether the situation fits a promotional markdown (temporary discount, within guardrails) or a clearance markdown (discontinuation, needs manager sign‑off).\n3. Produce the outputs below. For Promo and Clearance, give two short lines describing the proposed pricing scheme and brief rationale. Propose a range of discount, and do not fix a maximum/minimum discount or final price; since those are set by the store manager separately (do not mention this). Maximum 200 characters each. Needs to be ready to be read by store employees.\n4. Build a summary of the SKU's suitability for promotion or clearance, for the store manager. Maximum two bullets and 600 characters in total, be concise. No greeting, no sign‑off, no citations, no details of order history, only a concise assessment.\n\nExample:\n"
+ },
+ "host": {
+ "apiId": "/providers/Microsoft.PowerApps/apis/shared_agentnode",
+ "connectionName": "shared_agentnode-1",
+ "operationId": "InvokeDefinition"
+ }
+ },
+ "metadata": {
+ "description": "Review Order History & Policy",
+ "nodeId": "agent-7d5d1903-f892-41df-a546-95aef444dbd9"
+ }
+ },
+ "Human_Review__Discount_Range": {
+ "type": "OpenApiConnectionWebhook",
+ "inputs": {
+ "parameters": {
+ "RequestForInformationInput/channel": "Outlook",
+ "RequestForInformationInput/title": "Action needed: SKU Pricing Adjustment",
+ "RequestForInformationInput/message": "Dear store manager,\n\nThe following item has been nominated for a promotion or clearance application based on weekly findings.\n\nSKU: @{items('Loop_over_each_gaming_SKU')?['SKUName']} \n\nWeekly Findings: \n@{body('Review_Order_History___Policy')?['structuredOutput/Findings']} \n\nIf promotion is chosen, store employees will receive the following guidance:\n\nPromo: \n@{body('Review_Order_History___Policy')?['structuredOutput/Promo']} \n\nIf clearance is chosen, store employees will receive the following guidance:\n\nClearance:\n@{body('Review_Order_History___Policy')?['structuredOutput/Clearance']} \n\nPlease select your preferred option, as well as (if desired), maximum and minimum discount to be applied.\n\nThank you",
+ "RequestForInformationInput/assignedTo": "@{string(variables('Email'))}",
+ "RequestForInformationInput/input": {
+ "type": "object",
+ "properties": {
+ "text": {
+ "title": "New Pricing",
+ "type": "string",
+ "x-ms-content-hint": "TEXT",
+ "x-ms-dynamically-added": true,
+ "description": "Please select an option",
+ "enum": [
+ "Accept Promo",
+ "Accept Clearance"
+ ]
+ },
+ "number_1": {
+ "title": "Minimum Discount (%)",
+ "type": "number",
+ "x-ms-content-hint": "NUMBER",
+ "x-ms-dynamically-added": true,
+ "description": "Minimum discount"
+ },
+ "number_2": {
+ "title": "Maximum Discount (%)",
+ "type": "number",
+ "x-ms-content-hint": "NUMBER",
+ "x-ms-dynamically-added": true,
+ "description": "Maximum discount"
+ }
+ },
+ "required": [
+ "text"
+ ]
+ }
+ },
+ "host": {
+ "apiId": "/providers/Microsoft.PowerApps/apis/shared_advancedapprovals",
+ "connectionName": "shared_advancedapprovals-1",
+ "operationId": "RequestForInformation"
+ }
+ },
+ "runAfter": {
+ "Review_Order_History___Policy": [
+ "Succeeded"
+ ]
+ },
+ "metadata": {
+ "description": "Human Review: Discount Range",
+ "nodeId": "connector-9dc5e271-f730-4189-8ec6-5dfd1d013fd9"
+ }
+ },
+ "Set_SKU__Adjust_price": {
+ "type": "AppendToArrayVariable",
+ "inputs": {
+ "name": "SKU Array",
+ "value": "@items('Loop_over_each_gaming_SKU')?['SKUName']"
+ },
+ "runAfter": {
+ "Human_Review__Discount_Range": [
+ "Succeeded"
+ ]
+ },
+ "metadata": {
+ "description": "Set SKU: Adjust price",
+ "nodeId": "variable-c0edc099-3a8a-41fd-bf72-c4c0204c6a28"
+ }
+ },
+ "Set_SKU__Adjust_price_AppendArr_Note_Array": {
+ "type": "AppendToArrayVariable",
+ "inputs": {
+ "name": "Note Array",
+ "value": "@{concat(\r\n if(equals(body('Human_Review__Discount_Range')?['text'], 'Accept Promo'), body('Review_Order_History___Policy')?['structuredOutput/Promo'], body('Review_Order_History___Policy')?['structuredOutput/Clearance']),\r\n if(not(empty(body('Human_Review__Discount_Range')?['number_1'])), concat(' Min Discount: ', string(body('Human_Review__Discount_Range')?['number_1'])), ''),\r\n if(not(empty(body('Human_Review__Discount_Range')?['number_2'])), concat(' Max Discount: ', string(body('Human_Review__Discount_Range')?['number_2'])), '')\r\n)}"
+ },
+ "runAfter": {
+ "Set_SKU__Adjust_price": [
+ "Succeeded"
+ ]
+ }
+ }
+ },
+ "else": {
+ "actions": {
+ "Stock_Aging_Condition_NestedIf_1": {
+ "type": "If",
+ "expression": {
+ "and": [
+ {
+ "equals": [
+ "@items('Loop_over_each_gaming_SKU')?['Inbound']",
+ "reorder"
+ ]
+ }
+ ]
+ },
+ "actions": {
+ "Send_email__Reorder_inbound": {
+ "type": "OpenApiConnection",
+ "inputs": {
+ "parameters": {
+ "emailMessage/Importance": "Normal",
+ "emailMessage/Body": "Dear team,
We require to reorder the last inbound pack of the following product, given demand increase:
SKU: @{items('Loop_over_each_gaming_SKU')?['SKUName']}
Please provide us with an invoice and ETA within the next 2 business days.
Thank you
",
+ "emailMessage/To": "@{variables('Email')}",
+ "emailMessage/Subject": "@{items('Loop_over_each_gaming_SKU')?['SKUName']} - Stock reorder"
+ },
+ "host": {
+ "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365",
+ "connectionName": "shared_office365-1",
+ "operationId": "SendEmailV2"
+ }
+ },
+ "metadata": {
+ "description": "Send email: Reorder inbound",
+ "nodeId": "connector-444913ae-a97d-4bea-9bc8-6a44d3acb365"
+ }
+ },
+ "Set_SKU__Keep_price__main_shelf": {
+ "type": "AppendToArrayVariable",
+ "inputs": {
+ "name": "SKU Array",
+ "value": "@items('Loop_over_each_gaming_SKU')?['SKUName']"
+ },
+ "runAfter": {
+ "Send_email__Reorder_inbound": [
+ "Succeeded"
+ ]
+ },
+ "metadata": {
+ "description": "Set SKU: Keep price, main shelf",
+ "nodeId": "variable-9c9fd0c3-899e-4645-89ad-fb9d7f14ee9a"
+ }
+ },
+ "Set_SKU__Keep_price__main_shelf_AppendArr_Note_Array": {
+ "type": "AppendToArrayVariable",
+ "inputs": {
+ "name": "Note Array",
+ "value": "'This is a high demand item. Please keep current pricing and ensure item is located in the main, visible shelf as per the latest store plan, to keep the momentum.'"
+ },
+ "runAfter": {
+ "Set_SKU__Keep_price__main_shelf": [
+ "Succeeded"
+ ]
+ }
+ }
+ },
+ "else": {
+ "actions": {
+ "Set_SKU__Keep_price": {
+ "type": "AppendToArrayVariable",
+ "inputs": {
+ "name": "SKU Array",
+ "value": "@items('Loop_over_each_gaming_SKU')?['SKUName']"
+ },
+ "metadata": {
+ "description": "Set SKU: Keep price",
+ "nodeId": "variable-5fa3e06a-8244-4ef1-8fb0-7d10f773f2d4"
+ }
+ },
+ "Set_SKU__Keep_price_AppendArr_Note_Array": {
+ "type": "AppendToArrayVariable",
+ "inputs": {
+ "name": "Note Array",
+ "value": "'This item has a good balance of supply and demand. Keep current pricing and store allocation. No action required.'"
+ },
+ "runAfter": {
+ "Set_SKU__Keep_price": [
+ "Succeeded"
+ ]
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "metadata": {
+ "description": "Stock Aging Condition",
+ "nodeId": "ifElse-9777a477-05d5-449f-a1a0-3018afd17ef8"
+ }
+ }
+ },
+ "metadata": {
+ "description": "Loop over each gaming SKU",
+ "nodeId": "loop-a4fc4348-44fb-49ea-8236-2acf87569028"
+ },
+ "runAfter": {
+ "Initialize_variables_Init_Note_Array": [
+ "Succeeded"
+ ]
+ }
+ },
+ "Variable": {
+ "type": "SetVariable",
+ "inputs": {
+ "name": "SKU Index",
+ "value": "@range(0, length(variables('SKU Array')))"
+ },
+ "runAfter": {
+ "Loop_over_each_gaming_SKU": [
+ "Succeeded"
+ ]
+ },
+ "metadata": {
+ "description": "Variable",
+ "nodeId": "variable-b12af406-787a-4e45-9412-1898b7250d97"
+ }
+ },
+ "Select": {
+ "type": "Select",
+ "inputs": {
+ "from": "@variables('SKU Index')",
+ "select": {
+ "SKU": "@{variables('SKU Array')[item()]}",
+ "Week Pricing Notes": "@{variables('Note Array')[item()]}"
+ }
+ },
+ "runAfter": {
+ "Variable": [
+ "Succeeded"
+ ]
+ },
+ "metadata": {
+ "description": "Select",
+ "nodeId": "builtinFunction-eabfce44-ef3a-4e3d-8071-bfd5dc8ae5b7"
+ }
+ },
+ "Create_HTML_table": {
+ "type": "Table",
+ "inputs": {
+ "from": "@body('Select')",
+ "format": "HTML"
+ },
+ "runAfter": {
+ "Select": [
+ "Succeeded"
+ ]
+ },
+ "metadata": {
+ "description": "Create HTML table",
+ "nodeId": "builtinFunction-d5757215-ceed-4d57-ad4e-f2b376e681f9"
+ }
+ },
+ "Send_an_email": {
+ "type": "OpenApiConnection",
+ "inputs": {
+ "parameters": {
+ "emailMessage/Importance": "Normal",
+ "emailMessage/Body": "Dear team,
Please notice and apply the following changes in our products in store, according to the latest review. Pay special attention to promotions, clearance, or high-visibility items to be reallocated:
@{body('Create_HTML_table')}
Thank you,
Your BlastBox Team
",
+ "emailMessage/Subject": "Store Pricing - Weekly Update",
+ "emailMessage/To": "@{variables('Email')}"
+ },
+ "host": {
+ "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365",
+ "connectionName": "shared_office365-1",
+ "operationId": "SendEmailV2"
+ }
+ },
+ "runAfter": {
+ "Create_HTML_table": [
+ "Succeeded"
+ ]
+ },
+ "metadata": {
+ "description": "Send an email",
+ "nodeId": "connector-45078208-58d3-45f1-ba7d-b45d24a551e6"
+ }
+ },
+ "end-2c543046-775a-471f-ab3b-5cc5c32a18bf": {
+ "type": "Terminate",
+ "inputs": {
+ "runStatus": "Succeeded"
+ },
+ "runAfter": {
+ "Send_an_email": [
+ "Succeeded"
+ ]
+ },
+ "metadata": {
+ "description": "End",
+ "nodeId": "end-2c543046-775a-471f-ab3b-5cc5c32a18bf"
+ }
+ }
+ },
+ "outputs": {},
+ "metadata": {
+ "telemetryMetadata": {
+ "creationSource": "WorkflowDesigner",
+ "modifiedSources": "WorkflowDesigner"
+ }
+ }
+ },
+ "templateName": null
+ },
+ "schemaVersion": "1.0.0.0"
+}
\ No newline at end of file
diff --git a/src/components/EmailSample.astro b/src/components/EmailSample.astro
new file mode 100644
index 0000000..c4a2bbc
--- /dev/null
+++ b/src/components/EmailSample.astro
@@ -0,0 +1,49 @@
+---
+interface Props {
+ id: string;
+ subject: string;
+}
+
+const { id, subject } = Astro.props;
+---
+
+
+
+
Subject
+
+ {subject}
+
+ Copy Copied
+
+
+
+
+
+
+
diff --git a/src/components/ScenarioCard.astro b/src/components/ScenarioCard.astro
index 36a5f41..1a1a588 100644
--- a/src/components/ScenarioCard.astro
+++ b/src/components/ScenarioCard.astro
@@ -27,12 +27,14 @@ const icons: Record = {
package: ' ',
ticket: ' ',
report: ' ',
+ inventory: ' ',
};
const emojis: Record = {
card: '🎟️',
package: '📦',
ticket: '🎟️',
report: '📉',
+ inventory: '🗃️',
};
const iconPaths = icons[icon] ?? icons.card;
const iconEmoji = emojis[icon] ?? emojis.card;
diff --git a/src/pages/index.astro b/src/pages/index.astro
index 4182b26..95deece 100644
--- a/src/pages/index.astro
+++ b/src/pages/index.astro
@@ -112,6 +112,26 @@ const base = import.meta.env.BASE_URL;
pillars={["3 connected agents", "live charts", "policy-bound recs", "manager PDF"]}
upcoming={true}
/>
+
+
diff --git a/src/pages/scenarios/post-sales-mailbox.astro b/src/pages/scenarios/post-sales-mailbox.astro
new file mode 100644
index 0000000..7c26797
--- /dev/null
+++ b/src/pages/scenarios/post-sales-mailbox.astro
@@ -0,0 +1,201 @@
+---
+import Base from '../../layouts/Base.astro';
+import EmailSample from '../../components/EmailSample.astro';
+import '../../styles/scenario.css';
+
+const base = import.meta.env.BASE_URL;
+---
+
+
+
+
+
← All scenarios
+
+
+
+
+
+
+
On import, MCP tools detach. Reattach them in two places:
+
+ Published Store Policy Agent — Policy RAG (membership branch).
+ Inline agent Review Order, Stock & Weather — Order Management, Policy RAG, Warehouse.
+ Inline agent Review Order & Policy — Order Management, Policy RAG.
+ Inline agent Trigger Order Return/Exchange — Order Management.
+
+
Outlook (Office 365) is required for the full scenario. Send the sample from your own mailbox so the replies come back to you.
+
+
+
+
+ The workflow
+ Send one of these emails to the connected mailbox — keep the subject prefix so the trigger fires — and the Classify node routes each down a different path.
+
+
+
+ A
+
+
Incoming email · shipment
+
+ Ticket 2592780
+ Customer Name: Jordan Pixel
+ Customer Email: jordan.pixel@example.com
+ Customer Order: ORD-10502 , placed 9 June 2026
+ Customer message:
+ Hi, I'm getting worried about my order. I bought a BlastBox Omega console and it still hasn't arrived. My gaming-league night is this weekend, can you tell me where it is, or what my options are?
+
+
+
+
+ ◆
+
+
Classify → Shipment branch
+
+
An inline agent reviews the order, live stock, restock ETA, and local weather, then emails the customer an options summary.
+
Human review the customer picks an option in the email
+
Wait a “thanks for waiting” reply is sent and the flow ends
+
Return / Exchange the shared return step fires and emails a confirmation
+
+
+
+
+
+ B
+
+
Incoming email · defect
+
+ Ticket 2492749
+ Customer Name: Jordan Pixel
+ Customer Email: jordan.pixel@example.com
+ Customer Order: ORD-10502 , placed 9 June 2026
+ Customer message:
+ My BlastBox Omega Core arrived and after using it for a month, it won't power on at all anymore. At arrival, I noticed the box had suffered damage during transit. I ignored it assuming the product inside would be protected. I want it replaced or refunded. Can you assist?
+
+
+
+
+ ◆
+
+
Classify → Defect branch
+
+
An inline agent weighs the order against policy. The mixed evidence — transit damage, ignored, a fault after a month — makes it an exception, so it pauses for review.
+
Human review a manager approves or rejects the exception
+
Approve the shared return step fires as a goodwill exception, then confirms
+
Reject a no-refund email explains the decision; no action is taken
+
+
+
+
+
+ C
+
+
Incoming email · other
+
+ Ticket 2122755 - General enquiry
+ Sender Email: john.doe@example.com
+ Sender Enquiry:
+ Hi, thinking about BlastPass before I commit: what's the difference between Plus and Plus Extra, and is there a fee if I cancel partway through the year? Thanks!
+
+
+
+
+ ◆
+
+
Classify → Other (default)
+
+
The message isn’t tied to an order, so the default branch answers from policy.
+
Store Policy Agent the published agent answers from BlastPass tier & cancellation rules
+
A structured reply is emailed back — no human step.
+
+
+
+
+
+
+
+
+
Outcome
+
3 classified branches · 2 human-in-the-loop gates · 1 shared return step
+
+
+
+
+
+ What was demonstrated
+
+
Classification becomes control flow The model interprets an unstructured email, but a switch owns the actual route. The workflow stays visible and testable after the AI decision.
+
Existing agents become workflow steps The published Store Policy Agent and the workflow’s inline agents reuse the same Order Management, Warehouse, and Policy RAG MCP data as the conversational samples.
+
Human review protects side effects Customer choices and exception approvals happen before the workflow changes an order, and both branches merge into one shared return step. Reasoning recommends; deterministic nodes authorize.
+
+
+
+
+ What gets produced
+ Each branch produces a resolved support thread rather than a file: a grounded reply, plus an options or approval step first when the decision is consequential. While testing, every reply lands in your own mailbox. Here is the summarized reply for each case.
+
+
+
Shipment · exchange confirmed
+
+
To your own mailbox
+
BlastBox Service – Your return/exchange is confirmed
+
+
Dear Customer,
+
Your exchange for order ORD-10502 is registered under return authorization RA-50020 — the BlastBox Omega Console (SKU-OMEGA, $399.99) is being exchanged for the BlastBox Omega MEGA Edition (SKU-OMEGA-MEGA, $499.99), a $100.00 difference and no restocking fee.
+
A prepaid return label follows for the original console; your MEGA Edition ships now from Seattle-WA1 (5 in stock), with the $399.99 credit applied against your Visa ending 1024.
+
The BlastBox Team
+
+
+
+
+
Defect · referred to a manager
+
+
To your own mailbox
+
BlastBox Service – Your return/exchange is confirmed
+
+
Dear Customer,
+
Your request for order ORD-10502 (BlastBox Omega Console, SKU-OMEGA, $399.99) has been received and referred to a manager as a goodwill exception — the no-power fault was reported outside the 30-day window and may relate to the transit damage noted on arrival.
+
You’ll receive the manager’s decision on a possible replacement or $399.99 refund before any label or refund is issued. No return has been created at this stage.
+
The BlastBox Team
+
+
+
+
+
Membership · answered from policy
+
+
To your own mailbox
+
BlastBox Service - Your enquiry
+
+
Dear customer,
+
Thanks for getting in touch. Here’s a summary of the two tiers and the cancellation rules:
+
BlastPass Plus ($79.99/yr): 4-player co-op, 1 Mystery Cartridge per month, 25GB of cloud saves.BlastPass Plus Extra ($129.99/yr): the Extra Vault (200+ titles), 100GB of cloud saves, 2 Mystery Cartridges per month, and early demo access.
+
Cancellations: both tiers give a full refund within 14 days if you’ve streamed under 2 hours. After that, both offer a prorated refund for whole unused months — Plus has no fee ($6.67/month returned), while Plus Extra deducts a $10 fee ($10.83/month, never below $0).
+
The BlastBox Team
+
+
+
+
+
+
+
+
diff --git a/src/pages/scenarios/weekly-inventory-health.astro b/src/pages/scenarios/weekly-inventory-health.astro
new file mode 100644
index 0000000..f4d0e00
--- /dev/null
+++ b/src/pages/scenarios/weekly-inventory-health.astro
@@ -0,0 +1,179 @@
+---
+import Base from '../../layouts/Base.astro';
+import '../../styles/scenario.css';
+
+const base = import.meta.env.BASE_URL;
+---
+
+
+
+
+
← All scenarios
+
+
+
+
+
+
+
On import, MCP tools detach. Reattach them in two places:
+
+ Published Inventory & Fulfilment Agent — Warehouse.
+ Inline agent Review Order History & Policy — Order Management, Policy RAG.
+
+
Set the Email variable to your own mailbox — the review card and summary email go there. Outlook (Office 365) is required for the full scenario.
+
+
+
+
+ The workflow
+ On a schedule, the workflow builds the inventory once, then loops every SKU down one of three lanes and closes with a single staff digest.
+
+
+
+ 1
+
+
Scheduled trigger
+
+
Runs weekly with no inbound message. In the sample designer, use Run to fire the same execution on demand.
+
+
+
+
+
+ 2
+
+
Collect the SKUs
+
+
One broad pass builds the working set before any per-item logic runs.
+
Inventory & Fulfilment Agent returns a structured list of active SKUs with stock & aging signals
+
+
+
+
+
+ 3
+
+
Initialize
+
+
Sets the item index, SKU array, note array, and the Email variable — the mailbox that receives the review card and the digest, so set it to your own.
+
+
+
+
+
+ 4
+
+
Loop → three-way condition
+
+
Loop over each gaming SKU gives every item its own context; a Stock Aging Condition sends it down exactly one of three lanes.
+
+
+ Stale / aging
+ The inline Review Order History & Policy agent grounds the pricing call before a manager decides.
+ Set SKU: adjust price
+
+
+ Reorder
+ A healthy seller with more stock inbound, so it stays visible on the shelf.
+ Set SKU: keep price, main shelf
+
+
+ Healthy
+ Nothing to action this cycle; the loop records it and moves on.
+ Set SKU: keep price
+
+
+
Human review on the stale lane, a manager confirms the discount in an Outlook card
+
To reproduce the digest below, in the review card select Accept Promo and set Minimum Discount (%) to 12 and Maximum Discount (%) to 20 .
+
+
+
+
+
+ 5
+
+
Data transformation → email
+
+
A Select shapes the collected notes into objects, Create HTML table renders them, and one summary email goes to the mailbox — not a message per SKU.
+
+
+
+
+
+
+
+
+
Outcome
+
Every active SKU → one of three lanes → one staff digest
+
+
+
+
+
+ What was demonstrated
+
+
Agent output becomes iterable data The Inventory & Fulfilment Agent does not return prose for a person to read. It supplies a structured array the workflow processes item by item.
+
One bounded decision per SKU The loop and nested condition make all three outcomes explicit. A SKU cannot silently skip processing or wander into an unplanned action.
+
Human judgment is narrowly placed Only stale inventory needs a manager’s pricing call. Reorder and healthy lanes stay fully automated, keeping the weekly run moving.
+
+
+
+
+ What gets produced
+ The result is one compact inventory-health email for staff — not a message per SKU. The Create HTML table shows the decision captured during each loop iteration and the action, if any, that follows.
+
+
To your own mailbox
+
Store Pricing - Weekly Update
+
+
Dear team,
+
Please notice and apply the following changes in our products in store, according to the latest review. Pay special attention to promotions, clearance, or high-visibility items to be reallocated:
+
+ SKU Pricing note
+
+ BlastBox Omega MEGA Edition Good balance of supply and demand. Keep current pricing and store allocation. No action required.
+ MEGA Lizards from Outer Space High-demand item. Keep current pricing and ensure it stays on the main, visible shelf per the latest store plan to keep momentum.
+ BlastBox Omega Core (1st-gen) Good balance of supply and demand. Keep current pricing and store allocation. No action required.
+ BlastBox Cadet Bundle Promo (temporary): take 10–30% off current shelf price while holding at least a 15% gross margin; no clearance signage. Used to test demand on a SKU with no recorded sales. Min Discount: 12 · Max Discount: 20.
+ Galaxy Smash Good balance of supply and demand. Keep current pricing and store allocation. No action required.
+
+
+
Your BlastBox Team
+
+
+
+
+
+
+
+
diff --git a/src/styles/scenario.css b/src/styles/scenario.css
index 882f7fa..733c555 100644
--- a/src/styles/scenario.css
+++ b/src/styles/scenario.css
@@ -26,6 +26,58 @@
.scenario__section { margin-top: var(--space-3xl); }
.scenario__section h2 { margin-bottom: var(--space-lg); }
+/* Workflow scenario framing */
+.wf-note { margin-top: var(--space-xl); overflow: hidden; background: var(--c-surface); border: 1px solid var(--c-border); border-radius: var(--radius-md); }
+.wf-note__head { display: flex; align-items: center; gap: 10px; padding: var(--space-md) var(--space-lg); background: var(--tint-orange); border-bottom: 1px solid var(--border-orange); font-family: var(--font-display); font-weight: 700; font-size: 0.92rem; color: var(--c-text); }
+.wf-note__head svg { width: 20px; height: 20px; flex-shrink: 0; color: var(--c-orange); }
+.wf-note__body { padding: var(--space-md) var(--space-lg); }
+.wf-note__body > p { margin: 0 0 var(--space-sm); font-size: 0.86rem; color: var(--c-text-secondary); line-height: 1.6; }
+.wf-note__body > p:last-child { margin-bottom: 0; }
+.wf-note ul { list-style: none; margin: 0 0 var(--space-sm); padding: 0; display: grid; gap: 6px; }
+.wf-note li { position: relative; padding-left: 18px; font-size: 0.84rem; color: var(--c-text-secondary); line-height: 1.55; }
+.wf-note li::before { content: ''; position: absolute; left: 3px; top: 8px; width: 6px; height: 6px; border-radius: 2px; background: var(--c-orange); }
+.wf-note li strong, .wf-note__body strong { color: var(--c-text); }
+.wf-note code { color: var(--c-orange); background: color-mix(in srgb, var(--c-orange) 12%, transparent); border-color: color-mix(in srgb, var(--c-orange) 30%, transparent); }
+.scenario__tools--solo { grid-template-columns: minmax(0, 720px); }
+/* Copyable email input (matches the conversation prompts) */
+.mail { display: grid; gap: var(--space-sm); }
+.mail__label { display: block; margin-bottom: 5px; font-family: var(--font-mono); font-size: 0.62rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--c-text-muted); }
+.mail__box { position: relative; padding: 11px 74px 11px 14px; background: var(--c-surface); border: 1px solid var(--c-border); border-radius: var(--radius-md); }
+.mail__subject { font-size: 0.88rem; color: var(--c-text); }
+.mail__body { font-size: 0.88rem; color: var(--c-text-secondary); line-height: 1.65; }
+.mail__body p { margin: 0 0 6px; }
+.mail__body p:last-child { margin-bottom: 0; }
+.mail__body strong { color: var(--c-text); }
+.mail__quote { margin-top: 8px; color: var(--c-text); font-style: italic; }
+.mail__copy { position: absolute; top: 8px; right: 8px; min-width: 56px; padding: 4px 9px; font: 700 0.66rem var(--font-mono); color: var(--c-primary); background: var(--c-surface); border: 1px solid var(--c-border); border-radius: 6px; cursor: pointer; }
+.mail__copy:hover { border-color: var(--c-primary); }
+.mail__ok { display: none; color: var(--c-green); }
+.mail__copy.is-copied .mail__idle { display: none; }
+.mail__copy.is-copied .mail__ok { display: inline; }
+
+/* Human-review hint (inventory) */
+.wf-hint { margin-top: 10px; padding: 9px 11px; font-size: 0.8rem; line-height: 1.5; color: var(--c-text-secondary); background: var(--tint-orange); border: 1px dashed var(--border-orange); border-radius: 6px; }
+.wf-hint b { color: var(--c-orange); font-family: var(--font-mono); font-size: 0.74rem; }
+
+/* Example-reply cards (What gets produced) */
+.wf-replies { display: grid; gap: var(--space-lg); max-width: 760px; }
+.wf-cap { margin-bottom: 8px; font-family: var(--font-mono); font-size: 0.68rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--c-text-muted); }
+.wf-email { max-width: 760px; padding: var(--space-md) var(--space-lg); background: var(--c-surface); border: 1px solid var(--c-border-subtle); border-radius: var(--radius-md); }
+.wf-email--wide { max-width: 860px; }
+.wf-email__row { font-size: 0.78rem; color: var(--c-text-secondary); }
+.wf-email__row b { margin-right: 6px; font-family: var(--font-mono); font-size: 0.6rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: var(--c-text-muted); }
+.wf-email__row--subject { margin: 6px 0 10px; font-size: 0.88rem; font-weight: 700; color: var(--c-text); }
+.wf-email__body { font-size: 0.88rem; color: var(--c-text-secondary); line-height: 1.65; }
+.wf-email__body p { margin: 0 0 9px; }
+.wf-email__body p:last-child { margin-bottom: 0; }
+.wf-email__body strong { color: var(--c-text); }
+.wf-email__sign { color: var(--c-text-muted); font-style: italic; }
+.wf-email table { width: 100%; border-collapse: collapse; margin: 4px 0 10px; font-size: 0.82rem; }
+.wf-email th { padding: 0 8px 8px; text-align: left; color: var(--c-text-muted); font: 700 0.62rem var(--font-mono); letter-spacing: 0.05em; text-transform: uppercase; border-bottom: 1px solid var(--c-border); }
+.wf-email td { padding: 9px 8px; vertical-align: top; border-bottom: 1px solid var(--c-border-subtle); }
+.wf-email tbody tr:last-child td { border-bottom: 0; }
+.wf-email td:first-child { color: var(--c-text); }
+
/* Conversation timeline */
.convo { margin-top: var(--space-3xl); }
.convo h2 { margin-bottom: var(--space-sm); }
@@ -122,3 +174,8 @@
.scenario__tools { grid-template-columns: 1fr; }
.demotype-copy { width: 100%; }
}
+
+@media (max-width: 600px) {
+ .wf-email--wide .wf-email__body { overflow-x: auto; }
+ .wf-email--wide table { min-width: 460px; }
+}