веб-сервисы

Обсуждение вопросов и решений

Модератор: ykolesnikov

Ответить
werry
OTRS Новобранец
Сообщения: 40
Зарегистрирован: 06 дек 2011, 11:54

веб-сервисы

Сообщение werry » 15 мар 2012, 13:48

А кто-нибудь пробовал пользоваться веб-сервисами в версии 3.1 ?

alexus
OTRS Гуру
Сообщения: 5192
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 92 раза
Поблагодарили: 82 раза

Re: веб-сервисы

Сообщение alexus » 15 мар 2012, 15:45

Тестировали на 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? Спросите меня как!

mukexa
OTRS Новобранец
Сообщения: 148
Зарегистрирован: 30 апр 2013, 19:08
Откуда: Украина, Киев.
Поблагодарили: 1 раз

Re: веб-сервисы

Сообщение mukexa » 03 ноя 2016, 14:50

Добрый день!
Сижу разбираю эти веб-сервисы )
Если ОТРС как провайдер немного разобрался, то как запрашивающая сторона еще не совсем.
Хочется реализовать что-то типа извещений в месенджери(ботам).
Не подскажите где еще можно почитать, кроме офф.документации?
OTRS 5s, Ubuntu 12.04

mukexa
OTRS Новобранец
Сообщения: 148
Зарегистрирован: 30 апр 2013, 19:08
Откуда: Украина, Киев.
Поблагодарили: 1 раз

Re: веб-сервисы

Сообщение mukexa » 09 ноя 2016, 13:46

Сообщения побежали в чат Slack. Но не пойму две последние ошибки: Error while parsing JSON data. Хотя, на скрине видно что пришел "ok".
Лезут они из 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,
        };
    }
Подскажите чего оно хочет )
Снимок.PNG
Снимок.PNG (70.53 КБ) 12910 просмотров

P.S. ok приходит не в виде json, отсюда и ошибка :( . И отключить декодирование видать не получится, так как условий в коде никаких не вижу.
OTRS 5s, Ubuntu 12.04

Artjoms
OTRS Новобранец
Сообщения: 34
Зарегистрирован: 06 окт 2011, 17:36
Откуда: Latvija

Re: веб-сервисы

Сообщение Artjoms » 09 ноя 2016, 16:44

Вы правы. В текущей версии ответ на REST запрос должен прийти в формате JSON.

Я вижу 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

mukexa
OTRS Новобранец
Сообщения: 148
Зарегистрирован: 30 апр 2013, 19:08
Откуда: Украина, Киев.
Поблагодарили: 1 раз

Re: веб-сервисы

Сообщение mukexa » 09 ноя 2016, 17:18

Спасибо за поддержку!
Первое отпадает, так как пользую не собственный бот, а "incoming-webhooks" (хотя для двустороннего общения наверное буду писать своего, но это не сейчас).
Ошибки в логах немного "пугают", так как можно пропустить другие сообщения да и не правильно это.
Тоже решил кастомизировать, хоть и не очень бы хотелось. Тонко намекнул разработчику, что ответ не в json. Будет ли что-то меняться в этом плане... Пока выход только кастом.
P.S. Если так изменить, то дальше будет ругаться Invoker, если не ошибаюсь. Пока не ковырял в ту сторону, но кажется лучше подменить ответ от сервера на формат json.
OTRS 5s, Ubuntu 12.04

mukexa
OTRS Новобранец
Сообщения: 148
Зарегистрирован: 30 апр 2013, 19:08
Откуда: Украина, Киев.
Поблагодарили: 1 раз

Re: веб-сервисы

Сообщение mukexa » 09 ноя 2016, 18:37

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

     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

mukexa
OTRS Новобранец
Сообщения: 148
Зарегистрирован: 30 апр 2013, 19:08
Откуда: Украина, Киев.
Поблагодарили: 1 раз

Re: веб-сервисы

Сообщение mukexa » 17 ноя 2016, 16:10

Мой пример реализации отправки сообщений в мес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, перед строками:

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

    # to convert the data into a hash, use the JSON module
    my $Result = $JSONObject->Decode(
        Data => $ResponseContent,
    );
необходимо добавить строки:

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

     if ($ResponseContent eq 'ok' )
    {
      $ResponseContent = '{"text": "ok"}';
    }
Делается это для того, чтобы преобразовать ответ от мессенджера в JSON формат(приходит текстом).
Для возможности настройки через веб-интерфейс добавил следующие строки в 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>
Делаем "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 бота )
Вложения
Otrs_bot.PNG
Otrs_bot.PNG (11.01 КБ) 12839 просмотров
Slack.zip
(2.01 КБ) 343 скачивания
OTRS 5s, Ubuntu 12.04

samd
OTRS Новобранец
Сообщения: 15
Зарегистрирован: 10 сен 2014, 10:41
Откуда: НСИ-Телеком
Благодарил (а): 2 раза
Поблагодарили: 7 раз
Контактная информация:

Re: веб-сервисы

Сообщение samd » 27 мар 2020, 18:31

Поясните, пожалуйста, про "контроллер(/XXXXXXXXX/YYYYYYYYY/IIIIIIiiiIIIiiiiIIIIIi)". Зачем он нужен, какую функцию выполняет?
С уважением Дмитрий.
OTRS 5.0.21 CentOS 7 x64 Linux with MySQL 5.7

Ответить