【问题标题】:How to: MS Bot directline messaging using a websocket如何:使用 websocket 的 MS Bot 直接消息传递
【发布时间】:2018-08-14 15:12:34
【问题描述】:

我正在尝试弄清楚如何使用 MicroSoft 机器人 Directline 通信。我可以很好地连接,使用 POST 和 GET 发送和接收消息。我的问题是尝试使用 WebSockets 时。我开始对话,取回我的 conversationId 和 streamUrl,我使用 streamUrl 创建了一个新的 WS,并且我的机器人定期 ping,证明我已连接。使用 we.Send() 不会引发错误,但我没有得到响应。有人知道下一步吗?提前致谢。

function StartConversation(params) {
    fetch('https://directline.botframework.com/v3/directline/conversations', {
            method: "POST", // *GET, POST, PUT, DELETE, etc.
            mode: "cors", // no-cors, cors, *same-origin
            cache: "no-cache", // *default, no-cache, reload, force-cache, only-if-cached
            credentials: "same-origin", // include, same-origin, *omit
            headers: {
                "Authorization": `Bearer ${BearerToken}`,
                "Content-Type": "application/json; charset=utf-8"
            },
            redirect: "follow", // manual, *follow, error
            referrer: "no-referrer", // no-referrer, *client 
        })
        .then(response => response.text())  
        .then(function (params) {
            localStorage.setItem(storageKey, params);
            ConnectWebSocet();
        })
        .catch(error => console.error(`Fetch Error =\n`, error));
}

function ConnectWebSocet() {
    var token = GetBotToken();
    ws = new WebSocket(token.streamUrl);
    ws.onopen = function (v, e) {
        console.log('open', v);
    };

    ws.onmessage = function (evt) {
        console.log(evt);
    };
}

【问题讨论】:

  • 我不认为你应该在使用 WebSockets 发送消息后得到任何响应(虽然我可能是错的)。顺便说一句,您在发送消息后期待什么?
  • 嗨@Meloy,有什么更新吗?如果您在开始对话后发送一些消息,是否可以通过 WebSocket 流接收消息?
  • 抱歉,我已经转向了不同的策略。我想在发送另一个电话后需要接收新消息。我还是新手,感谢所有帮助。

标签: javascript botframework


【解决方案1】:

不会抛出错误,但我没有得到响应。

根据您的代码,我们可以找到您只是start a conversation,而不是send activities。那时,可能没有可用的消息可以推送到通过 WebSocket 连接的客户端,因此您没有发现任何消息被接收并写入浏览器控制台选项卡。

如果您在开始对话后尝试发送活动,如下所示,您通过 WebSocket 连接的客户端应该能够接收消息。

开始对话后发送活动并连接 WebSocket:

//your code logic to start a conversation
.then(function (params) {
    localStorage.setItem(storageKey, params);

    //send an activity to bot
    SendActivity();

    ConnectWebSocet();
})

函数SendActivity()的定义:

function SendActivity() {
    var token = GetBotToken();

    var mes = {
        "type": "message",
        "from": {
            "id": "Fei Han"
        },
        "text": "hello"
    };

    fetch(`https://directline.botframework.com/v3/directline/conversations/${token.conversationId}/activities`, {
        method: "POST",
        headers: {
            "Authorization": `Bearer ${BearerToken}`,
            "Content-Type": "application/json"
        },
        body: JSON.stringify(mes),
    })
        .then(response => response.text())
        .then(function (myJson) {
            console.log(myJson);
        })
        .catch(error => console.error(`Fetch Error =\n`, error));
}

测试结果:

【讨论】:

  • 感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2021-09-01
  • 1970-01-01
  • 2021-04-30
  • 2019-07-18
  • 2015-10-04
  • 1970-01-01
  • 1970-01-01
  • 2017-02-27
相关资源
最近更新 更多