Twilio Forward SMS на электронную почту и другой телефон - PullRequest
0 голосов
/ 10 ноября 2019

Моя отправная точка - это ответ о пересылке входящих SMS-сообщений на электронную почту с функциями node.js, sendgrid и Twilio: https://stackoverflow.com/a/50728459/

Я также посмотрел этот урок: https://support.twilio.com/hc/en-us/articles/223134287-Forwarding-SMS-messages-to-another-phone-number

Могу ли я объединить оба действия в одной функции Twilio? Я предпочитаю объединять их в одну функцию, потому что я не вижу способа настроить число Twilio для выполнения двух отдельных «действий по обмену сообщениями» в ответ на входящее сообщение. Я могу выбрать только одну функцию для запуска.

Надеюсь, мне просто нужно добавить несколько строк кода к ответу , указанному выше:

let twiml = new Twilio.twiml.MessagingResponse();
twiml.message(`${event.From}: ${event.Body}`, {
    to: '+13105555555'
});
callback(null, twiml);

В этой функции я бы хотел переслать SMS на другой номер телефона. Сначала перешлите сообщение на электронную почту.

Установлены переменные среды функции Twilio.

Вот мой код:

const https = require('https');

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

    let sms_twiml = new Twilio.sms_twiml.MessagingResponse();
        sms_twiml.message(`${event.From}: ${event.Body}`, {
        to: context.TO_SMS_NUMBER
    });
    //executing a callback terminates the function
    //callback(null, sms_twiml); 

    let postData = JSON.stringify({
        personalizations: [{
            to: [{
                email: context.TO_EMAIL_ADDRESS
            }]
        }],
        from: { 
            email: context.FROM_EMAIL_ADDRESS 
        },
        subject: `New SMS message from: ${event.From}`,
        content: [{
            type: 'text/plain',
            value: event.Body
        }]
    });

    let postOptions = {
        host: 'api.sendgrid.com',
        port: '443',
        path: '/v3/mail/send',
        method: 'POST',
        headers: {
            'Authorization': 'Bearer ${context.SENDGRID_API_KEY}',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(postData),
        }
    };

    let req = https.request(postOptions, function (res) {
        let email_twiml = new Twilio.email_twiml.MessagingResponse();
        callback(null, email_twiml);
    });

    req.write(postData);
    req.end();

};

Я получаю ОШИБКУ - 11200

Ошибка получения HTTP. Произошла ошибка при попытке получить содержимое этого URL. Ошибка 11200 является индикатором сбоя соединения между Twilio и вашим сервисом.

1 Ответ

4 голосов
/ 10 ноября 2019

Попробуйте этот код, это одна дополнительная строка из этого этого примера блога .

(эта строка: twiml.message({to: '+1555xxxxxxx'}, event.Body); // Forward SMS to this Number)

const got = require('got');

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

  const requestBody = {
    personalizations: [{ to: [{ email: context.TO_EMAIL_ADDRESS }] }],
    from: { email: context.FROM_EMAIL_ADDRESS },
    subject: `New SMS message from: ${event.From}`,
    content: [
      {
        type: 'text/plain',
        value: event.Body
      }
    ]
  };

  got
    .post('https://api.sendgrid.com/v3/mail/send', {
      headers: {
        Authorization: `Bearer ${context.SENDGRID_API_KEY}`,
        "Content-Type": 'application/json'
      },
      body: JSON.stringify(requestBody)
    })
    .then(response => {
      console.log(response);
      let twiml = new Twilio.twiml.MessagingResponse();
      twiml.message({to: '+1555xxxxxxx'}, event.Body); // Forward SMS to this Number
      callback(null, twiml);
    })
    .catch(err => {
      console.log(err);
      callback(err);
    });
};
...