Парсер комментариев в ПланФиксе

Ольга Тимошенко: А мы активно продолжаем публиковать заметки от наших партнеров. В рубрике «Рассказ от первого лица» наш партнер Дмитрий Маслов расскажет о том, как в ПланФиксе организовать парсер комментариев для работы с внештатными сотрудниками в 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 (моноканал) полноценно пересылаются файлы. В режиме многоканальности отправка файлов в чаты работает тоже, а обратно пока ограничена отправкой ссылок на файлы (ведём доработку).

По количеству сценариев-инструкций конфигурация тянет на небольшую программу на базе ПланФикс 🙂

Отдельно хотел бы поблагодарить разработчиков за модули тестирования и отладки — без них (проверка условий, технические логи) разработка конфигураций была бы намного медленнее.

Для наглядности и тестирования разработки создан демо-аккаунт, доступ к которому предоставим по запросу в личные сообщения.

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


Ольга Тимошенко: Рассказ был длинным, но интересным. Спасибо, Дмитрий 🙂
Не забывайте подписываться на наши социальные сети и просматривать новости о том, что же интересного появилось в ПланФиксе. Мы есть в Facebook, ВКонтакте, Telegram, Twitter и в YouTube.

4 Comments

  1. Аватар

    Дмитрий, спасибо за подробное объяснение. Все круто, но и сложность настройки такая что не с первого раза поймешь, будем тестировать.
    Посмотрев на некоторые сценарии сразу возникла идея попросить команду ПФ добавить новые условия сценария
    — Автор комментария не робот;
    — Автор комментария робот.
    Хотя конечно список таких пунктов уже приличный, и было бы интереснее иметь возможность слева выбрать Автор комментария, далее выбрать знак равно или не равно и справа указать параметр Автор комментария = Это сотрудник или Это контакт или Это робот.

      1. Аватар

        Это понятно. Просто я вижу конструкцию Автор комментария != Робот Морти и Автор комментария != Робот Рик.
        А так можно было бы один условием отсечь.

Добавить комментарий