我想用Twilio发送~5000短信,我只是想知道如果我循环通过这个大小的电话号码阵列,我的请求是否会崩溃。事实上,Twilio每个请求只允许1条消息,因此我必须生成50,000条消息。
是否可以这样做或者我必须找到另一种方式? 50,000似乎太多了,但我不知道我能做多少请求。
phoneNumbers.forEach(function(phNb)
{
client.messages.create({
body: msgCt,
to: phNb,
from: ourPhone
})
.then((msg) => {
console.log(msg.sid);
});
})
提前致谢
答案 0 :(得分:2)
Twilio开发者传道者在这里。
首先,快速说明我们的限制。使用单个数字,Twilio每秒发送一条消息的限制。您可以通过添加更多数字来增加它,因此10个数字将能够每秒发送10条消息。 A short code can send 100 messages per second.
We also recommend that you don't send more than 200 messages on any one long code per day.
无论哪种方式,我建议使用messaging service发送此类邮件。
最后,您还限制为100个并发API请求。很高兴看到这里的其他答案是关于顺序而不是异步地提出请求,因为这会占用服务器上的内存以及开始查找请求被Twilio拒绝。
我们现在有一个API,允许您通过单个API调用发送多条消息。它被称为passthrough API,因为它允许您将许多数字传递到Notify service。您需要将您的号码转换为“绑定”并通过Notify服务发送它们,Notify服务也使用消息服务进行数字池化。
The code looks a bit like this:
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);
})
您的情况唯一的缺点是每条消息都需要相同,并且请求的大小必须小于1兆字节。我们发现这通常意味着大约10,000个数字,因此您可能需要将列表分解为5个API调用。
让我知道这是否有帮助。
答案 1 :(得分:1)
由于每次正文调用都没有阻止,您发送请求是异步的,我想这对客户来说速度最快。但问题是: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 / await -
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();
答案 2 :(得分:0)
这里有两个因素。
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方法的异步模块