DirectLineJS接收Bot回复的副本

时间:2017-05-02 16:17:10

标签: javascript botframework direct-line-botframework

我使用DirectLineJS通过网站从自定义网络聊天中进行通信。我使用的是Microsoft的github https://github.com/Microsoft/BotFramework-DirectLineJS

发布的格式

我是如何实现它的

var directLine;
    directLine= new DirectLine.DirectLine({
        secret: "My_DirectLine_Secret",
    });

    function sendReceiveActivity(msg) {
        document.getElementById("inputtext").value = "";
        conversation.innerHTML = conversation.innerHTML + "ME - " + msg + "<br/><br/>";

        directLine.postActivity({
            from: { id: 'myUserId', name: 'myUserName' }, // required (from.name is optional)
            type: 'message',
            text: msg
        }).subscribe(
            id => console.log("Posted activity, assigned ID ", id),
            error => console.log("Error posting activity", error)
            );

        directLine.activity$
            .filter(activity => activity.type === 'message' && activity.from.id === 'mybot')
            .subscribe(
            message => console.log(message)"
            );
    }

每当我开始阅读邮件时,每个邮件的来回数量都会增加一个,因此我的网站将经历这个循环:

我 - 向僵尸发送消息

BotReply - msg 1

我 - 向机器人发送一些消息

BotReply - msg 2

BotReply - msg 2

我 - 一些消息

BotReply - msg 3

BotReply - msg 3

BotReply - msg 3

等等

我从机器人收到的响应ID对于重复的消息都没有增加,所以说msg 3有ID = 00005,每个BotReply - msg 3有ID = 00005,但是msg 4将是ID = 00007

在我的实际机器人中,我使用await context.PostAsync("Some mesage");发送我的消息,而不是其他

我可以做些什么来减少邮件回复只接收一个?

文档说明&#34; Direct Line将有助于向您的客户端发送每个已发送活动的副本,因此常见的模式是过滤来自以下内容的传入消息:&#34;即使我过滤我的消息来自&#34; mybot&#34;

1 个答案:

答案 0 :(得分:2)

如果没有看到剩下的代码,很难准确确定发生了什么。但是,每次发送邮件时,您似乎都在订阅接收邮件。请尝试更改您的代码,以便您只订阅一次:

var directLine = new DirectLine.DirectLine({
        secret: "My_DirectLine_Secret",
    });

directLine.activity$
          .filter(activity => activity.type === 'message' && activity.from.id === 'mybot')
          .subscribe(
            message => console.log(message)
            );

    function sendReceiveActivity(msg) {
        document.getElementById("inputtext").value = "";
        conversation.innerHTML = conversation.innerHTML + "ME - " + msg + "<br/><br/>";

        directLine.postActivity({
            from: { id: 'myUserId', name: 'myUserName' }, // required (from.name is optional)
            type: 'message',
            text: msg
        }).subscribe(
            id => console.log("Posted activity, assigned ID ", id),
            error => console.log("Error posting activity", error)
            );
    }