Сообщения в Telegram

Матеріал з NoDeny
Перейти до навігації Перейти до пошуку

Описание

Модуль добавляет возможность автоматических уведомлений в телеграм для:

  • модуля тикетов
  • модуля «Тикеты от пользователя»

В модуле тикетов при изменении тикета исполнителю посылается уведомление, что он добавлен как исполнитель, время старта задания такое-то. Либо сообщение, что время старта задания изменилось. А также другие детали тикета

Тикеты от пользователя

Модуль «Тикеты от пользователя» заменяет стандартный модуль обмена сообщениями абонента с техподдержкой. На каждое сообщение от клиента создается тикет, который можно привязать к исполнителю и т.д. При этом текущий модуль (Сообщения в Telegram) будет дублировать сообщения в Telegram техподдержки. Настраивается шаблон какие данные и как будут показаны в Telegram. Если абонент прикрепляет изображение - оно покажется.



Настройка

  • Создайте Телеграмм бота
    • Найдите в Телеграме учетку: @BotFather
    • Напишите ему: /newbot
    • Далее: /setname NoDenyИмяВашейСети
    • В ответ получите ключ в виде XXXXXXX:XXXXXXXXXXXXXXXXXXXXX. Внесите этот ключ в раздел Настройки →‎ Модули →‎ Telegram Tickets в поле «Token Telegram бота»
    • Далее в Телеграме: /setdomain
    • Напишите: https://ваш_сайт
  • Напишите любое сообщение вашему боту в Телеграме
  • Откройте в браузере урл: https://api.telegram.org/botВАШ_ТОКЕН/getUpdates (например: https://api.telegram.org/bot123456789:jbd78sadvbdy63d37gda37bd8/getUpdates)
    • В ответе найдите
      ..."chat":{"id": число ...
      . Число - это ваш chat id, внесите его в настройки
  • В разделе Настройки →‎ Модули →‎ Telegram Tickets параметр «Включить модуль» установите в «Да»
  • Установите необходимые модули:
sudo cpan install WWW::Telegram::BotAPI
sudo cpan install EV

Телеграм разрешает использовать не все html-теги

На данный момент разрешено:

<b>bold</b>, <strong>bold</strong>
<i>italic</i>, <em>italic</em>
<u>underline</u>, <ins>underline</ins>
<s>strikethrough</s>, <strike>strikethrough</strike>, <del>strikethrough</del>
<a href="http://www.example.com/">inline URL</a>
<code>inline fixed-width code</code>
<pre>pre-formatted fixed-width code block</pre>

Модуль тикетов

Есть возможность отправки данных создаваемого/изменяемого тикета в Telegram исполнителя(ей), указанного в тикете. Например, при создании наряда на подключение, монтажнику будет выслано уведомление в его личный Telegram.

Необходимо:

  • Создать дополнительное поле (точно такое как в модуле Авторизация через Telegram):
    • Имя поля : Телеграм id (можно дать другое имя)
    • Имя поля в бд : _telegram_id (менять нельзя)
    • Тип поля : одна строка
    • Галки: убирать все пробелы, уникальное
    • Галка на группе сотрудников
  • В Настройки →‎ Модули →‎ Telegram Tickets в поле «Шаблон сообщения исполнителю тикета» ввести шаблон

В шаблоне допустимы следующие переменные:

ticket_url     : url тикета
id             : id тикета
subject        : тема
comment        : текст тикета
state          : состояние
client_info    : данные клиента, с которым связан тикет
performer_info : данные исполнителя, которому отсылается уведомление
new_performer  : 1 - если исполнитель, которому отсылается уведомление, только что добавлен
del_performer  : 1 - если исполнитель, которому отсылается уведомление, только что удален
operation :
   insert - создание тикета
   update - обновление тикета
   add_msg - добавление комментария/сообщения сотрудником
start_time_msg : время старта тикета
start_time_changed : 1 - если время старта тикета изменилось

К примеру:

{% if del_performer %}
Вы убраны из исполнителей в тикете <a href="{{ticket_url}}">{{id}} ({{subject}})</a>
{% elif new_performer || start_time_changed || start_time_removed %}
  {% if operation eq 'insert' %}Создан{% else %}Изменен{% endif %} тикет <a href="{{ticket_url}}">{{id}} ({{subject}})</a>
  {% if start_time_changed %}Время начала задания {{start_time_msg}} изменилось!
    {% elif start_time_removed %}Время начала задания удалено
    {% else %}Время начала задания {% if start_time_msg %}{{start_time_msg}}{% else %}не установлено{% endif %}
  {% endif %}
{% endif %}

Что будет происходить по данному шаблону:

  • При создании нового тикета, если сразу указан исполнитель: Создан тикет ХХХ. Время начала задания 04.04.2023 12:00
  • При при изменении тикета, если добавляется исполнитель: Изменен тикет ХХХ. Время начала задания 04.04.2023 12:00
  • При при изменении тикета, если время задания изменилось: Изменен тикет ХХХ. Время начала задания 04.04.2023 13:00 изменилось!
  • Если исполнитель удален из тикета: Вы убраны из исполнителей в тикете ХХХ

У сотрудника необходимо:

  • В его учетке внесите реальный Telegram-номер в поле «Телеграм id»
  • В самом Telegram добавьте бота, которого вы создали (см. инструкцию выше для Тикетов от пользователя). Учтите, что телеграм в принципе не отправляет сообщение ни на какие номера, которые не добавят бота
  • Создайте тикет и в качестве исполнителя укажите учетку сотрудника с указанным «Телеграм id». Учтите, что эта учетка не должна быть связана с вашей административной записью т.к сообщения не отправляются тому, кто изменяет тикет (зачем ему сообщать о том, что он только что сделал?)
    • Напоминаем, что в NoDeny имеется возможность связать административную запись с обычной учеткой. Это делается на странице редактирования данных админа. Необходимость связываения заключается в том, что обычные учетки гибко настраиваются в плане добавления любых типов полей
  • После создания тикета вы должны получить сообщение в телеграм

В шаблоне вы можете видеть конструкцию вида {% if operation eq 'insert' %} - это команда шаблонизатора, которая в случае равенства переменной operation строке insert, вставит в отсылаемое сообщение слово «Создан», в противном случае «Изменен». Таким образом, при создании тикета придет сообщение:

Создан тикет #123 ...

Возможно, сотрудники не захотят получать сообщения о каждом изменении тикета. А только о его создании. Тогда вы можете создать такой шаблон:

{% if operation eq 'insert' %}
Создан тикет.
id: {{id}}
тема: {{subject}}
{% endif %}

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

{% if new_performer %}
{% if operation eq 'insert' %}Создан{% else %}Изменен{% endif %} тикет #{{id}} "{{subject}}:
<pre>
{{comment}}
</pre>
{% endif %}

Уведомление будет выслано лишь один раз в момент добавления исполнителя.