Задания Cron - как предотвратить отправку повторного уведомления? - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь отправить уведомление, когда определенное событие должно произойти в течение одного часа.

В целях тестирования у меня в настоящее время запущен процесс cron раз в минуту. Но я подозреваю, что есть более эффективный способ сделать это.

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

Вот мой текущий процесс:

function webinar_starts_onehour() {

    // Get all lessons that are in future
    $today = time();
    $args = array(
        'post_type'   => 'lessons',
        'post_status' => 'publish',
        'posts_per_page' => -1,
        'meta_query' => array(
                                'key' => 'webinar_time',
                                'value' => $today,
                                'compare' => '>='
                             )
    );
    $lessons = get_posts( $args );

    $notifications = get_notifications( 'webinar_starts_onehour' );

    // Foreach lesson
    foreach ( $lessons as $lesson ) {

        $webinar_time = strtotime($lesson->webinar_time);
        $difference = round(($webinar_time - $today) / 3600,2);

        if (($difference > .98) && ($difference < 1.017)) {
           // do something
        }
    }
}

Итак, что я пытаюсь сделать, это запустить его, если он находится на расстоянии чуть меньше часа или чуть больше (что+ одна минута).

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

Идеи?

И если вы думаете, что это действительно ненадежно (я знаю, что это так), что было бы прагматичным способом добавить таблицу для отслеживания такого рода уведомлений? Могу ли я просто создать таблицу, скажем, sent_notifications, которая будет иметь user_id, notification_id, lesson_id, status, а затем проверить, было ли успешное уведомление для этого конкретного урока, а для неудачных отправлений использовать другой cronпостоянно пытаться отправить неудачные?

спасибо, Брайан

...