【问题标题】:Microsoft Bot Framework DirectLine Can't Access ConversationsMicrosoft Bot Framework DirectLine 无法访问对话
【发布时间】:2016-11-12 17:47:58
【问题描述】:

我正在尝试使用 Microsoft Bot Framework DirectLine API 来读取消息并将消息添加到其他用户与我的机器人之间的现有对话中。从我读过的内容来看,我相信在使用主机密时这应该是可能的,但它对我不起作用。我正在使用 WebAPI 尝试访问我现有的两个对话(在 Facebook 和 Skype 上),如下所示:

    [HttpPost]
    [Route("remind")]
    public string Remind()
    {
        var secret = System.Configuration.ConfigurationManager.AppSettings["secret"];

        var uri = new Uri("https://directline.botframework.com/");
        var creds = new DirectLineClientCredentials(secret);

        DirectLineClient client = new DirectLineClient(uri, creds);
        Conversations convs = new Conversations(client);

        var conversationIDs = new string[] { "0000000000000000-0000000000000000", "00:0123456789abcdefghijklmnopqrstuvwxyz0123456789-A-_0123456798ABCDEF" }; // Existing Facebook & Skype conversations

        // Send a message to each conversation:
        foreach (var conversationID in conversationIDs)
        {
            Message message = new Message(conversationId: conversationID, fromProperty: "My Bot", text: "Hey dude, remember that thing!");
            Console.WriteLine(message.Text);
            convs.PostMessage(conversationID, message); // FAILS - This executes but doesn't do anything.
        }

        // Try reading the messages from a conversation (just to test if it's working):
        string waterMark = null;
        var set = convs.GetMessages(conversationIDs[0], waterMark); // FAILS - This fails with a 404 not found.
        waterMark = set.Watermark;

        return "Done :-)";
    }

它静默调用 PostMessage() 失败,GetMessages() 失败并返回 404。我似乎在做正确的事情,该机器人是实时的,并且在 Facebook 和 Skype 中与 DirectLine API 分开运行良好。它仅在我使用 DirectLine API 创建新对话时才有效,然后我可以访问其消息并向其发布新消息。

这个问题有点帮助,但并不能完全告诉我该怎么做才能解决它: Difficulty accessing messages in an existing conversation in Microsoft Bot Framework

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 出于安全原因,您不能使用 DirectLine 监视来自另一个对话的消息。你能告诉我更多关于你试图解决的用例场景吗? DirectLine 似乎不是正确的方法。
  • 我正在尝试处理机器人无法回答/帮助用户的情况,并且我希望能够包括一个人(例如来自帮助台)来提供帮助。我试图通过获取例如内容来向人们展示讨论的上下文。最近的 10 条聊天消息,因此用户与人的交互不必从头开始。包括一个人和接受我的机器人不能做所有事情的这一原则对我来说似乎是明智的,所以任何建议都会很棒。在现有对话中添加一个人来创建群聊是理想的,但我也觉得这很困难。
  • 是的,这是一种常见的情况,有许多不同的方法可以解决这个问题。一种是让您的机器人代理在帐户之间进行对话(即 Facebook 最终用户 您的机器人 Facebook 支持人员)。每个人都在与机器人交谈,机器人将消息传递给其他用户。 (也可以是 Facebook 用户 您的机器人 Skype 用户)您的机器人必须存储最后 n 条消息以提供上下文。或者,我看到人们使用位于远端的直线来构建自己的客户支持聊天界面。希望这会有所帮助。
  • 感谢 Lars,在这方面获得一些明确的方向是件好事。我已经设计了一个将消息从 Facebook 路由到 Skype 的解决方案原型,这非常酷。但是,就实际应用程序中的代理而言,是否有“最佳方式”来存储两个对话之间的链接,或者我应该将它们保存在我自己的数据存储中?您是否有任何与经纪相关的示例代码,以使我不必从头开始?最后一个问题,这是最好的关于经纪的新问题吗?谢谢,斯图
  • 请注意 BF 目前在本地支持的一些东西,因此在您自己的数据存储中维护是要走的路。

标签: c# botframework direct-line-botframework


【解决方案1】:

出于安全原因,您不能使用 DirectLine 监视来自另一个对话的消息。对于您描述的场景(升级为人类),有许多不同的方法可以解决这个问题。一种是让您的机器人代理在帐户之间进行对话(即 Facebook 最终用户 您的机器人 Facebook 支持人员)。每个人都在与机器人交谈,机器人将消息传递给其他用户。 (也可以是 Facebook 用户 您的机器人 Skype 用户)您的机器人必须存储最后 n 条消息以提供上下文。或者,我看到人们使用位于远端的直线来构建自己的客户支持聊天界面。希望这会有所帮助

【讨论】:

    猜你喜欢
    • 2017-08-27
    • 1970-01-01
    • 2017-04-27
    • 2016-08-21
    • 2018-02-26
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多