[{"data":1,"prerenderedAt":264},["ShallowReactive",2],{"projects":3,"mdc-ya36qa-key":211,"mdc-ehaqgc-key":224,"mdc--k6xhja-key":233},[4,89,145],{"id":5,"title":6,"accordion":7,"allow_git":26,"description":27,"extend":28,"extension":74,"fill":75,"git":76,"img":77,"meta":78,"stem":79,"theme":80,"__hash__":88},"projects/projects/1_rdesk_amo_sync.yml","Синхронизация AmoCRM - СПК Здравница",{"title":8,"items":9},"Проблемы и их решения",[10,14,18,22],{"label":11,"icon":12,"content":13},"Уникальный lead_id","i-lucide-fingerprint-pattern","**«СПК Здравница»** передаёт данные с уникальным **lead_id**.\nВ тестовом домене **AmoCRM** сделок с такими **lead_id** не существует, поэтому данные **не могут** быть привязаны.\n\nДля этого реализован **режим подмены lead_id** :\n- ищется сделка с названием `ID_\u003Clead_id>` ;\n- если сделка найдена — во входящийх данных её **lead_id подменяется**  на реальный **lead_id** ;\n- если сделка не найдена — предварительно создаётся сделка с названием `ID_\u003Clead_id>` , после чего выполняется подмена **lead_id** во входящих данных.\n\nЭто позволило запускать сервис параллельно с *prod*-интеграцией и тестировать его на реальных данных.\n",{"label":15,"icon":16,"content":17},"Перенаправление трафика для разработки","i-lucide-network","**API**, предоставленный **«СПК Здравница»** , не соответствовал фактическому поведению.\n\nНа тот момент уже существовал **PHP**-сервис, реализующий часть функционала и работающий с **prod**-доменом **AmoCRM**. Остановить его или изменить адрес отправки данных из AmoCRM было невозможно.\n\n\nВ связи с этим был реализован ***PHP**-скрипт*, дублирующий входящий трафик на ПК разработчика.\n\nВ дальнейшем данное решение было перенесено на уровень **Nginx**, что позволило включать зеркалирование трафика для тестирования в «боевых» условиях без остановки **prod**-сервиса.\n",{"label":19,"icon":20,"content":21},"HotReload","i-lucide-refresh-cw","Для разработки с **Hot Reload** использовался плагин, который проксировал собранный код с ПК разработчика в **AmoCRM**.\nБыл настроен **Webpack** и выполнен проброс портов.\n",{"label":23,"icon":24,"content":25},"Устаревшая библиотека","i-lucide-clock-arrow-down","Для ускорения разработки была использована готовая **Python**-библиотека *AmoCRM v2*. В процессе работы выяснилось, что библиотека не поддерживается и часть функционала работает некорректно.\nПроблема решена через патчинг библиотеки через *Monkey path*.\n",true,"Плагин для SaaS AmoCRM для интеграции с СПК Здравница, реализущий двухсторонюю передачу данных. Решение выполненно в виде TS приложения для AmoCRM, реализующим отправку и визуализацию данных; Серверная часть выполненна в виде podа из двух контейнеров: nginx для проксирования и разработанный pythone сервер, реализующий получение, обработку и передачу данных в AmoCRM через 2.0Auth.",{"title":29,"components":30},"Описание компонентов",[31,41,59],{"title":32,"description":33,"icon":34,"badges":35},"Nginx","(*OpenResty*) Обратный прокси с возможностью зеркалирования пакетов","i-simple-icons-nginx",[36,39],{"color":37,"label":38},"blue","lua",{"color":37,"label":40},"docker",{"title":42,"description":43,"icon":44,"badges":45},"Плагин AmoCRM","- визуализация данных;\n- передача данных на *localhost*;\n- *Hot Reload* для разработки;\n- сборка *Webpack* под формат плагинов **AmoCRM**.\n","i-simple-icons-typescript",[46,49,52,54,57],{"color":47,"label":48},"white","TypeScript",{"color":50,"label":51},"red","HTML",{"color":37,"label":53},"CSS",{"color":55,"label":56},"green","JinJa",{"color":37,"label":58},"Webpack",{"title":60,"description":61,"icon":62,"badges":63},"Python - сервис","*Двух-поточный* сервис, принимающий данные из **Здравницы** и отправляющий обработанные данные в **AmoCRM** через *OAuth2.0* авторизацию.\n\nПотоки:\n1. **FastAPI** (*асинхронный*):\n- принимает данные с сервера **Здравницы**\n- отправляет данные в очередь.\n2. **Worker**:\n- аутентификация (*OAuth 2.0*);\n- трансформация данных из очереди;\n- передача данных в **AmoCRM**.\n","i-simple-icons-python",[64,66,69,70,72],{"color":55,"label":65},"PyDantic",{"color":67,"label":68},"yellow","poetry",{"color":37,"label":40},{"color":67,"label":71},"FastAPI",{"color":37,"label":73},"HTTPX","yml",null,"https://github.com/dyuzha/amo-services","/images/amo-sync4.png",{},"projects/1_rdesk_amo_sync",{"green":81,"blue":82,"yellow":83,"red":84,"white":85,"black":86,"primary":87,"secondary":86},"#6DBD7E","#7DCAE0","#F4BB69","#DA7071","#F0F2F1","#252A37","#374B5E","xdRNokILGf6z_a5AU-Bcb_7ytxfFiKQ5CSd9QUy24nw",{"id":90,"title":91,"accordion":92,"allow_git":26,"description":107,"extend":108,"extension":74,"fill":75,"git":139,"img":140,"meta":141,"stem":142,"theme":143,"__hash__":144},"projects/projects/2_service-bot.yml","Сервис бот.",{"title":93,"items":94},"Проблемы которые решает бот и особенности реализации",[95,99,103],{"label":96,"icon":97,"content":98},"Не структурированные заявки","i-lucide-form","Пользователи не проставляют категории и подробно не описывают проблематику. Создавая заявку через данный сервис, пользователь отвечает на ряд простых вопросов, с выбором варианта ответа, после чего, **категория** выставляется автоматически.\nТакже, в конфигурационном файле, можно настроить минимальную длину описания заявки, вынуждая пользователя, потратить больше букв...\n",{"label":100,"icon":101,"content":102},"Авторизация, только для пользователей комании","i-lucide-key-round","Вместо ручного ввода *telegram-id* каждого пользователя администратором реализована полноценная *авторизация* по корпоративной почте.\n",{"label":104,"icon":105,"content":106},"Использование вне корпоративной сети","i-lucide-globe","*Telegram*, в отличии от **Service desk** доступен вне корпоративной сети, что позволяет создавать заявки из **любой точки мира**.\n","Телеграмм бот для взаимодействия с Service Desk - системы учета заявок.\nПозволяет создавать и просматривать запросы и инциденты пользователей через интерфейс бота.\n",{"title":109,"components":110},"Интеграции",[111,117,124,131],{"title":112,"description":113,"icon":114,"badges":115},"IMAP","Протокол IMAP используется для авторизации пользователя по почте.","i-lucide-mail",[116],{"color":47,"label":112},{"title":118,"description":119,"icon":120,"badges":121},"DB","SQLite - хранит соответствие Почта : telegram-id : ldap-account\n","i-lucide-database-zap",[122],{"color":47,"label":123},"SQLite",{"title":125,"description":126,"icon":127,"badges":128},"GLPI","Взаимодействие с GLPI service-desk осуществляется через REST-API.\n","i-lucide-headset",[129],{"color":47,"label":130},"REST",{"title":132,"description":133,"icon":134,"badges":135},"LDAP","Используется для проверки существования почты в домене. Данная интеграция была добавлена для дальнейшего маштабирования (Предоставление вариантов ответа на основе групп пользователя).\n\nТак как был реализован FastAPI сервер подключенный к LDAP. TG-бот использует его интерфейс для взаимодействия с LDAP.\n\nРешение раздуто и не имело целесообразности, в следствии чего, в новых версиях, LDAP не используется, проверка почты осуществляется через GLPI-API.\n","i-lucide-folder-input",[136,137],{"color":47,"label":132},{"color":47,"label":138},"Fast-API","https://github.com/dyuzha/glpi_bot","/images/service-bot.png",{},"projects/2_service-bot",{"green":81,"blue":82,"yellow":83,"red":84,"white":85,"black":86,"primary":87,"secondary":86},"07DEUDZDetgHn9FQs8nof5KzPvG_O3QoSciHMZUHZZ8",{"id":146,"title":147,"accordion":148,"allow_git":160,"description":161,"extend":162,"extension":74,"fill":201,"git":139,"img":202,"meta":203,"stem":204,"theme":205,"__hash__":210},"projects/projects/3_mellland.yml","Mellow landing page.",{"title":149,"items":150},"Преимущества данного решения",[151,155],{"label":152,"icon":153,"content":154},"Сайт, который дышит с вами в ритме правок.","i-lucide-leaf","Изменение в коде — не повод ждать следующей версии. Оно сразу оказывается на stage-стенде. Заказчик смотрит, тестирует, комментирует. Правка принимается или уточняется — и снова уходит в стенд без простоев.\nПрозрачный процесс, живое вовлечение заказчика, предсказуемый финальный результат. Без долгих согласований и сюрпризов на приёмке.\n",{"label":156,"icon":157,"content":158,"Ansible-роль позволяет одним движением развернуть сайт на любом сервере - настроить firewall, установить необходимые пакеты, развернуть nginx, выпустить сертификаты, настроить безопасный доступ, подключить к системе Ci-Cd":159},"Использование современных технологий","i-lucide-cpu","Современные фреймворки позволяют сделать легкий и быстрый сайт, не требующий большого времени прогрузки в браузере, а минимальность кода, делает сайт поддерживаемым через долгие годы.\nВерсионность git дает возможность фиксации изменинй и быстрого отката к предыдушим релизам.\nDocker контейнеризация обеспечивает предсказуемое поведение на любом сервере.\n",{" Совокупное умелое использование перечисленных выше технологий, делают продукт надежным, поддерживаемым и маштабируемым":75},false,"Вебсайт для психолога в пастельных *тонах*.\n\n[Записывайтесь на консультацию](https://safronova.help)\n",{"title":163,"components":164},"Технологический стек",[165,178,184,190],{"title":166,"description":167,"icon":168,"badges":169},"Vue + Nuxt","Основные фреймворки использованные для реализации сайта","i-lucide-code",[170,172,174,176],{"color":55,"label":171},"Nuxt",{"color":37,"label":173},"vue",{"color":37,"label":175},"html",{"color":47,"label":177},"css",{"title":179,"description":180,"icon":181,"badges":182},"Figma","Отрисовка логотипа, декоративных элементов\n","i-lucide-paintbrush",[183],{"color":67,"label":179},{"title":185,"description":186,"icon":187,"badges":188},"Gitlab-ci","Оперативное и бесшовное  обновление *stage* и *prod* сред. Позволяет оперативно получить обратную связь от заказчика на этапе разработки, а также произвести обновление *prod* среды.\n","i-lucide-gitlab",[189],{"color":67,"label":185},{"title":191,"description":192,"icon":193,"badges":194},"Ansible, Docker, Git","Автоматизация, верисонность, идемпотентность, контейнеризация. Залог стабильности, безопастности и предсказуемого результата.\n","i-lucide-wand-sparkles",[195,197,199],{"color":50,"label":196},"Ansible",{"color":37,"label":198},"Docker",{"color":67,"label":200},"Git","#2C3842","/images/mellland.jpg",{},"projects/3_mellland",{"green":206,"blue":207,"yellow":208,"red":209,"white":85,"black":86,"primary":87,"secondary":86},"#c7c3b0","#86a3b7","#d9a88f","#d48698","NSk3jzTEjnuQZgg-ccBVoaRfuHAWG2B1W2xRjYfXA_A",{"data":212,"body":213},{},{"type":214,"children":215},"root",[216],{"type":217,"tag":218,"props":219,"children":220},"element","p",{},[221],{"type":222,"value":223},"text","Плагин для SaaS AmoCRM для интеграции с СПК Здравница, реализущий двухсторонюю передачу данных. Реше...",{"data":225,"body":226},{},{"type":214,"children":227},[228],{"type":217,"tag":218,"props":229,"children":230},{},[231],{"type":222,"value":232},"Телеграмм бот для взаимодействия с Service Desk - системы учета заявок.\nПозволяет создавать и просма...",{"data":234,"body":235},{},{"type":214,"children":236},[237,250],{"type":217,"tag":218,"props":238,"children":239},{},[240,242,248],{"type":222,"value":241},"Вебсайт для психолога в пастельных ",{"type":217,"tag":243,"props":244,"children":245},"em",{},[246],{"type":222,"value":247},"тонах",{"type":222,"value":249},".",{"type":217,"tag":218,"props":251,"children":252},{},[253,262],{"type":217,"tag":254,"props":255,"children":259},"a",{"href":256,"rel":257},"https://safronova.help",[258],"nofollow",[260],{"type":222,"value":261},"Записывайтесь на консультацию",{"type":222,"value":263},"...",1776543757558]