«Операция возвратила неверный код состояния« badrequest »возвращается, когда бот публикуется на канале Teams .: Bot Framework - PullRequest
2 голосов
/ 23 сентября 2019

Я новичок в изучении инфраструктуры ботов в Azure.NET, я натолкнулся на этот пример бота (https://github.com/tompaana/intermediator-bot-sample), который отлично демонстрирует сценарий «без участия человека». Я мог выполнить его на локальном хосте, и он работал какожидается.

Когда я опубликовал этот POC на канале MS Teams через службу Azure Bot, этот код возвращает мне исключение «Операция вернула недопустимый код состояния« badrequest ». Это происходит, в частности, когда набирается @Bot GetRequests»в командах. (Эта команда используется для извлечения ожидающих принятых запросов во время сценариев, выполняемых вручную).

Вот фрагмент кода, который вызывает проблему:

  //This is the Entry point method of the Bot application
  protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
  {

    if (turnContext.Activity.Text == "@Bot GetRequests")
    {
     await HandleCommandAsync(turnContext);
    }

 }

 public async virtual Task<bool> HandleCommandAsync(ITurnContext context)
 {
        Activity activity = context.Activity;           
        Command command = Command.FromMessageActivity(activity);          
        bool wasHandled = false;
        Activity replyActivity = null;
        ConversationReference sender = MessageRouter.CreateSenderConversationReference(activity);

        switch (command.BaseCommand)
        {               
            case Commands.GetRequests:

                IList<ConnectionRequest> connectionRequests = _messageRouter.RoutingDataManager.GetConnectionRequests();

                replyActivity = activity.CreateReply();

                replyActivity.Attachments = CreateMultipleConnectionRequestCards(_messageRouter,
                       connectionRequests, activity.Recipient?.Name);

                replyActivity.ChannelData = JsonConvert.SerializeObject(connectionRequests);                                
                wasHandled = true;                  
                break;                             
       }

       if (replyActivity != null)
       {
            //Exception is thrown here when the Bot is published to Teams channel'
            await context.SendActivityAsync(replyActivity);
       }            
        return wasHandled;
   }


   public static IList<Attachment> CreateMultipleConnectionRequestCards(MessageRouter messageRouter,
        IList<ConnectionRequest> connectionRequests, string botName = null)
    {
        IList<Attachment> attachments = new List<Attachment>();

        foreach (ConnectionRequest connectionRequest in connectionRequests)
        {
            attachments.Add(CreateConnectionRequestCard(messageRouter, connectionRequest, botName).ToAttachment());
        }
        return attachments;
  }

Япросто любопытно, что если бы кто-то из сообщества разработчиков когда-либо сталкивался с подобной проблемой. Если да, я был бы очень признателен, если бы я мог получить какую-либо помощь по этому вопросу, чтобы выйти из этой проблемы.

...