{"id":7777,"date":"2021-10-11T08:00:10","date_gmt":"2021-10-11T15:00:10","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/?p=7777"},"modified":"2021-11-15T15:55:06","modified_gmt":"2021-11-15T23:55:06","slug":"building-great-bots-for-microsoft-teams-with-azure-bot-framework-composer","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/building-great-bots-for-microsoft-teams-with-azure-bot-framework-composer\/","title":{"rendered":"Building great bots for Microsoft Teams with Azure Bot Framework Composer\u00a0"},"content":{"rendered":"<p><span data-contrast=\"auto\">Bots are hot! They provide a conversational user interface that works very well in Microsoft Teams and other chat-based applications.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">So-called <a href=\"https:\/\/docs.microsoft.com\/azure\/bot-service\/bot-builder-howto-qna?WT.mc_id=m365-37116-cxa\" target=\"_blank\" rel=\"noopener\">\u201cQnA Maker\u201d bots <\/a>have been around for awhile; they require little to no code, but they\u2019re limited to matching user questions with a list of pre-defined answers in the QnA Maker service. Until recently, building a bot that can do more, such as taking actions on behalf of a user in Microsoft Teams, meant doing a lot of coding, as well as training and integrating cognitive services for language recognition and knowledge management.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">All of that has changed, opening a new set of options for building sophisticated Microsoft Teams bots. One of the options, <a href=\"https:\/\/powervirtualagents.microsoft.com\/?WT.mc_id=m365-37116-cxa\" target=\"_blank\" rel=\"noopener\">Power Virtual Agents<\/a>, is part of the Power Platform suite and is tightly integrated with Power Automate. This article, however, will consider another, lesser known, but perhaps even more powerful option, <a href=\"https:\/\/docs.microsoft.com\/composer\/introduction?WT.mc_id=m365-37116-cxa\" target=\"_blank\" rel=\"noopener\">Bot Framework Composer<\/a>.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Bot Framework Composer is designed for low-code and full-code developers alike. It provides an easy-to-use design surface for building a bot, integration with Azure cognitive services, and it works well for teams of developers building apps that can be deployed in multiple Microsoft 365 tenants. This makes it a great choice for ISVs and system integrators who want to deploy a centrally hosted bot for many customers, as well as for enterprise developers.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">The Microsoft 365 Developer Advocacy team is pleased to announce a new video series that is all about Bot Framework Composer. It starts at the beginning, creating a bot from scratch, and leads the viewer through building more advanced features such as language recognition, Adaptive Card responses, user authentication, and calling the Microsoft Graph API which allows access to data throughout the Microsoft 365 suite. Developer advocates Ayca Bas and Bob German will be your guides on this journey from zero to Bot hero.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Here is a listing of the videos, along with the reference materials used in each.<\/span><strong> <a href=\"https:\/\/www.youtube.com\/playlist?list=PLWZJrkeLOrbYLoTcM1vwiPCRAFj5WvR9p\" target=\"_blank\" rel=\"noopener\">View the full playlist<\/a>.<\/strong><\/p>\n<h5>Bot composer can do, WHAT? \ud83d\ude2e &#8211; Build low-code Microsoft Teams bots using Bot Composer<\/h5>\n<p><span data-contrast=\"auto\">This video starts with some basic concepts and a demonstration showing how to create a new bot from scratch and access it from Microsoft Teams.<\/span><\/p>\n<p><iframe title=\"YouTube video player\" src=\"https:\/\/www.youtube.com\/embed\/ovPr1XCS9wc\" width=\"560\" height=\"315\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<p><span data-contrast=\"auto\">Resources:<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<ul>\n<li><a href=\"https:\/\/aka.ms\/install-bot-composer\"><span data-contrast=\"auto\">Install Bot Framework Composer<\/span> <\/a><\/li>\n<li><a href=\"https:\/\/aka.ms\/ngrok-teams-dev\" target=\"_blank\" rel=\"noopener\"><span data-contrast=\"auto\">Video on\u00a0ngrok, a tool used to debug a bot in Teams while running it locally<\/span>\u00a0<\/a><\/li>\n<li><a href=\"https:\/\/aka.ms\/old-bot-portal\" target=\"_blank\" rel=\"noopener\">Bot registration portal for non-Azure user<\/a><\/li>\n<\/ul>\n<h5>Your bot tells you WHO YOU ARE! \ud83d\udcac Get user profile information in the Microsoft Teams bot by using Microsoft Graph<\/h5>\n<p><span data-contrast=\"auto\">This video builds on the first, extending the bot as a full Microsoft Teams application and integrating it with Azure Active Directory login and Microsoft Graph so it can display information from the user\u2019s Microsoft 365 profile.<\/span><\/p>\n<p><iframe title=\"YouTube video player\" src=\"https:\/\/www.youtube.com\/embed\/Kt2I7B96aa4\" width=\"560\" height=\"315\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<p><span data-contrast=\"auto\">Resource:<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><a href=\"https:\/\/aka.ms\/ms-teams-app-policy\" target=\"_blank\" rel=\"noopener\"><span data-contrast=\"auto\">Teams\u00a0admin page to allow users to upload Teams apps<\/span>\u00a0<\/a><\/p>\n<h5>Where is everyone? \ud83d\udc40 Check with \u201cWho\u2019s online bot\u201d to see if your colleagues are around and understand dialogs in Bot Composer<\/h5>\n<p><span data-contrast=\"auto\">This video introduces a new \u201cWho\u2019s Online\u201d bot that can answer questions about who in the user\u2019s team is online. It begins with a demonstration of the finished bot and then explains bot dialogs and how they are used in the solution.<\/span><\/p>\n<p><iframe title=\"YouTube video player\" src=\"https:\/\/www.youtube.com\/embed\/KrH6s6-ogwk\" width=\"560\" height=\"315\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<p><span data-contrast=\"auto\">Resource:<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><a href=\"https:\/\/aka.ms\/whos-online-bot\" target=\"_blank\" rel=\"noopener\"><span data-contrast=\"auto\">Source code for Who\u2019s Online bot<\/span>\u00a0<\/a><\/p>\n<h5>\u00a0\u201cWho\u2019s online bot\u201d doesn\u2019t need a brain, it needs Language Understanding Intelligence Service \u26a1 &#8211; Integrate your bot with LUIS<\/h5>\n<p><span data-contrast=\"auto\">Where the first bot used a simple regular expression to determine what the user wants it to do, the Who\u2019s Online bot uses the Language Understanding Intelligence Service in Microsoft Azure. This allows the bot to understand more complex requests and to extract more details from a request. You\u2019ll learn how to use LUIS from within Bot Framework Composer so the language training data is stored along with the logic that uses it and is easily managed in source control.<\/span><\/p>\n<p><iframe title=\"YouTube video player\" src=\"https:\/\/www.youtube.com\/embed\/lMH2O7IrTtI\" width=\"560\" height=\"315\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<p><span data-contrast=\"auto\">Resource:<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><a href=\"https:\/\/aka.ms\/set-up-luis\" target=\"_blank\" rel=\"noopener\"><span data-contrast=\"auto\">Instructions for setting up a LUIS authoring resource in Microsoft Azure<\/span>\u00a0<\/a><\/p>\n<h5>Text message or Adaptive Cards? \u201cWho\u2019s\u00a0online bot\u201d can send them both\u00a0\ud83d\udc8c &#8211; Build Adaptive Cards for your bot responses<\/h5>\n<p><span data-contrast=\"auto\">This video will explore Bot Composer\u2019s Language Generation system that allows the bot to provide more varied and compelling responses, including Adaptive Cards with deep links that connect to other parts of Microsoft Teams.<\/span><\/p>\n<p><iframe title=\"YouTube video player\" src=\"https:\/\/www.youtube.com\/embed\/ww2mH5id3EQ\" width=\"560\" height=\"315\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<p><span data-contrast=\"auto\">Resources:<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<ul>\n<li><a href=\"https:\/\/adaptivecards.io\" target=\"_blank\" rel=\"noopener\"><span data-contrast=\"auto\">Adaptive Cards<\/span> <\/a><\/li>\n<li><a href=\"https:\/\/aka.ms\/teams-deep-links\" target=\"_blank\" rel=\"noopener\"><span data-contrast=\"auto\">Microsoft Teams deep link format<\/span> <\/a><\/li>\n<li><a href=\"https:\/\/aka.ms\/teams-card-actions\" target=\"_blank\" rel=\"noopener\">Microsoft Teams Adaptive Card actions <\/a><\/li>\n<\/ul>\n<h5>Your bot can answer hundreds of questions with QnA Maker, CAN YOU? \ud83d\ude0e &#8211; Integrate your bot with QnA Maker<\/h5>\n<p><span data-contrast=\"auto\">QnA Maker is an Azure service that manages \u201cknowledge bases\u201d containing questions and answers. You\u2019ll learn how to add QnA Maker to your bot right inside of Bot Composer so the knowledge base can be stored along with the bot logic and is easily managed in source control. You\u2019ll also learn some best practices for using QnA Maker to go beyond questions and answers and give your bot a bit of personality!<\/span><\/p>\n<p><iframe title=\"YouTube video player\" src=\"https:\/\/www.youtube.com\/embed\/qvyhKyfGyOo\" width=\"560\" height=\"315\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<p><span data-contrast=\"auto\">Resources:<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<ul>\n<li><a href=\"https:\/\/qnamaker.ai\" target=\"_blank\" rel=\"noopener\"><span data-contrast=\"auto\">QnA Maker<\/span><\/a><\/li>\n<li><a href=\"https:\/\/aka.ms\/set-up-qna\" target=\"_blank\" rel=\"noopener\"><span data-contrast=\"auto\">Instructions for setting up a\u00a0QnA\u00a0Maker service in Microsoft Azure<\/span> <\/a><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<\/ul>\n<h5>Only smart bots can handle interruptions just like humans, so can the \u201cWho\u2019s Online Bot\u201d \u26d4 &#8211; Create a cancel intent to handle interruptions in your bot<\/h5>\n<p><span data-contrast=\"auto\">Sometimes users change their minds. They want to break out of a conversation and start over again or do something else entirely. In this video, you\u2019ll learn how to handle user interruptions during a Bot Composer dialog.<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><iframe title=\"YouTube video player\" src=\"https:\/\/www.youtube.com\/embed\/IqiN4ZyUOVg\" width=\"560\" height=\"315\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<p><span data-contrast=\"auto\">Please\u00a0join us for this entertaining and informative <a href=\"https:\/\/www.youtube.com\/playlist?list=PLWZJrkeLOrbYLoTcM1vwiPCRAFj5WvR9p\" target=\"_blank\" rel=\"noopener\">video\u00a0series<\/a> and\u00a0follow along to build your own bot for Microsoft Teams!<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><em>Co-authored by <a href=\"https:\/\/twitter.com\/aycabs\" target=\"_blank\" rel=\"noopener\">Ayca Bas\u00a0<\/a><\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bot Framework Composer provides an easy-to-use design surface for building a bot, integration with Azure cognitive services, and it works well for teams of developers building apps that can be deployed in multiple Microsoft 365 tenants. Explore the new video series to learn more.<\/p>\n","protected":false},"author":72600,"featured_media":7827,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[3,128],"tags":[61,37],"class_list":["post-7777","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-microsoft-graph","category-microsoft-teams","tag-azure","tag-bot-framework"],"acf":[],"blog_post_summary":"<p>Bot Framework Composer provides an easy-to-use design surface for building a bot, integration with Azure cognitive services, and it works well for teams of developers building apps that can be deployed in multiple Microsoft 365 tenants. Explore the new video series to learn more.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts\/7777","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/users\/72600"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/comments?post=7777"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts\/7777\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/media\/7827"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/media?parent=7777"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/categories?post=7777"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/tags?post=7777"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}