【问题标题】:How to terminate a Bot conversation (and get client details)?如何终止 Bot 对话(并获取客户详细信息)?
【发布时间】:2016-08-10 17:42:53
【问题描述】:

我有一个简单的 Bot,如下所示:

[Serializable]
[Template(TemplateUsage.NotUnderstood, "I do not understand \"{0}\".", "Try again, I don't get \"{0}\".")]
class MyOrder
{
    public string Subject;
    public string Description;

    public static IForm<MyOrder> BuildForm()
    {

        return new FormBuilder<MyOrder>()
                    .Field(nameof(MyOrder.Subject), "What Subject should I use?")
                    .Field(nameof(MyOrder.Description), "And what Description?")
                    .AddRemainingFields()
                    .OnCompletionAsync(MyFormComplete)
                    .Build();
    }


    private static async Task MyFormComplete(IDialogContext context, MyOrder order)
    {

        if (order != null)
        {
            await context.PostAsync($"Created. Number is 9833");
        }
        else
        {
            await context.PostAsync("Form returned empty response!");
        }

    }

一旦表单完成,就会进行 MyFormComplete 回调。

第一个问题 - 如何在该函数中访问客户详细信息?我需要知道 Skype 句柄,以便将其映射到内部用户。

其次 - 完成表格后,我无法开始新的表格。无论我在客户端输入什么,它都会不断触发回调函数。必须有一种方法来终止会话/对话,以便来自 Skype 客户端的下一个文本将开始一个新的对话/表单。是吗?

【问题讨论】:

  • 好的,我想出了如何使用 Chain.From(FormDialog.FromForm(MyOrder.BuildForm)) 让对话再次发生。但我仍然需要知道如何在回调函数中获取 Skype callerID。它存在于上下文中,但仅作为私有的。在处理对话框数据时,我应该使用一种机制或不同的模式来知道 callerId 吗?

标签: botframework


【解决方案1】:

解决了如何在 Dialog 的 CompletionDelegate 中获取 Skype 呼叫者 ID。在构建对话框之前,只需将消息的 From 详细信息添加到 MessageController 内的 message.BotUserData 即可。

message.BotUserData = JObject.FromObject(message.From)

然后我可以在该回调的上下文中访问它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-24
    • 2016-10-24
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    相关资源
    最近更新 更多