如何:使用WebSocket的MS Bot直线消息传递

时间:2018-08-12 12:44:55

标签: javascript botframework

我试图弄清楚如何使用MicroSoft bot Directline通信。我可以使用POST和GET很好地连接,发送和接收消息。我的问题是尝试使用WebSocket时。我开始对话,取回我的sessionId和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);
    };
}

1 个答案:

答案 0 :(得分:0)

  

没有抛出错误,但是我没有得到回应。

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

如果您在开始对话后尝试发送活动,如下所示,则通过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));
}

测试结果:

enter image description here