node.js - 微软bot框架网络聊天直连隐藏 secret ——NODE JS

标签 node.js azure direct-line-botframework botframework

我需要使用 HTML 网络聊天隐藏直线 channel 的 secret ,尝试了此解决方案,但在获取时不断出现错误。我在 process.env 中获得了 Azure 门户中直线 channel 的 secret

索引.js

const dotenv = require('dotenv');
const path = require('path');
const restify = require('restify');

const bodyParser = require('body-parser'); 
const request = require('request'); 
const corsMiddleware = require('restify-cors-middleware'); 


const { BotFrameworkAdapter, MemoryStorage, ConversationState, UserState   } = require('botbuilder');

const { EBOT } = require('./eBot');

const ENV_FILE = path.join(__dirname, '.env');
dotenv.config({ path: ENV_FILE || process.env.directLineSecret });

const cors = corsMiddleware({ 
  origins: ['*'] 
}); 

const server = restify.createServer();
server.pre(cors.preflight); 
server.use(cors.actual); 
server.use(bodyParser.json({ 
  extended: false 
})); 
server.listen(process.env.port || process.env.PORT || 3978, () => {
    console.log(`\n${ server.name } listening to ${ server.url }`);
    console.log('\nGet Bot Framework Emulator: https://aka.ms/botframework-emulator');
    console.log('\nTo talk to your bot, open the emulator select "Open Bot"');
});

// Generates a Direct Line token 
server.post('/directline/token', (req, res) => { 
  const options = { 
    method: 'POST', 
    uri: 'https://directline.botframework.com/v3/directline/tokens/generate', 
    headers: { 
      'Authorization': `Bearer ${process.env.directLineSecret}` 
    }};
  request.post(options, (error, response, body) => { 
    if (!error && response.statusCode < 300) { 
      res.send({ 
        token: body.token 
      }); 
    } else { 
      res.status(500).send('Call to retrieve token from DirectLine failed'); 
    } 
  }); 
});

server.post('/api/messages', (req, res) => {
    adapter.processActivity(req, res, async (context) => {
        await ebot.run(context);
    });
});

和 webchat.html:

<script src="https://cdn.botframework.com/botframework-webchat/latest/webchat.js"></script>
<script>
            (async function () {
            const res = await fetch('https://directline.botframework.com/v3/directline/tokens/generate', { method: 'POST' });
            const webChatToken = await res.json();
    
              window.WebChat.renderWebChat({
                directLine: window.WebChat.createDirectLine({ token: webChatToken })
              }, document.getElementById('webchat'));
    
              document.querySelector('#webchat > *').focus();
            })().catch(err => console.error(err));
    
</script>

///更新

错误:

** 加载资源失败:服务器响应状态为 403 ()

** webchat.js:2 POST https://directline.botframework.com/v3/directline/conversations 403

** webchat.js:2 未捕获{message: "ajax error 403", xhr: XMLHttpRequest, request: {...}, status: 403, responseType: "json", ...}

那怎么办?我错过了什么?

最佳答案

您的特定实现的问题是,虽然您已经设置了一个 API 来生成 token 并将其提供回网络聊天,但您无法实际调用该端点。而不是

const res = wait fetch('https://directline.botframework.com/v3/directline/tokens/generate', { method: 'POST' });

你应该有

const res = wait fetch('http://localhost:3978/directline/token', { method: 'POST' });

这将进行调用以将 Direct Line key 交换为 token ,然后将 token 返回到您的网络聊天实例。

关于node.js - 微软bot框架网络聊天直连隐藏 secret ——NODE JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64472012/

相关文章:

http - Node.js 的 http.request 性能如何?它可以处理多少个并发请求?

Azure 门户错误 : Failed to start virtual machine 'xxxx' . 错误:URL 'xxxx' 引用的 Key Vault secret 不存在

javascript - 机器人不会在直线中自行发送欢迎消息

node.js - 使用 MongoDB 4.0 查找函数返回匹配元素

javascript - Node、express 和 Angular 的重定向问题

azure - 在 Azure 搜索中为 View 建立索引时如何从索引中删除数据?

c# - Azure 资源管理 API 未显示虚拟机状态?

javascript - 拦截用户消息并对其进行修改,bot框架

javascript - Bot Connector - Direct Line API 交叉对话?

node.js - 使用 vm.runInThisContext 时未定义模块属性