Bot Framework v4 Skills with Dialogs sample.
This bot has been created using the Bot Framework; it shows how to use a skill dialog from a root bot.
-
Node.js version 16.16.0 or higher.
# Determine node version. node --version
The solution uses dialogs, within both a parent bot (DialogRootBot
) and a skill bot (DialogSkillBot
). It demonstrates how to post activities from the parent bot to the skill bot and return the skill responses to the user.
-
DialogRootBot
: this project shows how to consume a skill bot using aSkillDialog
. It includes:- A root dialog that can call different actions on a skill using a
SkillDialog
:- To send events activities.
- To send message activities.
- To cancel a
SkillDialog
usingCancelAllDialogsAsync
that automatically sends anEndOfConversation
activity to remotely let a skill know that it needs to end a conversation.
- A sample AllowedSkillsClaimsValidator class that shows how to validate that responses sent to the bot are coming from the configured skills.
- A Logger Middleware that shows how to handle and log activities coming from a skill.
- A SkillConversationIdFactory used to create and maintain conversation IDs to interact with a skill.
- A SkillsConfiguration class that can load skill definitions from the
.env
file.
- A root dialog that can call different actions on a skill using a
-
DialogSkillBot
: this project shows a modified CoreBot that acts as a skill. It receives event and message activities from the parent bot and executes the requested tasks. This project includes:-
An ActivityRouterDialog that handles Event and Message activities coming from a parent and performs different tasks.
- Event activities are routed to specific dialogs using the parameters provided in the
values
property of the activity. - Message activities are sent to LUIS if configured and trigger the desired tasks if the intent is recognized.
- Event activities are routed to specific dialogs using the parameters provided in the
-
A sample activityHandler that uses the
runDialog
method onActivityRouterDialog
.Note: Starting in Bot Framework 4.8, the
runDialog
helper method adds support to automatically sendEndOfConversation
with return values when the bot is running as a skill and the current dialog ends. It also handles reprompt messages to resume a skill where it left of. -
A sample AllowedCallersClaimsValidator that shows how to validate that the skill is only invoked from a list of allowed callers
-
A sample skill manifest that describes what the skill can do.
-
-
Clone the repository.
git clone https://github.com/microsoft/botbuilder-samples.git
-
(Optionally) Create a bot registration in the azure portal for the
dialogSkillBot
and update dialogSkillBot/.env with the AppId and password. -
(Optionally) Create a bot registration in the azure portal for the
dialogRootBot
and update dialogRootBot/.env with the AppId and password. -
(Optionally) Update the BotFrameworkSkills section in dialogRootBot/.env with the AppId for the skill you created in the previous step.
-
(Optional) Configure the LuisAppId, LuisAPIKey and LuisAPIHostName section in the dialogSkillBot/.env if you want to run message activities through LUIS.
For each bot directory, dialogSkillBot
and dialogRootBot
as <botDirectory>
:
-
In a terminal, navigate to
samples/javascript_nodejs/81.<botDirectory>
cd samples/javascript_nodejs/81.<botDirectory>
-
Install modules
npm install
-
Start the bot
npm start
Bot Framework Emulator is a desktop application that allows bot developers to test and debug their bots on localhost or running remotely through a tunnel.
- Install the Bot Framework Emulator version 4.9.0 or greater from here
- Launch Bot Framework Emulator
- File -> Open Bot
- Enter a Bot URL of
http://localhost:3978/api/messages
, theMicrosoftAppId
andMicrosoftAppPassword
for theDialogRootBot
To learn more about deploying a bot to Azure, see Deploy your bot to Azure for a complete list of deployment instructions.