首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Twilio on Rails发送顺序短信?

如何使用Twilio on Rails发送顺序短信?
EN

Stack Overflow用户
提问于 2017-05-30 21:35:11
回答 2查看 138关注 0票数 1

我使用React作为前端,和Rails后端。我有一系列的电话号码,我想发送短信。

在前端,我有这样的方法:

代码语言:javascript
复制
function postMessage(message, newWorkers){
  let phoneArray = newWorkers.map((worker) => {return PhoneHelper.condensePhone(worker.phone)}) //condensePhone converts input to +1PHONENUMBER
  for (var i = 0; i < phoneArray.length; i++){

    return fetch(`text_it`, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        message: message,
        phone: phoneArray[i]
      })
    })
  }
};

phoneArray看起来会像["1234567890", "1112223333", "2223334444"]一样。我将向所有这些号码发送同样的短信。

在后端,我有:

代码语言:javascript
复制
//routes 
post '/text_it' => 'schedules#text_dat_message'

//schedules_controller
def text_dat_message
  TwilioSender.new.send_it(params[:message], params[:phone])
end

我测试了它的发送到我的电话号码两次,但我只收到一条短信。然后我在this SO post上读到Twilio (我现在正在进行免费试用)每秒做一条消息。我安装了sidekiq并在几秒钟内添加了一个工作人员来发送它,

代码语言:javascript
复制
  def text_dat_message
    HardWorker.perform_in(10.seconds, params[:message], params[:phone]) #HardWorker does TwilioSender.new.send_it(args[0], args[1])
  end

当我尝试向我的号码发送2-3条短信时,它仍然只发送给我一条短信。

我怎样才能更改我的代码,这样它就可以将文本信息按顺序发送到指定的号码,比如间隔5秒?

编辑:

起作用了。迈克尔的回答给了我一个巨大的洞察力。问题似乎是,我有10秒的perform_in,几乎是从同一点开始的,而Twilio的1 SMS/s限制是行不通的。

我编辑了我的React端,以发送一个电话数组,而不是迭代它:

代码语言:javascript
复制
  ...
  body: JSON.stringify({
    message: message,
    phones: phoneArray
  })

在Rails方面,我知道我将收到一系列电话(和一条消息),所以我编辑了我的控制器,以跟随wesley的回答。此外,我需要一组电话,所以我做到了:

代码语言:javascript
复制
phones = params[:phones]
phones.each_with_index ...
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-30 22:15:17

您需要单独发送消息,每个消息都有不同的延迟:

代码语言:javascript
复制
phones.each_with_index do |number, index|
    SomeWorker.perform_in(index*3, message, number)
end
票数 2
EN

Stack Overflow用户

发布于 2017-05-30 21:57:22

在我看来,HardWorker延迟需要在所发送的消息之间发生变化。辛勤工作代码所做的就是在收到所有消息(同时仍在同一时间)之后10秒发送所有消息,如下所示:

代码语言:javascript
复制
def text_dat_message
  HardWorker.perform_in(rand(1..30).seconds, params[:message], params[:phone]) #HardWorker does TwilioSender.new.send_it(args[0], args[1])
end

会将延迟随机化,这将允许您发送多个测试。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44272331

复制
相关文章

相似问题

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