Table of Contents
Entities help a Microsoft Copilot Studio agent recognize structured information inside natural language, such as a date, amount, city, product category, or tracking ID. A question node stores the recognized value in a variable. When the same information already appears in an earlier user message, slot filling can populate that variable and skip an unnecessary question.
For example, from “I need two hiking jackets under $100,” an agent could identify quantity, product category, and budget before asking only for the missing size.
Built-in and custom entities
Copilot Studio includes built-in entities for common types such as Number, Money, Date and time, Phone number, Person name, Color, Country, and City. To inspect them, open the agent, select Settings > Entities, and choose an entity.

A built-in entity normalizes recognized input. A Money question can recognize “a hundred dollars” as a numeric value even though the user entered words. Preserve the literal input as well when its exact wording matters for confirmation or auditing.
Custom entities address domain-specific values. Copilot Studio offers two core custom types:
- Closed list: a controlled set of values and optional synonyms.
- Regular expression: a structured text pattern such as a ticket number.
Create a closed-list entity
- Open Settings > Entities.
- Select Add an entity > New entity > Closed list.
- Enter a clear name and optional description.
- Add each canonical value. For a camping-activity entity, examples might be hiking, yoga, and cycling.
- Add genuine synonyms, such as trekking for hiking.
- Optionally enable Smart matching, test ambiguous phrases, and save.


Smart matching tolerates spelling and semantic variation, but that flexibility can create false matches between related categories. Keep it off when values must be exact or when a mistaken match could trigger an action. Always confirm high-impact values before submitting a transaction.
Upload or download closed-list values
For bulk editing, prepare a UTF-8 text file with one canonical value per line. Separate a synonym with a vertical bar:
hiking|trekking
hiking|mountaineering
yoga
cycling|bicycling
Microsoft documents a maximum upload size of 3 MB for this workflow. In the entity’s List items section, select Upload a file, choose whether to append or replace, review the parsed values, and then add them. Replacing is destructive to the existing list, so download a copy first.

Use Download in the same section to export the current values and synonyms for review or version control.
Create a regex entity
Use a regular expression when the input follows a stable structure, such as INC000001. A regex validates shape, not meaning or ownership.
- Select Add an entity > New entity > Regular expression (regex).
- Name and describe the entity.
- Enter the pattern and test valid, invalid, and boundary examples.
- Save the entity.

Copilot Studio NLU and CLU use .NET regex syntax, while NLU+ uses JavaScript regex syntax. Confirm the language-understanding mode before using engine-specific features such as inline options. Use anchors when the complete response must match, escape literal characters, and avoid overly broad patterns.
Do not use a regex match as proof that a credit-card number, account ID, or address is valid. Send the captured value to an authorized validation service and avoid logging sensitive input unnecessarily.
Collect an entity in a question node
- Open a topic and add an Ask a question node.
- Under Identify, choose a built-in or custom entity.
- Optionally display selected closed-list values as buttons.
- Rename the response variable to a descriptive name.
- Add validation, confirmation, and retry behavior appropriate to the data.

If you need both normalized and original input, enable the entity metadata option in the question properties. The response becomes a record: for a date variable called StartDate, StartDate.Literal can hold “tomorrow,” while StartDate.Value holds the resolved date. Confirm the resolved value with the user when relative dates or time zones could be misunderstood.
How slot filling works
Slot filling stores a recognized entity in the variable associated with a question. If the user selects trekking and that synonym maps to the canonical value hiking, the question variable receives hiking.


Copilot Studio can also identify several pieces of information from the message that triggered a topic. In “I want hiking boots under $100,” the agent may fill the activity and budget variables and skip their question nodes.


Skipping is useful only when confidence and context are adequate. Open a question node’s properties and set its skip behavior to Ask every time when the user must explicitly confirm consent, identity, payment, or another critical value.
Use an open-list or dynamic inline entity
A closed list is unsuitable for values that change by user or session, such as eligible accounts or current appointment slots. An open-list entity supplies its choices at runtime from an authorized source. Populate a table variable with Power Fx, a connector, Dataverse, or another approved method, then select Options from a list variable under the question node’s Identify setting.

Microsoft recommends no more than 100 entries in the runtime table. A simple list can contain strings:
["Checking", "Savings", "Business"]
To include synonyms, use records with this schema:
| Field | Type | Purpose |
|---|---|---|
| DisplayName | String | The canonical value shown and returned |
| Synonyms | Array of strings | Alternate phrases that can match the value |
[
{
"DisplayName": "Checking",
"Synonyms": ["everyday account", "current account"]
},
{
"DisplayName": "Savings",
"Synonyms": ["saver", "deposit account"]
}
]
Filter runtime values by the authenticated user and current permissions. Do not load every customer or account into the list and rely on the interface to hide unauthorized choices.
Accept one of several entity types
A question such as “Enter your account number or phone number, or say you don’t know” can use One of multiple entities:
- Add a question node and choose One of multiple entities under Identify.
- Add each accepted entity, up to five.
- Rename the record variable, for example
Identifier. - Route with is not blank checks such as
Identifier.accountandIdentifier.phone. - Configure a clear reprompt when nothing matches.


If a response contains more than one configured entity, the node recognizes only the first entity in its configured list. Ask for one identifier at a time when ambiguity would matter.
Current limitations
- Up to five entity types can be configured together.
- External entities are not supported in this identification mode.
- Only one entity of each type can be included.
- File input cannot be one of the configured entities.
Test before publishing
Test canonical values, synonyms, misspellings, empty input, multiple values, adversarial strings, and inputs that should not match. Watch the stored variables and confirm that skipped questions are appropriate. The official Microsoft entities and slot-filling documentation contains current interface details.
For related checks, see how to test a Copilot Studio agent and turn important examples into test cases.
Reader Comments 0
Sign in with email or Google to join the discussion.