首页 > 解决方案 > twilio node.js 不发送短信

问题描述

我有以下代码作为 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

它们非常简单,但代码无法执行。

标签: node.jsamazon-web-servicesaws-lambdatwilio-api

解决方案


您无需等待承诺即可返回您的功能。

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

  2. 更改您的 sendMessage 方法以返回承诺: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);
    })
}

推荐阅读