Привет! Я использую 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: //)
когда я пишу свой номер 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 и вытащил некоторую информацию ... надеюсь кто-нибудь может помочь мне подсказать, как это исправить
Номера телефонов и СВДС верны
Спасибо!