Как мне организовать свои модели и задачу cron rake, чтобы отправлять электронные письма с интервалами с разными датами начала? - PullRequest
4 голосов
/ 12 сентября 2010

Я переоцениваю свою модель и пытаюсь решить конкретную проблему.У меня есть Контакты, которые могут принадлежать Кампании, которая представляет собой последовательность действий, таких как телефонные звонки и электронные письма, каждый из которых имеет количество дней, назначенных в качестве атрибута, определяющего, когда он должен быть отправлен.

Я хочу, чтобы cronработа по просмотру и просмотру электронных писем, которые должны быть получены сегодня (или, возможно, просрочены), и отправка этих писем.

У всех контактов есть свои собственные даты начала.

Иногда вызов, который необходимоПроисходит, скажем, через 6 дней с начала, не завершается до 10 дней.Это означает, что электронная почта в той же кампании, которая должна быть отправлена ​​через 8 дней с начала, должна быть отложена еще на 4 дня, до 12 дней с начала, но только для этого конкретного контакта, если задержанный звонок был для этого контакта.

Мне бы хотелось, чтобы люди подошли к моделированию этого и, в частности, в любой конкретный день придумали правильные электронные письма для отправки.

Некоторые проблемы, с которыми я столкнулся при своем подходе:

1) Когда нет письма для отправки, я ошибаюсь с nil.Я пытаюсь поймать это, задаваясь вопросом, есть ли лучший способ проверить.Как люди справляются с этим?

2) Как рассчитать задержку каскада?Я использую сложный способ первой проверки последней даты всего, что было выполнено (например, у завершенных элементов есть собственная запись в ContactEmail или ContactCalls).Затем я нахожу разницу в интервале с атрибутом «дни».Затем я добавляю этот интервал к дате завершения последнего элемента.

Ответы [ 3 ]

1 голос
/ 18 ноября 2010

Я бы также предложил использовать delayed_job для отправки электронных писем.С delayed_job у вас будет очередь задач с соответствующим временем.Это позволяет планировать задачи на определенное время в будущем.Это, вероятно, более удобно, чем использование cron.

Что касается планирования, мне кажется, что электронное письмо не отправляется до завершения вызова, поэтому запись электронной почты в очереди должна быть создана вточка, когда приложение уведомляется о завершении вызова.Расчет даты должен быть таким простым, как Time.now + 4.days.

Если требуется выполнить более одного вызова до того, как электронное письмо будет отправлено, вам нужно просто проверить, что ВСЕ вызовы были завершены, прежде чем поместить сообщение в очередь для отправки.

0 голосов
/ 04 ноября 2010

1) Когда нет письма для отправки, я ошибка с ноль. Я пытаюсь поймать это, интересно, есть ли лучший способ проверять. Как люди справляются с этим?

Проверьте на ноль. Если ноль, ничего не делай.

2) Как рассчитать каскад медлишь? Я использую сложный способ сначала проверить последнюю дату все, что было завершено (завершенные предметы имеют свою запись в ContactEmail или ContactCalls для пример). Тогда я найду разницу в интервале против атрибута «дни». Затем я добавляю этот интервал дата, когда последний элемент был завершен.

Немного смущает, как вы это описали, но, похоже, «электронные письма» должны происходить через 4 дня после «Звонков». Таким образом, в вашем задании по рейку для отправки электронных писем просто найдите все звонки, которые были завершены 4 больше, чем 4 дня назад без соответствующих писем, а затем отправьте их по электронной почте.

0 голосов
/ 06 октября 2010

Вы пытались управлять этим с помощью delayed_job?У меня был огромный успех, когда он делал подобные вещи, и у вас есть все удобства стека Rails вместо того, чтобы переходить на cron или rake.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...