寻找一个示例,了解如何使用Twilio通过mms接收和处理图像到我的应用程序。
查看twilio仪表板中的数字配置屏幕,我假设我设置了一个传入的电话号码和一个HTTP POST网址来发送传入的mms。但是,我不确定发布到该URL的内容并且不知道该数据的结构。
有人有一个例子说明哪些数据被发布到网址以及采用何种格式?任何关于服务器将处理什么数据的javascript示例都会很棒。
答案 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));
}