$textCampaign.postponeClient
Метод позволяет отложить отправку сообщения клиенту в ходе рассылки в зависимости от условий, описанных в сценарии.
Синтаксис
$textCampaign.postponeClient(5400);
$textCampaign.postponeClient("1h 30m");
Метод принимает аргумент interval
— интервал времени, на которое нужно отложить отправку сообщения.
Значение interval
может быть числом или строкой.
- Если это число, то оно обозначает количество секунд таймаута.
- Если это строка, то она обозначает продолжительность таймаута в человекочитаемом виде.
Максимальное значение интервала — 99 часов.
Строковые значения interval
должны удовлетворять регулярному выражению:
(\s*(?<h>\d{0,2})\s*(hours|hour|h))?(\s*(?<m>\d{0,2})\s*(minutes|minute|min|m))?(\s*(?<s>\d{0,2})\s*(seconds|second|sec|s))?\s*
Примеры строковых значений interval
5 seconds
1 sec
3s
1 min
1 minute
10 minutes
1 hour
10 hours
3 min 1 sec
1h5m3s
Использование в сценарии
Допустим, вы хотите отправить рассылку клиентам так, чтобы сообщение пришло в рабочее время. Через интерфейс JAICP это сделать нельзя, поскольку клиенты могут находиться в разных часовых поясах.
Вы можете заложить нужную логику в сценарий:
- Напишите сценарий так, чтобы бот всегда спрашивал и запоминал город клиента.
- В обработчике события рассылки задайте проверку на текущее время.
- Если время нерабочее, вызовите метод
$textCampaign.postponeClient
, чтобы запланировать повторную отправку.
Для одного клиента отложить сообщение можно не более 10 раз. После этого JAICP больше не будет отправлять сообщение этому клиенту и зафиксирует ошибку в отчете по рассылке.
# Подключение справочника городов из системного проекта zb-common.
require: city/city.sc
module = sys.zb-common
# Подключение библиотеки Moment.js.
require: dateTime/moment.min.js
module = sys.zb-common
theme: /
# Ветка сценария, где бот узнает город клиента.
state: Start || modal = true
q!: $regex</start>
a: Здравствуйте! Не могли бы вы уточнить, в каком городе вы находитесь?
state: GetCity
q: * $City *
script: $client.city = $parseTree._City;
a: Спасибо! Теперь я готов к работе.
go: /
state: CatchAll || noContext = true
event: noMatch
a: Простите, но я не смогу правильно работать, не узнав, где вы.
# Стейт для обработки события, которое отправляется при запуске рассылки.
state: Promo
event!: promoEvent
script:
var currentTime = $jsapi.timeForZone($client.city.timezone);
$temp.currentHour = moment(currentTime).hours();
if: $temp.currentHour >= 21 || $temp.currentHour <= 9
script: $textCampaign.postponeClient("1 hour");
go: /
else:
a: Скидка 10% на все товары при регистрации бонусной карты! Вам интересно наше предложение?
# Стейты для ведения дальнейшего диалога с клиентом…