Create and edit topics in your Power Virtual Agents bot
Select the version of Power Virtual Agents you're using here:
In Power Virtual Agents, a topic defines a how a bot conversation plays out.
You can author topics by customizing provided templates, create new topics from scratch, or get suggestions from existing help sites.
A topic has trigger phrases—these are phrases, keywords, or questions that a user is likely to type that is related to a specific issue —and conversation nodes—these are what you use to define how a bot should respond and what it should do.
The AI uses natural language understanding to parse what a customer actually types and find the most appropriate trigger phrase or node.
For example, a user might type "Open hours" into your bot—the AI will be able to match that to the Store hours topic and begin a conversation that asks which store the customer is interested in, and then display the hours the store is open.
You can see how the bot conversation works in practice by testing it in the Test bot pane. This lets you fine-tune the topic until you are ready to deploy it without having to exit the Power Virtual Agents portal.
For bot and topic limits, see the Quotas, limits, and configuration values topic.
Prerequisites
Learn more about what you can do with Power Virtual Agents.
Use system and sample topics
When you create a bot, a number of topics will be automatically created for you.
These are:
- Four prepopulated User Topics that are titled as lessons. These lesson topics can be used to help understand simple to complex ways of using nodes to create bot conversations.
- A number of System Topics. These are prepopulated topics that you are likely to need during a bot conversation. We recommend you keep these and use them until you are comfortable with creating an end-to-end bot conversation.
You can edit both of these topic types in the same manner as for topics you create; however, you cannot delete them.
Create a topic
Go to the Topics tab on the side navigation pane to open the topics page.

On the topics page, select New topic.

Specify a name, description, and one or more trigger phrases for the topic.
A trigger phrase is a phrase that a customer enters in the chat window to start a conversation with the bot. Once the conversation is started, the conversation follows the path you define. You can specify more than one trigger phrase for a topic. You can include punctuation in a trigger phrase, but it is best to use short phrases rather than long sentences.

Select Save topic to add the topic to the topics list.
Design the topic's conversation path
In the topic details for the topic you want to edit, select Go to authoring canvas.

Power Virtual Agents opens the topic in the authoring canvas and displays the topic's trigger phrases. The authoring canvas is where you define the conversation path between a customer and the bot.
For existing or system topics, a number of nodes will automatically be created. You can edit these nodes just as you can for other nodes.
When you create a new topic, a Trigger phrases node and a blank Message node are inserted for you.
You can add additional nodes by selecting the Plus (+) icon on the line or branch between or after a node.

You can also move or change the paths between a node by clicking and dragging the node anchor, which looks like a small circle on top of the node. When dragging, you'll see a dotted line indicating the original path. You can also double-click the anchor and then select the new place for the anchor (you won't see a dotted line).
Insert nodes
When adding a node, you can choose from several options. Each option has a specific node or nodes that will be inserted into the conversation path.
When adding a node after the Trigger Phrases node, or between Message nodes, you can:
- Ask a question
- Call an action
- Show a message
- Go to another topic
After the last node, you can also:
- End the conversation
Additionally, you can Add a condition when inserting a node after a Question node.
Ask a question:
To have the bot ask a question and get a response from the user, select + to add a node, and then Ask a question to add a new Question node.

Enter the question phrase in the first text box, Ask a question.
You can choose from several options for the user's response in the Identify field.
These options determine what the bot should be listening for in the user's response.
For example, they could be multiple choice options, a number, or a specific string.
To understand more about the different options in this flyout, see Use entities in a conversation.
Depending on what you choose in the Identify field, you can enter what options the user should have.
For example, if you select Multiple choice options, you can then enter the options the user can specify in the Options for user field. Each option is presented as a multiple choice button to the user, but users can also type in their answer in the bot.
The conversation editor creates separate paths in the conversation, depending on the customer's response. The conversation path leads the customer to the appropriate resolution for each user response. You can add additional nodes to create branching logic, and specify what the bot should respond with for each variable.
You can save the user response in a variable to be used later.
Tip
You can define synonyms for each option. This can help the bot to determine the correct option in case it isn't clear what the user's response should be mapped to.
Select the menu icon on the top of the Question node, and then select Options for user.

Select the Synonyms icon for the option you want to add additional keywords to.

Add the keywords individually, and then once you're done, select Done to return to the Authoring canvas.
Call an action
You can call Power Automate Flows and insert authentication nodes by selecting Call an action.
If you have configured hand off to Omnichannel with voice-based capabilities, you'll also see additional actions.
Show a message
To specify a response from the bot, select + to add a node, and then Show a message to add a new Message node.
Enter what you want the bot to say in the text box. You can apply some basic formatting, such as bold, italics, and numbering.
You can also use variables that you have defined elsewhere in your bot conversation.
Redirect to another topic
To automatically have the bot move to a separate topic, select + to add a node, and then Redirect to another topic.
In the flyout menu, select the topic the bot should divert to. For example, you might want to send the user to a specific topic about the closure of a store if they ask about store hours for that store.
When you insert a link to redirect to another topic, the bot will go through the conversation path for that topic.
You can consider the redirected topic as a "subtopic".
In the authoring canvas for the original topic, you can insert additional nodes under the subtopic's node.
When the path for the subtopic is finished, the bot will return to the original topic. The bot will then follow the nodes that are under the subtopic's node.
If you redirect to any of the following system topics, however, the entire conversation will end:
- End of Conversation
- Confirmed Success
- Confirmed Failure
- Goodbye
- Escalate
- Start over (this will also reset any global variables)
Passing variables between topics
When redirecting to other topics, you might want to pass values into variables in the destination topic or get variables back from it. This is especially useful when you already have information that the topic needs and don’t want to have the user answer the question again to obtain the information. This can also be helpful when refactoring and separating your topics into reusable components, and you want to pass variables across the topics.
For more information on using variables generally within Power Virtual Agents, see Use variables.
Note
Variables of type Custom Entity, Date Time, and Duration can't be passed between topics.
Receive values from other topics
When a topic defines a variable (for example, by a question node), the end user talking to the bot will be asked the question to fill in the variable’s value. If the value has already been acquired by the bot, there is no reason to ask the question again. For these cases, this variable can be defined as Receive vales from other topics. When other topics redirect to this topic, it can then pass a variable (or literal values) into this variable, and it will skip the question altogether. This leads to a seamless experience for the end user talking to the bot.
To receive values from other topics, set the variable's property:
In the Question node, select the variable that you want to receive values from other topics.
In the Variables properties pane, under Topic (limited scope) select Receive values from other topics.
Save the topic.
Go to the other topic which you want to redirect to, and follow the steps in Redirect to another topic to redirect to the correct topic.
Select + Add input for destination topic.
Select the desired variable from the redirected topic that you want to pass the variable to.
Under Enter or select a value, select the variable from the current topic that you want to pass into the redirected topic.
Once selected, the variable will be shown in the redirected node.
Return values to original topics
When a topic asks a question (or otherwise obtains a variable from an action), this variable can be returned to the original topic that redirected to it.
In this case, the variable also becomes part of the original topic and can be used as any other variable. This helps you construct the topic so that information obtained by the bot is used across topics. This also reduces the need for global variables.
To return a variable to the original topic, set the variable's property:
In the Question node, select the variable that you want to receive values from other topics.
In the Variables properties pane, under Topic (limited scope) select Return values to original topics.
Save the topic.
Go to the other topic which you want to redirect to, and follow the steps in Redirect to another topic to redirect to the correct topic.
The variable that's being returned to the topic is shown in the redirected topic.
Use the returned variable in your topic.
Using the variables pane
You can also use the Variables pane to select the receive or return status of multiple variables at once:
On the topic's menu bar, select Variables.
Select whether you want the values to be passed in or out (or both) between topics for each of the variables in the topic.
Using literal values on variable inputs
When passing a variable into a topic, you can also pass in literal values instead of a variable. Type the value intended to be passed in directly into the redirect node input.
To pass a literal value, type the value you want to use as the input instead of selecting a variable.
End the conversation
When you end the conversation, you can have a survey appear that asks the user if their question or issue was answered or resolved correctly. This information is collected under the customer satisfaction analytics page.
You can also have the conversation handed over to a live agent if you're using a suitable customer service portal, such as Omnichannel for Customer Service.
At the end of a response that resolves the user's issue or answers the question, select End the conversation.

To end with a customer satisfaction survey, select End with survey.

Select Transfer To Agent to insert a hand-off node that will link with your configured hand-off product. You can also enter a private message to the agent.

Add a condition
To add branching logic based on variables, select + to add a node, and then Add a condition and Branch based on a condition.
Choose the variable you want to use to determine if the bot conversation should branch at this point. For example, if you have set up end-user authentication, then you might want to specify a different message if the user is signed on (which may have happened earlier in the conversation).

Delete nodes
Select the menu icon on the top of the node's title.
Select Delete.

Test and publish your bot
Test your bot when you make changes to your topics, to ensure everything is working as expected.
Once you've finished designing and testing your bot, you can consider publishing it to the web, mobile or native apps, or Microsoft Bot Framework channels.