node js twilio发送sms不起作用

时间:2017-07-02 18:42:24

标签: node.js twilio twilio-api twiml

我有这个函数发送短信

 var twiml = new MessagingResponse();

function sendsms() {
                  twiml.message("aaa");
                 console.log(twiml.toString());
                   }

但是当我在User.findone

中调用此函数时
 User.findOne({}, function(err, user) {
                 if (condition) {
                     sendsms();
                 }
             })

它成功记录了twiml.toString enter image description here 但短信没有发送 enter image description here 当我在user.findOne外面打电话时,短信成功发送

sendsms()

这是发送短信的路线

router.post('/sendSMS', function(req, res) {
    var phone = req.body.phone;



    User.findOne({}, function(err, user) {


            require('../config/sendSMS')(user, phone);

            res.status(200).json({ success: true, message: 'message sent successfully' });

        }

    });

这是获取和重播短信的途径

router.post('/getSMS', function(req, res) {

    require('../config/getAndReplay')(req, res);

});

1 个答案:

答案 0 :(得分:1)

Twilio开发者传道者在这里。

您的代码中的问题是您正在混合同步和异步代码。

User.findOne是异步调用,因此在结果回调中调用getandreplay()函数意味着它会在您的路径中完成响应后发生。

我建议您return要从getandreplay()回复的邮件,并使用它来形成对传入请求的响应。像这样:

function getandreplay(node) {
    if (node.outs.length > 0) {
        if (node.outs.includes(req.body.Body.toLowerCase())) {
            for (var i = 0; i < node.output.length; i++) {
                var el = node.output[i];
                if (req.body.Body.toLowerCase() == el[0]) {
                    req.session.lastnode = getnode(el[1]);
                    if (getnode(el[1]).outs.length == 0) {
                        req.session.destroy();
                        User.findOneAndUpdate({}, { $push: { users: userPhone } }, { safe: true, upsert: true }, function(user, err) {});
                    }
                    return getnode(el[1]).msg;
                }
            }
        } else {
            return node.msg
        }
    }
}

然后,当您致电User.findOne()时,您会从getandreplay()获得结果并将其作为回复发回:

User.findOne({}, function(err, user) {
    if (!user.users.includes(userPhone)) {
        twiml.message(getandreplay(mynode));
    }
    res.writeHead(200, { 'Content-Type': 'text/xml' });
    res.end(twiml.toString());
});

请注意,我在res.end的回调函数中调用User.findOne()

让我知道这是否有帮助。