每个网络聊天会话,我从与https://webchat.botframework.com/api/tokens交谈的 restify 服务中检索一个令牌。我使用直接密码来获取令牌。令牌被正确检索。当我手动使用令牌(通过在 html 中输入)时,网络聊天会呈现。当我在函数中传递 Javascript 变量时,我无法创建直线。一些指导表示赞赏。一种解决方法是在 html 中使用秘密,但我宁愿不这样做
我尝试了多种语法来传递变量:window.WebChat.createDirectLine({ webChatToken }) or (webChatToken) or ({ webChatToken }) or (token: webChatToken) and ({ token: webChatToken })
唯一有效的方法是在 html 中手动输入令牌。
我使用我的 index.js(对于示例机器人)中已有的 restify 服务器来侦听和处理令牌请求:
// Create HTTP server and Cors
let server = restify.createServer();
server.pre(cors.preflight);
server.use(cors.actual);
server.listen(process.env.port || process.env.PORT || 3978, function() {
});
// Listen for bot requests.
server.post('/api/messages', (req, res) => {
adapter.processActivity(req, res, async (context) => {
await bot.run(context);
});
});
// Listen for token requests.
server.get('/api/token',
async function(req, res) {
const result = await fetch('https://webchat.botframework.com/api/tokens', {
method: 'GET',
headers: {
Authorization: `Bearer ${ process.env.directLineSecret }`
}
});
const token = await result.json();
console.log(token);
res.send(token);
});
以及 html 和 Javascript 代码中的网络聊天客户端。在此示例中,它与 restify 服务器的本地实例通信。
<div id="webchat" role="main"></div>
<script>
//get token
const webChatToken = getToken();
window.WebChat.renderWebChat({
directLine: window.WebChat.createDirectLine({ webChatToken }),
renderMarkdown: markdownIt.render.bind(markdownIt),
store,
// styling
styleOptions: {
},
userID: 'N/A',
username: 'Web Chat User',
locale: 'nl-nl'
}, document.getElementById('webchat'));
async function getToken() {
const res = await fetch('http://localhost:3978/api/token');
const token = await res.json();
return token;
}
</script>
我期待一个有效的网络聊天客户端。在 chrome dev 扩展中,我看到“POST https://directline.botframework.com/v3/directline/conversations 403 (Forbidden)。directline api 的相应响应:
{“错误”:{“代码”:“BadArgument”,“消息”:“无效的令牌或秘密”}}