我想用Twilio发送50,000条短信,我只是想知道,如果我循环这样大小的电话号码数组,我的请求是否会崩溃。事实上,Twilio只允许对每个请求发送一条消息,所以我必须发出5万条消息。
这样做有可能吗?还是我必须另找一条路呢?5万似乎太多了,但我不知道我能做多少请求。
phoneNumbers.forEach(function(phNb)
{
client.messages.create({
body: msgCt,
to: phNb,
from: ourPhone
})
.then((msg) => {
console.log(msg.sid);
});
})
提前感谢
发布于 2017-10-12 21:39:11
这里有两个因素。
Twilio sms限制基于源和目的地的更改。
你有两个解决方案:
依次执行50k http请求
phoneNumbers.forEach(async function(phNb){
try {
let m = await client.messages.create({
body: msgCt,
to: phNb,
from: ourPhone
})
console.log(a)
} catch(e) {
console.log(e)
}
})
与并发级别并发执行50k http请求。
这是相当容易做到的令人敬畏的蓝鸟糖功能。无论如何,twilio软件包使用的是本地承诺。为此,可以将异步模块与mapLimit方法结合使用。
发布于 2017-10-13 12:42:59
两位开发人员在这里传道。
API限制
首先,简单介绍一下我们的极限。只有一个数字,Twilio有每秒发送一条消息的限制。您可以通过添加更多的数字来增加这个值,这样10个数字就可以每秒发送10条消息。一段短代码每秒可以发送100条消息。。
我们还建议您不要每天在任何一个长代码上发送超过200条消息。
无论哪种方式,我都建议使用消息传递服务来发送这样的消息。
最后,您还被限制为100个并发API请求。很高兴在这里看到其他答案,讨论按顺序而不是异步地发出请求,因为这样会占用服务器上的内存,并开始发现请求被Twilio拒绝。
通通API
现在我们有了一个API,它允许您用一个API调用发送多个消息。它被称为通通API,因为它允许您将许多数字传递给通知服务。您需要将数字转换为“绑定”,并通过通知服务发送它们,通知服务还使用消息传递服务进行数字池。
const Twilio = require('twilio');
const client = new Twilio(accountSid, authToken);
const service = client.notify.services('ISXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
service.notifications
.create({
toBinding: [
JSON.stringify({
binding_type: 'sms',
address: '+15555555555',
}),
JSON.stringify({
binding_type: 'facebook-messenger',
address: '123456789123',
}),
],
body: 'Hello Bob',
})
.then(notification => {
console.log(notification);
})
.catch(error => {
console.log(error);
})
在您的情况下,唯一的缺点是每条消息都需要相同,请求的大小需要小于1MB。我们发现这通常意味着大约10,000个数字,因此您可能需要将列表分解为5个API调用。
如果这有帮助的话请告诉我。
发布于 2017-10-12 21:20:36
由于非阻塞的forEach体调用,您异步发送请求,我想这对客户机来说是最快的。但问题是: Twilio是否允许来自单一来源的负载?它需要测试..。如果不是,您应该构建某种请求队列,例如基于承诺的请求队列,比如
function sendSync(index = 0) {
if(index === phoneNumbers.length) {
return;
}
client.messages.create({
body: msgCt,
to: phoneNumbers[index],
from: ourPhone
})
.then(function(msg) {
console.log(msg.sid);
sendSync(index + 1);
})
.catch(function(err) {
console.log(err);
});
}
sendSync();
或者如果你喜欢异步/等待-
async function sendSync() {
for (let phNb of phoneNumbers) {
try {
let msg = await client.messages.create({
body: msgCt,
to: phNb,
from: ourPhone
});
console.log(msg);
} catch(err) {
console.log(err);
}
})
}
sendSync();
https://stackoverflow.com/questions/46718709
复制相似问题