0

最近三个月我一直在使用 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;
}
4

1 回答 1

1

我找到了解决方案,我在 Skype 中使用的一些值与我在 directline 中使用的值相同,并且该值在 Skype 中为空,这就是 Azure 不接受插入操作的原因。

我认为我的密钥(context.Activity.ChannelId + 空值)在 Azure 门户日志中生成了错误消息“未知活动类型”。

于 2018-09-28T13:35:32.100 回答