twilio node.js 不发送短信

twilio node.js not sending sms

我有以下代码作为 amazon sqs 事件的 lambda 触发器执行。

    require('dotenv').config()

const client = require('twilio')(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN);




exports.handler = async function (event, context) {
   console.info('phoneNumber', event.Records[0].messageAttributes.Phone.stringValue);
   console.info('smsContent', event.Records[0].body);
   console.info('from phone number', process.env.TWILIO_PHONE_NUMBER);
   console.info('TWILIO_ACCOUNT_SID', process.env.TWILIO_ACCOUNT_SID);
   console.info('TWILIO_AUTH_TOKEN', process.env.TWILIO_AUTH_TOKEN);

   sendMessage(event);

   return context.logStreamName;
}

function sendMessage(event) {
   client.messages
      .create({
         body: event.Records[0].body,
         from: process.env.TWILIO_PHONE_NUMBER,
         to: event.Records[0].messageAttributes.Phone.stringValue
      })
      .then(message => {
         console.info('messageId', message.sid)
      }
         ,
         err => {
            console.error('delivery error', err);
         });
}

我在日志中检查了所有相关 process.env 参数及其值是否正确。 当 sendMessage 函数执行时,没有输出。就好像它从未被执行过一样。

我遵循了他们的文档:

https://www.twilio.com/docs/sms/quickstart/node

它们很简单,但是代码无法执行。

您正在 return 执行您的函数,而无需等待 promise。

  1. 等待处理程序中的 sendMessage:sendMessage(event) 应该变成 await sendMessage(event)

  2. 将您的 sendMessage 方法更改为 return 承诺:client.messages.create({... 应该变为 return client.messages.create({...

工作版本:

exports.handler = async function (event, context) {
  await sendMessage(event);
  return context.logStreamName;
}

function sendMessage(event) {
  return client.messages
    .create({
      body: event.Records[0].body,
      from: process.env.TWILIO_PHONE_NUMBER,
      to: event.Records[0].messageAttributes.Phone.stringValue
    })
    .then(message => {
      console.info('messageId', message.sid)
    })
    .catch(err => {
      console.error('delivery error', err);
    })
}

这是一个对我有用的解决方案。它是 return 回调。

   exports.handler = async function (event, context,callback) {

   try {
      const message = await  sendMessage(event);
      console.log('message', message);
      callback(null, {result: 'success'});
    } catch (error) {
      console.log('error', error);
      callback("error");
    }

   // return context.logStreamName;
}

function sendMessage(event) {
    return client.messages
      .create({
         body: event.Records[0].body,
         from: process.env.TWILIO_PHONE_NUMBER,
         to: event.Records[0].messageAttributes.Phone.stringValue
      });
}