Страница 1 из 1

Эскалация и отложенные заявки

Добавлено: 03 июл 2014, 12:41
egorbright
Суть проблемы:
В OTRS есть эскалация.
Также есть возможность откладывать заявку (переводить её в статус pending reminder, например) до определённой даты.
Эта функция необходима, когда, например, происходит следующее:

Вариант 1:
а. Написал пользователь заявку на внесение модификаций в его рабочую станцию (например, добавить оперативы);
б. Доблестные админы обнаружили, что сегодня утром оператива на склдае закончилась, и ничего не остаётся делать, как заказывать новую и ждать доставки.
в. Поставщик объявляет сроки доставки необходимого железа.
г. Админы откладывают заявку до даты, определённой поставщиком оперативы.

В данном случае, если произойдёт эскалация данной заявки, это будет неправильно, т.к. (возможно) бухгалтерия не выделила вовремя деньги на закупку нового оборудования, или произошёл массовый приём новых сотрудников, благодаря чему что-то требуемое юзером в заявке (в данном случае это оперативная память) внезапно кончилось. И по большому счёту, этой эскалацией можно нарушить показатели подразделения доблестных администраторов. Нам это надо? Ни в коем случае.

Вариант 2:
Пользователя, оставившего заявку, нет на месте. Он заболел, а без его присутствия лезть в недры системника не представляется возможным.

В обоих вариантах, чтобы избежать эскалации подобной заявки, предусмотрена функция, позволяющая отложить выполнение заявки на определённый срок.
И вот мы с вами на радостях берём и переводим заявку в статус "Отложена" (или Pending reminder, тут кто какой язык юзает). А эскалация продолжает "тикать". То есть время до эскалирования заявки продолжает уменьшаться. А нам такое поведение системы надо? Совсем нет.


Решение проблемы:

Нам нужно установить и правильно настроить специальный add-on от znuny.com

Ребята из http://znuny.com запилили свой репозиторий расширений для OTRS.
Для того, чтобы пользоваться их замечательными аддонами, нам необходимо:

1. Соединение сервера с интернетом (если сервер находится за NAT-ом, можно открыть доступ на 10 минут и успеть всё сделать)
2. Скачать и установить руками пакет: http://portal.znuny.com/api/addon_repos/public/803 (так мы получаем доступ в репозиторий)

Теперь у нас в админке появился репозиторий, из которого ставим пакет Znuny4OTRS - Escalation suspend

После установки закрадывается впечатление, что всё уже должно работать. Но не работает. А почему?

В комплекте с этим пакетом идёт свой файл под названием znuny.RebuildEscalationIndexOnline.pl, расположенный в папке bin
Чтобы всё заработало как надо, этот файл необходимо добавить в cron, т.к. время до возобновления эскалации пересчитывается после запуска этого файла.

Логика работы этого аддона следующая:

Как только заявка переходит в один из указанных в админке статусов (/otrs/index.pl?Action=AdminSysConfig;Subaction=Edit;SysConfigSubGroup=EscalationSuspend;SysConfigGroup=Znuny4OTRS-EscalationSuspend), время до эскалации заявки продолжает уменьшаться. НО как только запустился этот файл, всё встаёт на свои места. И время до эскалации становится тем же, которое было перед обновлением статуса заявки.

Вот так у меня выглядит запись в crontab (запуск производится каждую минуту, в системе уже over 30 000 заявок, всё работает шустро):

Код: Выделить всё

# run a znuny addon's escalation time rebuilder
*/1 * * * *     /usr/local/otrs/bin/znuny.RebuildEscalationIndexOnline.pl
Всем добра, спасибо за внимание! =)

Re: Эскалация и отложенные заявки

Добавлено: 31 июл 2015, 13:11
wikkid
Подскажите пожалуйста, а для 4го отрса есть такой модуль? Никак не могу найти, в репозитории знуни похоже убрали. Кеш гугловский видит, а по ссылке - страница не найдена :(
Если кто имеет сие чудо - очень прошу, поделитесь! :)

Re: Эскалация и отложенные заявки

Добавлено: 30 ноя 2015, 19:57
krutoy
добрый день.
а для otrs 4 есть решение?

Re: Эскалация и отложенные заявки

Добавлено: 06 янв 2016, 06:12
alex
Предлагаю такое решение: берем файл /opt/otrs/Kernel/System/Ticket.pm, копируем его в каталог /opt/otrs/Custom/Kernel/System, добавляем в него пару строчек и перезапускаем веб-сервер. Ниже патч:

Код: Выделить всё

--- Ticket.pm.orig	2016-01-06 06:04:39.443000000 +0300
+++ Ticket.pm	2016-01-06 06:22:05.728000000 +0300
@@ -2492,20 +2492,21 @@
         }
     }

     # get ticket attributes
     my %Ticket = %{ $Param{Ticket} };

     # do no escalations on (merge|close|remove) tickets
     return if $Ticket{StateType} eq 'merged';
     return if $Ticket{StateType} eq 'closed';
     return if $Ticket{StateType} eq 'removed';
+    return if $Ticket{StateType} eq 'pending reminder';

     # get escalation properties
     my %Escalation = $Self->TicketEscalationPreferences(
         Ticket => $Param{Ticket},
         UserID => $Param{UserID} || 1,
     );

     # return if we do not have any escalation attributes
     my %Map = (
         EscalationResponseTime => 'FirstResponse',
@@ -2639,21 +2640,21 @@
     my %Ticket = $Self->TicketGet(
         TicketID      => $Param{TicketID},
         UserID        => $Param{UserID},
         DynamicFields => 0,
     );

     # get database object
     my $DBObject = $Kernel::OM->Get('Kernel::System::DB');

     # do no escalations on (merge|close|remove) tickets
-    if ( $Ticket{StateType} =~ /^(merge|close|remove)/i ) {
+    if ( $Ticket{StateType} =~ /^(merge|close|remove|pending reminder)/i ) {

         # update escalation times with 0
         my %EscalationTimes = (
             EscalationTime         => 'escalation_time',
             EscalationResponseTime => 'escalation_response_time',
             EscalationUpdateTime   => 'escalation_update_time',
             EscalationSolutionTime => 'escalation_solution_time',
         );

         TIME:

Re: Эскалация и отложенные заявки

Добавлено: 06 янв 2016, 14:48
vovab
А можно еще в 2-х словах суть предложенного решения? Как оно должно работать?

Re: Эскалация и отложенные заявки

Добавлено: 06 янв 2016, 16:06
ykolesnikov
Все вопросы в другие разделы форума!
Через час пост удалю!

Читайте правила форума! :twisted:
Модератор форума.

Re: Эскалация и отложенные заявки

Добавлено: 06 янв 2016, 16:20
krutoy
мне тоже интересно как работает.
если возможно, расскажите
alex писал(а):Предлагаю такое решение: берем файл /opt/otrs/Kernel/System/Ticket.pm, копируем его в каталог /opt/otrs/Custom/Kernel/System, добавляем в него пару строчек и перезапускаем веб-сервер. Ниже патч:

Код: Выделить всё

--- Ticket.pm.orig	2016-01-06 06:04:39.443000000 +0300
+++ Ticket.pm	2016-01-06 06:22:05.728000000 +0300
@@ -2492,20 +2492,21 @@
         }
     }

     # get ticket attributes
     my %Ticket = %{ $Param{Ticket} };

     # do no escalations on (merge|close|remove) tickets
     return if $Ticket{StateType} eq 'merged';
     return if $Ticket{StateType} eq 'closed';
     return if $Ticket{StateType} eq 'removed';
+    return if $Ticket{StateType} eq 'pending reminder';

     # get escalation properties
     my %Escalation = $Self->TicketEscalationPreferences(
         Ticket => $Param{Ticket},
         UserID => $Param{UserID} || 1,
     );

     # return if we do not have any escalation attributes
     my %Map = (
         EscalationResponseTime => 'FirstResponse',
@@ -2639,21 +2640,21 @@
     my %Ticket = $Self->TicketGet(
         TicketID      => $Param{TicketID},
         UserID        => $Param{UserID},
         DynamicFields => 0,
     );

     # get database object
     my $DBObject = $Kernel::OM->Get('Kernel::System::DB');

     # do no escalations on (merge|close|remove) tickets
-    if ( $Ticket{StateType} =~ /^(merge|close|remove)/i ) {
+    if ( $Ticket{StateType} =~ /^(merge|close|remove|pending reminder)/i ) {

         # update escalation times with 0
         my %EscalationTimes = (
             EscalationTime         => 'escalation_time',
             EscalationResponseTime => 'escalation_response_time',
             EscalationUpdateTime   => 'escalation_update_time',
             EscalationSolutionTime => 'escalation_solution_time',
         );

         TIME:

Re: Эскалация и отложенные заявки

Добавлено: 06 янв 2016, 17:12
alexus
Мне тоже интересно послушать соображения автора, как это должно работать.

Re: Эскалация и отложенные заявки

Добавлено: 06 янв 2016, 17:27
ykolesnikov
Коллеги!!!
А не перейти ли Вам в другой раздел?
Там пободаться и решить, что делать с автором интересующей Вас темы. Закопать перед Рождеством или отправить поститься!
О решении сообщите!

Re: Эскалация и отложенные заявки

Добавлено: 06 янв 2016, 21:37
alex
При переводе заявки в одно из состояний pending reminder заявка не должна эскалироваться, по крайней мере на моей тестовой системе это вроде как сработало, хотя честно сознаюсь, много не тестил, просто увидел этот пост и решил попробовать сделать, так как для меня это тоже актуально.

Re: Эскалация и отложенные заявки

Добавлено: 06 янв 2016, 22:57
alexus
А что происходит, когда заявка возвращается в рабочий статус, в котором SLA надо опять считать?

Re: Эскалация и отложенные заявки

Добавлено: 06 янв 2016, 23:21
alex
Ничего не происходит )) Надо дорабатывать. Буду разбираться.

Re: Эскалация и отложенные заявки

Добавлено: 07 янв 2016, 09:08
krutoy
такое можно сделать при помощи 2х заданий планировщика.
1. закрывает заявку - sla останавливается, но в заявке указано
2. переводит в статус ожидания
при в переводе в рабочее состояние sla не запускается,увы
пока другого решения не нашёл

Re: Эскалация и отложенные заявки

Добавлено: 12 июл 2016, 10:59
Timian
Доброго времени суток.
Презентую следующее готовое решение для OTRS5, представляющее собой переписанный модуль SuspendEscalation OTRS3 (Znuny):

Описание работы и инструкция по установке функции «Приостановление таймера эскалации для заявок в состоянии ожидания» в OTRS5

Реализация

Задача привнесения нового функционала в систему целиком и полностью ложиться на три новых файла: RebuildEscalaationIndex.pl, EscalationSuspend.xml, EscalationSuspend.pm.
RebuildEscalationIndex.pl представляет собой скрипт, запускаемый по расписанию планировщиком задач Cron.
EscalationSuspend.xml задает параметры управления реализуемой функцией: переключатель включения/выключения функции, имя пакета (включен в файл EscalationSuspend.pm) для переопределения методов класса Ticket.
EscalationSuspend.pm добавляет новые алгоритмы для расчета точек эскалации.

Алгоритм

Скрипт RebuildEscalationIndex.pl выполняет поиск заявок, находящихся в момент запуска скрипта в состояниях типа (StateType) «pending reminder», и для каждой из них вызывает метод TicketEscalationIndexBuild объекта класса Ticket.
Для поданной на вход заявки метод TicketEscalationIndexBuild определяет необходимость перерасчета точек эскалации (время до первого ответа, время до изменения, время до решения заявки, минимальное время до эскалации). Расчет точки эскалации без учета интервалов приостановления таймера эскалации выполняется методом DestinationTime класса Time, расчет точки эскалации с учетом интервалов приостановления таймера эскалации выполняется методом TicketEscalationSuspendCalculate.
Метод TicketEscalationSuspendCalculate рассчитывает новую точку эскалации путем анализа событий типа CreateTicket и StateUpdate, произошедших с заявкой, за все время ее существования. Исходные точки эскалации сдвигаются на общее рабочее время нахождения заявки в состоянии по типу (StateType) «pending reminder». Фактически точка эскалации определяется сдвигом временной точки создания заявки на значение таймера эскалации, заданного либо в SLA, либо в параметрах очереди, и на суммарную длительность нахождения заявке в состояниях типа (StateType) «pending reminder». При занесении новых данных о точках эскалации в поля таблицы ticket, информация в остальных полях остается без изменений.
Метод TicketWorkingTimeSuspendCalculate выполняет расчет рабочего времени, потраченного на решение заявки без учета интервалов ее нахождения в состояниях типа «ожидает напоминания».
Переопределенный метод _TicketGetClosed отличается от оригинала подсчетом времени, затраченного на решение заявки, с помощью (когда функция приостановления таймера эскалации активирована) метода TicketWorkingTimeSuspendCalculate, взамен метода WorkingTime класса Time, для исключения временных интервалом нахождения заявки в состояниях типа (StateType) «pending reminder».

Инструкция по добавлению функционала в OTRS5

Подключение функции происходит в три этапа:

1) Скопировать содержимое папки OTRS-SuspendEscalation в корневую директорию системы OTRS (/opt/otrs) Конечное размещение файлов должно быть следующим:
/opt/otrs/bin/RebuildEscalaationIndex.pl,
/opt/otrs/Kernel/Config/Files/EscalationSuspend.xml,
/opt/otrs/Kernel/System/Ticket/EscalationSuspend.pm;

2) Назначить владельцем файла /opt/otrs/bin/RebuildEscalationIndex.pl пользователя «otrs» и предоставить ему права на его исполнение
(# chown otrs RebuildEscalationIndex.pl; chmod 770 RebuildEscalationIndex.pl);

3) Добавить следующее задание под пользователем «otrs» в Cron (# crontab -u otrs -e):
*/1 * * * * $HOME/bin/RebuildEscalationIndex.pl >> /dev/null.

Настройка функционала из подраздела «Администрирование» - «Конфигурация системы»:

SuspendEscalatedTickets = 1 – функция активирована (значение по умолчанию);
SuspendEscalatedTickets = 0 – функция деактивирована.

Приятного пользования и удовлетворенности! ;)

Re: Эскалация и отложенные заявки

Добавлено: 29 июл 2016, 10:59
krasn000v
Добрый день!
Решил попробовать поставить вчера патч Ваш.
Все установилось нормально как я понимаю, но -
1. Создал очередь с настройками эскалации "до решения заявки" 5 минут.
2. Создал в этой очереди Тестовую заявку в 10-29
3. Поставил напоминание в 10-30 на 10-39
На сколько я понимаю, время Эскалации должно быть 10-44, ну или 10-45.
Но дальше происходит следующее, статус заявки так и остается Ожидает напоминания, в информации о заявки "В ожидании еще: -10 мин 29.07.2016 10-39", а cron благополучно каждую минуту сдвигает заявку дальше пересчитывая "Время до решения заявки: 5 мин 29.07.2014 10-54", а время в ожидании уходил в минус.
В эскалированный заявки она, конечно, не попадает.
Может настройки какие некорректные, и по истечению времени ожидания он не присваивает статус Открыта, например?
Или я что-то не так делаю? Подскажите куда копать?

P.S. Надеюсь получилось объяснить что происходит :)

Re: Эскалация и отложенные заявки

Добавлено: 29 июл 2016, 11:31
egorbright
Znuny сделали пакет для OTRS 5. Лучше не парьтесь с кастомными штуками, возьмите готовое рабочее расширение.

Re: Эскалация и отложенные заявки

Добавлено: 29 июл 2016, 11:37
krasn000v
egorbright писал(а):Znuny сделали пакет для OTRS 5. Лучше не парьтесь с кастомными штуками, возьмите готовое рабочее расширение.
Не обновляли OTRS до 5 версии.
В 5 версии после окончания времени напоминания статус возвращается обратно в Открытый?
Я так понимаю кастомизация с этим должна быть.

Re: Эскалация и отложенные заявки

Добавлено: 02 авг 2016, 14:46
Timian
krasn000v писал(а): Может настройки какие некорректные, и по истечению времени ожидания он не присваивает статус Открыта, например?
Или я что-то не так делаю? Подскажите куда копать?
В OTRS 5 Free c приходом времени напоминания заявка остается в состоянии ожидающей напоминания. В открытую ее нужно переводить вручную.

Re: Эскалация и отложенные заявки

Добавлено: 02 авг 2016, 16:20
ykolesnikov
Что, в общем- то логично, т.к. После истечения срока напоминания агент должен либо написать заметку, а там, обычно, в качестве следующего состояния будет "открыта" или закрыть заявку или вновь отложить.

Re: Эскалация и отложенные заявки

Добавлено: 10 апр 2017, 16:02
ashilov
egorbright писал(а):Znuny сделали пакет для OTRS 5. Лучше не парьтесь с кастомными штуками, возьмите готовое рабочее расширение.
Добрый день! Можно ли ссылку или ткнуть туда где его найти? Что-то не могу ничего найти для 5 отрс... :(

Re: Эскалация и отложенные заявки

Добавлено: 10 апр 2017, 16:39
ykolesnikov
Посмотрел, похоже нет теперь версии для 5.х и на OPAR и на родном ZNUNY сайте. Видимо, политика изменилась.

Re: Эскалация и отложенные заявки

Добавлено: 17 май 2018, 21:13
Korshun
Здравствуйте. Не осталась ли у кого-нибудь эта удалённая версия Znuny4OTRS-EscalationSuspend для OTRS 5?

Re: Эскалация и отложенные заявки

Добавлено: 17 май 2018, 21:18
alexus
Korshun писал(а):Здравствуйте. Не осталась ли у кого-нибудь эта удалённая версия Znuny4OTRS-EscalationSuspend для OTRS 5?
Там были глюки, видимо потому и удалили. У нас есть платный модуль. Контакты в подписи.