 It's a bot time we did a Toolbox episode on bots. Hi, welcome to Visual Studio Toolbox. I'm your host, Robert Green, and joining me today is Sam Bazoo of Progress. Hey, Sam. Hello. Welcome to the show. Welcome to the cozy confines of Studio B. Isn't this nice? It's changed, but it's nice. Yeah. We're just going to sit back and chat about bots. It's about time. Now, bots is one of these new things that there's a lot of buzz about, a lot of cool demos of bots running in Skype, or bots calling and making appointments for you, and there's this amazing amount of stuff that's going on. That's all cool, of course. But what I want to focus on is us as traditional enterprise line of business developers, whether we're doing desktop or web or mobile or whatever. What does it take to build one of these things? Because it turns out it's not that hard to get started. Then what are some of the uses that we might think about, where we would actually take advantage of these in the types of businesses we're currently in? So we're going to do that. This is a two-parter, so obviously this is part one of two. So tell us about bots. Let's jump in. Yeah. Let's switch to slides so we can talk through. So what you see, I think, over the last couple of years is human-computer interaction is evolving. Be it through AR, VR, be it through any other ways, and you see the impact of AI. So we are not only interacting differently with computers, we're also expecting different things out of our computers. This is where bots come in, and bots aren't new. They're about maybe two, three years old now, but they're evolving fast. So I think that's the next frontier of apps. So let's dive in. So is Cortana, Alexa, Siri, are those bots? Sort of. They're agents. Let's dive in. So Robert already introduced me. I'm Sam Basu. I'm a Tolerate Developer Advocate at Progress. I focus on the .NET side of things across web, desktop, and mobile. And bots is something that actually does excite me nowadays. So I think one of the fundamental questions we need to ask is, what exactly are we talking about? Because bots is a very generic term. We're not talking about robots. We're not talking about the spider bots that Bing or Google used to crawl the web. There are different types of bots. What we are focusing on for enterprise applications in particular are chat bots or conversational bots. Bots that we can actually have a conversation with, be it over voice or be it over text. And what can they do for us? How smart can they get? So they actually automate things for us and can actually help us. Okay. One of the fun things that I've actually seen many people do, whenever we talk about conversational bots, back in 2013, I think, there was a movie that came out. It was called Her. It had Hokey and Phoenix in it. And it got a little weird quickly. It was about conversational bots, but this lonely writer, he started having a relationship with his conversational bot because it was so smart and it kind of got him very quickly. So that's kind of the AI aspects of being a bot and how smart it can get. So let's kind of break down what exactly is a bot and how we can build them. Okay. I think one of the reasons why building conversational bots is interesting and challenging and fun in a way is because we're all trying to make a cake. We have a lot of ingredients. There is no fixed recipe because it really depends on what exactly you want your bot to be. Okay. So you have to kind of break down what are my ingredients and how am I exactly gonna build it so it suits my needs. So let's kind of break down where conversational bots stand today. And we are possibly looking at a slice of it, but bots are apps. Okay. That's fundamentally it. I mean, these are web-based apps that we can communicate over HTTP and they can be housed in different things but they're fundamentally apps. But they are complex apps because they have lots and lots of integrations. That's what makes them smart. So a bot by itself, if it was just talking to you and had no brain, it'll be pretty dumb. It will only kind of go off a if-else statement and a bunch of rules and not be able to do a whole lot. So the real benefit of having a bot is all of those integrations that make it smarter. Okay. So that's what we're talking about. So there's a lot of plumbing. There's a lot of different things that make up a bot. So to your point are the voice assistant spots in a way they are, but they are the front end to the intelligence that's behind. So when you talk to Alexa, when you talk to Cortana or Google Assistant, you are firing things off over voice. But the things that you're firing off be it an Azure function, be it an Amazon Lambda, that's where the intelligence lies. So those are bots. Okay. You're just using an agent to get to the bots. Yeah. And I mean, with Cortana, you can type it in. So I mean, it essentially is a conversational bot over text. Right. So these are agents. And then we talk about platforms because this is where bots can reside and this is kind of a big benefit of having a bot. It really is platform agnostic. What you're building is very fundamental and there are multiple platforms who can all talk HTTP. So you can have your bot housed inside of Facebook Messenger or Twilio or Slack or Team, wherever your users are, you can have a bot kind of integrated in there. So it's easy for them to find it and talk to it. Okay. So these are the platforms and then we have agents. So like we said, bots by themselves don't do much. It's what we do behind the scenes with bots that makes it interesting. So first up is there's got to be some sort of rules engine that tells you about what to do, what questions to ask, what paths to kind of guide you down as you're having conversation with your bot. Next thing is natural language processing. If your bot is literally going off a bunch of strings to say, find me a flight out of Seattle, then that's the only thing it'll understand. If you say, get me out of Seattle, it's gonna get confused. But that's kind of how we naturally speak to each other. So this is where natural language processing comes into play and all of the voice agents do it as well. So when you say, get me out of Seattle, they find, so it's an utterance. They find the intent, what exactly are you trying to do? Like get a flight out of Seattle and then they'll find the parameters. Like what airport are you flying out of? And then it's gonna trigger the corresponding contextual thing that's gonna help you find the flight. So in that way, it's a step or several steps beyond just voice enabling an app, right? Like you could voice enable an app so that instead of having to pick from a menu choice or click a button, you could say, open the report. Open the monthly report, right? So at that point, there's one thing that the app does, it opens the monthly report. There is a command and you say, open the monthly report. But if you went in and said, what happened last month, then obviously the app has no idea what you mean because you didn't hardwire in a bunch of commands. So the beauty of the bot is that it can be trained to be more cognizant of what you're saying instead of just expecting, if you say these five things, I will do these five things. If you say anything else, I have no idea what you're talking about, okay? So there is a command, there's a thing that the bot knows how to do, it's how you get to it. Because I think that's an important distinction because I think the very first time I saw a bot, I was thinking, oh, well I can voice enable apps and I've been able to do that for a long time. How is this better? So it's a bunch of things that your bot knows how to do and a bunch of different ways that the user can come to it. So that's natural language processing. Then there is some state management, there's some logic that you will have obviously behind it. What if you told your bot, order me the pizza that I had last week. Now by nature, bots are supposed to be stateless. Like it's one turn of you saying something and the bot getting back to you. But how is it gonna remember what pizza you ordered last week? So you can actually persist some state in your bots and that goes back to wherever you wanna store your data and how you wanna authenticate and authorize the user. But it's possible to maintain some state. So the bot is more of a conversational and how two humans will interact. Sure, yeah. So these are the things that make up the bot's intelligence and then there are bot frameworks because we don't wanna do everything from scratch, it's difficult. So there's Microsoft Bot Framework which we'll talk about exclusively today. I actually have not played a lot with the others but there is a lot of other ones. There is Facebook, WattAI, Amazon makes Lex, IBM makes Watson and Dialogflow from Google. So there are lots of these frameworks, they all are about the same and they have their SDKs, they have their ways to kind of bring you on. So all of this is kind of geared towards helping developers build bots. Okay, that's it. So let's kind of dive into Microsoft Bot Framework and then see what it can do for you. Before we do that, to answer your initial question of what can this do for enterprise apps? So yeah, all of the Skype bots are fun but when it comes down to what line of business apps can fit as bots, it's a lot of little things that can be automated, workflows. And I'll give you two classic examples where we actually have customers doing this. We have a hospital where people call in and they want to schedule an appointment. It's a very basic task. And yes, somebody has a calendar open and every doctor's calendar is in sync. And at that point, you're really just choosing a bunch of things and click and you're done, you have an appointment. That's something that can be automated. And we have in a hospital that actually has, it sounds bad, but they've been able to cut one human and kind of having to do other things. But over like six months, they were able to train their bot enough that it's good enough to schedule simple appointments. It's all about like, what can we automate before you have to talk to a human being? Right. Yeah, another example is support systems. If you have like an IT help desk that's trying to help you kind of go through problems and roadblocks, maybe the initial things, maybe your basic problems can be dealt with with the bot. It just knows the basic things that can go wrong. And then if you're having more problems then transfer to a human being. Okay. Some common examples. So let's kind of talk about the Microsoft side of the world because this is where we live and breathe. So this is what Satya kind of opened up a couple of years back conversation as a platform. This is the next interface. This kind of helps app developers have ways, new ways to interact with their system as an end user. So it's a new frontier for us. The benefits are obvious. We get to have increased productivity. We get to, we are able to reduce the time that a human has to spend over just trivial things, things that can be automated. And the big benefit is being able to reach customers where they're at. So if you are already plugged into Messenger or Twilio or Slack, then we'll meet you there. You don't have to install a new app. We just kind of have a bot that's embedded into what you are. So that's where we stand. That's the benefit of bots, okay? So now let's dive into what we can do with it, what benefits we can get and how we can start building it. So based on who you ask, Microsoft Bot Framework is a big thing. I think it's comprising of two fundamental things. One is Bot Builder. This is the SDK. This is how you actually build your apps, your bots. You don't want to do it entirely online unless it's something super simple. You want to have it locally. And that's how you'll have it in your IDE and you'll code it up and you'll make it work and you'll test and then you'll push it out to wherever you want to have it hosted. And there is a developer portal which kind of helps you get started. It gets you the SDKs. It's a place where you can actually host your apps as well, host your bots. And then it has all of these little connections which help you get your app into Slack, into Skype, into Facebook. Those things are really nice. And then this is just the bot part of it. And then we get into what's called Cognitive Services which I don't think it's really a part of the bot framework at all. It's AI sweet. But this is what really gives your bot intelligence. These integrations, I think we are about maybe 30 or so restful APIs right now. You don't have to be a data scientist. You don't have to know AI. You're literally making restful endpoint calls to use Cognitive Services. But these things can be trained if you're into machine learning a little bit. And then your bot starts getting smarter and smarter. So that's where we are. Cognitive Services, these are Microsoft's slides, but we know what they do. It's a lot of things. It's vision, it's speech. It's a big part of it is natural language, LUIS, which is learning natural human interactions language. And Azure is very, very good at this. So all of these APIs are part of Cognitive Services. And this is what helps us make our bots smarter. So that's what we're going to integrate with. I won't go too much into details, but just to kind of give you a hint of where things are at. And then there is Azure Bot Service. So you don't have to use this. Essentially, a bot is a restful endpoint. You can have it hosted anywhere you want. But this comes bundled with a whole bunch of goodness that kind of helps you get started quickly, helps you have your bot nice and hosted easily, and then have all of these connections so you can push your bot anywhere you want. Yeah, so that's the Azure Bot Service. It has those SDKs that we talked about. And it has templates. It has integrated ways in which you can test your bot. And then you can deploy your bot through the channels. And then once you are successful building your bot and having it deployed, then you kind of take it to the next level. Let's do CI CD pipelines. Let's do Azure functions that trigger other things based on what your bot is doing. So all of those extra things can be built in and how you scale your bot based on demand and so on. So Azure Bot Service is a very compelling offering when you have to get started with bots. So that's enough slides. I'm getting bored of slides altogether. So let's look at some stuff. Let's look at some demos. All right. So the first place I will point anyone to go to is do a search on Bot Framework. And you will land on dev.botframework.com. This is the landing page for Microsoft Bot Framework. And it has a lot of goodness to it. So take a look at what it can offer. And it talks about all of your audiences, all of your channels, and how you kind of get started with. Documentation, this is actually really, really well done. This is Azure Bot Service that you're looking at. But some of it can be local. So we're going to walk you through some of these things that you can do to get started. So notice how right out of the gate, you have different ways of getting started. You can do Bot Service, which is directly in Azure, or you can do local in C-Sharp and Node.js. So before we go in, right now, the Microsoft Bot Framework is at V3. We started about 2016, so we are at V3 right now. V4 is what's coming next. And we have a preview bit of it. And V4 is substantially different, actually, in some ways. But we'll talk about V3, because that's the present stable production release. But V4 is coming sometime this year or early next. So in terms of languages and programming IDs and tools that you can use to build your bot, you are looking at C-Sharp and Node.js right now. So pick your Poison C-Sharp or JavaScript and then go at it. In V4, you will be able to do Python and Java. But we are not there yet. So this is the best place to start and this kind of guide you through. Let's look at the Azure side of the story. So I'm going to go to portal.azure.com. So this is Azure. And if I make it a little bigger, so we can see, if you go in here and say, create a resource, what you want to pick is AI and machine learning. And then in there is a whole bunch of things, but you want to pick web app bots. Once you select this, it's going to ask for a bunch of things. What's your bot name? What subscription resource group? You can create a new one. If you have a whole bunch of bots, maybe you kind of group them into one resource. Where do you want to have this hosted pricing and so on? Templates, we'll talk about that in a second. It does use some Azure storage. Maybe the state management in particular does use Azure storage, App Insights and so on. So you kind of set this up and then you hit create and it'll go ahead and create a bot for you. So instead of having Azure, kind of waiting on Azure to spin this up, let's kind of look at what we have. So here's a simple bot that I have and I have not changed a word of this. It's just purely what the template gives you. But this thing is spun up. It's called the SAM Echo Bot. So it's just a simple Echo Engine. But this thing is spun up and it's hosted in Azure right now. So this is what you'll get when you hit the create button. So before we even look at anything else, if you go do this, test in a web chat. So this is a bot that's ready and it's deployed. So when you hit that test, it's actually gonna bring up this little console. It looks like a little web chat engine and this is where you can test. So I can write things here like hello and it's gonna come back and say you said hello. So we can say more things hi from Redmond. It's gonna come back and say you said hi from Redmond. So this is literally a Echo Bot that kind of repeats what you said. But it's a quick and easy way of you being able to deploy this and be able to test this right away. So you know exactly how your app is working. So this is what's called the web chat. And if you are using this from a web application, you can just kind of plan this and embed this as is. So this web chat can be taken and embedded in your web application. So all of this chat's functionality is available from your web app. It's just hosted in Azure. You don't need to know about it. It's just a web chat, okay? So when I go into this thing called channels, this is what makes apps interesting. This is where you get a whole bunch of things that are easy to configure. Web chat is already running, which is what we saw. And then Skype, this is another channel. Some of these channels are kind of featured and already configured for you. Like Cortana, Skype, they're very easy to get started, same with Teams. If you're going to Facebook Messenger or Slack or Twilio, there are some extra authorization and things that you have to do to make sure your app is registered with Facebook. You are carrying authentication tokens back and forth. But it's not that difficult. And when you kind of go through this wizard, they're going to step you through, like go register your app, bring back an app key and have it set up. But essentially this is a restful endpoint that knows how to get an HTTP message from you and then echo back what it just said, okay? So you notice the Skype thing here, which is also the same bot running in Skype. Because I already went through this, but what it does is, let me pull up Skype here. Essentially that echo bot now becomes a contact in your Skype list. So this guy here, once you configure it and open up Skype, it's going to say, hey, you have a new contact. So your bot now becomes a contact. So you can talk to your bot just like you talk to your human being. So in here we can say, Ola, it's going to come back and say, hopefully, you said Ola. So same exact bot that we saw on Azure through a web chat. Now it's not a web chat, it's part of Skype now. And this is the big benefit that you get with all of these channels because you can deploy your functionality in a platform agnostic way through whatever channel your user is using. Okay? So that's just a Skype app, Skype channel. There are other things you can do like obviously Skype for business and Slack and Facebook Messenger. So this is an app that's running. Let's take a look at Build and that'll show you what it's doing behind the scenes. So it's saying, hey, we have an app, a bot that's running in Azure, but you have not made any code changes yet. You literally haven't even seen your code. You went from a template and you said, give me a basic bot and this is what we spun up for you. There is some code behind it, how do you want to work with it? So you can say, I want to download a zip file, which is your entire solution, kind of downloaded a zip file, you open it up in Visual Studio and then when you're done with your changes, you push it back up to Azure. That's one way. Or you can say, I actually do want to do continuous deployment, continuous builds and deployments. So this is where you say, no, I want to push my code to GitHub or VSTS team services. And then when every time I do a push and I commit, you do a build and you push it to Azure. So you can do CI CD. But if you are working with something super simple like this one, you can do the online code editor. And what that does, it just opens up your solution inside of a browser. And if you kind of recognize the look and feel of this Visual Studio code, this is actually a web app. It's an electronic app. So you kind of see that shell. You see the same code intelligence and some of the benefits that you get. So this is what Azure created for you when we said file new project and then create new bot. This is what it did. And it's gonna say, hey, you can change things here when you're done, just hit build.cmd. We can build it and deploy it back for you. So there's a whole bunch of things in here that are not important. The only thing that's important here is this echo dialog.cs. This is literally the one file that's controlling what your bot does. So this is kind of standard for any Microsoft Bot framework bot. So there is a message received. This is fired when your bot receives a message from the user. So the user says something, it comes to us. And you can actually reset it. So you'll notice that we actually have a counter that counts how many times you say it. And then if you say it reset, it's just gonna reset the counter. So there's a prompt to make sure you're confirming it. But otherwise, it's just gonna say context.postasync. You said that. So this is literally the one line of code that's echoing back what you're saying. That's it. That's the bot, essentially. So just one line that kinda echoes back what you're saying. So this is a bot that's deployed when you go to Azure and just do file new project, give me a bot service. Okay, so this is a bot because it's built on the bot framework, but it's not a bot because it only does one thing. Okay, so if this is all you wanted, then wrapping it around a bot, maybe a little bit of overkill. But this is a nice template to give you some basic plumbing and then you can build on top of that. But I mean, this is a good starting point because not only are you creating a bot, you're also hosting it in Azure and you already have those channels that are configured. So you can put that bot in Skype and Slack and other places. So again, I would point people to the documentation, which is really good. If you go through the quick start here, this is what we did creating a bot but if you want to get the bot builder SDK, then right now you have .NET and Node.js. So if you look at what the .NET side of the story is, you need VS 2017 and then you need the bot template C-Sharp. I mean, it's a template extension that gives you this template, simple echo bot. So you will get the bot framework and then you start with that and then it spits out the same code that you just saw on Azure, but just in C-Sharp and it's local to you and then you can test your bot. Right now, this simple bot is just a web app. So you can kind of fire this up in IIS Express and run it locally. And then we'll talk about a different type of way in which you can test your bot, that's the emulator. So same exact idea, you can do it with .NET and C-Sharp. What I like being on a Mac today is the Node.js side of things because if you're in JavaScript, you can do the exact same things. The bot framework is platform agnostic that way. So what this expects you to do is have NPM installed and then you get this bot builder package essentially. So it has all of the bits that bot builder can do for you. So let me show you what that looks like. So I'm gonna go in here into a folder and bring up my terminal. All right, hopefully this is big enough. So I'm going to go into my folder here. This thing is called the node echo bot. And if I kind of fire this up, if I say node app.js, I'm firing up the app. You don't see anything because it's just a console app, but I can say the same exact things. So it's just echoing back what I say. So same exact idea, it's just running locally in a console app. So if you look at what this is essentially, so I'm gonna fire up VS Code and look at the same folder. Essentially this being a node app, we did a NPM in it. So we have some package.json, we have the node modules in here, but this is that one file that's making the bot work. So essentially with Node.js you have dependencies. So we're depending on the bot builder and we're saying we are building a console connector and whenever you kind of fire up the message received thing, we're gonna take your text and kind of said you said that in one line. So this is Node.js, this is pure JavaScript running on the server side or wherever you have it hosted, but it's your bot written in Node.js. Now this is just local, this is a console app. They kind of step you through. There are some extra packages called Restify which kind of help translate this console app into a RESTful endpoint. Because the bot has to be a RESTful endpoint. So if I do an NPM install of Restify which is what the docs will actually walk you through. So this is RESTify is what we're using. It's a very simple package that kind of helps you make RESTful endpoints out of your Node.js code, whatever your app is doing. So we're using this and then once we have it we can change a little bit of code here. This one is requiring RESTify and same bot builder but we are creating a little server here so we can host it as a RESTful endpoint and then we can take it to the cloud or whatever web endpoint it is. That's our port number and then we are creating a chat bot. The app ID and password we will talk about this. So every bot that's deployed to the Azure bot service has to have a unique identifier and Azure creates that for you. But otherwise it's just gonna say you said that. So if we actually go back and run this now instead of app.js, let's run Node.restfulapp.js. This one said, hey, I'm not a console app. I'm running at this port because you use RESTify. So I'm running it as a RESTful service on port 3978. So how do you test this? You can go to your browser or you can use this little thing which also comes with the bot framework. This is called the bot framework emulator. It looks kind of a little bland without having any inputs here but this is a local emulator that will help you test your bots locally before you're ready to deploy it to whatever service. So in here I can actually go to that same port that we are on. And it's gonna ask for app ID password. You can skip it for now. You can test this locally but once you have to go to Azure you do need the app ID. So this is the exact same app. And now you see that working here inside the emulator. So this is the RESTful endpoint. I don't have it hosted anywhere but I'm able to invoke it. And the nice thing is this one kind of shows you all of the JSON that's coming back and forth between the bot service and you. So this is a super simple emulator but it does a lot of things. And actually the emulator on Windows is a little more sophisticated than the emulator on Mac because one of the things that you get into with bot development is kind of conversations and you have to test your conversations and sometimes you have to kind of start midway the conversation to start. So it's like a little bit of a template where you can pick up a conversation as just simple JSON and kind of start midway and start testing. So it'll let you do all of those things. So that's the emulator. That's one way of running it. So let's close this. That's just a quick example of doing it locally in Node.js. Let's kind of go back to Azure and I'll show you the other side of the story here. So this was our Echo Bot. So let's go home. If I did a new resource again, if I did a web app and then look at these templates. So it's not just the basic template you can do. It comes with five or so templates which can help you down the right path of building a bot. First thing is form. This is one of the most commonly used templates. This is where you have to order a pizza or you have to book a flight out of Seattle. Those repetitive things, because essentially when you do this on your web applications today, you are going through a wizard. None of this is new. It's how you want to interact with your computer. Are you more comfortable doing a more natural conversation rather than just clicking around on your website? So we can kind of walk you through that wizard in a bot. So these are like a series of steps. Then language understanding, this is where we are actually going to call into Lewis in Cognitive Services because this is what actually understands what you mean when you say natural things. So behind it, it's going to be an Azure Cognitive Services app which has to have its own app ID and it needs to be registered. And then that's when you're going to have to train your model. So when you say book a flight out of Seattle, what are the 20 different ways in which you can say it so that your bot understands and then passes it back to the bot? So essentially what we are getting is from the bot framework you are pre-configured to call into Azure Cognitive Services and then Azure Cognitive Services makes sense of what you are saying and brings it back to the bot. And you can do this from C sharp or Node.js. So just a quick example of the form thing which is very easy to look at. I do have a form bot here which is called the sandwich bot because that's just a normal example. So let's go ahead and look at this thing here. We're going to test this in a web bot or web chat window. So here, if you noticed a little messaging here, I can say, hi, I'm up here. And the bot knows that it's a specialized bot and says, hey, it looks like you're trying to order a sandwich because that's what I know. What type of sandwich do you want? So these are now pickers. So you get to pick what you want. I would like a steak and cheese. Now it's going to go through a list of things. Now you're getting to rules, right? So you said this, then that, then this, then that. So, and you can kind of back trace sometimes if your user does not give you the right response. You can say, oh, I didn't understand that. I wanted this from you. So you can kind of go back and forth a little bit. So six inch sub, what bread you want, that, and then within breads, within Italian breads, you have two types. What do you want? What type of cheese? So these are all pickers. Then you get to pick a whole bunch of things. So these are like just numbers that you can pick. Cucumbers, what type of sauce do you want? Let's do honey mustard, and that's it. So it's essentially said I went through these six steps with you, and I made you choose things every step, and you gave me this sandwich. And once you're ready, is this your selection? You said yes, and then said, OK, that's your sandwich. I'm going to send it off to the shop, and they're going to deliver it, whatnot. So just a super simple way of using the form template, which actually kind of gets you quite a bit into these dialogue flows of how to ask the user. And if you look at what this does for you, we'll give it a second. All right, so now this one has a little more stuff to it. So there is a model, which is our sandwich. This has all of your options, like what type of sandwich was it, what type of bread, what type of cheese. It's all in here. And then you have your dialogues as to how you actually control what you ask the user. That's message controller. So this is where your task and your post you're awaiting the message from the user. All of that is kind of coded up here. And then you kind of let the bot kind of drive the conversation as to what exactly it needs to get all the information from the user so we can go about it. So all of this is kind of bundled in, and it's part of the template that you get. It's really easy to call into most cognitive services. And good examples of this are like vision APIs. If you have to have a bot that knows how to understand or make sense of images from the user, you take the image and you hand it off to the Azure Cognitive Services Vision API. We have another customer of ours who uses the Vision API to do quality control on shipping. So they have a little camera that's mounted on top of shipping containers. And they do quality control as things are going out of their warehouses. You can also do sentiment analysis with cognitive services. So as you are talking to your bot, you can kind of sense that the user is getting angry. And you can sense his sentiment and say, oh, maybe we can do other things to make you happy and so on. So all of these things are intelligence that you're adding to your bot. And this is what makes bots smarter and they kind of let you automate workflows. So this is where we are, this is where we start. Some things that I really like pointing out is the thorough documentation that the bot framework has. There are tutorials on how to do just about everything. Let me show you some things that are really interesting. The concepts here, let's do cognitive services, language understanding. Let me do a how to, I thought it was really nicely done. They talk about channels and the thing that I was trying to get to is how you can hook this up to language services. So that's something we'll do in part two. Yeah, we could. So essentially, I mean, just start here, essentially is what I'm saying. And they have documentation on how to use vision API and language services. All of these things that help you go from your bot to other places that give you your bot intelligence. That's it. So bots are nothing more than apps. It's a restful endpoint, but it's platform agnostic so you can put it in whichever channel that your user is using and start automating little things in your workflows that don't need human interaction. Very cool. Yeah, I mean, if you look at some of the most common things that we do on most websites, it's a bunch of steps that we follow, wizards. And this is where bots can come in and make it more conversational and more natural. Right? Yeah. Good introduction. We'll end it for here in this part and we'll come back in part two and see more about how to build them. Absolutely. So again, this was all about bots. You can find me at SMIDIP. That's my social handle on Twitter and GitHub and everywhere. But thanks for watching. All right, and we will see you next time on Visual Studio Toolbox.