Перейти к основному содержимому

$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 это сделать нельзя, поскольку клиенты могут находиться в разных часовых поясах.

Вы можете заложить нужную логику в сценарий:

  1. Напишите сценарий так, чтобы бот всегда спрашивал и запоминал город клиента.
  2. В обработчике события рассылки задайте проверку на текущее время.
  3. Если время нерабочее, вызовите метод $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% на все товары при регистрации бонусной карты! Вам интересно наше предложение?

# Стейты для ведения дальнейшего диалога с клиентом…