Настройка Web Service в OTRS
В административной панели OTRS необходимо создать новый сервис:
Admin --> Web Service Management --> Add Web Service
С параметрами:
Код: Выделить всё
General:
Name: Telegram
Debug threshold: Debug
OTRS as requester:
Settings:
Network transport: HTTP::REST
Invokers:
Name: Telegram
CONTROLLER: Telegram::TelegramTxt
Далее необходимо сконфигурировать Network transport и Invoker. Кнопки Configure появятся сразу после сохранения выбранных параметров.
Network transport
Здесь важно выдержать параметры в точности, как описано.
Главное:
1) Telegram API работает только через https.
2) Telegram API не доступен в российском сегменте Интернет и поэтому нужно использовать http-прокси.
3) REST-Api OTRS далек от совершенства и не работает без указания пользователя и пароля для Basic Auth в адресе прокси-сервера (хотя должен).
Параметры для OTRS 6:
Код: Выделить всё
Type: HTTP::REST
Endpoint: https://api.telegram.org/bot<BOTToken>
Authentication:
Use Proxy Options: Yes
Proxy Server: http://user:password@ip_address:port
Proxy User:
Proxy Password:
Skip Proxy: No
Use SSL Options: No
Controller mapping for Invoker 'Telegram': sendMessage
Valid request command for Invoker 'Telegram': POST
Default command: POST
Параметры для OTRS 5:
Код: Выделить всё
Type: HTTP::REST
Endpoint: https://api.telegram.org/bot<BOTToken>
Authentication:
Use SSL Options: No
Controller mapping for Invoker 'Telegram': sendMessage
Valid request command for Invoker 'Telegram': POST
Default command: POST
Параметры Proxy Server используются из глобального конфига(Core::WebUserAgent):
Код: Выделить всё
Timeout: 15
Proxy: http://user:password@ip_address:port
DisableSSLVerification: No
Invoker
Код: Выделить всё
Name: Telegram
Invoker backend: Telegram::TelegramTxt
Mapping for outgoing request data: Simple
Mapping for incoming request data: Simple
Event Triggers:
EVENT: TicketCreate
ASYNCHRONOUS: Yes
CONDITION: No
Simple Mapping for Data
Если вы планируете отправлять сообщения в несколько разных групп Telegram, то здесь нужно сконфигурировать соответствие имен полей и их значений между OTRS и Telegram.
Дело в том, что по умолчанию POST-запрос в теле содержит словарь {ключ: значение}. В нашем случае это будет словарь подобный следующему:
Код: Выделить всё
{
"text" : "#2020033007000174
Customer: ИмяКастомера
Queue: queue1
Priority: 3 normal
State: new
Owner: root@localhost
Responsible: root@localhost
Changed : 2020-03-30 17:50:44
http://otrs.hostname/otrs/index.pl?Action=AgentTicketZoom;TicketID=73",
"queue" : "queue1"
}
Для тех кто не знаком с темой полезно будет протестировать обмен запросами с помощью curl или Postman (предварительно замените адрес запроса на полученный в Mattermost Incoming Webhook:
Код: Выделить всё
curl -i -X POST -H 'Content-Type: application/json' -d '{"text": "[inline URL](http://yandex.ru)", "chat_id": "-100500"}' https://api.telegram.org/bot<BOTToken>/sendMessage
Последняя пара ключ-значение содержит имя очереди нового тикета. Мы будем её мапить (отображать) в нужную нам группу Telegram.
В моём случае разные очереди в OTRS обслуживаются разными группами агентов (инженеров). Таким образом, каждая из групп агентов будет читать свою группу Telegram.
Чтобы настроить отображение очереди OTRS в группу Telegram нужно настроить Mapping for Outgoing Data в сконфигурированном Invoker'е.
Код: Выделить всё
Default rule for unmapped keys: Keep (leave unchanged)
Default rule for unmapped values: Keep (leave unchanged)
Mapping for Key channel*
Key mapping:
Map key: queue
matching the: Exact value(s)
to new key: chat_id
Value mapping:
Map value: queue1
matching the: Exact value(s)
to new value: -333333333
Map value: queue2
matching the: Exact value(s)
to new value: -222222222
Map value: [\w\W]*
matching the: Regular expression
to new value: -111111111
Вы можете настроить свою логику.
Так же необходимо настроить мапинг ответов на наши POST-запросы. Telegram API в случае успешного приема POST-запроса отвечает JSON-сериализоваными данными. Статус как обычно в заголовке и в поле "OK", значение которого 1 или 0.
Настроим маппинг ответов на запросы:
Default rule for unmapped keys: Keep (leave unchanged)
Default rule for unmapped values: Keep (leave unchanged)
Код: Выделить всё
Mapping For Key text*
Key mapping:
map key: ok
matching the: Exact value(s)
to new key: text
Value mapping:
Map value: 1
matching the: Exact value(s)
to new value: ok
Value mapping:
Map value: 0
matching the: Exact value(s)
to new value: error
Debugging
В интерфейсе настройки Web Service слева нижняя кнопка "Debugger". При нажатии на нее вы можете посмотреть как обрабатывается POST-запрос после появления нового тикета.
Здесь виден и сам сформированный запрос и его отображение в процессе маппинга и ответ на запрос.