получение ошибки функции обратного вызова в функциях twilio

Мой отладчик продолжает отправлять мне ошибку обратного вызова (см. ссылку img ниже) для этой функции. Я также хотел бы вернуться от своей функции обратно в студию, в документах студии говорится, что мне нужен «успешный возврат (HTTP 20X)», что мне не хватает

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

const client = require('twilio')();
const msg = event.Msg;
client.messages
  .create({
     body: msg,
     from: '+17322222222',
     to: '+13477777777'
   })
  .then(message => console.log(message.sid));
};

Сообщение об ошибке от отладчика

если я вставляю callback() в конец кода, я получаю успешный возврат, но тогда сообщение не отправляется.

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

const client = require('twilio')();
const msg = event.Msg;

client.messages
  .create({
     body: msg,
     from: '+17322222222',
     to: '+13477777777'
   });

  callback();
};

person jack    schedule 11.06.2020    source источник
comment
добавьте .error: (e) => console.error(e) после then, чтобы перехватывать и регистрировать ошибки, возникающие из промиса create().   -  person Jeff Lowery    schedule 12.06.2020
comment
можете вставить в код, который я разместил, я новичок в этом   -  person jack    schedule 12.06.2020
comment
Я добавил функцию обратного вызова, но сообщение не отправляется   -  person jack    schedule 12.06.2020


Ответы (2)


Вам нужно, чтобы обратный вызов выполнялся после успешной отправки сообщения.

Это можно сделать с помощью обещаний или синтаксиса async/await, как показано ниже:

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

   let twilioClient = context.getTwilioClient();

   twilioClient.messages
     .create({
       body: 'Hello World',
       to: '+13477777777',
       from: '+17322222222',
     }).then(message =>  {
       console.log(message.sid);
       callback(null, {result: "success"});
     })
    .catch(error => {
       console.log(error);
       callback({result: "error"});
    });
};

or

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

    let twilioClient = context.getTwilioClient();

    let sendSMS = () => { 
        try {   
        let result = twilioClient.messages
        .create({
           body: 'Hello World',
           to: '+13477777777',
           from: '+17322222222',
         });
         return result;
        } catch(e) {
          console.log(e);
          callback(e);
        }
    };

    let result = await sendSMS();
    callback(null, result);
};
person Alan    schedule 11.06.2020
comment
Не могли бы вы сделать это, но отправить несколько сообщений, прежде чем вам нужно будет вызвать callback()? @Алан - person markokstate; 18.08.2020

Отправка нескольких сообщений перед обратным вызовом @markokstate

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

    const twilioClient = context.getTwilioClient();
    numbers = ['+14075551212','+18025551212'];
    body = event.Body || 'The British are Coming!';
    
    Promise.all(
        numbers.map(number => {
            return twilioClient.messages.create({
                to: number,
                from: '+15095551212',
                body: body
            });
        })
    )
  .then(messages => {
    console.log('Messages sent!');
    callback(null, 'Messages sent!');   
  })
  .catch(err => {
      console.error(err);
      callback(null, 'ERROR');
  });
};
person Alan    schedule 19.08.2020