为什么我无法在 Skype 频道的 Azure 表中保存和检索机器人数据?

Why I can't save and retrieve bot data in Azure Tables in Skype channel?

过去三个月我一直在使用 bot,我的 Bot 在 Webchannel、direct line、telegram 中完成,现在我在 Skype 频道上工作,一切都很好,除了从 Azure Tables 保存和检索数据,我在 Azure 门户日志中收到错误 "Unknown activity type"。

您可以在下面找到我的代码:

这是主根对话框class

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);
    }
  }
}

这class将数据保存到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;
}

这 Class 从 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;
}

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

我认为我的密钥(context.Activity.ChannelId + 空值)在 Azure 门户日志中生成了错误消息 "Unknown activity type"。