如何使用twilio接收和处理照片mms

时间:2015-08-03 18:31:04

标签: node.js twilio

寻找一个示例,了解如何使用Twilio通过mms接收和处理图像到我的应用程序。

查看twilio仪表板中的数字配置屏幕,我假设我设置了一个传入的电话号码和一个HTTP POST网址来发送传入的mms。但是,我不确定发布到该URL的内容并且不知道该数据的结构。

有人有一个例子说明哪些数据被发布到网址以及采用何种格式?任何关于服务器将处理什么数据的javascript示例都会很棒。

1 个答案:

答案 0 :(得分:2)

首先使用twilio-node模块(npm install twilio)。完成后,您可以像访问任何请求正文req.body一样访问webhook请求正文。

twilio's docs所述,结构如下:

{
   MessageSid: String, //ID pertaining to this message
   AccountSid: String, //ID pertaining to your twilio account
   From: String, //phone number of sender
   To: String, //recipients phone number, you in this case
   Body: String, //Message body
   NumMedia: Number, //number of attached media
   //these values only appear when media is present(NumMedia.length > 0)
   MediaContentType: [String] //type of content in SMS
   MediaUrl: [String] //URL to download the media
}

然后你可以使用twilio模块,caolan / async模块和流行的request/request模块做这样的事情:

var twilio  = require('twilio'),
    fs      = require('fs'),
    async   = require('async'),
    request = require('request');

app.post('/mms', function(req, res) {
    var options = { url: 'https://subtle-gradient-188.herokuapp.com/twiml' };
    if (!twilio.validateExpressrequire(req, 'YOUR_TWILIO_AUTH_TOKEN', options)) return res.status(401).send("Bad key!");

    if(!req.body.hasOwnProperty('MediaUrl')) return res.send("Missing media...");

    var media = req.body.MediaUrl;

    //download all media
    async.map(media, download, function(err, filenames) {

        var resp = new twilio.TwimlResponse();
        if(err) {
            resp.say("Problem occured");
            console.log(err);
        }
        else resp.say('Files recieved: ' + filenames.join(', '));
        res.type('text/xml');
        res.send(resp.toString());
    });
});

//download a single url to a unique filename
function download(url, cb) {
    var name = Date.now() + url.split('/').pop();

    request
        .get(url)
        .on('error', cb)
        .on('end', function() {
            cb(null, name);
        })
        .pipe(fs.createWriteStream(name));
}