0

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

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

我会告诉你和例子:

  • 打电话给代理
  • 给我你的客户号码
  • (发送客户编号后)您确定吗?
  • 如果单击是...数据存储在数据库中(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();
    }


 }
 }

有人可以帮我在哪里错吗?我能做些什么来检索相同的响应?这是关于超时问题还是你在做什么?

4

1 回答 1

1

我根据您提供的代码进行了测试并稍作修改,我发现如果wrapUpRequest方法中出现一些异常,它会显示“您取消了表单”而不是“您的数据存储在数据库中”的消息。

在此处输入图像描述

所以我怀疑当您通过网络聊天进行测试时,wrapUpRequest方法中发生异常(可能是数据库查询问题或 bbbserviceSoapClient 发送的请求超时等) ,这会导致问题。

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

于 2018-07-10T07:21:18.157 回答