woldemarg / zenlix_registration

регистрация новых пользователей
0 stars 0 forks source link

Автоматизация регистрации пользователей в ZENLIX средствами R

Стандартная регистрация

Сотрудники нашей организации работают с обращениями клиентов в системе обработки электронных заявок ZENLIX v2.95. Для получения доступа к системе новые клиенты проходят процедуру регистрации. К сожалению, средствами самой системы нельзя изменить стандартную регистрационную форму, обязательными полями которой являются только имя и email клиента. Это очень неудобно с точки зрения сбора информации о клиенте и предприятии, которое он представляет. Правда, внутри самой системы профиль пользователя можно расширить за счет т.н. дополнительных полей, создаваемых администратором. Однако клиенты, как правило, после первичной регистрации такие поля не заполняют, поэтому проблема наполнения клиентской базы таким образом не решается.

Формулировка задачи

Мы поставили задачу разработать механизм сбора по установленной форме, обработки и сохранения расширенной информации о новом клиенте на этапе его регистрации без изменения кода системы ZENLIX.

Альтернативный подход

Альтернативу стандартной процедуре регистрации мы реализовали на основе открытых сервисов Google. Так, на первом этапе клиенты заполняли специально разработанную нами многоуровневую Google form, ответы из которой сохранялись в Google spreadsheet. Затем администратор создавал нового пользователя средствами системы ZENLIX, и переносил в его профиль анкетные данные из Google spreadsheet.

Автоматизация процесса

С ростом количества клиентов возник вопрос автоматизации процесса. С помощью скрипта на языке R и стандартных средств Windows мы перешли к новой схеме (последовательности) регистрации клиента в системе:

При этом запуск R-script осуществляется по расписанию через планировщик Windows

Общая схема регистрации пользователей

автоматизация регистрации пользователей

Преимущества и недостатки

Предложенный механизм позволяет разработать и использовать регистрационную форму любого уровня сложности (на основе сервиса Google). Добавление пользователя через R-script реализуется средствами самой системы (через эмуляцию действий администратора с помощью библиотеки RSelenium), а перенос информации из Google spreadsheet в БД phpmyadmin - с помощью запросов на языке SQL. Это позволяет не менять (открытый) код системы и избежать сбоев в ее работе. Кроме того, сотрудники организации имеют доступ к полноценной БД анкетных данных клиентов (shared spreadsheet) также и вне системы ZENLIX.

Однако для работы R-script необходимо выделить ПК с установленным R и другим ПО согласно техническим требованиям (см. ниже).

Технические требования

Для автоматизации регистрации пользователей следует предварительно настроить сервисы Google и подготовить рабочий ПК для запуска R-script, а именно:

  1. Установить R (текущая версия R-3.3.3) и загрузить дополнительные библиотеки (см. ниже)
  2. Для переноса данных из Google Form в Google spreadsheet - настроить сохранение ответов в таблице
  3. Для импорта данных из таблицы в R - получить shareable link на файл
  4. Для запуска из R и работы c Selenium Server -
  5. Для остановки Selenium Server из R - загрузить curl.exe и прописать путь к файлу в системной переменной PATH (при этом важно работать с именно с файлом selenium-server-standalone-3.0.1.jar)
  6. Для запуска R-script из bat-файла - прописать путь к RScript.exe в системной переменной PATH (например, D:\Install\R\R-3.3.3\bin\x64)
  7. Для рассылки писем с помощью mailR через gmail SMTP - включить разрешение для "less secure apps" в своем аккаунте

Примечание. Если проблема с запуском Selenium Server через rsDriver() не возникает, то необходимости в совершении действий пп.4-5 нет.

Библиотеки R

Минимальный набор сторонних библиотек:

library(gsheet) #импорт данных
library(readr)     #чтение csv
library(DBI) #для работы RMySQL
library(RMySQL) #работа с БД phpmyadmin
library(RSelenium) #навигация в Интернет
library(mailR) #рассылка почты

Алгоритм R-script

Общая последовательность такая:

  1. загрузка "промодерированных" анкет из Google spreadsheet
  2. выборка ранее не зарегистрированных пользователей
  3. если есть новые пользователи:
  4. -- старт Selenium Server и вход в систему под администратором
  5. -- -- цикл для каждого нового пользователя:
  6. -- -- -- -- обработка данных и генерация пароля
  7. -- -- -- -- создание профиля средствами системы
  8. -- -- -- -- добавление данных в users и user_data через SQL-запросы
  9. -- -- -- -- если ошибка на п.8
  10. -- -- -- -- -- отмена предыдущих транзакций (п.7 и п.8)
  11. -- -- -- -- -- иначе: отправка письма-уведомления
  12. -- -- конец цикла
  13. -- остановка Selenium Server и выход из программы

Примечание 1. Подробные комментарии приведены внутри кода в файле zen_reg.R, доступного в этом репозитории.

Примечание 2. Первая проверка на уникальность логина (email) нового пользователя реализована в электронной таблице через функцию поиска дубликатов

Примечание 3. Автоматический запуск R-script из bat-файла по расписанию реализован через создание задачи в планировщике Windows. В связи с необходимостью работы на ПК с разными сетевыми настройками bat-файл можно запускать с аргументами "atHome" и "atWork"

Итоги и перспективы

Таким образом, без привлечения сторонних разработчиков и изменения кода системы ZENLIX на основе бесплатного ПО (кроме планировщика Windows) и открытых сервисов Google средствами языка R создан механизм, который обеспечивает полноценный сбор сведений (и их перенос) о клиенте в момент регистрации. Преимуществом такого подхода является промежуточная сводная таблицу с анкетными данными клиентов (Google spreadsheet), которую иначе из системы можно получить только путем объединения таблиц users и user_data.

Если решить проблемы кодировки и работы на ПК в корпоративной сети, то R-script можно существенно оптимизировать и перейти к рассылке писем на основе markdown или html разметки.