使用Vonage Node.js SDK遇TS错误及认证问题求解决方案
解决方案
一、解决@vonage/server-sdk的TS2694类型错误
出现TS2694错误是因为@vonage/server-sdk整合包的voice模块类型定义缺失ConversationAction、StreamAction导出,可通过以下方式修复:
锁定兼容版本:
指定@vonage/server-sdk为稳定兼容版本(如v2.11.0),更新package.json后执行npm install,在Docker环境中需清理依赖缓存后重新构建:docker-compose down rm -rf node_modules package-lock.json docker-compose up --build补充类型声明:
在项目根目录创建vonage-types.d.ts文件,手动补充缺失的类型定义:declare module '@vonage/voice/dist/types' { export interface ConversationAction { action: 'conversation'; name: string; // 按需补充其他官方定义字段 } export interface StreamAction { action: 'stream'; streamUrl: string[]; loop?: number; // 按需补充其他官方定义字段 } }然后在
tsconfig.json的include数组中添加该文件,确保TypeScript识别:{ "include": ["./vonage-types.d.ts", "src/**/*"] }改用独立@vonage/voice包:
卸载整合包,单独安装@vonage/voice包,直接使用其官方维护的类型:npm uninstall @vonage/server-sdk npm install @vonage/voice @vonage/auth
二、解决@vonage/messages的401未授权错误
请求未将API密钥和Secret放入授权头,是因为客户端初始化方式不正确,可通过以下方式修复:
正确初始化Vonage客户端:
使用@vonage/server-sdk的核心客户端初始化@vonage/messages,确保自动生成Basic Auth授权头:import { Vonage } from '@vonage/server-sdk'; import { Messages } from '@vonage/messages'; const vonageClient = new Vonage({ apiKey: '你的API密钥', apiSecret: '你的API密钥Secret' }); const messagesClient = new Messages(vonageClient); // 发送短信示例 async function sendSMS() { try { const result = await messagesClient.send({ to: '接收方号码', from: 'Vonage分配的发送号码', text: '测试短信内容' }); console.log('短信发送成功:', result); } catch (err) { console.error('发送失败:', err); } }手动添加授权头:
若自动授权逻辑失效,可手动生成Basic Auth头并添加到请求中:import axios from 'axios'; const apiKey = '你的API密钥'; const apiSecret = '你的API密钥Secret'; const authHeader = `Basic ${Buffer.from(`${apiKey}:${apiSecret}`).toString('base64')}`; async function sendSMS() { try { const response = await axios.post( 'https://api.vonage.com/v1/messages', { to: '接收方号码', from: '发送号码', text: '测试短信内容', channel: 'sms' }, { headers: { 'Authorization': authHeader, 'Content-Type': 'application/json' } } ); console.log('发送成功:', response.data); } catch (err) { console.error('发送失败:', err.response?.data || err); } }更新包版本:
旧版本的@vonage/messages可能存在授权逻辑bug,更新到最新稳定版:npm update @vonage/messagesDocker环境中需重新构建镜像以加载更新后的依赖。
内容的提问来源于stack exchange,提问作者ANANDA KRISHNAN
相关产品推荐
相关产品推荐

