Как получить факс PDF Twilio и прикрепить его к электронному письму, используя Node.js внутри функции Twilio? - PullRequest
0 голосов
/ 22 ноября 2018

Можно ли каким-либо образом использовать параметры сервера Twilio для извлечения PDF-файла, который был отправлен по факсу ранее, и прикрепить его к электронному письму?

Я узнал, как сделать это в PHP в WordPress, лично для себявеб-сервер, глядя на примеры.Вот фрагмент кода WordPress PHP, который извлекает PDF-файл, который был отправлен по факсу с использованием Twilio, а затем отправляет электронное письмо с PDF-файлом в виде вложения:

<?php
  $mediaurl = $_GET["MediaUrl"];
  $path = '/some/path/on/your/web/server/where/to/save/the/PDF';
  $attachment = $filename = $path . $_GET["FaxSid"] . '.pdf';
  require_once('wp-load.php');
  $response = wp_remote_get( $mediaurl, array( 'timeout' => '300', 'stream' => true, 'filename' => $filename ) );
  wp_mail( 'somebody@somewhere.com', 'You have a fax', 'See attached PDF', 'From: <someone@someplace.com>', $attachment );
?>

Если кто-то узнает об этих вещах, у меня есть вышекод сохранен в файле twilio-fax-receive.php на моем веб-сервере.И чтобы запускать его каждый раз, когда приходит факс, у меня на Twilio настроена корзина TwiML - я назвал ее receive-fax - с таким кодом:

<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Receive action="https://www.somewhere.com/twilio-fax-receive.php" method="GET"/>
</Response>

Затем наНастроив «страницу» для номера факса, который принимает факсы, я выбрал TwiML, где написано «ФАКС ПРИХОДИТ», а затем выбрал мою корзину TwiML для приема факсов.

Но вернемся к моей проблеме.

* 1014Могу ли я воспроизвести это, используя Node.js внутри функции Twilio?Или каким-то другим способом использовать только Twilio, без моего собственного веб-сервера?Есть ли способ получить содержимое PDF, кодировать его с помощью base64 и прикрепить к электронному письму с помощью SendGrid или другого сервиса на лету в Node.js?

У кого-нибудь есть рабочий пример?Я перепробовал много вещей, которые я нашел в Интернете, которые включали request.get и got.stream и pipe, а также Buffer и fs, но безрезультатно ...

Я не разработчик, и ядумаю, что я в пути над головой.Ваша помощь будет очень признательна.

1 Ответ

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

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

Да, вы можете повторить это, используя Node.js в функции Twilio .Вот как использовать SendGrid для отправки электронного письма:

  1. Добавьте request к вашим зависимостям времени выполнения .Я использовал версию 2.88.0
  2. Добавьте следующие переменные окружения в ваш Конфигурация функций :
    • TO_EMAIL_ADDRESS: адрес электронной почты, на который вы хотите доставлять факсы.
    • FROM_EMAIL_ADDRESS: адрес электронной почты, с которого вы хотите получать факсы.
    • SENDGRID_API_KEY: ваш ключ API SendGrid
  3. Сохранение раздела конфигурации
  4. Создайте новую функцию и добавьте следующий код:

    const request = require('request');
    
    exports.handler = function(context, event, callback) {
      const faxUrl = event.MediaUrl;
    
      const email = {
        personalizations: [{ to: [{ email: context.TO_EMAIL_ADDRESS }] }],
        from: { email: context.FROM_EMAIL_ADDRESS },
        subject: `New fax from ${event.From}`,
        content: [
          {
            type: 'text/plain',
            value: 'Your fax is attached.'
          }
        ],
        attachments: []
      };
    
      request.get({ uri: faxUrl, encoding: null }, (error, response, body) => {
        if (!error && response.statusCode == 200) {
          email.attachments.push({
            content: body.toString('base64'),
            filename: `${event.FaxSid}.pdf`,
            type: response.headers['content-type']
          });
        }
        request.post(
          {
            uri: 'https://api.sendgrid.com/v3/mail/send',
            body: email,
            auth: {
              bearer: context.SENDGRID_API_KEY
            },
            json: true
          },
          (error, response, body) => {
            if (error) {
              return callback(error);
            } else {
              if (response.statusCode === 202) {
                return callback(null, new Twilio.twiml.VoiceResponse());
              } else {
                return callback(body);
              }
            }
          }
        );
      });
    };
    
  5. Дайте функции путь и сохраните его.

  6. Добавьте путь в качестве атрибута action к элементу <Receive> в корзине TwiML.
  7. Отправьте факс и просмотрите его поступление в ваш почтовый ящик.

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

...