веб-сервисы
Модератор: ykolesnikov
-
- OTRS Гуру
- Сообщения: 5192
- Зарегистрирован: 20 сен 2010, 18:17
- Откуда: Москва
- Благодарил (а): 92 раза
- Поблагодарили: 82 раза
Re: веб-сервисы
Тестировали на SOAP-сервере - работает.
С уважением,
Алексей Юсов
Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal
Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!
Алексей Юсов
Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal
Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!
-
- OTRS Новобранец
- Сообщения: 148
- Зарегистрирован: 30 апр 2013, 19:08
- Откуда: Украина, Киев.
- Поблагодарили: 1 раз
Re: веб-сервисы
Добрый день!
Сижу разбираю эти веб-сервисы )
Если ОТРС как провайдер немного разобрался, то как запрашивающая сторона еще не совсем.
Хочется реализовать что-то типа извещений в месенджери(ботам).
Не подскажите где еще можно почитать, кроме офф.документации?
Сижу разбираю эти веб-сервисы )
Если ОТРС как провайдер немного разобрался, то как запрашивающая сторона еще не совсем.
Хочется реализовать что-то типа извещений в месенджери(ботам).
Не подскажите где еще можно почитать, кроме офф.документации?
OTRS 5s, Ubuntu 12.04
-
- OTRS Новобранец
- Сообщения: 148
- Зарегистрирован: 30 апр 2013, 19:08
- Откуда: Украина, Киев.
- Поблагодарили: 1 раз
Re: веб-сервисы
Сообщения побежали в чат Slack. Но не пойму две последние ошибки: Error while parsing JSON data. Хотя, на скрине видно что пришел "ok".
Лезут они из REST.pm
Подскажите чего оно хочет )
P.S. ok приходит не в виде json, отсюда и ошибка . И отключить декодирование видать не получится, так как условий в коде никаких не вижу.
Лезут они из REST.pm
Код: Выделить всё
# to convert the data into a hash, use the JSON module
my $Result = $JSONObject->Decode(
Data => $ResponseContent,
);
if ( !$Result ) {
my $ResponseError = $ErrorMessage . ' Error while parsing JSON data.';
# log to debugger
$Self->{DebuggerObject}->Error(
Summary => $ResponseError,
);
return {
Success => 0,
ErrorMessage => $ResponseError,
};
}
P.S. ok приходит не в виде json, отсюда и ошибка . И отключить декодирование видать не получится, так как условий в коде никаких не вижу.
OTRS 5s, Ubuntu 12.04
Re: веб-сервисы
Вы правы. В текущей версии ответ на REST запрос должен прийти в формате JSON.
Я вижу 3 варианта:
1) Из Slack'a возвращать ответ в JSON формате. Может даже стоит поставить, какую-либо интеграционную среду, которая преобразует ответ Slack'a в JSON
2) Смириться с ошибкой в логах
3) Залезть в код и добавить.исключение. Копируем файл Kernel/GenericInterface/Transport/HTTP/REST.pm в папку Custom/Kernel/...
На строке ~ 779 находим следующий блок:
Правим блок, добавляя условие на входящий параметр:
Я вижу 3 варианта:
1) Из Slack'a возвращать ответ в JSON формате. Может даже стоит поставить, какую-либо интеграционную среду, которая преобразует ответ Slack'a в JSON
2) Смириться с ошибкой в логах
3) Залезть в код и добавить.исключение. Копируем файл Kernel/GenericInterface/Transport/HTTP/REST.pm в папку Custom/Kernel/...
На строке ~ 779 находим следующий блок:
Код: Выделить всё
if ( !$Result ) {
my $ResponseError = $ErrorMessage . ' Error while parsing JSON data.';
# log to debugger
$Self->{DebuggerObject}->Error(
Summary => $ResponseError,
);
return {
Success => 0,
ErrorMessage => $ResponseError,
};
}
Код: Выделить всё
if ( !$Result && $ResponseContent != 'ok' ) {
my $ResponseError = $ErrorMessage . ' Error while parsing JSON data.';
# log to debugger
$Self->{DebuggerObject}->Error(
Summary => $ResponseError,
);
return {
Success => 0,
ErrorMessage => $ResponseError,
};
}
Smile :)
----------------------------------------
Artjoms Petrovs
System Analyst / Системный Аналитик
Software Developer / Разработчик Информационных Систем
----------------------------------------
OTRS 5 Patch Level 9
----------------------------------------
Artjoms Petrovs
System Analyst / Системный Аналитик
Software Developer / Разработчик Информационных Систем
----------------------------------------
OTRS 5 Patch Level 9
-
- OTRS Новобранец
- Сообщения: 148
- Зарегистрирован: 30 апр 2013, 19:08
- Откуда: Украина, Киев.
- Поблагодарили: 1 раз
Re: веб-сервисы
Спасибо за поддержку!
Первое отпадает, так как пользую не собственный бот, а "incoming-webhooks" (хотя для двустороннего общения наверное буду писать своего, но это не сейчас).
Ошибки в логах немного "пугают", так как можно пропустить другие сообщения да и не правильно это.
Тоже решил кастомизировать, хоть и не очень бы хотелось. Тонко намекнул разработчику, что ответ не в json. Будет ли что-то меняться в этом плане... Пока выход только кастом.
P.S. Если так изменить, то дальше будет ругаться Invoker, если не ошибаюсь. Пока не ковырял в ту сторону, но кажется лучше подменить ответ от сервера на формат json.
Первое отпадает, так как пользую не собственный бот, а "incoming-webhooks" (хотя для двустороннего общения наверное буду писать своего, но это не сейчас).
Ошибки в логах немного "пугают", так как можно пропустить другие сообщения да и не правильно это.
Тоже решил кастомизировать, хоть и не очень бы хотелось. Тонко намекнул разработчику, что ответ не в json. Будет ли что-то меняться в этом плане... Пока выход только кастом.
P.S. Если так изменить, то дальше будет ругаться Invoker, если не ошибаюсь. Пока не ковырял в ту сторону, но кажется лучше подменить ответ от сервера на формат json.
OTRS 5s, Ubuntu 12.04
-
- OTRS Новобранец
- Сообщения: 148
- Зарегистрирован: 30 апр 2013, 19:08
- Откуда: Украина, Киев.
- Поблагодарили: 1 раз
Re: веб-сервисы
Код: Выделить всё
if ($ResponseContent eq 'ok' )
{
$ResponseContent = '{"text": "ok"}';
}
# to convert the data into a hash, use the JSON module
my $Result = $JSONObject->Decode(
Data => $ResponseContent,
);
P.S. Может кто подскажет как быть с массивами.
Типа:
Код: Выделить всё
{
"attachments": [
{
"text": "text"
}
]
}
Код: Выделить всё
$SlackText{Data}->{attachments}->{text}= "text";
Код: Выделить всё
{
"attachments":
{
"text":"text"
}
}
P.P.S Всё. Реализовал всё что хотел ) Вскоре красиво оформлю и выложу на форум.
OTRS 5s, Ubuntu 12.04
-
- OTRS Новобранец
- Сообщения: 148
- Зарегистрирован: 30 апр 2013, 19:08
- Откуда: Украина, Киев.
- Поблагодарили: 1 раз
Re: веб-сервисы
Мой пример реализации отправки сообщений в месcенджер Slack.
Делал из примера Test::TestSimple. Код выцарапывал из оф.документации по API OTRS, Slack.
Регистрируемся/логинимся в slack.
Переходим на страницу: YORLOGINNAME.slack.com/apps
Ищем и устанавливаем Incoming WebHooks.
После установки будет выдано Webhook URL, типа:
hooks.slack.com/services/XXXXXXXXX/YYYYYYYYY/IIIIIIiiiIIIiiiiIIIIIi
Который я разделил как
hooks.slack.com/services - URL сервера
/XXXXXXXXX/YYYYYYYYY/IIIIIIiiiIIIiiiiIIIIIi - контроллер
Далее переходим к OTRS.
Делаем Custom файлы для нашей доработки
Custom/Kernel/GenericInterface/Transport/HTTP/ - сюда копируем REST.pm из Kernel/GenericInterface/Transport/HTTP/
Custom/Kernel/GenericInterface/Invoker/Slack/ - сюда Slack.pm из этого сообщения
В скопированном файле REST.pm, перед строками:
необходимо добавить строки:
Делается это для того, чтобы преобразовать ответ от мессенджера в JSON формат(приходит текстом).
Для возможности настройки через веб-интерфейс добавил следующие строки в GenericInterface.xml
Делаем "restart httpd".
Теперь необходимо вкл. наш модуль, чтобы иметь возможность выбрать его в веб-сервисах.
Для этого необходимо зайти в Администрирование/Конф.системы/GenericInterface → GenericInterface::Invoker::ModuleRegistration
или перейти по адресу:
/otrs/index.pl?Action=AdminSysConfig;Subaction=Edit;SysConfigSubGroup=GenericInterface%3A%3AInvoker%3A%3AModuleRegistration;SysConfigGroup=GenericInterface
И поставить соответствующую "галочку".
Далее настраиваем веб-сервис(Администрирование/Веб-сервисы).
Создаем новый, как запрашивающая сторона, с REST транспортом.
Добавляем наш Invoker Slack::Slack. Называем его, сохраняем. Тут же добавляем событие при котором он будет срабатывать, в нашем случае - TicketCreate.
Сохраняем и переходим назад к веб-сервису. Нажимаем "Конфигурировать" возле сетевого транспорта.
Указываем сервер(https://hooks.slack.com/services) и контроллер(/XXXXXXXXX/YYYYYYYYY/IIIIIIiiiIIIiiiiIIIIIi).
Команда по умолчанию - POST.
Переходим назад к веб-сервису и запускаем отладчик для тестирования.
Теперь при создании тикета наш веб-сервис будет оповещать у выбранную при регистрации группу. Группу можно менять на лету, так же как и конкретного получателя.
Все эти движения видно в отладчике, порог которого можно задать в редакторе веб-сервиса.
Больше о формате сообщений можно почерпнуть тут:
api.slack.com/incoming-webhooks
P.S. хттпс:// пришлось убирать, так как форум разрешает не больше двух ссылок в сообщении.
P.P.S. в планах победить skype бота )
Делал из примера Test::TestSimple. Код выцарапывал из оф.документации по API OTRS, Slack.
Регистрируемся/логинимся в slack.
Переходим на страницу: YORLOGINNAME.slack.com/apps
Ищем и устанавливаем Incoming WebHooks.
После установки будет выдано Webhook URL, типа:
hooks.slack.com/services/XXXXXXXXX/YYYYYYYYY/IIIIIIiiiIIIiiiiIIIIIi
Который я разделил как
hooks.slack.com/services - URL сервера
/XXXXXXXXX/YYYYYYYYY/IIIIIIiiiIIIiiiiIIIIIi - контроллер
Далее переходим к OTRS.
Делаем Custom файлы для нашей доработки
Custom/Kernel/GenericInterface/Transport/HTTP/ - сюда копируем REST.pm из Kernel/GenericInterface/Transport/HTTP/
Custom/Kernel/GenericInterface/Invoker/Slack/ - сюда Slack.pm из этого сообщения
В скопированном файле REST.pm, перед строками:
Код: Выделить всё
# to convert the data into a hash, use the JSON module
my $Result = $JSONObject->Decode(
Data => $ResponseContent,
);
Код: Выделить всё
if ($ResponseContent eq 'ok' )
{
$ResponseContent = '{"text": "ok"}';
}
Для возможности настройки через веб-интерфейс добавил следующие строки в GenericInterface.xml
Код: Выделить всё
<ConfigItem Name="GenericInterface::Invoker::Module###Slack::Slack" Required="0" Valid="0">
<Description Translatable="1">GenericInterface module registration for the invoker layer.</Description>
<Group>GenericInterface</Group>
<SubGroup>GenericInterface::Invoker::ModuleRegistration</SubGroup>
<Setting>
<Hash>
<Item Key="Name">Slack</Item>
<Item Key="Controller">Slack</Item>
<Item Key="ConfigDialog">AdminGenericInterfaceInvokerDefault</Item>
</Hash>
</Setting>
</ConfigItem>
Теперь необходимо вкл. наш модуль, чтобы иметь возможность выбрать его в веб-сервисах.
Для этого необходимо зайти в Администрирование/Конф.системы/GenericInterface → GenericInterface::Invoker::ModuleRegistration
или перейти по адресу:
/otrs/index.pl?Action=AdminSysConfig;Subaction=Edit;SysConfigSubGroup=GenericInterface%3A%3AInvoker%3A%3AModuleRegistration;SysConfigGroup=GenericInterface
И поставить соответствующую "галочку".
Далее настраиваем веб-сервис(Администрирование/Веб-сервисы).
Создаем новый, как запрашивающая сторона, с REST транспортом.
Добавляем наш Invoker Slack::Slack. Называем его, сохраняем. Тут же добавляем событие при котором он будет срабатывать, в нашем случае - TicketCreate.
Сохраняем и переходим назад к веб-сервису. Нажимаем "Конфигурировать" возле сетевого транспорта.
Указываем сервер(https://hooks.slack.com/services) и контроллер(/XXXXXXXXX/YYYYYYYYY/IIIIIIiiiIIIiiiiIIIIIi).
Команда по умолчанию - POST.
Переходим назад к веб-сервису и запускаем отладчик для тестирования.
Теперь при создании тикета наш веб-сервис будет оповещать у выбранную при регистрации группу. Группу можно менять на лету, так же как и конкретного получателя.
Все эти движения видно в отладчике, порог которого можно задать в редакторе веб-сервиса.
Больше о формате сообщений можно почерпнуть тут:
api.slack.com/incoming-webhooks
P.S. хттпс:// пришлось убирать, так как форум разрешает не больше двух ссылок в сообщении.
P.P.S. в планах победить skype бота )
- Вложения
-
- Otrs_bot.PNG (11.01 КБ) 12847 просмотров
-
- Slack.zip
- (2.01 КБ) 344 скачивания
OTRS 5s, Ubuntu 12.04
-
- OTRS Новобранец
- Сообщения: 15
- Зарегистрирован: 10 сен 2014, 10:41
- Откуда: НСИ-Телеком
- Благодарил (а): 2 раза
- Поблагодарили: 7 раз
- Контактная информация:
Re: веб-сервисы
Поясните, пожалуйста, про "контроллер(/XXXXXXXXX/YYYYYYYYY/IIIIIIiiiIIIiiiiIIIIIi)". Зачем он нужен, какую функцию выполняет?
С уважением Дмитрий.
OTRS 5.0.21 CentOS 7 x64 Linux with MySQL 5.7
OTRS 5.0.21 CentOS 7 x64 Linux with MySQL 5.7