<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Лайвлупинг, медиапродакшн и все эти ваши компьютеры: заметки с тегом EWS</title>
<link>https://batishchev.ru/blog/tags/ews/</link>
<description>Алексей Батищев. Заметки обо всём, что происходит со мной и окружающим миром</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.4 (v4171)</generator>

<itunes:subtitle>Алексей Батищев. Заметки обо всём, что происходит со мной и окружающим миром</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>ExchangeDocSaver: еще одна история про людей и роботов</title>
<guid isPermaLink="false">1104</guid>
<link>https://batishchev.ru/blog/all/exchangedocsaver-esche-odna-istoriya-pro-lyudey-i-robotov/</link>
<pubDate>Thu, 05 Dec 2024 12:27:42 +0300</pubDate>
<author></author>
<comments>https://batishchev.ru/blog/all/exchangedocsaver-esche-odna-istoriya-pro-lyudey-i-robotov/</comments>
<description>
&lt;p&gt;Несколько лет назад, за кружкой крепкого чая у мангала, мой старинный друг пожаловался на одну из обязанностей на работе: при общении с контрагентами по электронной почте у них возникают артефакты этого общения — счета и прочие документы — которые нужно из почтовых сообщений сохранять на сетевой диск. Причем в компании исторически сложился процесс документооборота, когда эти файлы должны попасть в свое место в иерархии сетевого диска, где за них уже неистово хватаются другие отделы, а иерархия эта не самая простая (хотя будущее место документа определяется по номеру контракта однозначно, по схеме «ну это все знают»).&lt;/p&gt;
&lt;p&gt;В общем, выступает мой друг таким вот высокоинтеллектуальным сортировщиком и раскладывальщиком файликов, в фоне во время других (гораздо более сложных и изящных) задач по заключению договоров, преодолению препонов и прочих зарабатываний мильёнов. Ну натурально вот: придумал как привезти из стран заморских жирафа по частям, и чтобы по документам это была канарейка (задача безусловно творческая), а потом не забывай в течение пары месяцев доки по этому проекту из последующей переписки «правой кнопкой мыши — сохранить как — найти папку — блин где же она — а вот — сохранить»&lt;/p&gt;
&lt;p&gt;А что — говорю ему я, потягивая чай у мангала — задачка-то похоже автоматизируется. Можно научить роботов пырить в почтовый ящик по Exchange Web Services (EWS) Managed API, находить непрочитанные письма, понимать какие из них содержат нужные документы (а какие — нет), а также к какому контракту они относятся, ну а по номеру контракта и место на сетевом диске найти можно. Контракт конечно может быть в письме и вложениях непонятно где упомянут, но раз человек справляется с поиском — то и робота настропалить на это дело сможем.&lt;/p&gt;
&lt;p&gt;Естественно, согласно всем заветам планирования процессов разработки, реализация алгоритма заняла в три раза больше времени, чем задумывалось. Естественно, так как исходные письма посылают человеки, ошибающиеся и ненадёжные, и не все 100% сообщений оформляются как надо, часть писем (довольно малая) алгоритмом пропускается. Но в целом, за несколько дней рьяного &lt;a href="https://batishchev.ru/blog/tags/kenk/"&gt;кэнк-программинга&lt;/a&gt; с использованием наработанных ранее библиотек и с применением худших регулярок ever, был выпущен в прод робот, который начал 24 на 7 делать работу за человека. Робот, который не устаёт, не болеет и не обедает, который днём и ночью мгновенно реагирует на письма от контрагентов изо всех часовых поясов, который всегда кладёт файлы туда, куда надо, и позволяет человеку сфокусироваться на действительно сложных вещах.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://batishchev.ru/blog/pictures/exchangedocsaver-esche-odna-istoriya-pro-lyudey-i-robotov.png" width="526" height="242" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;На днях, после полутора лет успешной эксплуатации, комплекс впервые потребовал доработки из-за смены формата номера контракта на предприятии. Я дополнил алгоритм детектирования ID контракта новым шаблоном, попутно поправил пару замеченных косяков (и чуть выиграл в производительности), выкатил обновление — и клиент снова доволен, надеюсь что на следующие Х лет.&lt;/p&gt;
&lt;p&gt;Детали реализации, код, ФИО счастливчика и название компании — под NDA, по очевидным причинам. Могу лишь сказать что при внимании к деталям и некотором опыте автоматизации под винду и Exchange, можно в таком направлении реализовать практически что угодно. Если вы ежедневно тратите время на работу с почтой, не решаемую обычным функционалом правил и другой автоматизации в почтовом клиенте — возможно, пришла пора переложить это на наших электрических братьев. Как-нибудь расскажу потом про конфеденциальную пересылку алертов из почты в телегу, тоже полезная штука.&lt;/p&gt;
&lt;p&gt;Кожаные заняты делом, кремнивые — рутиной. Обожаю такое.&lt;/p&gt;
&lt;p&gt;КЭНК! Слава роботам!&lt;/p&gt;
</description>
</item>

<item>
<title>КЭНК: следитор за изменениями в контактах Exchange</title>
<guid isPermaLink="false">69</guid>
<link>https://batishchev.ru/blog/all/kenk-contacts-watcher/</link>
<pubDate>Fri, 04 Dec 2020 21:49:20 +0300</pubDate>
<author></author>
<comments>https://batishchev.ru/blog/all/kenk-contacts-watcher/</comments>
<description>
&lt;p&gt;На нынешнем проекте сложилась практика использования ящиков в Exchange в качестве адресной книги сразу несколькими членами рабочей группы и\или на нескольких устройствах одновременно. При этом регулярно возникала необходимость понять, когда было внесено то или иное изменение в адресную книгу ящика, а иногда — ещё и скопировать изменённые данные обратно без привлечения технических специалистов и механизмов резервного копирования. Ожидаемо, функционал требовался кастомный, а бюджет на получение дополнительного сервиса не рассчитан.&lt;/p&gt;
&lt;h2&gt;Заряжаем павершелломёт&lt;/h2&gt;
&lt;p&gt;Для целей автоматизации Exchange я часто использую Exchange Web Services (EWS) Managed API, вызывая его функции из PowerShell через &lt;a href="https://www.microsoft.com/en-us/download/details.aspx?id=42951"&gt;библиотеку&lt;/a&gt;. Его применение напрашивается и тут. Можно смотреть содержимое адресной книги, дампить интересуемые данные из ящика в текстовый файл, сравнивать результаты актуального дампа и предыдущего, и формировать отчёты об изменениях. Побочный результат — раз уж мы получаем изменения, можно хранить их историю и иметь возможность ретроспективы.&lt;/p&gt;
&lt;p&gt;Дальше — дело техники и деталей. Выгружаем поля в текстовый формат, схлопываем многоэлементные объекты в строки по формату как нам вздумается, исключаем те поля, за которыми следить не хотим. Приправляем наглядным представлением в виде HTML отчёта, выделяем цветом изменения и наносим прочую пользу клиентам сервиса. Даем возможность службе техподдержки ставить и снимать ящики с контроля добавлением в специальную доменную группу. Запускаем скрипт по планировщику с максимально возможной частотой. Роботы трудятся — а человеки пользуются результатом.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="720" data-ratio="1.4574898785425"&gt;
&lt;img src="https://batishchev.ru/blog/pictures/kenk-contacts-watcher-change-1.png" width="720" height="494" alt="" /&gt;
&lt;img src="https://batishchev.ru/blog/pictures/kenk-contacts-watcher-deleted.png" width="720" height="494" alt="" /&gt;
&lt;/div&gt;
&lt;div class="e2-text-caption"&gt;Примеры отчётов об изменении части контакта и удалении контакта из ящика&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Сервис на базе этого скрипта успешно работает несколько лет. Служба техподдержки всегда может разрешить вопросы клиентов об изменениях в адресных книгах, некоторые клиенты пользуются отчётами для контроля работы в группе и оперативного отката изменений. Уникальный кастомный сервис достался заказчику в рамках общего контракта на обслуживание системы.  Проблемы, для решения которых раньше требовалась работа специалиста, решаются автоматически и часто без привлечения техподдержки вообще. Чистый КЭНК!&lt;/p&gt;
&lt;p&gt;Скрипт на гитхабе &lt;a href="https://github.com/alexbatishchev/kenk-contacts-watcher"&gt;https://github.com/alexbatishchev/kenk-contacts-watcher&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Слава Роботам!&lt;/p&gt;
</description>
</item>


</channel>
</rss>