salebot работает с датами в формате "dd.mm.yyyy", а с временем в формате "HH:MM" Время московское!
Для работы с датами и временем вы можете использовать следующие переменные:
#{current_date} - текущая дата в формате dd.mm.yyyy #{next_day} - завтрашняя дата в формате dd.mm.yyyy. Удобно для отправки сообщения завтра. #{current_time} - московское время в формате hh:mm #{weekday} - день недели в виде числа, понедельник - 1, вторник -2
Сравнивать даты и время можно логическими операторами, так же как и числа.
"addDays": прибавляет к дате указанное количество дней. Для вычитания передайте отрицательное число. Пример: addDays(current_date, 20) или addDays('20.08.2019', -99)
"addMinutes" прибавляет к указанному времени количество минут. Для вычитания передайте отрицательное число. Пример: addMinutes(current_time, 20) или addMinutes('20:08', -30)
Либо вы можете напрямую прибавлять дни к датам и минуты ко времени.
'20.08.2019' -99 current_date + 20 current_time + 20 '20:08' -30
Сравнивать даты и время можно логическими операторами, так же как и числа.
Примеры: '01.09.2020' < '11.10.2020' '11.10.2020' >= current_date '09:00' < '11:50' '09:00' == '11:50' '11:50' > current_time
Если у вас периодичные рассылки по дням недели, вы можете получать дату дня недели, чтобы запланировать рассылку.
"weekday_date" - возвращает дату ближайшего дня недели. Принимает два параметра. Первый параметр день недели, дату которого необходимо определить (от 1 до 7). Второй параметр показывает, возвращать ли сегодняшнюю дату, если нужный день сегодня. Второй параметр можно не указывать, по умолчанию False. Его значение давайте рассмотрим на примере:
Допустим, вы настраиваете отправку сообщения в рассылке так, чтобы оно приходило именно в четверг. Но как же быть, если клиент только зарегистрировался в четверг? Отправлять ему сообщение в этот четверг или в следующий? Второй параметр False означает, что сообщение будет отправлено только в следующий четверг. Второй параметр True означает, что оно будет отправлено и в тот четверг, когда пользователь только зарегистрировался.
В нашем примере пользователь регистрируется в четверг 13.02.2020. И сообщение мы ему хотим отправить в следующий четверг. Значит, возвращаемое значение: "20.02.2020".
Например, weekday_date(4) вернет '25.03.2021'.
Если текущий день вам подходит только до определенного времени, то можно использовать такую конструкцию: weekday_date(4, current_time < '13:00'), где условие можно заменить на нужное вам.
Допустим компания работает с утра 9 до 6 вечера и не работает в субботу и воскресенье.
Все рекомендуется делать по шагам. Сначала поставим проверку попадания в рабочее время: current_time >= '9:00' AND current_time <= '18:00' По аналогии НЕ рабочее время: current_time < '9:00' OR current_time > '18:00'
Дальше добавим проверку не написали ли нам в выходные, для этого нам понадобится weekday: weekday != 6 AND weekday != 7
Соединим вместе. Условие, что написали в рабочее время: current_time >= '9:00' AND current_time <= '18:00' AND weekday != 6 AND weekday != 7 Противоположное условие, что написали НЕ в рабочее время: current_time < '9:00' OR current_time > '18:00' OR weekday == 6 OR weekday == 7
Формат даты времени везде используется разный и, возможно, один из интегрированных ресурсов вернет время не в том формате, который понимает salebot. Вам нужно будет его конвертировать.
Функция конвертации даты и времени: convert_datetime. 3 параметра: строка даты, строка формата входной строки, строка формата результата. Пример:
convert_datetime("2011-11-03", "%Y-%m-%d", "%Y/%m/%d") на выходе будет 2011/11/03
Описание параметров строки формата:
Директива | Значение | Пример |
| Сокращенное значение дня недели | Вс, Пн.. |
| Полное названеи дня недели | Понедельник, Вторник, …, Воскресенье |
| День недели как десятичное число, где 0 воскресенье и 6 суббота | 0, 1, …, 6 |
| День месяца в виде десятичного числа с нулями | 01, 02, …, 31 |
| Месяц как аббревиатура | янв, фев, …, дек |
| Полное название месяца | Январь, Февраль... |
| Месяц в виде десятичного числа с нулями | 01, 02, …, 12 |
| Год в виде двузначного числа | 00, 01, …, 99 |
| Четырехзначное значение года | 0001, 0002, …, 2013, 2014, …, 9998, 9999 |
| Час (24-часовой формат) двузначное значение | 00, 01, …, 23 |
| Час (12-часовой формат) двузначное значение | 01, 02, …, 12 |
| Эквивалент AM или PM. | AM, PM (en_US);am, pm (de_DE) |
| Минуты в двузначном формате | 00, 01, …, 59 |
| Секунды в двузначном формате | 00, 01, …, 59 |
| Микросекунды в шестизна | 000000, 000001, …, 999999 |
| UTC offset in the form | (empty), +0000, -0400, +1030, +063415, -030712.345216 |
| Time zone name (empty string if the object is naive). | (empty), UTC, GMT |
| Трезначное значение дня года | 001, 002, …, 366 |
| Номер недели в году (воскресенье как первый день недели) в виде десятичного числа, дополненного нулями. Все дни нового года, предшествующие первому воскресенью, считаются нулевой неделей. | 00, 01, …, 53 |
| Номер недели в году (понедельник как первый день недели) в виде десятичного числа. Все дни нового года, предшествующие первому понедельнику, считаются нулевой неделей. | 00, 01, …, 53 |
| Символ | % |
| timestamp | 1607926200 |
Все остальные символы означают сами себя.
Получить текущий timestamp можно: convert_datetime("#{current_date} #{current_time}", "%d.%m.%Y %H:%M", "%s")