For the complete documentation index, see llms.txt. This page is also available as Markdown.

Quick Start

This page walks you through the smallest complete nativeMsg experience, explains every field, and shows how to validate an experience file against the schema before deploying it.

Prerequisites

  • A text editor or IDE with JSON support

  • Node.js ≥ 16, Python ≥ 3.8, or a shell with curl available (for validation)

  • A nativeMsg account and API credentials (for deployment)

Minimal Working Example

The following experience defines a single workflow that responds to a "greeting" intent with a text message and two quick replies.

{
  "name": "Support Bot v1",
  "welcomeMessageExecute": "greeting",
  "workflows": [
    {
      "name": "greeting",
      "intents": ["greeting"],
      "expressions": [
        "hello",
        "hi",
        "hey there",
        "good morning"
      ],
      "actions": [
        {
          "name": "send-greeting",
          "send": {
            "message": {
              "text": "Welcome to Acme Support. What can I help you with today?",
              "quickReplies": [
                {
                  "type": "text",
                  "title": "Track an order",
                  "payload": "track_order"
                },
                {
                  "type": "text",
                  "title": "Return an item",
                  "payload": "return_item"
                }
              ]
            }
          }
        }
      ]
    }
  ]
}

Field-by-Field Annotation

Field
Path
Type
Required
Description

name

$.name

string

Yes

Human-readable name for this experience. 1–100 characters.

welcomeMessageExecute

$.welcomeMessageExecute

string

No

Name of the workflow to run when the channel invitation is displayed. Must match a workflow name.

workflows

$.workflows

array

Yes

Ordered list of Workflow objects. Must contain at least one item.

workflows[].name

$.workflows[0].name

string

No

Unique identifier for this workflow. Must not start with nm:. Used by execute, goto, and welcomeMessageExecute.

workflows[].intents

$.workflows[0].intents

array

Yes

Intent names or IntentObject entries that trigger this workflow.

workflows[].expressions

$.workflows[0].expressions

array

No

Natural language training phrases. Strings or Expression objects.

workflows[].actions

$.workflows[0].actions

array

Yes

Sequence of Action objects to execute.

actions[].name

$.workflows[0].actions[0].name

string

No

Unique identifier for this action within its workflow. Must not start with nm:.

actions[].send.message

$.workflows[0].actions[0].send.message

object

No

Message to deliver to the user.

message.text

...message.text

string

Conditional

Message body. Maximum 3072 characters. Required unless another content field is present.

message.quickReplies

...message.quickReplies

array

No

Up to 11 QuickReply objects.

quickReplies[].type

...quickReplies[0].type

string

Yes

Reply type. "text" renders as a tappable chip.

quickReplies[].title

...quickReplies[0].title

string

Conditional

Display label. Required when type is text or postback. Maximum 25 characters.

quickReplies[].payload

...quickReplies[0].payload

string

No

Value sent back to the platform when selected. Maximum 1000 characters.

The expressions array teaches the NLU engine which phrases should match the greeting intent. You do not need expressions for intents that are matched by exact name or keyword.

Schema Validation

Validate your experience file locally before deploying. The schema is published at:

Install dependencies and run:

Install dependencies and run:

Expected output for a valid file:

Expected output for an invalid file:

Next Steps

  • Read Concepts for normative definitions of all schema terms

  • See Reference: Workflow for the complete workflow specification

  • See Reference: Actions for all available action types

  • Browse Common Patterns for ready-to-use experience recipes

Last updated

Was this helpful?