Real Time Bot Project Using Microsoft Bot Framework

Introduction

In my previous article "Creating a Simple Bot Application using Microsoft Bot Framework", I  explained how can we create a very simple Bot application using Microsoft Bot Framework.

In this article I will create a very simple real time Bot Application using Microsoft Bot Framework, that is Stock Bot. In this application I will use Yahoo's Finance API. I will pass a stock symbol as a message and I will get the current stock value of that particular company symbol.
 
Let's start step by step:

Step 1: Firstly, create a Bot Application,
 
Step 2: Create a class in your project with any name. I am giving Name as Yahoo Bot Application and writing the following code inside it.
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Net;  
  5. using System.Threading.Tasks;  
  6. using System.Web;  
  7.   
  8. namespace StockBot2  
  9. {  
  10.     public class YahooBot  
  11.     {  
  12.         public static async Task<double?> GetStockRateAsync(string StockSymbol)  
  13.         {  
  14.             try  
  15.             {  
  16.                 string ServiceURL = $"http://finance.yahoo.com/d/quotes.csv?s={StockSymbol}&f=sl1d1nd";  
  17.                 string ResultInCSV;  
  18.                 using (WebClient client = new WebClient())  
  19.                 {  
  20.                     ResultInCSV = await client.DownloadStringTaskAsync(ServiceURL).ConfigureAwait(false);  
  21.                 }  
  22.                 var FirstLine = ResultInCSV.Split('\n')[0];  
  23.                 var Price = FirstLine.Split(',')[1];  
  24.                 if (Price != null && Price.Length >= 0)  
  25.                 {  
  26.                     double result;  
  27.                     if (double.TryParse(Price, out result))  
  28.                     {  
  29.                         return result;  
  30.                     }  
  31.                 }  
  32.                 return null;  
  33.             }  
  34.             catch (WebException ex)  
  35.             {  
  36.                 //handle your exception here  
  37.                 throw ex;  
  38.             }  
  39.         }  
  40.     }  
  41. }  
In the above code you can see a function that is GetStockRateAsync, which takes a StockSymbol as a parameter. I am calling Yahoo Finance API, where I will pass that symbol and that will return a CSV file of stock market rate, and I am splitting CSV File by comma because CSV File means Comma Separated Value. So, I am splitting by comma(,) and getting current price of that stock. Then I am converting it into double because of course our stock rate will be in double and returning current price.
 
Step 3: Now in MessagesController create a class that will call this above function., so I am creating  a GetStock function in My MessageController class.
 
GetStock function's Code
  1. private async Task<string> GetStock(string StockSymbol)  
  2. {  
  3.     double? dblStockValue = await YahooBot.GetStockRateAsync(StockSymbol);  
  4.     if(dblStockValue==null)  
  5.     {  
  6.         return string.Format("This \"{0}\" is not an valid stock symbol",StockSymbol);  
  7.     }  
  8.     else  
  9.     {  
  10.         return string.Format("Stock : {0}\n Price : {1}",StockSymbol,dblStockValue);  
  11.     }  
  12.   
  13. }  
In above code you can see I am calling my GetStockRateAsync function that will return a nullable double. I am checking whether that stock value is null or not.
According to stock value I am returning appropriate string.
 
Step 4: Calling GetStock function from Post action of MessagesController.
 
Post Action's Code in MessagesController
  1. public async Task<Message> Post([FromBody]Message message)  
  2. {  
  3.     if (message.Type == "Message")  
  4.     {  
  5.         string StockRateString = await GetStock(message.Text);  
  6.   
  7.         // return our reply to the user  
  8.         return message.CreateReplyMessage(StockRateString);  
  9.     }  
  10.     else  
  11.     {  
  12.         return HandleSystemMessage(message);  
  13.     }  
  14. }  
In above code you can see when a user will send a message that will be nothing but a symbol, GetStock function will be called and will return an appropriate message as a reply message.
 
Step 5: Run the project and simulate in Bot Framework Simulator.
 
Output:

Initial Simulator Window

 
If I send invalid input stock symbol

 
For Microsoft stock:

 
For Google stock:

 
For Apple Stock:

 
Conclusion: In this article we have created a very simple bot application that will take stock symbol as an Input and send an auto reply message of that particular stock rate.
 
Read more articles on Machine Learning