botbuilder-adapter-vonage-js运行报错bot.reply is not a function
故障原因及修复方案
核心错误原因
- 你实例化的
IntersectionBot属于Bot Framework原生的Bot类,本身不存在reply方法,该方法仅Botkit的BotWorker实例或适配后的上下文对象支持 - 你的
adapter.processActivity回调未接收上下文参数context,导致上下文变量未定义,同时onTurnError回调也漏传了context参数
具体修复步骤
- 修正回调参数遗漏问题
首先修改onTurnError的参数定义:
// 修改前 // adapter.onTurnError = async (, error) => { // 修改后 adapter.onTurnError = async (context, error) => {
再修改入站webhook的processActivity回调参数:
// 修改前 // adapter.processActivity(req, res, async () => { // 修改后 adapter.processActivity(req, res, async (context) => {
- 替换发消息调用方法
如果用Bot Framework原生能力发送消息,直接调用上下文的sendActivity方法即可,无需通过bot实例调用:
// 替换掉 await bot.reply('Hello Back!'); await context.sendActivity('Hello Back!');
如果要使用Botkit的reply方法,需要改用Botkit标准初始化流程,不要手动接管webhook路由:
// 初始化Botkit控制器 const controller = new Botkit({ adapter: adapter, storage: memoryStorage, webserver: app }); // 监听所有消息并回复 controller.on('message', async (bot, message) => { await bot.reply(message, 'Hello Back!'); });
自定义适配器调试方法
- 在适配器的
processActivity方法入口添加日志,确认入站消息解析、TurnContext构造是否符合预期(从你提供的日志看这一步目前是正常的) - 在适配器的
sendActivities方法入口添加日志,确认发消息请求是否正常进入适配器逻辑、Vonage接口调用参数是否正确 - 可以在适配器调用Vonage发消息接口的位置加错误捕获,打印接口返回的报错信息,排查是参数问题还是接口鉴权问题
内容的提问来源于stack exchange,提问作者Kitt Phi
相关产品推荐
相关产品推荐

