Новости и статьи

Блог «ПланФикс»: Парсер комментариев в ПланФиксе

Ольга Тимошенко: А мы активно продолжаем публиковать заметки от наших партнеров. В рубрике «Рассказ от первого лица» наш партнер Дмитрий Маслов расскажет о том, как в ПланФиксе организовать парсер комментариев для работы с внештатными сотрудниками в Telegram. Слово Дмитрию.


Дмитрий Маслов: Всем привет! Меня зовут Дмитрий. Я партнер Planfix, участник команды «Новая Бизнес Среда» и руководитель студии «78works».
Ранее вы могли ознакомиться с моим видео, в котором демонстрируется работа парсера комментариев. Напомню: принцип работы основан на анализе поступающих из внешней системы сообщений (в нашем примере это Telegram) на содержание в них определенного ключа из набора, который формируется динамически. После сверки этих ключей система принимает решение пропускать ли его в задачу или нет.


Сегодня я расскажу как это работает.

Основные модули

Сначала перечислим основные модули решения: 
1. Аналитика «Анализ комментария» — формируется автоматически и добавляется в задачу. Отвечает за анализ поступающих комментариев.
Состоит из полей:
  • Боевая задача (тип Задача) — содержит ссылку на мастер-задачу, подключенную к задаче-чату; 
  • Тег задачи (Вычисляемое поле) — вычисляет тег из мастер-задачи для дальнейшего сравнения:

Поля «Боевая задача» и «Тег задачи».


  • Последний комментарий (тип Вычисляемое) — вычисляет последний комментарий в задаче-чате, который, например, поступил нам из Telegram;
  • Анализ (тип Вычисляемое) — проводит сравнение поля «Тег задачи» из мастер-задачи и поля «Последний комментарий» из задачи-чата:

Поля «Последний комментарий» и «Анализ».


По результату анализа получаем два возможных значения: 0 или число больше 0.
2. Облако тегов — облако ключей (или тегов, кому как привычней). Это облако является текстовым полем, но при этом оно динамическое, так как вычисляется каждый раз когда подключается или отключается задача от чата.
За подключение, отключение и доставку сообщений отвечает конфигурация «Коммуникация через мессенджеры из любой задачи ПланФикс v2».
3. Набор сценариев задачи-чата — для проведения анализа поступившего комментария из внешней системы, например, Telegram.
4. Набор сценариев мастер-задачи — для проведения финального анализа и принятия решения системой о публикации комментария в задачи.
5. Режим работы парсера — с помощью поля «Список подключенных задач», которое считает количество подключенных мастер-задач и автоматически включает/отключает модуль парсера:
  • Счётчик подключенных задач = 1 — это значит что в данный момент 1 мастер-задача соединена с 1 чатом => парсер не функционирует, так как в нём нет необходимости. 
  • Счётчик подключенных задач > 1 — к задаче-чату подключено несколько мастер-задач. Например, когда дизайнер взял несколько заданий и при отправке его сообщений из Telegram необходимо направлять поток сообщений в нужные задачи => включается анализ комментариев в задаче-чат и в мастер-задаче.

Режим многоканальности

Теперь перейдём к описанию действий при подключении мастер-задачи к задаче-чату в режиме многоканальности. 
Ранее к чату уже была подключена задача с тегом LANDING, подключаем еще одну задачу с тегом CSS. Выбираем в поле «Сотрудник» контакт, который хотим назначить на выполнение данной задачи: 
1. Сценарии конфигурации «Коммуникация через мессенджеры из любой задачи Планфикс v2» подключают чат с этим контактом к нашей мастер-задаче.
2. В задачу-чат добавляется аналитика «Анализ комментария».
3. По облаку тегов происходит несколько действий:
  • Вычисляется поле «Действие с облаком тегов» (тип Строка) — в зависимости от подключения/отключения задачи устанавливается значение Добавляем/Исключаем; 
  • Вычисляется значение «Буферное поле: строка» (тип Строка) — туда устанавливается значение тега из мастер-задачи:

Поля «Действие с облаком тегов» и «Буферное поле:строка».


  • Вычисляется значение поля «История тегов» и «Счётчик подключенных задач»:

Поля «История тегов» и «Счётчик подключенных задач».


  • Вычисляется готовое облако тегов:

Формула для вычисления облака тегов.


Таким образом, наша мастер-задача с тегом CSS подключена к задаче-чату, значение поля «Облако тегов» пересчитано и содержит два значения: LANDING и CSS, а также добавлена аналитика «Анализ комментария» от данной мастер-задачи:


Мастер-задача подключена к задаче-чату.


Аналитика «Анализ комментария».


Подготовительный этап завершен. 

Анализ добавленного комментария

Анализируем поступивший комментарий, сравниваем с тегами-ключами подключенных задач и, в случае несоответствия, сразу отвечаем отправителю, что сообщение не доставлено.
Нам поступает комментарий, например, из Telegram. 
Система: 
  • Проверяет его на соответствие условий:

Сценарий «Анализ добавленного комментария».


  • Складывает его текст в отдельное поле «Комментарий» (тип Строка).
  • Запускает пересчет аналитики «Анализ комментария», где происходит сравнение и уточнение содержания в комментарии хоть одной из меток из подключенных задач.
  • Вычисляет значение поля «Итог анализа комментария» (тип Строка), которое тянет из поля «Итог анализа комментария» (тип Итоги аналитик) значение 0 или 1. 
  • Проставляет значение в поле «Анализ сообщения» (тип Чекбокс) для запуска следующего сценария.

Сценарий «Анализ добавленного комментария».


Этот сценарий выполняется если «Итог анализа комментария» из аналитики = 1. В случае, если сообщение не содержит тега задачи, то есть «Итог анализа комментария» = 0 — запускается другой сценарий:


Сценарий «Проведен анализ комментария».


Он отправляет ответное сообщение нашему контакту о том, что его сообщение не содержит ни одного тега-ключа из облака и сообщает, какие теги можно использовать для успешной доставки его сообщения в нужную задачу.

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


Сообщение в связанные задачи. 


Сценарий запускает отправку сообщения в связанные задачи.


Нажимаем на чек-бокс отправки сообщения, запускается сценарий:


Сценарий вычисляет текст комментария в мастер-задаче.


Он в подключенные мастер-задачи сначала отправляет пустой комментарий от имени робота:


Пустой комментарий от робота.


А также вычисляет значение поля «Комментарий» (тип поля Строка) в подключенных мастер-задачах:


Вычисление значения поля «Комментарий».


Финальный этап анализа комментария

Пустой комментарий от робота в мастер-задачах работает триггером для запуска финального этапа анализа текста, который уже публикует комментарий в мастер-задачу либо нет:


Сценарий по вычислению и публикации комментария с ключом.


Перед публикацией мы «вырезаем» из текста комментария значение самого тега-ключа:


Из текста комментария вырезается значение тега-ключа.


И публикуем «очищенный» комментарий:


Публикация очищенного комментария в задаче.


После завершения работы над задачей мы отключаем его из поля «Сотрудник» мастер-задачи. Также из поля облака тегов исключается значение тега нашей мастер-задачи:


Формула по исключению значения тега.


При полном отключении всех задач, удаляются все аналитики «Анализа комментариев».


Промежуточные итоги

Конфигурация работает стабильно. В режиме подключения 1:1 (моноканал) полноценно пересылаются файлы. В режиме многоканальности отправка файлов в чаты работает тоже, а обратно пока ограничена отправкой ссылок на файлы (ведём доработку).
По количеству сценариев-инструкций конфигурация тянет на небольшую программу на базе ПланФикс 🙂 
Отдельно хотел бы поблагодарить разработчиков за модули тестирования и отладки — без них (проверка условий, технические логи) разработка конфигураций была бы намного медленнее. 
Для наглядности и тестирования разработки создан демо-аккаунт, доступ к которому предоставим по запросу в личные сообщения. 

Всем удачи и до встречи в ПланФикс.


Источник blog.planfix.ru