繁体   English   中英

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

[英]How to send sequential SMS using Twilio on Rails?

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

在前端,我有这个方法:

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"] 我将向所有这些号码发送相同的短信。

在后端,我有:

//routes 
post '/text_it' => 'schedules#text_dat_message'

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

我通过两次将它发送到我的电话号码来测试它,但是我只收到一个文本。 然后我读了这篇SO帖子 ,Twilio免费等级(我现在正在免费试用)每秒发送1条消息。 我安装了sidekiq并添加了一个工人在几秒钟内发送它,

  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秒?

编辑:

这是工作。 迈克尔的回答给了我很大的洞察力。 似乎问题是,sidekiq的执行时间为10秒,我几乎从同一点开始10秒钟,并且由于Twilio的1个SMS / s限制,它将无法工作。

我编辑了我的React端来发送一个电话阵列而不是迭代它:

  ...
  body: JSON.stringify({
    message: message,
    phones: phoneArray
  })

在Rails方面,我知道我将收到一系列电话(和一条消息),所以我编辑了我的控制器以遵循韦斯利的回答。 另外,我需要有一系列手机,所以我做了:

phones = params[:phones]
phones.each_with_index ...

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

phones.each_with_index do |number, index|
    SomeWorker.perform_in(index*3, message, number)
end

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM