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

Node.js中调用@speechify/api-sdk的speechify.audioGenerate()接口时遭遇400 Bad Request错误

Node.js中调用@speechify/api-sdk的speechify.audioGenerate()接口时遭遇400 Bad Request错误

我看到你在调用Speechify的audioGenerate接口时遇到了400 Bad Request错误,结合你的代码和报错信息,咱们来一步步排查并解决问题:

1. 核心问题:硬编码的Voice ID与可用列表不匹配

你的代码里有一个明显的矛盾点:虽然你通过pickVoice函数获取了当前可用的Voice ID(比如报错里的oliver),但在实际调用audioGenerate时,却硬编码写死了voiceId: "george",而不是使用动态获取到的voiceId变量。

这大概率是触发400错误的原因:如果你的API密钥没有权限使用george这个声音,或者该声音ID不在当前可用的声音列表中,Speechify的API就会返回Bad Request。

修复代码

把audioGenerate的参数改成使用动态获取的voiceId变量:

// 原错误代码
// const response = await speechify.audioGenerate({
//   input: textContent,
//   voiceId: "george",
//   audioFormat: "mp3",
// });

// 修复后的代码
const response = await speechify.audioGenerate({
  input: textContent,
  voiceId: voiceId, // 使用前面获取到的可用Voice ID
  audioFormat: "mp3",
});

2. 验证可用Voice ID的有效性

为了避免后续再踩类似的坑,建议你在pickVoice函数中打印出所有可用的声音信息,确认哪些Voice ID是当前API密钥可以访问的:

async function pickVoice(speechify) {
  try {
    const voices = await speechify.voicesList();
    // 打印所有可用声音的名称和ID,方便排查
    console.log('=== 可用声音列表 ===');
    voices.forEach(v => console.log(`${v.name} (ID: ${v.id})`));
    // 返回第一个可用声音,或者 fallback 到你确认有权限的ID
    return voices[0]?.id || 'oliver';
  } catch (err) {
    throw new Error(`获取声音列表失败: ${err.message}`);
  }
}

3. 其他可能的排查方向

如果修复上述问题后仍然报错,可以检查以下两点:

  • 输入文本合法性:确认输入的文本内容没有超出API的长度限制,也不包含特殊格式/编码问题(比如空文本你已经做了检查,但可以再确认下是否有超长段落)。
  • API密钥权限:确保你的API密钥是有效的,并且拥有访问Speechify文本转语音服务的权限。可以尝试用该密钥直接调用voicesList接口,确认能正常返回结果。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 03:08:02