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

В этой статье описаны периоды сервиса **Webim**, которые отвечают за обновление статусов операторов и посетителей, состояний диалогов, кэшированных данных; отправку Email-сообщений, сохранение файлов в БД, отправку запросов и т.д. Часть периодов можно настраивать (наиболее используемые периоды вынесены в [account config](https://webim.ru/kb/for-admins/service-pages/account-config-editor.html)), другие же являются константами и могут быть изменены только путём доработки в версиях Webim для размещения на собственных мощностях клиента (hosted-клиенты).

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

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

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

!!! Note "N.B."
    Для `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` время ответа сервера на запросы определяется автоматически (в зависимости от времени, прошедшего с момента последнего совершённого действия):<br><ul><li>"int" - время, прошедшее с момента последнего действия (интервал)</li><li>"hot" - поллинг-период при активном диалоге</li><li>"cold" - поллинг-период при отсутствии активных диалогов</li></ul>```[{"int":10,"hot":1,"cold":2},{"int":30,"hot":2,"cold":5},{"int":120,"hot":5,"cold":10}]```<br><br>В данном примере на интервале от 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 интервал обновления. Подробнее об этом [здесь](https://webim.ru/kb/for-analytics/dashboard/overview.html).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | 10 секунд.            |
| `dashboard_prev_periods_update_interval` | Отвечает за обновление метрик, использующих не real-time интервал обновления. Подробнее об этом [здесь](https://webim.ru/kb/for-analytics/dashboard/overview.html).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | 10 секунд.            |
| `analytics_v2_main_metrics_refresh_interval` | Интервал автообновления блока [**Основных метрик**](https://webim.ru/kb/for-analytics/dashboard/main-metrics.html) на Панели приборов v2. Задаётся в секундах. В отличие от остальных отчётов панели, этот интервал задаётся в account config, а не в конструкторе аналитики. По тому же интервалу в блоке обновляются статусы сотрудников.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 60 секунд.            |

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

Данные периоды имеют плавающие значения, определяемые специальной функцией. Изменение значения периодов достигается путём переопределения специальной функции.

| Название периода           | Описание                                                                                                                                                                                                             | Значение по умолчанию                                                     |
|----------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------|
| `cached data autoupdate`   | Период для обновления кэшированных данных из `chat_backend`. В `chat_backend` кэшируются отделы, настройки размещения, настройки аккаунта и др. Для каждого класса можно настроить индивидуальный период обновления. | По умолчанию является плавающим периодом со значением от 0 до 300 секунд. |
| `MultiCache %s autoupdate` | Также обновляет кэшированные данные. Только в отличие от `cached data autoupdate` хранит не сам объект, а словарь с множеством кэшированных объектов. Используется для кэширования операторов.                       | По умолчанию является плавающим периодом со значением от 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` и снимает чат с оператора если сошлись несколько условий:<br><ul><li>Прошло больше времени с предыдущего обновления операторской сессии, чем определено в параметре `chat_unassign_from_offline_operators_timeout`</li><li>Прошло больше времени с инициализации аккаунта, чем определено в параметре `chat_unassign_from_offline_operators_timeout`</li><li>Оператор находится в Офлайн</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | 30 секунд.             |
| `Expired chats closer`                                      | Проверяет все незакрытые чаты (не в состоянии `CLOSED`) и закрывает их. Условия проверки:<br><ul><li>Если чат был в состоянии `CLOSED_BY_OPERATOR` и при этом в настройке `account config` `timeout_for_chat_auto_close_if_closed_by_operator` указано значение таймаута, то через этот таймаут чат будет закрыт.</li><li>Если чат находится в очереди (состояние `QUEUE`), то он не участвует в вышеуказанных проверках.</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | 30 секунд.             |
| `chat_pinger`                                               | Проверяет все незакрытые (не в состоянии `CLOSED`)чаты и проверяет, занят ли оператор. Условия проверки:<br><ul><li>Если включена настройка `account config` `auto_assign` или чат начат как офлайн или чат находится в очереди для распределения на оператора (не путать с состоянием `QUEUE`!), то такой чат пропускает проверку</li><li>Если чат в состоянии `QUEUE`, то таймаут определяется по значению настройки `account config` `agent_cant_pick_timeout`, а в ином случае - по значению `agent_busy_timeout`</li><li>Может быть отправлено удерживающее системное сообщение (зависит от состояния чата). Отправка осуществляется после истечения таймаута настройки `account config` `agent_cant_pick_holding_message_timeout` для состояния `QUEUE` и `agent_busy_holding_message_timeout` для остальных состояний</li><li>Настройка `account config` `unassign_chat_if_operator_busy` включена, то чат открепляется от оператора, а сам оператор переводится в статус, заданный в настройке `account config` `status_for_busy_operator` (по умолчанию `invisible`)</li><li>Если настройка `account config` `unassign_chat_if_operator_busy` выключена, то посетителю отправляется сообщение с требованием ввести контактные данные</li></ul> | 5 секунд.               |
| `check_chat_unread_by_visitor_for_too_long`                 | Проверяет все чаты и, если прошло времени больше значения, определённого в настройке `account config` `unread_chat_sending_to_visitor_by_email_timeout`, отправляет непрочитанные сообщения посетителю на Email.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | 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` - простое распределение по операторам (с учётом их приоритетов).<br>Подробнее о автоназначении - [здесь](https://webim.ru/kb/for-admins/chat-assignment-modes.html).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 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`                | Аналогично предыдущему, но для объектов, которые не удалось сохранить (failed).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | 600 секунд.            |
| `clean_old_closed_chats`                                    | Проверяет все сессии, у которых есть закрытые чаты и отвязывает эти чаты от сессий. В настройке `account config` `shown_closed_chats_limit` можно установить лимит по количеству сессий, для которых нужно отвязывать чаты.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 30 секунд.             |
| `old sessions cleaning`                                     | Проверяет все аккаунты и удаляет на каждом из них "мёртвые" сессии и давно не обновлявшиеся сессии, и связанные с этими сессиями устройства посетителей.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | 24 часа.               |
| `hide_chats_if_necessary`                                   | Проверяет все аккаунты и делает в каждом из них видимыми/невидимыми чаты в РМО, которые находятся в очереди. Скрываются только те чаты, которые превысили лимит (устанавливается в `account config`):<br><ul><li>`visible_offline_chats_limit` - для офлайн-чатов</li><li>`visible_online_chats_limit` - для онлайн-чатов</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | 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 секунд.            |

---

Источник: https://webim.ru/kb/devops/webim-service-periods.html
