gpt4 book ai didi

node.js - Twiml POST 请求上的参数为空

转载 作者:太空宇宙 更新时间:2023-11-03 22:13:42 24 4
gpt4 key购买 nike

一些背景知识。我正在运行一个网络应用程序,它正在尝试接收来自 Twilio 的传入文本。我已将 Twilio 的 sms 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 号码发送短信时,代码会运行,但我的 Twilio 日志中收到 11200 HTTP 检索失败 错误。我的应用程序日志正在输出第一个 console.log,但我没有从 params.query 接收任何数据。

{ 查询:{} }

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

我应该放弃参数并尝试解析请求正文吗?

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

最佳答案

这里是 Twilio 开发者布道者。

当 Twilio POST 到您配置的 SMS url 时,parameters are sent as the body of the request ,不作为查询字符串参数。

我对Picker不太熟悉,但是documentation suggests you can use Express middleware ,包括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);
});
}

请告诉我这是否有帮助。

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

关于node.js - Twiml POST 请求上的参数为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35072030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com