Twiml POST请求上的空参数

一点背景。 我有一个运行的Web应用程序试图从Twilio接收传入的文本。 我已经configurationTwilio的短信url指向我的应用程序在路线:

http://my-app-name.com/api/twiml

当请求被执行时,我执行了一些代码:

 if (Meteor.server) { // use picker to make a server side route Picker.route('/api/twiml', (params, req, res, next) => { console.log(util.inspect(params, {showHidden: true, colors: true})); console.log(util.inspect(req.body, {showHidden: true, colors: true})); // message data (not populating?) let messageSid = params.query.MessageSid, accountSid = params.query.AccountSid, from = params.query.From, to = params.query.To, body = params.query.Body; //console.log(messageSid + '\n' + accountSid + '\n' + from + '\n' + to + '\n' + body) //from = '+' + from.trim(); //to = '+' + to.trim(); let responseBody = 'Thanks'; res.writeHeader(200, {'Content-Type': 'application/xml'}); return '<?xml version="1.0" encoding="UTF-8"?><Response><Sms from="[TWILIOFROM]" to="[TO]">[BODY]</Sms></Response>' .replace('[TWILIOFROM]', myNumber) .replace('[TO]', from) .replace('[BODY]', responseBody); }); } 

当我编辑我的Twilio号码的代码运行,但我得到一个11200 HTTP retrieval failure错误在我的Twilio日志。 我的应用程序的日志输出第一个console.log的,但我没有收到我的params.query任何数据。

{ query: {} }

第二个console.log: console.log(util.inspect(req.body, {showHidden: true, colors: true})); 吐出一些垃圾: [90mundefined[39m

我应该放弃参数,并尝试parsing请求体?

我对REST API非常陌生,所以我确信我错过了一些非常基本的东西。

Twilio开发者在这里传道。

当Twilio发布到您configuration的SMSurl时, 参数将作为请求的主体发送 ,而不是查询string参数。

我对Picker不太熟悉,但文档build议您可以使用Express中间件 ,包括body-parser 。 如果你使用body-parser连接Picker,那么你应该可以从req.body获取参数。 像这样的东西可能会工作(注意行2和3,包括body-parser ):

 if (Meteor.server) { var bodyParser = Meteor.npmRequire( 'body-parser'); Picker.middleware( bodyParser.urlencoded( { extended: false } ) ); // use picker to make a server side route Picker.route('/api/twiml', (params, req, res, next) => { console.log(util.inspect(params, {showHidden: true, colors: true})); console.log(util.inspect(req.body, {showHidden: true, colors: true})); // message data (not populating?) let messageSid = req.body.MessageSid, accountSid = req.body.AccountSid, from = req.body.From, to = req.body.To, body = req.body.Body; //console.log(messageSid + '\n' + accountSid + '\n' + from + '\n' + to + '\n' + body) //from = '+' + from.trim(); //to = '+' + to.trim(); let responseBody = 'Thanks'; res.writeHeader(200, {'Content-Type': 'application/xml'}); let twiml = '<?xml version="1.0" encoding="UTF-8"?><Response><Sms from="[TWILIOFROM]" to="[TO]">[BODY]</Sms></Response>' .replace('[TWILIOFROM]', myNumber) .replace('[TO]', from) .replace('[BODY]', responseBody); res.end(twiml); }); } 

让我知道这是否有帮助。

编辑 :我认为,而不是返回的TwiML,你实际上需要发送到res.send与响应对象。 我已经更新了上面的代码。