网络中的机器人模拟器和聊天机器人的响应不同

时间:2018-07-09 14:43:56

标签: c# botframework direct-line-botframework web-chat

我已经在网络频道和直线上创建了一个聊天机器人。

当我在bot模拟器中进行测试时,我得到了正确的响应,而当我尝试在localhost(网络聊天)中测试相同的意图时,我得到了不同的响应。

我将向您展示和示例:

  • 致电代理商
  • 请给我您的客户号码
  • (发送客户编号后)您确定吗?
  • 如果单击“是”,则数据存储在数据库(sql server)中

如果在localhost中保存,则会得到:您取消了表单(实际上我没有取消任何表单

这里是luisdialog,我称之为:

        [LuisIntent("human")]
    public async Task human(IDialogContext context, LuisResult result)
    {

        var form = new FormDialog<Human>(
         new Human(),
         Human.BuildForm,
         FormOptions.PromptInStart,
         result.Entities);
        context.Call<Human>(form, LossFormCompleted)

    }


    private async Task LossFormCompleted(IDialogContext context, 
        IAwaitable<Human> result)
    {
        HumanCall form = null;
        try
        {
            form = await result;
        }
        catch (OperationCanceledException)
        {
        }
        if (form == null)
        {
            await context.PostAsync("You cancelled the form.");
        }
        else
        {
            //call the LossForm service to complete the form fill
            var message = $"Your data are stored in database";
            await context.PostAsync(message);
        }
        context.Wait(this.MessageReceived);
    }

表单模型是:

[Serializable]
public class Human
{


    [Prompt("What is your contract number?")]
    public string contract;





    public static IForm<Human> BuildForm()
    {
        OnCompletionAsyncDelegate<HumanCall> wrapUpRequest = async (context, state) =>
        {

            using (BotModelDataContext BotDb = new BotModelDataContext())
            {
                tblBot bot = new tblBot();
                bot = BotDb.tblBots.SingleOrDefault(q => q.Reference == state.contract);


                if (bot != null)
                {
                    using (bbbserviceSoapClient cws = new bbbserviceSoapClient())
                    {
                        viewc a= new viewc();

         a.Lastname = bot.Lastname;


                    }
                }
            }




        };
        return new FormBuilder<Human>().Message
        ("can you send us some info ?")

        .Field(nameof(contract))

            .OnCompletion(wrapUpRequest)
            .Confirm("Are you sure: Yes or No. ")
            .Build();
    }


 }
 }

有人在我错的地方可以帮助我吗?我该怎么做才能检索相同的响应?这是关于超时问题还是您要做什么?

1 个答案:

答案 0 :(得分:1)

我根据您提供的代码进行了测试,并做了一些修改,我发现如果wrapUpRequest方法中发生某些异常,它将显示 “您已取消表格” ,而不是消息 “您的数据存储在数据库中”

enter image description here

因此,我怀疑通过网络聊天进行测试时,wrapUpRequest方法(也许是数据库查询问题或bbbserviceSoapClient发送的请求超时)中发生的异常,导致了问题。

要解决此问题,您可以尝试实现/编写自定义日志,以在通过网络聊天进行测试时检测wrapUpRequest方法中是否发生任何异常。