一点背景。我有一个正在运行的Web应用程序正在尝试接收来自Twilio的传入文本。我已将Twilio的短信twiml 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
我应该放弃参数并尝试解析请求正文吗?
我是REST api的新手,所以我确定我缺少一些非常基本的东西。
Twilio开发人员布道者在这里。
当Twilio POST发送到已配置的SMS URL时,参数将作为请求的正文发送,而不是作为查询字符串参数发送。
我对Picker不太熟悉,但是文档建议您可以使用Express中间件,包括body-parser
。如果您将Picker与挂钩,body-parser
则应该能够从中获取参数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
。我已经更新了上面的代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句