@alex_belouss

Как реализовать отправку смс 100-500 смс за раз?

Есть на сайте база клиентов. Нужно отправлять каждому из них смс сообщение каждые полгода. База заполняется постепенно, добавили сегодня клиента или обновили его записи, полгода фиксируется с этого момента. Таким образом в будущем может скопиться так, что в один день нужно отправить за раз 100 или 500 клиентам.

Я планиурю сделать так, в БД просто обновляется дата-столбец last_updated
А потом крон каждый день будет запускать скрипт, скрипт будет вытаскивать те записи, если last_updated равно или больше 6 месяцев. Допустим вытаскивается 100 записей. Я форичем каждому из них отправляю смс и обновляю last_updated

(foreach $items as $item)
{
sendSms($iitem->phone);
// а здесь по айди item находим запись и обновляем last_updated
}


Правильное ли это решение? И какие сбои могут случиться?
  • Вопрос задан
  • 1879 просмотров
Решения вопроса 1
Exploding
@Exploding
wtf?
Самое главное то Вы и не упомянули!)) А именно - способ отправки смс. Тут все скорее от сервис-провайдера зависит: способ получения от Вас данных, ограничения если есть (может таймаут или кол-во в сутки там например...)
А форичем Вы по ним будете проходиться или вайлом - по моему вообще до одного места:)

Для примера: я использую сервис, который позволяет напрямую подключаться к их БД (для каждого клиента там отдельная таблица) и просто инсертю в нее столько смс - сколько моя душа пожелает, хоть 100 хоть 1000 хоть лям (ну и средства на аккаунте:)), а дальше уже его проблемы как он их будет отправлять. Данные он получил, "расписался" - аривидерчи:)
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@w3bt3rror
Присвой им ключи и делай отправку по возрастанию в цикле
Ответ написан
dimonchik2013
@dimonchik2013
non progredi est regredi
без преждевременной оптимизации решение правильное
а так - подумайте, что делать, когда время следующего крона пришло, а информации - дотавлено ли СМС, еще нет
Ответ написан
bogdan_uman
@bogdan_uman
шлЫмазл неукЪ-поцЪ
Ну а почему не использовать ActiveRecord на рельсах, и тем самым можно более эффективно манипулировать данными
items = Item.all.where('last_updated <= ?', Time.now - 6.month).limit(100)

items.each do |item|
  sendSms(item.phone)
  item.update(last_updated: Time.now)
end
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы