Почему я не могу сохранить и получить данные бота в таблицах Azure на канале Skype? - PullRequest
0 голосов
/ 26 сентября 2018

Я работаю с ботом в течение последних трех месяцев, мой бот закончил через веб-канал, прямую линию, телеграмму, и теперь я работаю на канале Skype, все в порядке, кроме сохранения и извлечения данных из таблиц Azure.Я получаю сообщение об ошибке «Неизвестный тип активности» в журнале портала 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);
    }
  }
}

Thisкласс для сохранения данных в 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;
}

1 Ответ

0 голосов
/ 28 сентября 2018

Я нашел решение, я использовал некоторые значения в Skype, которые я использовал в прямой линии, и это значение было нулевым в Skype, поэтому Azure не принимал операцию вставки.

Я думаю, мой ключ (context.Activity.ChannelId + пустое значение) сгенерировал сообщение об ошибке «Неизвестный тип действия» в журнале портала Azure.

...