Описание сервисных периодов Webim

В этой статье описаны периоды сервиса Webim, которые отвечают за обновление статусов операторов и посетителей, состояний диалогов, кэшированных данных; отправку e-mail-сообщений, сохранение файлов в БД, отправку запросов и т.д. Часть периодов можно настраивать (наиболее используемые периоды вынесены в account config), другие же являются константами и могут быть изменены только путём доработки в версиях Webim для размещения на собственных мощностях клиента (hosted-клиенты).

Настраиваемые сервисные периоды Webim


Размещённые в account config

Значения для периодов указываются в секундах.

NB:для smart_polling_period_settings параметры указываются в формате JSON.

Название периода Описание Значение по умолчанию
normal_polling_period Webim может принимать/отвечать на запросы от фронтендов операторской и посетительской части в двух режимах: посредством обычного http, но с использованием long polling, или с использованием протокола WebSocket. В первом случае, сервер отвечает на запрос от клиента не сразу, а либо по прошествии определённого времени (нет сообщений), либо сразу, как только для клиента приходит сообщение (ответ приходит в виде сообщения для клиента). Во втором случае, клиент и сервер устанавливают двунаправленное TCP-соединение и сервер сам отправляет клиенту сообщения по мере их поступления. В Webim для выбора режима обмена запросами существуют специальные параметры account config - operator_websockets и visitor_websockets.
Период normal_polling_period регулирует время, после которого клиент в любом случае получит ответ от сервера. Как только клиент получает ответ от сервера, он сразу же делает новый запрос к нему и цикл повторяется вновь.
10 секунд.
in_chat_polling_period Данный период регулирует время, по истечении которого сервер гарантировано даёт ответ клиенту (даже если нет данных) при активном диалоге. 2 секунды.
smart_polling_period_settings При включенном параметре smart_polling_period_logic время ответа сервера на запросы определяется автоматически (в зависимости от времени, прошедшего с момента последнего совершённого действия):
  • "int" - время, прошедшее с момента последнего действия (интервал)
  • "hot" - поллинг-период при активном диалоге
  • "cold" - поллинг-период при отсутствии активных диалогов
           [{"int":10,"hot":1,"cold":2},{"int":30,"hot":2,"cold":5},{"int":120,"hot":5,"cold":10}]
          

В данном примере на интервале от 0 до 10 секунд с момента последнего совершённого действия поллинг-периоды в активном и неактивном состоянии имеют значения 1 и 2; на интервале от 10 до 30 секунд поллинг-периоды имеют значения соответственно 2 и 5; на интервале от 30 до 120 секунд поллинг-периоды имеют значения 5 и 10.

Нет
statistics_min_period Минимальный разрешаемый период в статистике. 3600 секунд.
previous_chats_label_time_interval Период устанавливает минимальное время, за которое у посетителя проверяется наличие предыдущих диалогов с оператором. Нет
dashboard_realtime_update_interval Отвечает за обновление метрик, использующих real-time интервал обновления. Подробнее об этом здесь. 10 секунд.
dashboard_prev_periods_update_interval Отвечает за обновление метрик, использующих не real-time интервал обновления. Подробнее об этом здесь. 10 секунд.

Размещённые в других конфигурационных файлах

Данные периоды имеют плавающие значения, определяемые специальной функцией. Изменение значения периодов достигается путём переопределения специальной функции.
Название периода Описание Значение по умолчанию
cached data autoupdate Период для обновления кэшированных данных из chat_backend. В chat_backend кэшируются отделы, настройки размещения, настройки аккаунта и др. Для каждого класса можно настроить индивидуальный период обновления. По умолчанию является плавающим периодом со значением от 0 до 300 секунд.
MultiCache %s autoupdate Также обновляет кэшированные данные. Только в отличие от cached data autoupdate хранит не сам объект, а словарь с множеством кэшированных объектов. Используется для кэширования операторов. По умолчанию является плавающим периодом со значением от 0 до 300 секунд.
node_ping Отправляет "эхо-запросы" на ноды через RabbitMQ, тем самым проверяя, живые они или нет. Используется только совместно с масштабированием. По умолчанию является плавающим периодом со значением от 0 до 300 секунд.

Константные сервисные периоды Webim

Название периода Описание Установленное значение
delta cleaning Удаляет старые значения дельт. Значения удаляются как для операторской части, так и для части посетителей. Удалённые значения дельт не будут доставлены оператору или посетителю, и, соответственно, РМО/виджет не будет обновлён данными из этих значений дельт. 5 секунд.
clean_operators_chat_history Удаляет часть старых сообщений в операторском чате (в РМО вкладка "Операторы"), которая превысила лимит (по умолчанию 500 сообщений, можно изменить). 3600 секунд.
Visitor channels status updater Проверяет все чаты, которые пришли из каналов общения (VK, Viber, Whatsapp и др.) и не закрыты окончательно (то есть, не в состоянии CLOSED). У таких чатов проверяется, находится ли посетитель в статусе онлайн и обновляет его. В каждом канале может быть определён способ получения статуса онлайн, в соответствии с API этого канала. Так у VK и Viber есть свои способы получения статуса онлайн, а во всех остальных каналах (где нет такой возможности) возвращается True, считая посетителя онлайн всегда. 600 секунд.
unassign_chats_from_offline_operators Работает только если задано значение в account config chat_unassign_from_offline_operators_timeout. Проверяет все диалоги в состоянии QUEUE и CHATTING и снимает чат с оператора если сошлись несколько условий:
  • Прошло больше времени с предыдущего обновления операторской сессии, чем определено в параметре chat_unassign_from_offline_operators_timeout
  • Прошло больше времени с инициализации аккаунта, чем определено в параметре chat_unassign_from_offline_operators_timeout
  • Оператор находится в Оффлайн
30 секунд
Expired chats closer Проверяет все незакрытые чаты (не в состоянии CLOSED) и закрывает их. Условия проверки:
  • Если чат был в состоянии CLOSED_BY_OPERATOR и при этом в настройке account config timeout_for_chat_auto_close_if_closed_by_operator указано значение таймаута, то через этот таймаут чат будет закрыт.
  • Если чат находится в очереди (состояние QUEUE), то он не участвует в вышеуказанных проверках.
30 секунд.
chat_pinger Проверяет все незакрытые (не в состоянии CLOSED)чаты и проверяет, занят ли оператор. Условия проверки:
  • Если включена настройка account config auto_assign или чат начат как оффлайн или чат находится в очереди для распределения на оператора (не путать с состоянием QUEUE!), то такой чат пропускает проверку
  • Если чат в состоянии QUEUE, то таймаут определяется по значению настройки account config agent_cant_pick_timeout, а в ином случае - по значению agent_busy_timeout
  • Может быть отправлено удерживающее системное сообщение (зависит от состояния чата). Отправка осуществляется после истечения таймаута настройки account config agent_cant_pick_holding_message_timeout для состояния QUEUE и agent_busy_holding_message_timeout для остальных состояний
  • Настройка account config unassign_chat_if_operator_busy включена, то чат открепляется от оператора, а сам оператор переводится в статус, заданный в настройке account config status_for_busy_operator (по умолчанию invisible)
  • Если настройка account config unassign_chat_if_operator_busy выключена, то посетителю отправляется сообщение с требованием ввести контактные данные
5 секунд.
check_chat_unread_by_visitor_for_too_long Проверяет все чаты и, если прошло времени больше значения, определённого в настройке account config unread_chat_sending_to_visitor_by_email_timeout, отправляет непрочитанные сообщения посетителю на e-mail. 30 секунд.
send_contact_request_for_queued_too_long Работает только если включена настройка account config auto_contact_request_for_waiting_too_long. Проверяет все чаты, находящиеся в состоянии QUEUE, и если указано значение в настройке account config contact_request_for_queue_timeout, то по прошествии этого таймаута посетителю отправляется сообщение с требованием заполнить контактные данные. 30 секунд.
check_routing_chats Проверяет все чаты в состоянии ROUTING и если чат находится в нём слишком долго, то переводит его в состояние QUEUE. 10 секунд.
try_auto_assign_chats_in_queue__ Если настройка account config auto_assign включена, то выполняет логику, связанную с автоназначением чатов на операторов. Выбор логики зависит от значения настройки account config operator_department_prioritization. Если true - распределяет с учётом приоритетов отделов, а если false - простое распределение по операторам (с учётом их приоритетов).
Подробнее про автоназначение - здесь.
1 секунда.
check_if_operators_needs_to_be_disconnected_for_all Проверяет все аккаунты операторов и берёт состояние online для отдела "Без отдела". Если состояние оператора равно online или busy_online, то переводит операторов в статус invisible (если оператор онлайн в нерабочие часы) или отключает операторов (если они были удалены или аккаунт заблокирован). 60 секунд.
Deleting old broadcast links from broadcast_visitor table Удаляет старые привязки посетителей к рассылкам. 24 часа.
BackgroundStorager Проверяет все storage-классы и сохраняет объекты в базе данных. 5 секунд.
BackgroundStorager - retrying store failed Аналогично предыдущему, но для объектов, которые не удалось сохранить (falied). 600 секунд.
clean_old_closed_chats Проверяет все сессии, у которых есть закрытые чаты и отвязывает эти чаты от сессий. В настройке account config shown_closed_chats_limit можно установить лимит по количеству сессий, для которых нужно отвязывать чаты. 30 секунд.
old sessions cleaning Проверяет все аккаунты и удаляет на каждом из них "мёртвые" сессии и давно не обновлявшиеся сессии, и связанные с этими сессиями устройства посетителей. 24 часа.
hide_chats_if_necessary Проверяет все аккаунты и делает в каждом из них видимыми/невидимыми чаты в РМО, которые находятся в очереди. Скрываются только те чаты, которые превысили лимит (устанавливается в account config):
  • visible_offline_chats_limit - для оффлайн-чатов
  • visible_online_chats_limit - для онлайн-чатов
60 секунд.
ip_to_chat_start_ts_list cleaning Проверяет все аккаунты и удаляет временные метки (timestamp) старых попыток посетителя начать чат. Лимит на создание чатов за час устанавливается в настройке account config chats_count_per_ip_limit. Попытки привязаны к IP-адресу. При достижении лимита, посетитель не сможет создавать чаты некоторое время, пока не удалятся самые старые попытки и общее число попыток понизится ниже лимита. 3600 секунд.
recheck_all_session_subset Добавляет регулярную перепроверку включения сессий посетителей в именованные подмножества с логированием, если встречаются расхождения. 60 секунд.
operator online periods updating Проверяет всех работающих операторов (все, кто не OFFLINE) и обновляет данные онлайн-периодов: отдел / язык / статус / timestamp и др. 600 секунд.