You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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/messages
    

    Docker环境中需重新构建镜像以加载更新后的依赖。


内容的提问来源于stack exchange,提问作者ANANDA KRISHNAN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 09:40:43