Introduction
In our previous article, we learned how to Create and Connect a chatbot with Azure Bot Service. In this article, we are going to create an intelligent bot application using Microsoft Bot Framework.
ngrok Software
So first we need to download ngrok software. What is ngrok ?
"ngrok" is a network tunneling software. The Bot Framework Emulator works with ngrok to communicate with bots hosted remotely. Click this link https://ngrok.com/download to download ngrok network tunneling software.
Bot Framework Emulator
The 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. So we need to download Bot Framework Emulator for both local and server testing. So please go through this link to download Bot Framework Emulator click here.
After successful download please run the exe file for Bot Framework Emulator. Then first time it will open a "App Settings Window" there we need to provide the exact path of ngrok in our system ( Provide "ngrok" saved folder path in our system ).
The following screenshot "ngrok" saved into C drive Downloads folder ( C:\Users\RajeeshMenoth\Downloads\ngrok ).
Bot Framework
Web.config
When you are connecting to remote server or anything other than local host then we need to provide the following credentials "BotId" & "MicrosoftAppId" & "MicrosoftAppPassword" in Web.Config and Bot Framework Emulator. This we will get it from azure "AppSettings" in our created Web App Bot.
  1. <configuration>
  2. <appSettings>
  3. <!-- update these with your BotId, Microsoft App Id and your Microsoft App Password-->
  4. <add key="BotId" value="YourBotId" />
  5. <add key="MicrosoftAppId" value="" />
  6. <add key="MicrosoftAppPassword" value="" />
  7. </appSettings>
  8. </configuration>
Microsoft Bot Framework In Visual Studio
Click on "File -> New -> Project -> Visual C# -> Bot Application"

Bot Framework
Note

If the Bot Application Template is not present in the Visual Studio 2015 then please go to "Tools -> Extensions and Updates". Then search and Install the "Bot Application" in our Visual Studio.

Bot Framework
Code
I just changed the default code for Web App Bot. Then we added our own logic into this C# Code in Bot Application.
  1. using System;
  2. using System.Linq;
  3. using System.Net;
  4. using System.Net.Http;
  5. using System.Threading.Tasks;
  6. using System.Web.Http;
  7. using Microsoft.Bot.Connector;
  8. namespace Bot_App
  9. {
  10. [BotAuthentication]
  11. public class MessagesController : ApiController
  12. {
  13. ///
  14. <summary>
  15. /// POST: api/Messages
  16. /// Receive a message from a user and reply to it
  17. /// </summary>
  18. public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
  19. {
  20. if (activity.Type == ActivityTypes.Message)
  21. {
  22. ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));
  23. // calculate something for us to return
  24. int length = (activity.Text ?? string.Empty).Length;
  25. Activity reply = activity.CreateReply("");
  26. // return our reply to the user
  27. switch (activity.Text)
  28. {
  29. case "hi":
  30. case "hello":
  31. reply = activity.CreateReply($"{activity.Text} buddy, How may I assist you ?");
  32. break;
  33. case "how are you":
  34. reply = activity.CreateReply($"Fine , What about you ?");
  35. break;
  36. case "Where are you ?":
  37. reply = activity.CreateReply($"Bangalore , What about you ?");
  38. break;
  39. case "bye":
  40. reply = activity.CreateReply($"Bye , Thank you !!");
  41. break;
  42. default:
  43. reply = activity.CreateReply($"This is chat bot using Bot Framework !!");
  44. break;
  45. }
  46. await connector.Conversations.ReplyToActivityAsync(reply);
  47. }
  48. else
  49. {
  50. HandleSystemMessage(activity);
  51. }
  52. var response = Request.CreateResponse(HttpStatusCode.OK);
  53. return response;
  54. }
  55. private Activity HandleSystemMessage(Activity message)
  56. {
  57. if (message.Type == ActivityTypes.DeleteUserData)
  58. {
  59. // Implement user deletion here
  60. // If we handle user deletion, return a real message
  61. }
  62. else if (message.Type == ActivityTypes.ConversationUpdate)
  63. {
  64. // Handle conversation state changes, like members being added and removed
  65. // Use Activity.MembersAdded and Activity.MembersRemoved and Activity.Action for info
  66. // Not available in all channels
  67. IConversationUpdateActivity update = message;
  68. var client = new ConnectorClient(new Uri(message.ServiceUrl), new MicrosoftAppCredentials());
  69. if (update.MembersAdded != null && update.MembersAdded.Any())
  70. {
  71. foreach (var newMember in update.MembersAdded)
  72. {
  73. if (newMember.Id != message.Recipient.Id)
  74. {
  75. var reply = message.CreateReply();
  76. reply.Text = $"Welcome {newMember.Name}!";
  77. client.Conversations.ReplyToActivityAsync(reply);
  78. }
  79. }
  80. }
  81. }
  82. else if (message.Type == ActivityTypes.ContactRelationUpdate)
  83. {
  84. // Handle add/remove from contact lists
  85. // Activity.From + Activity.Action represent what happened
  86. }
  87. else if (message.Type == ActivityTypes.Typing)
  88. {
  89. // Handle knowing tha the user is typing
  90. }
  91. else if (message.Type == ActivityTypes.Ping)
  92. {
  93. }
  94. return null;
  95. }
  96. }
  97. }
Localhost
Run our Bot Application in local then it will open our application with a localhost port number. So we can use this in our "Bot Framework Emulator".
The bot endpoint like this : "http://your_bots_hostname/api/messages"

Bot Framework
Bot Endpoint
In the Bot Framework Emulator we can add our localhost or remote server "bot end point". We can directly connect localhost port number in Bot Framework Emulator. But note that in the actual server endpoint we need to given "Microsoft App ID" and "Microsoft App Password".

Bot Framework
Actual endpoint of our chat bot is getting from Apps Setting ( for this we need to create a Web Chat Bot in Azure Using Bot Service ).

Bot Framework
Application Settings
We will get all the credentials of our Web Chat Bot App ( Azure ) in Apps Setting ( for this we need to create a Web Chat Bot in Azure Using Bot Service ).

Bot Framework
Output
Click on the "Connect" then it will trigger our Bot Application.

Bot Framework
Download
Summary
We learned how to Create An Intelligent Bot Application Using Microsoft Bot Framework. I hope this article is useful for all Azure chat bot beginners.
Reference
See Also

You can download other ASP.NET Core source codes from MSDN Code, using the link, mentioned below.