Как мне заставить веб-крючков Twilio работать с Heroku? - PullRequest
0 голосов
/ 26 января 2020

Привет! Я использую Twilio для отправки текстовых сообщений на несколько телефонных номеров.

Когда пользователь получает текстовое сообщение из моего приложения React. js, я бы хотел, чтобы он мог ответить на него. это текстовое сообщение, и мое приложение выполняет некоторую обработку, а затем отправляет сообщение о том, что обработка завершена.

На основе веб-страницы Twilio .

Однако я продолжаю получать Ответ 404.

Вот подробности этой проблемы:

Приложение является приложением REACT, работающим на Heroku

Важные вещи из моего файла 'server. js'

const express = require('express');
const bodyParser = require('body-parser');
const passport = require('passport');
const path = require('path');

const mongoose = require('mongoose');

const sms = require('./routes/api/sms');

const app = express();


// body parser
let size = '50mb';
app.use(bodyParser.urlencoded({limit: size,extended: false}));
app.use(bodyParser.json({limit: size}));


// passport middleware
app.use(passport.initialize());

// passport config file.
// passport uses a strategy
require('./config/passport')(passport);

// use routes

app.use('/api/sms', sms);


// server static assests if in production
if (process.env.NODE_ENV === 'production') {
    // Set static folder
    app.use(express.static('client/build'));

    app.get('*', (req, res) => {
      res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'));
    });
  }

const serverPort = require('./config/keys').serverPort;

const port = process.env.PORT || serverPort;

app.listen(port, () => console.log(`server running on port ${port}`));

Вот смс. js содержимое файла (URL-адрес, который «должен» отвечать на вызов веб-перехвата)

router.post('/twiml', (req, res) => {

    let debugThis = true;
    if(debugThis){
        console.log('post api/sms/twiml');
        console.log(req.body);
    }

    const twiml = new MessagingResponse();

    if (req.body.Body == 'hi') {
        twiml.message('Hello!');
      } else if (req.body.Body == 'bye') {
        twiml.message('Goodbye');
      } else {
        twiml.message(
          'No Body param match, Twilio sends this in the request to your server.'
        );
      }

      res.writeHead(200, { 'Content-Type': 'text/xml' });
      res.end(twiml.toString());

});

Поэтому я думаю, что когда я совершаю вызов, URL, который я должен использовать в качестве веб-хука, должен быть настроен на моем телефонном номере в Twilio следующим образом: (отсутствующая часть спереди - HTTPS: //)

enter image description here

когда я пишу свой номер Twilio, это то, что я получаю журнал:

2020-01-25T23:53:17.755941+00:00 heroku[router]: at=info method=POST path="/sms/twiml" host=choremonger.herokuapp.com request_id=7d44f910-2850-4282-aa14-08270384e99a fwd="54.198.69.37" dyno=web.1 connect=36ms service=23ms status=404 bytes=393 protocol=https

Другими словами:

Мой номер Twilio 555-555-5555 Номер Джо 111-111-1111

Я предполагаю, что сообщение будет выглядеть как это:

ОТПРАВИТЬ с 555-555-5555 на 111-111-1111 "Выполнена ли задача A"

R C 'на 111-111-1111 "Является задачей A завершено "

ОТПРАВИТЬ с 111-111-1111 на 555-555-5555" Да "

R C d на 555-555-5555" Да "

Здесь мое приложение уведомляется через веб-хук, что «Да» было отправлено сообщение.

<происходит некоторая обработка, и для ответа используется номер телефона отправителя>

ОТПРАВИТЬ с 555-555-5555 на 111-111-1111 «Задача А закрыта»

Обновление 1

Причина, по которой я добавил это, связана с комментарием о том, что URL-адрес веб-ловушки неверен.

Когда я использую npm Запустить сервер из Visual Studio Code и Postman для проверки URL, я получаю следующее:

вывод сервера в Visual Studio

[nodemon] 1.18.10
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node server.js`
server running on port 5000
DB connected
post api/sms/twiml
{ Body: 'hi' }

URL-адрес PostMan:

http://localhost:5000/api/sms/twiml

Тело PostMan:

{
    "Body" :"hi"
}

Результат PostMan: Статус: 200 OK

<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Message>Hello!</Message>
</Response>

Обновление 2

Когда я удалил «twilml» из URL-адреса веб-крючка в Twilio и отправил текстовое сообщение, я получил следующее:

2020-01-26T18:05:09.862565+00:00 heroku[router]: at=info method=POST path="/sms" host=choremonger.herokuapp.com request_id=8b0d0987-2907-4796-a8b2-d4e6d14e209a fwd="54.208.241.142" dyno=web.1 connect=0ms service=2ms status=404 bytes=387 protocol=https

Когда я вставил его обратно и снова написал, и получил это:

2020-01-26T18:06:26.639155+00:00 heroku[router]: at=info method=POST path="/sms/twiml" host=choremonger.herokuapp.com request_id=0af446f3-4432-40fe-b6e6-1b64ecf6608c fwd="3.89.83.196" dyno=web.1 connect=0ms service=3ms status=404 bytes=393 protocol=https

Обновление 3

Я подумал, что это может быть связано с HTTPS против HTTP, поэтому я изменил веб-ловушку в HTTP и попробовал еще раз ... запрос поднял http cha nge ... но тот же результат.

2020-01-27T03:13:51.506124+00:00 heroku[router]: at=info method=POST path="/sms/twiml" host=choremonger.herokuapp.com request_id=539604b1-3b08-47d9-a124-3d2e30596043 fwd="54.166.158.158" dyno=web.1 connect=1ms service=2ms status=404 bytes=393 protocol=http

Обновление 4

Я пошел в отладчик Twilio и вытащил некоторую информацию ... надеюсь кто-нибудь может помочь мне подсказать, как это исправить

enter image description here

Номера телефонов и СВДС верны

enter image description here

enter image description here

enter image description here

enter image description here

Спасибо!

1 Ответ

0 голосов
/ 28 января 2020

ОК ... для всех тех, кто новичок в веб-программировании и РЕАКТИВНО, как и я ...

ЭТО причина:

Эта строка на моем сервере. js файл, который помещает URL в мир:

const sms = require ('./ways / api / sms');

Я пропустил ' api 'из URL-адреса в ссылке на конфигурацию Twilio

...