我试图弄清楚如何使用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);
};
}
答案 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));
}
测试结果: