{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Лайвлупинг, медиапродакшн и все эти ваши компьютеры: заметки с тегом EWS",
    "_rss_description": "Алексей Батищев. Заметки обо всём, что происходит со мной и окружающим миром",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/batishchev.ru\/blog\/tags\/ews\/",
    "feed_url": "https:\/\/batishchev.ru\/blog\/tags\/ews\/json\/",
    "icon": "https:\/\/batishchev.ru\/blog\/pictures\/userpic\/userpic@2x.jpg?1604346823",
    "authors": [
        {
            "name": "Алексей Батищев",
            "url": "https:\/\/batishchev.ru\/blog\/",
            "avatar": "https:\/\/batishchev.ru\/blog\/pictures\/userpic\/userpic@2x.jpg?1604346823"
        }
    ],
    "items": [
        {
            "id": "1104",
            "url": "https:\/\/batishchev.ru\/blog\/all\/exchangedocsaver-esche-odna-istoriya-pro-lyudey-i-robotov\/",
            "title": "ExchangeDocSaver: еще одна история про людей и роботов",
            "content_html": "<p>Несколько лет назад, за кружкой крепкого чая у мангала, мой старинный друг пожаловался на одну из обязанностей на работе: при общении с контрагентами по электронной почте у них возникают артефакты этого общения — счета и прочие документы — которые нужно из почтовых сообщений сохранять на сетевой диск. Причем в компании исторически сложился процесс документооборота, когда эти файлы должны попасть в свое место в иерархии сетевого диска, где за них уже неистово хватаются другие отделы, а иерархия эта не самая простая (хотя будущее место документа определяется по номеру контракта однозначно, по схеме «ну это все знают»).<\/p>\n<p>В общем, выступает мой друг таким вот высокоинтеллектуальным сортировщиком и раскладывальщиком файликов, в фоне во время других (гораздо более сложных и изящных) задач по заключению договоров, преодолению препонов и прочих зарабатываний мильёнов. Ну натурально вот: придумал как привезти из стран заморских жирафа по частям, и чтобы по документам это была канарейка (задача безусловно творческая), а потом не забывай в течение пары месяцев доки по этому проекту из последующей переписки «правой кнопкой мыши — сохранить как — найти папку — блин где же она — а вот — сохранить»<\/p>\n<p>А что — говорю ему я, потягивая чай у мангала — задачка-то похоже автоматизируется. Можно научить роботов пырить в почтовый ящик по Exchange Web Services (EWS) Managed API, находить непрочитанные письма, понимать какие из них содержат нужные документы (а какие — нет), а также к какому контракту они относятся, ну а по номеру контракта и место на сетевом диске найти можно. Контракт конечно может быть в письме и вложениях непонятно где упомянут, но раз человек справляется с поиском — то и робота настропалить на это дело сможем.<\/p>\n<p>Естественно, согласно всем заветам планирования процессов разработки, реализация алгоритма заняла в три раза больше времени, чем задумывалось. Естественно, так как исходные письма посылают человеки, ошибающиеся и ненадёжные, и не все 100% сообщений оформляются как надо, часть писем (довольно малая) алгоритмом пропускается. Но в целом, за несколько дней рьяного <a href=\"https:\/\/batishchev.ru\/blog\/tags\/kenk\/\">кэнк-программинга<\/a> с использованием наработанных ранее библиотек и с применением худших регулярок ever, был выпущен в прод робот, который начал 24 на 7 делать работу за человека. Робот, который не устаёт, не болеет и не обедает, который днём и ночью мгновенно реагирует на письма от контрагентов изо всех часовых поясов, который всегда кладёт файлы туда, куда надо, и позволяет человеку сфокусироваться на действительно сложных вещах.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/batishchev.ru\/blog\/pictures\/exchangedocsaver-esche-odna-istoriya-pro-lyudey-i-robotov.png\" width=\"526\" height=\"242\" alt=\"\" \/>\n<\/div>\n<p>На днях, после полутора лет успешной эксплуатации, комплекс впервые потребовал доработки из-за смены формата номера контракта на предприятии. Я дополнил алгоритм детектирования ID контракта новым шаблоном, попутно поправил пару замеченных косяков (и чуть выиграл в производительности), выкатил обновление — и клиент снова доволен, надеюсь что на следующие Х лет.<\/p>\n<p>Детали реализации, код, ФИО счастливчика и название компании — под NDA, по очевидным причинам. Могу лишь сказать что при внимании к деталям и некотором опыте автоматизации под винду и Exchange, можно в таком направлении реализовать практически что угодно. Если вы ежедневно тратите время на работу с почтой, не решаемую обычным функционалом правил и другой автоматизации в почтовом клиенте — возможно, пришла пора переложить это на наших электрических братьев. Как-нибудь расскажу потом про конфеденциальную пересылку алертов из почты в телегу, тоже полезная штука.<\/p>\n<p>Кожаные заняты делом, кремнивые — рутиной. Обожаю такое.<\/p>\n<p>КЭНК! Слава роботам!<\/p>\n",
            "date_published": "2024-12-05T12:27:42+03:00",
            "date_modified": "2024-12-09T13:17:05+03:00",
            "tags": [
                "EWS",
                "PowerShell",
                "КЭНК"
            ],
            "image": "https:\/\/batishchev.ru\/blog\/pictures\/exchangedocsaver-esche-odna-istoriya-pro-lyudey-i-robotov.png",
            "_date_published_rfc2822": "Thu, 05 Dec 2024 12:27:42 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "1104",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/batishchev.ru\/blog\/pictures\/exchangedocsaver-esche-odna-istoriya-pro-lyudey-i-robotov.png"
                ]
            }
        },
        {
            "id": "69",
            "url": "https:\/\/batishchev.ru\/blog\/all\/kenk-contacts-watcher\/",
            "title": "КЭНК: следитор за изменениями в контактах Exchange",
            "content_html": "<p>На нынешнем проекте сложилась практика использования ящиков в Exchange в качестве адресной книги сразу несколькими членами рабочей группы и\\или на нескольких устройствах одновременно. При этом регулярно возникала необходимость понять, когда было внесено то или иное изменение в адресную книгу ящика, а иногда — ещё и скопировать изменённые данные обратно без привлечения технических специалистов и механизмов резервного копирования. Ожидаемо, функционал требовался кастомный, а бюджет на получение дополнительного сервиса не рассчитан.<\/p>\n<h2>Заряжаем павершелломёт<\/h2>\n<p>Для целей автоматизации Exchange я часто использую Exchange Web Services (EWS) Managed API, вызывая его функции из PowerShell через <a href=\"https:\/\/www.microsoft.com\/en-us\/download\/details.aspx?id=42951\">библиотеку<\/a>. Его применение напрашивается и тут. Можно смотреть содержимое адресной книги, дампить интересуемые данные из ящика в текстовый файл, сравнивать результаты актуального дампа и предыдущего, и формировать отчёты об изменениях. Побочный результат — раз уж мы получаем изменения, можно хранить их историю и иметь возможность ретроспективы.<\/p>\n<p>Дальше — дело техники и деталей. Выгружаем поля в текстовый формат, схлопываем многоэлементные объекты в строки по формату как нам вздумается, исключаем те поля, за которыми следить не хотим. Приправляем наглядным представлением в виде HTML отчёта, выделяем цветом изменения и наносим прочую пользу клиентам сервиса. Даем возможность службе техподдержки ставить и снимать ящики с контроля добавлением в специальную доменную группу. Запускаем скрипт по планировщику с максимально возможной частотой. Роботы трудятся — а человеки пользуются результатом.<\/p>\n<div class=\"e2-text-picture\">\n<div class=\"fotorama\" data-width=\"720\" data-ratio=\"1.4574898785425\">\n<img src=\"https:\/\/batishchev.ru\/blog\/pictures\/kenk-contacts-watcher-change-1.png\" width=\"720\" height=\"494\" alt=\"\" \/>\n<img src=\"https:\/\/batishchev.ru\/blog\/pictures\/kenk-contacts-watcher-deleted.png\" width=\"720\" height=\"494\" alt=\"\" \/>\n<\/div>\n<div class=\"e2-text-caption\">Примеры отчётов об изменении части контакта и удалении контакта из ящика<\/div>\n<\/div>\n<p>Сервис на базе этого скрипта успешно работает несколько лет. Служба техподдержки всегда может разрешить вопросы клиентов об изменениях в адресных книгах, некоторые клиенты пользуются отчётами для контроля работы в группе и оперативного отката изменений. Уникальный кастомный сервис достался заказчику в рамках общего контракта на обслуживание системы.  Проблемы, для решения которых раньше требовалась работа специалиста, решаются автоматически и часто без привлечения техподдержки вообще. Чистый КЭНК!<\/p>\n<p>Скрипт на гитхабе <a href=\"https:\/\/github.com\/alexbatishchev\/kenk-contacts-watcher\">https:\/\/github.com\/alexbatishchev\/kenk-contacts-watcher<\/a><\/p>\n<p>Слава Роботам!<\/p>\n",
            "date_published": "2020-12-04T21:49:20+03:00",
            "date_modified": "2024-10-02T15:24:48+03:00",
            "tags": [
                "EWS",
                "PowerShell",
                "все эти ваши компьютеры",
                "КЭНК"
            ],
            "image": "https:\/\/batishchev.ru\/blog\/pictures\/kenk-contacts-watcher-change-1.png",
            "_date_published_rfc2822": "Fri, 04 Dec 2020 21:49:20 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "69",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "jquery\/jquery.js",
                    "fotorama\/fotorama.css",
                    "fotorama\/fotorama.js"
                ],
                "og_images": [
                    "https:\/\/batishchev.ru\/blog\/pictures\/kenk-contacts-watcher-change-1.png",
                    "https:\/\/batishchev.ru\/blog\/pictures\/kenk-contacts-watcher-deleted.png"
                ]
            }
        }
    ],
    "_e2_version": 4171,
    "_e2_ua_string": "Aegea 11.4 (v4171)"
}