使用Node.js统计Twilio日志中指定号码SMS短信数量及报错处理
问题排查与修复
报错信息:
{"message":"username is required","name":"Error","stack":"Error: username is required\n at new Twilio (/var/task/node_modules/twilio/lib/rest/Twilio.js:141:11)
你的代码存在两个核心问题,对应修复方案如下:
- Twilio客户端初始化错误:Twilio服务端函数环境中,所有配置的环境变量都挂载在
context对象下,你从process.env读取的TWILIO_ACCOUNT_SID、TWILIO_AUTH_TOKEN都是undefined,导致客户端初始化缺少必要参数抛出报错。你可以直接使用环境提供的context.getTwilioClient()方法快速初始化合法客户端,不需要手动传入密钥。 - 异步逻辑顺序错误:
client.messages.list是异步接口,返回Promise对象,你在接口还未返回结果的位置直接访问messages变量,此时变量不存在,判断逻辑完全不会按预期执行,需要等待异步接口返回后再做数量判断。
修复后完整代码
exports.handler = async function(context, event, callback) { // 直接调用官方封装的方法初始化Twilio客户端 const client = context.getTwilioClient(); try { // 等待查询短信列表的异步结果返回 const messages = await client.messages.list({ from: event.Phone }); // 按数量执行对应逻辑 if (messages.length === 0) { // 数量为0执行X逻辑,可按需修改返回内容 return callback(null, "Continue"); } else { // 数量大于0执行Y逻辑,可按需修改返回内容 return callback("Error", "Error"); } } catch (err) { // 捕获接口调用异常,避免函数无响应 console.error('短信查询失败:', err); return callback(err); } };
注意事项
- 需要在Twilio函数的配置页,勾选「Add my Twilio Credentials (ACCOUNT_SID/AUTH_TOKEN) to ENV」选项,才能正常使用
context.getTwilioClient()方法 - 传入的
event.Phone参数需要符合E.164号码格式(示例:+8613800138000),否则会查询不到对应短信
内容的提问来源于stack exchange,提问作者ttz
相关产品推荐
相关产品推荐

