Функция Twilio, используемая в задаче автопилота, должна отправлять SMS, но возвращает сообщение «произошла ошибка приложения» - PullRequest
0 голосов
/ 02 ноября 2018

(2-я обновленная версия после ввода - есть прогресс - спасибо) Я хочу использовать функцию Twilio для отправки SMS во время разговора (чтобы не создавать полностью внешнее приложение). Целью является отправка подтверждающего SMS по окончании автоматического звонка (с автопилотом Twilio). Если пользователь произносит правильное предложение («Я хочу подтверждение по SMS, пожалуйста»), автопилот запускает следующие задачи.

{
    "actions": [
        {
            "redirect": "https://my_domain_here.twil.io/my_url_here"
        }
    ]
}

Тогда моя функция имеет следующий код:

    exports.handler = function(context, event, callback) {
    var client = context.getTwilioClient();
/**to have some view on incoming request    */
    console.log("context : "+JSON.stringify(context));
    console.log("event : "+JSON.stringify(event));
//send the answer SMS
    console.log("sending SMS");
client.messages
  .create({
    body: 'test sms',
    from: '+32x_my_nbr_xx',
    to: '+32x_my_other_nbr_xx'//is hardcoded - just to test
  })
.then(message => console.log(message.sid))
.done();
//now create the Twiml to send back to autopilot the text to be spoken
    console.log("SMS sent, returning to autopilot");
    var action = {"actions": [{"say": "I understand that you want a confirmation. I will send you a summary by SMS. Goodbye" }]};
    callback(null, action);
}

Но когда я звоню и говорю «Я хочу подтверждение по SMS», я слышу: «Я понимаю, что вы хотите подтверждение. Я отправлю вам резюме по SMS. До свидания ". Но SMS не отправлено. Когда я смотрю в журналах автопилота, правильное намерение было вызвано. Журнал функции не содержит ничего (только обычные логи, но не Msgid) У кого-нибудь есть идея?

Я знаю, что это сработает, но разве нет способа избежать написания и поддержки полного бэкэнда просто для отправки этого SMS? Спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Другой евангелист разработчиков Twilio здесь.

Обновление, использующее REST API, должно помочь, но я думаю, что проблема сейчас в том, что вы возвращаетесь из функции до завершения запроса API. Вместо вызова callback после разрешения обещания вы должны вызвать его в функции обещания then.

Примерно так:

exports.handler = function(context, event, callback) {
  var client = context.getTwilioClient();
  /**to have some view on incoming request    */
  console.log('context : ' + JSON.stringify(context));
  console.log('event : ' + JSON.stringify(event));
  //send the answer SMS
  console.log('sending SMS');
  client.messages
    .create({
      body: 'test sms',
      from: '+32x_my_nbr_xx',
      to: '+32x_my_other_nbr_xx' //is hardcoded - just to test
    })
    .then(message => {
      console.log('SMS sent, returning to autopilot');
      var action = {
        actions: [
          {
            say:
              'I understand that you want a confirmation. I will send you a summary by SMS. Goodbye'
          }
        ]
      };
      callback(null, action);
    })
};
0 голосов
/ 02 ноября 2018

Разработчик Twilio здесь.

Я подозреваю, что запрос, сделанный Autopilot, является голосовым запросом, что означает, что вы не сможете вернуть MessageResponse, поскольку он работает только для запросов, поступающих из входящего SMS-сообщения.

Чтобы отправить текст в этой функции, вам нужно использовать вспомогательную библиотеку Node для вызова REST API:

client.messages
  .create({
    body: 'This is the ship that made the Kessel Run in fourteen parsecs?',
    from: '+15017122661',
    to: '+15558675310'
  })
.then(message => console.log(message.sid))
.done();

Надеюсь, это поможет.

...