Сообщения Twilio не стреляют по Cron Lamba - PullRequest
1 голос
/ 04 октября 2019

Я работал над этой проблемой в течение нескольких часов безуспешно. Я запускаю приведенную ниже функцию для запуска каждые 15 минут. Я вижу из CloudWatch, что функция срабатывает. Из моих журналов я знаю, что функция успешно получает встречи, которые требуют уведомления. Я использую 2 блока try / catch, чтобы попытаться получить какое-либо сообщение об ошибке, но ошибок не регистрируется.

Когда я запускаю эту функцию, используя sls invoke local, она работает нормально и отправляет ожидаемое текстовое сообщение с правильными номерами. Однако при развертывании и запуске на основе cron он не работает, но и не выдает ошибку - поэтому я в растерянности.

Я думаю, что это проблема асинхронного ожидания. По сути, журналы консоли отображаются в журналах Cloudwatch, но ничего внутри функции twilioClient.messages.create не появляется в журналах.

Буду признателен за любую помощь - я уверен, что это что-то простое, но я смотрел на это уже несколько часов безуспешно!

function sendNotifications(appointments) {
  console.log('require notifications', appointments.length);
  appointments.forEach(function(appointment) {
    // Create options to send the message
    // Appointments show in the logs
    console.log('appt', appointment);
    console.log('from', process.env.TWILIO_PHONE_NUMBER);

    try {
      const options = {
        to: `${appointment.meta.contact.number}`,
        from: process.env.TWILIO_PHONE_NUMBER,
        /* eslint-disable max-len */
        body: `Hi ${appointment.meta.contact.name}. Just a reminder that you have an property viewing for ${appointment.meta.property.name} at ${appointment.date}, ${appointment.time}. Please reply with CONFIRM to confirm that you'll be attending this viewing or CANCEL BOOKING to cancel this viewing.`
        /* eslint-enable max-len */
      };

      // Send the message! - this log displays
      console.log('about to send message');
      twilioClient.messages.create(options, function(err, response, callback) {
        // Nothing in this block gets printed to the logs
        if (err) {
          // Just log it for now
          console.log('ERROR', err);
        } else {
          // Log the last few digits of a phone number
          let masked = appointment.meta.contact.number.substr(
            0,
            appointment.meta.contact.number.length - 5
          );
          masked += '*****';
          console.log(`Message sent to ${masked}`);

          try {
            updateBooking({ booking: appointment, message: response });
          } catch (e) {
            console.log(e.message);
          }
        }

        // Don't wait on success/failure, just indicate all messages have been
        // queued for delivery
        if (callback) {
          callback.call();
        }
      });
    } catch (e) {
      console.log('ERR', e.message, appointment);
    }
  });
}

1 Ответ

0 голосов
/ 04 октября 2019

Из документа https://www.twilio.com/docs/sms/quickstart/node

twilioClient.messages.create не имеет параметров обратного вызова, но возвращает обещание

Попробуйте выполнить лямбда с помощью:

twilioClient.messages
  .create({
     body: 'just for test',
     from: 'a verified number',
     to: 'a verified number'
   })
  .then(message => console.log(message.sid));

Если это работает, то это была проблема.

В противном случае может быть process.env.TWILIO_PHONE_NUMBER установлен неправильно или ${appointment.meta.contact.number} может отсутствовать или быть недействительным. Возможно, распечатайте их тоже.

Возможно, Twilio не был правильно настроен. Убедитесь, что accountSid и authToken установлены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...