最近三个月我一直在使用 bot,我的 Bot 在 Web 频道、直线、电报中完成,现在我正在使用 Skype 频道,一切都很好,除了从 Azure Tables 保存和检索数据,我得到了Azure 门户日志中的错误“未知活动类型”。
你可以在下面找到我的代码:
这是主要的 rootdialog 类
using System;
using System.Threading.Tasks;
using Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Connector;
using SimpleEchoBot.Formulário;
using Microsoft.Bot.Builder.FormFlow;
using SimpleEchoBot.Serviço;
using System.Collections.Generic;
using System.Text;
using AdaptiveCards;
using System.Threading;
namespace SimpleEchoBot.Dialogs
{
[Serializable]
public class RootDialog : IDialog<EntidadeCliente>
{
private string nome;
private string email;
public async Task StartAsync(IDialogContext context)
{
if (context.Activity.ChannelId == "telegram")
{
context.Wait(TelegramAsync);
}
else if (context.Activity.ChannelId == "skype")
{
context.Wait(SkypeAsync);
}
else
{
context.Wait(MessageReceivedAsync);
}
}
private async Task SkypeAsync(IDialogContext context,
IAwaitable<IMessageActivity> result)
{
context.Call(new NomeDialog(), NomeDialogResumeAfter);
}
private async Task NomeDialogResumeAfter(IDialogContext
context,IAwaitable<string> result)
{
try
{
nome = await result;
BuscarDadosAzure buscarDadosAzure = new BuscarDadosAzure();
EntidadeCliente cliente = new EntidadeCliente();
GravarDadosAzure gravarDadosAzure = new GravarDadosAzure();
cliente = buscarDadosAzure.PesquisarAtendimento(nome);
gravarDadosAzure.GravarDados(context, cliente);
await context.PostAsync($"Agora que já nos conhecemos { nome }, quais
seriam as informações poderia lhe ajudar?");
context.Wait(MessageReceivedAsync);
}
catch (TooManyAttemptsException)
{
await context.PostAsync("Me desculpe, não consegui registrar o seu
nome, agradecemos a sua visita.");
context.EndConversation(EndOfConversationCodes.UserCancelled);
}
}
}
此类将数据保存到 Azure
public class GravarDadosAzure
{
public EntidadeCliente GravarDados(IDialogContext context,
EntidadeCliente cliente)
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
CloudConfigurationManager.GetSetting("StorageConnectionString2"));
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
Microsoft.WindowsAzure.Storage.Table.CloudTable table =
tableClient.GetTableReference("Usuario");
TableOperation insertOperation =
TableOperation.InsertOrReplace(cliente);
table.Execute(insertOperation);
return cliente;
}
此类从 Azure 检索数据。
public EntidadeCliente PesquisarAtendimento(EntidadeCliente cliente,
[Optional] string
ConversationId)
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
CloudConfigurationManager.GetSetting("StorageConnectionString2"));
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
CloudTable table = tableClient.GetTableReference("Usuario");
if (ConversationId == null)
{
TableQuery<EntidadeCliente> query = new TableQuery<EntidadeCliente>
().Where(TableQuery.GenerateFilterCondition("Nome",
QueryComparisons.Equal, cliente.nome));
BuscarEntidade(table, cliente, query);
}
else
{
TableQuery<EntidadeCliente> query = new TableQuery<EntidadeCliente>
().Where(TableQuery.GenerateFilterCondition("ConversationId",
QueryComparisons.Equal, ConversationId));
BuscarEntidade(table, cliente, query);
}
return cliente;
}