首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Twilio发送数千条短信

用Twilio发送数千条短信
EN

Stack Overflow用户
提问于 2017-10-12 20:53:01
回答 3查看 1.4K关注 0票数 0

我想用Twilio发送50,000条短信,我只是想知道,如果我循环这样大小的电话号码数组,我的请求是否会崩溃。事实上,Twilio只允许对每个请求发送一条消息,所以我必须发出5万条消息。

这样做有可能吗?还是我必须另找一条路呢?5万似乎太多了,但我不知道我能做多少请求。

代码语言:javascript
运行
复制
phoneNumbers.forEach(function(phNb)
{
    client.messages.create({
        body: msgCt,
        to: phNb,
        from: ourPhone
    })
    .then((msg) => {
        console.log(msg.sid);
    });
})

提前感谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-12 21:39:11

这里有两个因素。

  • 你需要考虑一下使用限制。
  • 执行50.000个并行http请求(实际上是您的代码)并不是一个好主意:您将遇到内存问题。

Twilio sms限制基于源和目的地的更改。

你有两个解决方案:

依次执行50k http请求

代码语言:javascript
运行
复制
    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方法结合使用。

票数 1
EN

Stack Overflow用户

发布于 2017-10-13 12:42:59

两位开发人员在这里传道。

API限制

首先,简单介绍一下我们的极限。只有一个数字,Twilio有每秒发送一条消息的限制。您可以通过添加更多的数字来增加这个值,这样10个数字就可以每秒发送10条消息。一段短代码每秒可以发送100条消息。

我们还建议您不要每天在任何一个长代码上发送超过200条消息。

无论哪种方式,我都建议使用消息传递服务来发送这样的消息。

最后,您还被限制为100个并发API请求。很高兴在这里看到其他答案,讨论按顺序而不是异步地发出请求,因为这样会占用服务器上的内存,并开始发现请求被Twilio拒绝。

通通API

现在我们有了一个API,它允许您用一个API调用发送多个消息。它被称为通通API,因为它允许您将许多数字传递给通知服务。您需要将数字转换为“绑定”,并通过通知服务发送它们,通知服务还使用消息传递服务进行数字池。

代码看起来有点像这样:

代码语言:javascript
运行
复制
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调用。

如果这有帮助的话请告诉我。

票数 2
EN

Stack Overflow用户

发布于 2017-10-12 21:20:36

由于非阻塞的forEach体调用,您异步发送请求,我想这对客户机来说是最快的。但问题是: Twilio是否允许来自单一来源的负载?它需要测试..。如果不是,您应该构建某种请求队列,例如基于承诺的请求队列,比如

代码语言:javascript
运行
复制
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();

或者如果你喜欢异步/等待-

代码语言:javascript
运行
复制
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();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46718709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档