Работаю в строительной компании в проектном отделе. Занимаемся проектированием металлических конструкций. Заказчик передает документацию, которую проектировщики должны превратить в BIM модель. Зачастую в документации Заказчика встречаются несостыковки между отдельными разделами, внутренними стандартами проекта или ГОСТами. В таких случаях пишется технический запрос (technical query) с каким-либо предложением, чтобы конструкция была в соответствии с другими разделами или удовлетворяла стандартам. Написание таких запросов является одной из моих обязанностей. Процесс этот несложный, но жутко рутинный. Ниже схема пайплана этого процесса.
Ко мне приходит запрос от проектировщиков с кратким объяснением проблемы. Я нахожу и извлекаю необходимые страницы, чтобы приложить их в качестве ссылочной информации. Делаю необходимые пометки. Пишу запрос в специальной Excel форме. Текст запроса также вставляю в извлеченные pdf-страницы. Далее я заполняю реестр в Google Spreadsheet, чтобы подрядчик мог присвоить специальный номер запросу. После присвоения номера файлы нужно переименовать в соответствии с номером запроса. В Excel форме необходимо в одну графу вписать номер запроса, а в другую наименования переименованных вложений. В итоге сам пакет запроса выглядит как-то так
Помимо этого, мне еще нужно заполнить внутренний реестр, которым пользуются проектировщики.
После переименования файлов я направляю запрос Заказчику по почте. Далее Заказчик присылает ответ. Я создаю папку на Google диске и загружаю туда файл с ответом. В реестр вношу пометку, что запрос отвечен.
Схема не эталон рациональности. Почему не используется софт для документооборота мне не известно. Ну вот мне и наскучило выполнять рутинную работу. Плюс постоянно проверять присвоили ли номер запросу или нет тоже не особо приятное занятие. И тут я обнаружил такую замечательную вещь как Google Script. Начал читать документацию и понял, что все что я делаю, можно делать с помощью скриптов.
Сама платформа Google Script достаточно удобная. Имеется подробная документация и достаточно обширная база на StackOverflow. Единственная для меня проблема состояла в языке. В Google Script можно писать только на JavaScript, а я знал только Python. Пришлось учить синтаксис. Благо JS язык достаточно приятный.
Объясню вкратце, что делает скрипт. Первую стадию по подготовке файлов и написанию запроса все равно приходится делать самому. Но на этом ручной труд заканчивается и в дело вступают скрипты. Я вношу данные в реестр и иду пить чай. Скрипт с заданной периодичностью проверяет хранилище запросов и если там имеется новый, то запускает другой скрипт, который проверяет присвоен ли номер запросу. Параллельно запускается другой скрипт, который заполняет локальный реестр. Если номер долго не присваивается, скрипт отправляет напоминание Подрядчику, что есть новый запрос и нужно бы присвоить номер. После того как номер присвоен, запускается скрипт предобработки. Файлы переименовываются и excel файл заполняется. Далее формируется письмо по заданному шаблону и отправляется. Также скрипт периодически проверяет почту. Если имеется письмо-ответ на запрос, то запускается скрипт, который создает специальную папку на GoogleDrive и загружает туда ответ. И в конце отмечает в локальном реестре, что ответ пришел.
Теперь хотелось бы отметить трудности, с которыми я столкнулся и как я их решил.
Google не позволяет редактировать xlsx файлы с помощью GoogleScript. Пришлось написать пару строчек кода для конвертации xlsx в google spreadsheet.
Gmail не позволяет отправлять google spreadsheet как вложение к письму. Поэтому файл, который я сконвертировал для редактирования, пришлось снова конвертировать в xlsx.
В GoogleScript имеется два вида триггеров, который я использую для запуска скриптов – time-based и onEdit. Я использую только time-based, хотя onEdit для меня также бы подошли.
Возникла необходимость хранить переменные (например, номер последней строки в файлах). Для этого создал spreadsheet на диске, к которому скрипты периодически обращаются и берут оттуда необходимую информацию.
Иногда сервера падают во время исполнения скрипта. Тогда его нужно перезапускать. Но такое случается очень редко.
В целом, с помощью GoogleScript можно настроить любой workflow, основанный на получении информации через почту. Инструмент очень удобный и приятный в использовании. Очень многие вопросы уже разобраны на StackOverflow.
Если у вас имеются вопросы, то постараюсь ответить на них в комментариях. Сам проект залил на GitHub. Можете ознакомиться.
Всем успехов!