Updates to the Dragon Copilot adaptive card specification

This page provides information on changes to the adaptive card specification for Dragon Copilot and describes how to migrate your VisualizationResource JSON to the newer version.

Changes from version 1 to version 2

  • Moved the actions property from the root level to adaptive_card_payload.actions.

  • Actions now follow the Adaptive Cards native Action.Execute syntax. As a result of this change:

    • The accept action is now deprecated. Use more specific actions such as appendToNoteSection or mergeWithNote.

    • The action type is now defined by the verb property instead of the type property:

      reject type → reject verb

      updateNote type → appendToNoteSection verb

      copy type → copyToClipboard verb

  • Added two more actions:

    • regenerate: Users can re-trigger the extension manually.

    • mergeWithNote: Intelligently merge user-specified content with the note in Dragon Copilot.

Migrating version 1 actions to version 2

Reject

Version 1:

{
  "title": "<string>",
  "action": "reject",
  "actionType": "reject"
}

Version 2:

{
  "type": "Action.Execute",
  "id": "<unique_action_identifier>",
  "title": "<string>",
  "verb": "reject",
  "data": {
    "dragonExtensionToolName": "<Name of extension to trigger from manifest>" // optional
  }
}

Copy

Version 1:

{
  "title": "<string>",
  "action": "copy",
  "actionType": "copy",
  "code": "<string>" // optional
}

Version 2:

{
  "type": "Action.Execute",
  "id": "<unique_action_identifier>",
  "title": "<string>",
  "verb": "copyToClipboard",
  "data": {
    "dragonExtensionToolName": "<Name of extension to trigger from manifest>", // optional
    "dragonClipboardContent": "<string>" // optional
  } // optional
}

Note

If dragonClipboardContent isn't provided, nothing is copied to the clipboard.

Update note

Version 1:

{
  "title": "<string>",
  "action": "updateNote",
  "actionType": "updateNote"
}

Version 2:

{
  "type": "Action.Execute",
  "id": "<unique_action_identifier>",
  "title": "<string>",
  "verb": "appendToNoteSection",
  "data": {
    "dragonExtensionToolName": "<Name of extension to trigger from manifest>", // optional
    "dragonAppendContent": "<content to append to the note section>" // optional
  } // Optional
}

Note

If the dragonAppendContent property isn't provided, Dragon Copilot uses the root level dragonCopilotCopyData property as a fallback.

New actions in version 2

Version 2 introduces two new action types: regenerate and mergeWithNote.

  • Use regenerate to enable the user to manually trigger the extension.

  • Use mergeWithNote to merge user input, eg. a selection from a radio group, into the note and replace or update existing note content.

// Regenerate:
{
    "type": "Action.Execute",
    "id": "<unique_action_identifier>",
    "title": "<string>",
    "verb": "regenerate",
    "data": {
        "dragonExtensionToolName": "<Name of extension to trigger from manifest>"
    }
}

// Merge with note:
{
    "type": "Action.Execute",
    "id": "<unique_action_identifier>",
    "title": "<string>",
    "verb": "mergeWithNote",
    "data": {
        "dragonExtensionToolName": "<Name of extension to trigger from manifest>",
        "dragonInputs": ["<string array>"], // The list of input ids whose values should be collected during the merge
        "dragonMatchContent": "<string>" // The text which should be matched + updated in the note section during the merge
    }
}

Custom data in actions

Partners can include custom data in any Action.Execute action using the data object. When an action is invoked, Dragon Copilot will call the extension specified by the dragonExtensionToolName property (if provided) and pass the complete card state. That is, the entire data object enhanced with values from any user inputs. This mechanism enables custom data to be used for collecting telemetry and analytics and other business logic.

Example:

{
  "type": "Action.Execute",
  "id": "<unique_action_identifier>",
  "title": "Reject",
  "verb": "reject",
  "data": {
    "dragonExtensionToolName": "RejectTool",
    "telemetryEventName": "RejectActionInvoked",
    "additionalMetadata": "exampleValue"
  }
}