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

使用Twilio Serverless函数在语音通话结束时发送SMS失败求助

问题分析与解决方案

你的代码核心问题是异步操作未完成就提前终止了函数:twilioClient.messages.create是异步Promise操作,但你直接在它后面调用了return callback(...),导致Twilio函数在SMS请求还没发送完成时就被终止,所以SMS根本没机会执行发送逻辑。

另外还有两个需要注意的细节:

  • 试用账户下,from参数必须使用Twilio分配给你的号码(不能用event.To,除非这个号码是Twilio官方提供的)
  • 原代码没有错误捕获逻辑,即使存在发送失败的情况,也不会在日志中显示错误信息

修正后的代码示例(Promise链式调用写法)

exports.handler = function(context, event, callback) {
  const twilioClient = context.getTwilioClient();

  twilioClient.messages
    .create({
      body: 'Service activation request',
      from: '+你的Twilio号码', // 替换为你账户下的Twilio号码
      to: event.From // 确保该号码已在试用账户的验证列表中
    })
    .then(message => {
      console.log("Message delivered, SID:", message.sid);
      callback(null, cookieData.conversation.length); // 异步操作完成后再结束函数
    })
    .catch(error => {
      console.error("SMS发送失败:", error);
      callback(error); // 将错误传递给Twilio,便于排查问题
    });
};

或者使用async/await写法(更易读)

exports.handler = async function(context, event, callback) {
  const twilioClient = context.getTwilioClient();
  
  try {
    const message = await twilioClient.messages.create({
      body: 'Service activation request',
      from: '+你的Twilio号码',
      to: event.From
    });
    console.log("Message delivered, SID:", message.sid);
    callback(null, cookieData.conversation.length);
  } catch (error) {
    console.error("SMS发送失败:", error);
    callback(error);
  }
};

关键修正说明

  • 必须在messages.create执行完成(then回调触发或await完成)后再调用callback,确保异步请求执行完毕
  • 添加错误捕获逻辑,这样就能在日志中看到具体的失败原因(比如号码格式错误、权限限制等)
  • 确认from参数是Twilio分配给你的有效号码,试用账户不允许使用自定义号码作为发送方

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 02:11:07