Twilio ждет ответа, я не хочу, чтобы сервер отвечал - PullRequest
0 голосов
/ 14 ноября 2018

Я использую веб-крючок Slack для обработки входящих SMS-сообщений от Twilio. Однако, как я это настроил, похоже, что Twilio ожидает, что веб-сервер (слабый) ответит на него. Это приводит к возникновению ошибок в Twilio, и я, очевидно, не хочу ошибок, потому что я буду получать электронные письма.

Я использую гем twilio-ruby в Ruby для отправки SMS-сообщений и slack-ruby-client для мониторинга входящих сообщений из Slack.

Как мне остановить Twilio от попыток ожидать ответа от веб-сервера, когда он ПОСТАВЛЯЕТСЯ в Slack? Это вообще возможно или у меня все настроено неправильно?

EDIT

Вот моя функция, которая отправляет перенаправленное SMS-сообщение Slack:

const https = require("https");

// Make sure to declare SLACK_WEBHOOK_PATH in your Environment
// variables at
// https://www.twilio.com/console/runtime/functions/configure

exports.handler = (context, event, callback) => {
  // Extract the bits of the message we want
  const { To, From, Body } = event;

  // Construct a payload for slack's incoming webhooks
  const slackBody = JSON.stringify({
        text: `!asi SMS\nFrom: ${From}\nMessage: ${Body}`
  });

  // Form our request specification
  const options = {
    host: "hooks.slack.com",
    port: 443,
    path: context.SLACK_WEBHOOK_PATH,
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "Content-Length": slackBody.length
    }
  };

  // send the request
  const post = https.request(options, res => {
    // only respond once we're done, or Twilio's functions
    // may kill our execution before we finish.
    res.on("end", () => {
      // respond with an empty message
      callback(null, new Twilio.twiml.MessagingResponse());
    });
  });
  post.write(slackBody);
  post.end();
};

1 Ответ

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

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

Twilio всегда ожидает по крайней мере 200 ответов или будет тайм-аут в 15 секунд для веб-крючков на входящие сообщения.

Вы можете избежать сообщений об ошибках, используя что-то между Twilio и Slack, например Zapier (пример в этом сообщении в блоге ) или используя функцию Twilio (как описано здесь ) или с Twilio Studio (из документации здесь ).

Надеюсь, одна из этих идей поможет!

Обновление

В дополнение к моему более раннему ответу и коду, который вы использовали для звонка, у меня есть обновление.

При отправке запроса с использованием встроенного в Node https модуля вы не получите событие end, пока не прочитаете данные . Это то, что вызывает тайм-аут между Twilio и функцией Twilio, вы никогда не отвечаете на него, потому что не используете данные из запроса.

В быстром тесте я обнаружил, что прослушивание события data означало, что событие end сработало. Поэтому обновите вашу функцию:

  const post = https.request(options, res => {
    // only respond once we're done, or Twilio's functions
    // may kill our execution before we finish.
    res.on("data", () => {});
    res.on("end", () => {
      // respond with an empty message
      callback(null, new Twilio.twiml.MessagingResponse());
    });
  });

И это должно работать.

...