Twilio REST + Rails 任务无需等待响应

Twilio REST + Rails task without waiting for a response

我有一个 rake 任务,它在 cron 作业上通过 Twilio(使用他们的 Twilio REST 客户端)发送大量消息:

def self.twilio_client
    Twilio::REST::Client.new(ENV['TWILIO_ACCOUNT_ID'], ENV['TWILIO_TOKEN'])
end

scheduled_messages.each do |scheduled_message|
    MessagesSender.twilio_client.messages.create(
        :to => scheduled_message.phone_number,
        :messaging_service_sid => ENV['TWILIO_MSID'],
        :body => scheduled_message.body
    )
end

它工作得很好。但是,我的任务等待来自 Twilio 的每个响应,并且在上一个完成之前不会进行到下一个。当我使用 Twilio 的消息服务时,我认为我没有使用多个号码同时发送。结果,当我必须发送10000条消息时,需要非常非常长的时间才能将它们全部发送出去。

我怎样才能加快这个过程?有没有可能完全不等待响应?我需要在线程中执行此操作才能使用消息服务吗?

谢谢

根据您使用 Twilio 的计划,您的费率受到限制。 https://www.twilio.com/help/faq/twilio-basics/how-many-calls-and-sms-messages-per-second-can-my-twilio-account-make?baseUrl=%2Fhelp%2F

最好的办法是像延迟作业一样设置延迟处理,然后延迟每次发送,以便它由您的队列处理。

这里是 Twilio 开发人员布道者。

即使您使用多个号码通过消息服务发送消息,您也会受到速率限制。当您有那么多消息要发送时,它总是需要很长时间。

我建议设置一个后台作业来处理所有消息。这有几个好处:你可以调整你使用的工人数量以获得最佳性能,如果消息在中间失败,剩余的一批消息仍然会被发送(这不是案例与您当前的代码)。

前阵子我写了一篇博客 post 介绍如何设置 Rails' ActiveJob for sending messages in the background. You could also use a gem like Textris,它也可以为您处理。

如果有帮助请告诉我。