Microsoft Bot Framework - Bot在未被要求时返回特定单词

时间:2016-06-25 22:20:42

标签: c# bots botframework

我一直在尝试一个非常奇怪的错误。我发现在某些词上,它只是将消息返回。所以这是当前在Slack上运行的机器人的代码:

using System;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Web.Http;
using Microsoft.Bot.Builder.Dialogs;
using System.Web.Http.Description;
using Microsoft.Bot.Connector;
using Newtonsoft.Json;

namespace SharpBot
{
    [BotAuthentication]
    public class MessagesController : ApiController
    {
        /// <summary>
        /// POST: api/Messages
        /// Receive a message from a user and reply to it
        /// </summary>
        public async Task<Message> Post([FromBody] Message message)
        {
                if (message.Type == "Message")
                {
                    // return our reply to the user
                    message.BotPerUserInConversationData = null;
                    return await Conversation.SendAsync(message, () => new EchoDialog());
                }
            return null;
        }
    }

    [Serializable]
    public class EchoDialog : IDialog<object>
    {
        public async Task StartAsync(IDialogContext context)
        {
            context.Wait(MessageReceivedAsync);
        }

        public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<Message> argument)
        {
            var message = await argument;
            if (message.Text.ToLowerInvariant().Contains("echo request"))
            {
                await context.PostAsync("echo reply");
            }
            context.Wait(MessageReceivedAsync);
        }
    }
}

如你所见,这是非常直截了当的。当用户写echo request时,它会返回echo reply。这很有效。如果用户没有写出来,那就应该忽略它,对吧?它确实忽略了99%我对它说的话。但如果我写下rus这个词,它只会回复`rus。

我无法找出它为什么这样做。我看不出代码有什么问题,所以它可以在Bot框架中吗?

首先我认为这个问题与Slack有关,但在我的机器人实施FB Messenger后,我发现它也发生在那里。奇怪的是,它不会发生在我的电脑上的Bot仿真器上,这让我觉得它可能与代码无关。

1 个答案:

答案 0 :(得分:2)

我已经能够通过关闭Bot Framework的翻译服务来解决问题。我仍然不知道为什么它会返回这些词。我怀疑这是他们身边的一个错误