У меня есть эти три файла классов, над которыми я работаю в среде бота. Но когда я запускаю свой проект в эмуляторе бота, запускаются только диалоги файла WelcomeDialog, а другим файлам не нравится, если я говорю "привет", которыйэто из файла WelcomeDialog Я получаю соответствующее сообщение в эмуляторе, но если произнесите «Искать мне» что-то из поиска Bing, ответ эмулятора, я не могу понять, извините, я не знаю, проблема в файле контроллера сообщений или чтоодновременно работает только один файл cs
WelcomeDialog .cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Builder;
using Microsoft.Bot.Connector;
using Microsoft.Azure.CognitiveServices.Search;
namespace MyFYP.Dialogs
{
[Serializable] //As bot framework serilaizes and deserializes dialogs
public class WelcomeDialog : IDialog<object>
{
public Task StartAsync(IDialogContext context)
{
context.Wait(PerformActionAsync); // calling PerformActionAsync
return Task.CompletedTask;
}
public async Task PerformActionAsync(IDialogContext context, IAwaitable<object> result)
{ //method
var activity = await result as Activity;
if (activity.Text.Equals("Hello") || activity.Text.Equals("Hi") || activity.Text.Equals("hi") || activity.Text.Equals("hii"))
{
await context.PostAsync("Welcome to the Chatbot Portal of LMS");
}
else if (activity.Text.Equals("How are you"))
await context.PostAsync("I am doing well AlhamdULLILAH what I can do for you");
else if (activity.Text.Equals("what can you do") || activity.Text.Equals("What services you provide"))
await context.PostAsync("i CAN OFFER A COUPLE OF SERVICES ");
else await context.PostAsync("I am unable to understand you");
}
}
}
BingSearch.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Builder;
using Microsoft.Bot.Connector;
using Microsoft.Azure.CognitiveServices.Search;
namespace MyFYP.Dialogs
{
[Serializable] //As bot framework serilaizes and deserializes dialogs
public class BingSearch : IDialog<object>
{
private string searchtype = string.Empty;
private string query = string.Empty;
private const string BING_KEY = "3b681ec3e2ed47f3930493d261a28e6d";
private const string searchWeb = "Search Web";
public Task StartAsync(IDialogContext context)
{
context.Wait(MessageActionAsync); // calling PerformActionAsync
return Task.CompletedTask;
}
private async Task MessageActionAsync(IDialogContext context, IAwaitable<object> result)
{ //method
var activity = await result as Activity;
if (activity.Text.Equals("Search me something") || activity.Text.Equals("i want some material"))
{
PromptDialog.Choice(
context: context,
resume: ResumeAfterSearchTypeSelecting,
prompt: "Select searcht type you want to perform",
options: new List<string>
{
searchWeb
}
);
}
}
private async Task ResumeAfterSearchTypeSelecting(IDialogContext context, IAwaitable<string> result)
{
searchtype = (await result) as string;
PromptDialog.Text(
context: context,
resume: ResumeAfterEnteringQuery,
prompt: "Enter your query"
);
}
private async Task ResumeAfterEnteringQuery(IDialogContext context, IAwaitable<string> result)
{
query = (await result) as string;
switch (searchtype)
{
case searchWeb:
{
await BingSearchHelper.SearchWebAsync(context, BING_KEY, query);
break;
}
}
context.Wait(MessageActionAsync);
}
}
}
BingSearchHelper.cs
using System.Web;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Builder;
using Microsoft.Bot.Connector;
using Microsoft.Azure.CognitiveServices.Search.WebSearch;
using Microsoft.Azure.CognitiveServices.Search.WebSearch.Models;
namespace MyFYP.Dialogs
{
public class BingSearchHelper
{
public async static Task SearchWebAsync(IDialogContext context,string key,string query)
{
IWebSearchClient client = new WebSearchClient(new ApiKeyServiceClientCredentials(key));
var result = await client.Web.SearchAsync(query:query, count:3, safeSearch: SafeSearch.Strict);
if(result?.WebPages?.Value?.Count>0)
{
await context.PostAsync($"Here is top 3 results for {query} ");
foreach(var item in result.WebPages.Value)
{
HeroCard card = new HeroCard
{
Title = item.Name,
Text = item.Snippet,
Buttons = new List<CardAction>
{
new CardAction(ActionTypes.OpenUrl,"Open Page",value:item.Url)
}
};
var message = context.MakeMessage();
message.Attachments.Add(card.ToAttachment());
await context.PostAsync(message);
}
}
}
}
}