从 Express Get 方法调用 Parse Cloud Code 函数

Calling Parse Cloud Code function from Express Get Method

我有一个非常快速的问题想问那些精通 Parse、Cloud Code、Twilio 和 Express 的人...

基本上,我已经设置了一个 node.js Express 函数来处理特定 URL 的 GET,只要有人拨打 phone 号码,Twilio 就会调用该函数,我想要从 GET 处理函数调用 Parse Cloud Code 函数,该函数通知其帐户与该特定号码相关联的用户。

因此我的问题是在下面的代码示例中是否会调用 Parse Cloud 函数 "notifyConferenceNumberOwner"。

app.get('/conf', function(request, response) {

    var phoneNumber = request.query['To'];

    var twiml = new twilio.TwimlResponse();
    twiml.say('Your conference call will begin momentarily.',
    {
        voice:'woman',
        language:'en-gb'
    })
    .dial({
        action:'http://url-to-call-status',
        method:'GET'
    },
    function(node) {
        node.conference('MyConference', {
        waitUrl:'http://twimlets.com/holdmusic?Bucket=com.twilio.music.guitars',
        startConferenceOnEnter:'true',
        beep:'true'
            });
    });

    response.type('text/xml');
    response.send(twiml.toString());

    Parse.Cloud.run('notifyConferenceNumberOwner', { conferenceCallNumber: phoneNumber }, {
        success: function(ratings) {
            console.log('*** NOTIFICATION SUCCEEDED');
        },
        error: function(error) {
            console.error('*** NOTIFICATION FAILED: ' + error);
        }
    });

});

我希望这会奏效,但在我的情况下似乎失败了...如果我遗漏了什么,请告诉我。

谢谢!

在进一步的测试中,似乎 Parse Cloud Code 函数 调用并发送推送通知。

出于某种原因(也许是 Apple 方面的限制?)它们似乎没有被发送,而且当我查看日志时似乎也没有调用该函数,但我确实收到了一些推送通知.

更新

实际上,最终效果更好的是将推送通知发送代码放在一个普通的旧 JavaScript 函数中,如此处所述(甚至没有回调):

https://www.parse.com/questions/can-i-use-a-cloud-code-function-within-another-cloud-code-function

所以现在看起来更像是这样:

app.get('/conf', function(request, response) {

    var phoneNumber = request.query['To'];

    var twiml = new twilio.TwimlResponse();
    twiml.say('Your conference call will begin momentarily.',
    {
        voice:'woman',
        language:'en-gb'
    })
    .dial({
        action:'http://url-to-call-status',
        method:'GET'
    },
    function(node) {
        node.conference('MyConference', {
        waitUrl:'http://twimlets.com/holdmusic?Bucket=com.twilio.music.guitars',
        startConferenceOnEnter:'true',
        beep:'true'
            });
    });

    sendCallNotification(phoneNumber);

    response.type('text/xml');
    response.send(twiml.toString());
});

...现在它每次都能正常工作,到目前为止一直非常可靠。

sendCallNotification 只是为推送通知准备一条消息,然后调用 Parse.Push.send() -- 它要么有效,要么无效。无论哪种方式,在这种情况下都没有真正的消费者使用该信息,所以我只记录它成功或失败的事实。

我很满意,效果很好!

只希望 Parse 能继续存在...但那是另一个问题。