如何通过Twilio API重新购回已释放电话号码?解决号码不可用问题
问题:释放Twilio号码后无法通过API重新购回
环境信息
- Node.js版本:16.20.2
- Twilio库版本:3.72.0
问题详情
按官方指引通过IncomingPhoneNumber REST API发送DELETE请求成功释放了电话号码+12059557580,但尝试用IncomingPhoneNumber API重新购回时失败。
预期结果
成功购回目标号码并获取新SID。
实际结果
抛出错误:RestException [Error]: +12059557580 is not available
相关代码
购回号码实现
exports.purchaseNumber = async (number, voiceSid) => { try { // 可传入语音应用SID let status = await client.incomingPhoneNumbers.create({ phoneNumber: number, voiceApplicationSid: voiceSid, smsApplicationSid: voiceSid, }); return status; } catch (error) { if (error.code == 20404) { throw { message: lang.NUMBER_NOT_FOUND, statusCode: FAIL }; } throw error; } };
释放号码实现
exports.deletePhoneNumber = async (id) => { return client.incomingPhoneNumbers(id).remove(); };
解决方案
核心原因
释放后的Twilio号码不会立即回归可用号码池,存在冷却期(时长从数小时到数天不等)。冷却期间号码处于预留状态,无法通过API或控制台购回。部分情况下,号码可能被重新分配至其他区域池,或被标记为不可再次分配。
具体解决步骤
- 等待冷却期:间隔24小时以上后重试购回操作,多数号码会在这段时间内回到可用池。
- 先检查号码可用性:调用
AvailablePhoneNumbersAPI确认目标号码是否真的可用,再发起购回请求:// 检查号码可用性,需替换对应国家代码(示例为美国US) exports.checkNumberAvailability = async (number) => { const availableNumbers = await client.availablePhoneNumbers('US') .local .list({ phoneNumber: number }); return availableNumbers.length > 0; }; - 优化购回逻辑:在购回代码中加入可用性检查,避免无效请求:
exports.purchaseNumber = async (number, voiceSid) => { try { // 先验证号码可用性 const isAvailable = await checkNumberAvailability(number); if (!isAvailable) { throw { message: "号码暂不可用", statusCode: FAIL }; } let status = await client.incomingPhoneNumbers.create({ phoneNumber: number, voiceApplicationSid: voiceSid, smsApplicationSid: voiceSid, }); return status; } catch (error) { if (error.code == 20404) { throw { message: lang.NUMBER_NOT_FOUND, statusCode: FAIL }; } throw error; } }; - 联系Twilio支持:若等待后仍无法购回,直接联系Twilio支持团队,确认该号码是否可重新分配至你的账户。
内容的提问来源于stack exchange,提问作者Sahil Patel
相关产品推荐
相关产品推荐

