Интеграция OTRS -> Telegram (1)
Модератор: ykolesnikov
-
samd
- OTRS Новобранец
- Сообщения: 17
- Зарегистрирован: 10 сен 2014, 10:41
- Откуда: ООО "РДП Инновации"
- Благодарил (а): 2 раза
- Поблагодарили: 7 раз
- Контактная информация:
Интеграция OTRS -> Telegram (1)
viewtopic.php?f=2&t=927&p=25053#p25053
Основная цель интеграции - получение уведомлений в Telegram о появлении новых или изменении статусов уже открытых тикетов в OTRS. Штатным средством уведомления агентов в OTRS является почта. Получение уведомлений почтой не всегда удобно. Особенно, когда тикетов не так много.
Чтобы дифференцировать тикеты мы будем использовать разные очереди OTRS. За каждой очередью у нас следит отдельная группа инженеров. Таким образом, мы должны будем создать несколько групп в Telegram и подписать на группы отдельных инженеров.
Интеграция протестирована на OTRS версий 5 и 6.
В OTRS 5 для доступа к Telegram Bot API используются настройки Proxy Server для системного UserAgent OTRS, который может использоваться для работы других API. Это может быть критично, в случае наличия последних. Будьте внимательны.
Prod: OTRS 6.0.30 on Ubuntu 22.04 with Postgres 16
Stage: OTRS 6.0.30 on Centos 7 with Postgres 14 both in Docker containers
-
samd
- OTRS Новобранец
- Сообщения: 17
- Зарегистрирован: 10 сен 2014, 10:41
- Откуда: ООО "РДП Инновации"
- Благодарил (а): 2 раза
- Поблагодарили: 7 раз
- Контактная информация:
Интеграция OTRS -> Telegram (2)
Настройка Telegram Bot осуществляется через специального Bot'a c именем BotFather - крестного отца всех ботов. Просто напишите BotFather команду newbot и следуйте инструкциям.
Подробнее можно почитать тут: https://tlgrm.ru/docs/bots
После создания бота нужно скопировать его BOTToken вида:
Код: Выделить всё
12356789:A2HdqTcvCH1vGWJxfSeofSAs0K5PALDsaw После создания групп нужно выяснить их ID. ID группы - это отрицательное целое число. Выяснить его можно сформировав http get запрос на API вашего бота:
Код: Выделить всё
https://api.telegram.org/bot<BOTToken>/getUpdatesОтправьте любое сообщение в группу. Затем либо в браузере с настроенным прокси наберите в адресной строке:
https://api.telegram.org/bot<BOTToken>/getUpdates
, либо в консоли вашего сервера:
Код: Выделить всё
curl -i -X POST https://api.telegram.org/bot<BOTToken>/getUpdatesКод: Выделить всё
{"update_id":8393,"message":{"message_id":3,"from":{"id":7474,"first_name":"AAA"},"chat":{"id":-1111111,"title":""},"date":25497,"new_chat_participant":{"id":71,"first_name":"NAME","username":"YOUR_BOT_NAME"}}}Prod: OTRS 6.0.30 on Ubuntu 22.04 with Postgres 16
Stage: OTRS 6.0.30 on Centos 7 with Postgres 14 both in Docker containers
-
samd
- OTRS Новобранец
- Сообщения: 17
- Зарегистрирован: 10 сен 2014, 10:41
- Откуда: ООО "РДП Инновации"
- Благодарил (а): 2 раза
- Поблагодарили: 7 раз
- Контактная информация:
Интеграция OTRS -> Telegram (3)
[*]Добавление файлов Web Service
В файловую систему OTRS сервера нужно добавить файл:
- TelegramTxt.pm (файл с Invoker модулем, который будет готовить данные для POST-запроса в Telegram:
В приложении архив с необходимым фалом. Скопируйте его на сервер с OTRS.
Создайте директорию, извлеките из архива скопируйте файл:
Код: Выделить всё
mkdir -p /opt/otrs/Custom/Kernel/GenericInterface/Invoker/Telegram
tar xvfz ./GenericInterface.tar.gz
cp ./GenericInterface/Invoker/Telegram/TelegramTxt.pm /opt/otrs/Custom/Kernel/GenericInterface/Invoker/Telegram/Код: Выделить всё
cd /opt/otrs/Custom/Kernel/
sudo chown -R otrs:apache ./GenericInterface
sudo /opt/otrs/bin/otrs.SetPermissions.pl --otrs-user='otrs' --web-group='apache'otrs - имя пользователя, от имени которого запущен OTRS,
apache - группа пользователя, от имени которого запущен OTRS.
- Вложения
-
- GenericInterface.tar.gz
- (9.66 КБ) 1645 скачиваний
Prod: OTRS 6.0.30 on Ubuntu 22.04 with Postgres 16
Stage: OTRS 6.0.30 on Centos 7 with Postgres 14 both in Docker containers
-
samd
- OTRS Новобранец
- Сообщения: 17
- Зарегистрирован: 10 сен 2014, 10:41
- Откуда: ООО "РДП Инновации"
- Благодарил (а): 2 раза
- Поблагодарили: 7 раз
- Контактная информация:
Интеграция OTRS -> Telegram (4)
Для начала необходимо зарегистрировать новый WEB Service. Делается это модификацией файла GenericInterface.xml
Для OTRS версии 5:
Этот файл находится:
Код: Выделить всё
/opt/otrs/Kernel/Config/Files/GenericInterface.xmlКод: Выделить всё
cd /opt/otrs/Kernel/Config/Files/
cp -p ./GenericInterface.xml ./GenericInterface.xml.origКод: Выделить всё
<ConfigItem Name="GenericInterface::Invoker::Module###Telegram::TelegramTxt" 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">TelegramTxt</Item>
<Item Key="Controller">Telegram</Item>
<Item Key="ConfigDialog">AdminGenericInterfaceInvokerDefault</Item>
</Hash>
</Setting>
</ConfigItem>Для OTRS версии 6:
Этот файл находится:
Код: Выделить всё
/opt/otrs/Kernel/Config/Files/XML/GenericInterface.xmlКод: Выделить всё
cd /opt/otrs/Kernel/Config/Files/XML/
cp -p ./GenericInterface.xml ./GenericInterface.xml.origКод: Выделить всё
<Setting Name="GenericInterface::Invoker::Module###Telegram::TelegramTxt" Required="0" Valid="0">
<Description Translatable="1">GenericInterface module registration for the invoker layer.</Description>
<Navigation>GenericInterface::Invoker::ModuleRegistration</Navigation>
<Value>
<Hash>
<Item Key="Name">TelegramTxt</Item>
<Item Key="Controller">Telegram</Item>
<Item Key="ConfigDialog">AdminGenericInterfaceInvokerDefault</Item>
</Hash>
</Value>
</Setting>В OTRS 6 для импорта сделанных настроек нужно выполнить:
Код: Выделить всё
sudo -u otrs /opt/otrs/bin/otrs.Console.pl Maint::Config::RebuildКод: Выделить всё
systemctl restart httpdДля этого необходимо зайти в Администрирование/Конф.системы/GenericInterface --> GenericInterface::Invoker::ModuleRegistration
И поставить галочку напротив сконфигурированного сервиса TelegramTxt.
Prod: OTRS 6.0.30 on Ubuntu 22.04 with Postgres 16
Stage: OTRS 6.0.30 on Centos 7 with Postgres 14 both in Docker containers
-
samd
- OTRS Новобранец
- Сообщения: 17
- Зарегистрирован: 10 сен 2014, 10:41
- Откуда: ООО "РДП Инновации"
- Благодарил (а): 2 раза
- Поблагодарили: 7 раз
- Контактная информация:
Интеграция OTRS -> Telegram (5)
В административной панели 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::TelegramTxtNetwork 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Код: Выделить всё
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Код: Выделить всё
Timeout: 15
Proxy: http://user:password@ip_address:port
DisableSSLVerification: NoInvoker
Код: Выделить всё
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Если вы планируете отправлять сообщения в несколько разных групп 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 -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
В моём случае разные очереди в 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В интерфейсе настройки Web Service слева нижняя кнопка "Debugger". При нажатии на нее вы можете посмотреть как обрабатывается POST-запрос после появления нового тикета.
Здесь виден и сам сформированный запрос и его отображение в процессе маппинга и ответ на запрос.
Prod: OTRS 6.0.30 on Ubuntu 22.04 with Postgres 16
Stage: OTRS 6.0.30 on Centos 7 with Postgres 14 both in Docker containers
Re: Интеграция OTRS -> Telegram (1)
У меня все взлетело
Одна правка:
Опечатка cd /opt/otrs/Kernel/Config/Files/, заменить на cd /opt/otrs/Kernel/Config/Files/XML
-
Screwie
- OTRS Новобранец
- Сообщения: 22
- Зарегистрирован: 01 июл 2019, 12:50
- Благодарил (а): 4 раза
- Поблагодарили: 4 раза
Re: Интеграция OTRS -> Telegram (1)
Респект, спасибо.
Re: Интеграция OTRS -> Telegram (1)
Параметры для 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
-
samd
- OTRS Новобранец
- Сообщения: 17
- Зарегистрирован: 10 сен 2014, 10:41
- Откуда: ООО "РДП Инновации"
- Благодарил (а): 2 раза
- Поблагодарили: 7 раз
- Контактная информация:
Re: Интеграция OTRS -> Telegram (1)
И Да! Теперь можно без прокси.
Prod: OTRS 6.0.30 on Ubuntu 22.04 with Postgres 16
Stage: OTRS 6.0.30 on Centos 7 with Postgres 14 both in Docker containers
Re: Интеграция OTRS -> Telegram (1)
а в Controller mapping for Invoker 'Telegram': я написал sendMessage, его и передает, как слово) Где-то в инвокере недонастроил или не пойму что. просто первый раз поднял отрс, и сейчас развлекаюсь с уведомлениями в телеграмме. прошу прощения за мою тупость.
-
samd
- OTRS Новобранец
- Сообщения: 17
- Зарегистрирован: 10 сен 2014, 10:41
- Откуда: ООО "РДП Инновации"
- Благодарил (а): 2 раза
- Поблагодарили: 7 раз
- Контактная информация:
Re: Интеграция OTRS -> Telegram (1)
Можно и так.
Prod: OTRS 6.0.30 on Ubuntu 22.04 with Postgres 16
Stage: OTRS 6.0.30 on Centos 7 with Postgres 14 both in Docker containers
-
samd
- OTRS Новобранец
- Сообщения: 17
- Зарегистрирован: 10 сен 2014, 10:41
- Откуда: ООО "РДП Инновации"
- Благодарил (а): 2 раза
- Поблагодарили: 7 раз
- Контактная информация:
Re: Интеграция OTRS -> Telegram (1)
Очевидно, что транспорт не должен содержать слово sendMessage. То есть должен иметь вид:spike3run писал(а): 10 сен 2020, 12:08 Я что-то плыву.. Вроде все сделал по инструкции, но бот отправляет мне запрос в стиле : Поступила новая заявка/sendMessage, ито это после настроек в Network Transport https://api.telegram.org/bot<token>/sen ... =Поступила новая заявка
а в Controller mapping for Invoker 'Telegram': я написал sendMessage, его и передает, как слово) Где-то в инвокере недонастроил или не пойму что. просто первый раз поднял отрс, и сейчас развлекаюсь с уведомлениями в телеграмме. прошу прощения за мою тупость.
Код: Выделить всё
https://api.telegram.org:443/bot435435456:dfredfvcxd-qt0-drfgtredfrtgfdsedfrtКод: Выделить всё
sendMessageProd: OTRS 6.0.30 on Ubuntu 22.04 with Postgres 16
Stage: OTRS 6.0.30 on Centos 7 with Postgres 14 both in Docker containers
-
alexandr.kv
- OTRS Новобранец
- Сообщения: 17
- Зарегистрирован: 29 мар 2020, 13:08
Re: Интеграция OTRS -> Telegram (1)
Подскажите, как можно добавить в оповещении больше информации о заявке?
Штатно выводится вот так:
Customer: $CustomerCompany{CustomerCompanyName}
Queue: $Ticket{Queue}
Priority: $Ticket{Priority}
State: $Ticket{State}
Owner: $Ticket{Owner}
Responsible: $Ticket{Responsible}
Changed : $Ticket{Changed}
Хотелось бы добавить инициатора заявки (OTRS_CUSTOMER_REALNAME) и описание задания (OTRS_CUSTOMER_BODY[30] )
Это возможно?
-
alexus
- OTRS Гуру
- Сообщения: 5220
- Зарегистрирован: 20 сен 2010, 18:17
- Откуда: Москва
- Благодарил (а): 96 раз
- Поблагодарили: 84 раза
Re: Интеграция OTRS -> Telegram (1)
Эти тэги не являются стандартными атрибутами тикета. В уведомлениях для них реализована специальная обработка. Так что тут нужна доработкаalexandr.kv писал(а): 14 янв 2021, 22:04 Хотелось бы добавить инициатора заявки (OTRS_CUSTOMER_REALNAME) и описание задания (OTRS_CUSTOMER_BODY[30] )
Это возможно?
Алексей Юсов
Prod: Radiant Service Desk on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal
Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!
-
Screwie
- OTRS Новобранец
- Сообщения: 22
- Зарегистрирован: 01 июл 2019, 12:50
- Благодарил (а): 4 раза
- Поблагодарили: 4 раза
Re: Интеграция OTRS -> Telegram (1)
А чтобы хотябы email отправителя добавить, какой прописать код?alexus писал(а): 19 янв 2021, 13:56Эти тэги не являются стандартными атрибутами тикета. В уведомлениях для них реализована специальная обработка. Так что тут нужна доработкаalexandr.kv писал(а): 14 янв 2021, 22:04 Хотелось бы добавить инициатора заявки (OTRS_CUSTOMER_REALNAME) и описание задания (OTRS_CUSTOMER_BODY[30] )
Это возможно?
Re: Интеграция OTRS -> Telegram (1)
Для этого нужно дописать TelegramTxt.pl.Screwie писал(а): 09 мар 2021, 12:05А чтобы хотябы email отправителя добавить, какой прописать код?alexus писал(а): 19 янв 2021, 13:56Эти тэги не являются стандартными атрибутами тикета. В уведомлениях для них реализована специальная обработка. Так что тут нужна доработкаalexandr.kv писал(а): 14 янв 2021, 22:04 Хотелось бы добавить инициатора заявки (OTRS_CUSTOMER_REALNAME) и описание задания (OTRS_CUSTOMER_BODY[30] )
Это возможно?
До формирования ($TeleText{Data}->{text}=qq{ необходимо из OTRS получить CustomerUser, сделать это можно следующим образом:
Код: Выделить всё
my %CustomerUser = $CustomerUserObject->CustomerUserDataGet(
User => $Ticket{CustomerUserID} ,
);
Код: Выделить всё
Person: $CustomerUser{UserFirstname} $CustomerUser{UserLastname}
Код: Выделить всё
my %CustomerUser = $CustomerUserObject->CustomerUserDataGet(
User => $Ticket{CustomerUserID} ,
);
($TeleText{Data}->{text}=qq{
NEW: #$Ticket{TicketNumber}
Department: $Ticket{CustomerID}
Person ID: $Ticket{CustomerUserID}
Person: $CustomerUser{UserFirstname} $CustomerUser{UserLastname}
Title: $Ticket{Title}
Type: $Ticket{Type}
Changed : $Ticket{Changed}
}) =~ s/^[\t ]*//mg;
-
cheba
- OTRS Новобранец
- Сообщения: 9
- Зарегистрирован: 20 май 2021, 13:59
- Благодарил (а): 2 раза
- Поблагодарили: 1 раз
Re: Интеграция OTRS -> Telegram (1)
-
alex.t
- OTRS Новобранец
- Сообщения: 30
- Зарегистрирован: 29 апр 2018, 09:26
- Благодарил (а): 1 раз
- Поблагодарили: 9 раз
Re: Интеграция OTRS -> Telegram (1)
Код: Выделить всё
# Получаем текст первого артикла
my $ArticleObject = $Kernel::OM->Get('Kernel::System::Ticket::Article');
my @ArticleList = $ArticleObject->ArticleList(
TicketID => $Param{Data}->{TicketID},
OnlyFirst => 1
);
my %Article = $ArticleObject->BackendForArticle( %{$ArticleList[0]} )->ArticleGet( %{$ArticleList[0]} );
До вот этого блока:
($TeleText{Data}->{text}=qq{
#$Ticket{TicketNumber}
Customer: $CustomerCompany{CustomerCompanyName}
Queue: $Ticket{Queue}
Priority: $Ticket{Priority}
State: $Ticket{State}
Owner: $Ticket{Owner}
Тут вставляем полученный текст в сообщение:
Text: $Article{Body}
Responsible: $Ticket{Responsible}
Changed : $Ticket{Changed}
$Host/otrs/index.pl?Action=AgentTicketZoom;TicketID=$Param{Data}->{TicketID}
}) =~ s/^[\t ]*//mg;
$TeleText{Data}->{queue}=$Ticket{Queue};
-
littledpurple
- OTRS Новобранец
- Сообщения: 4
- Зарегистрирован: 20 мар 2020, 14:24
- Поблагодарили: 2 раза
Re: Интеграция OTRS -> Telegram (1)
-
littledpurple
- OTRS Новобранец
- Сообщения: 4
- Зарегистрирован: 20 мар 2020, 14:24
- Поблагодарили: 2 раза
Re: Интеграция OTRS -> Telegram (1)
Код: Выделить всё
$TeleText{Data}->{reply_markup}="{\"inline_keyboard\":[[{\"text\": \"Open Ticket\", \"url\": \"$Host/otrs/index.pl?Action=AgentTicketZoom;TicketID=$Param{Data}->{TicketID}\"}]]}";Код: Выделить всё
($TeleText{Data}->{text}=qq{
#$Ticket{TicketNumber}
Customer: $CustomerCompany{CustomerCompanyName}
Queue: $Ticket{Queue}
Priority: $Ticket{Priority}
State: $Ticket{State}
Owner: $Ticket{Owner}
Responsible: $Ticket{Responsible}
Changed : $Ticket{Changed}
$Host/otrs/index.pl?Action=AgentTicketZoom;TicketID=$Param{Data}->{TicketID}
}) =~ s/^[\t ]*//mg;
Но! Возник ещё один вопрос. Что с кодировкой? Можно ли как-нибудь писать в .pm скрипте на русском?
-
alexus
- OTRS Гуру
- Сообщения: 5220
- Зарегистрирован: 20 сен 2010, 18:17
- Откуда: Москва
- Благодарил (а): 96 раз
- Поблагодарили: 84 раза
Re: Интеграция OTRS -> Telegram (1)
Можно, только кодировка должна быть UTF-8littledpurple писал(а): 12 авг 2021, 17:31
Но! Возник ещё один вопрос. Что с кодировкой? Можно ли как-нибудь писать в .pm скрипте на русском?
Алексей Юсов
Prod: Radiant Service Desk on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal
Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!
-
cheba
- OTRS Новобранец
- Сообщения: 9
- Зарегистрирован: 20 май 2021, 13:59
- Благодарил (а): 2 раза
- Поблагодарили: 1 раз
Re: Интеграция OTRS -> Telegram (1)
Остался единственный вопрос с кодировкой