Содержание:
Компания Another World обратилась с задачей стабилизировать интеграцию с amoCRM и обеспечить постоянный приход заявок с сайта. Все усложнялось тем, что интеграция должна работать для более чем 50 городов, каждый из которых использует свою собственную CRM. Основная проблема заключалась в нестабильной работе токенов для передачи данных между формами на сайте и amoCRM. Токены действовали 86400 секунд, то есть ровно сутки, что требовало их частого обновления и приводило к сбоям и потерям заявок. Множество разработчиков отказывались от этого проекта из-за сложного сайта с множеством «костылей» и самописной админки.
У клиента Another World есть команда, которая обслуживает amoCRM, а разработчикам Webit предстояло сделать всю работу на стороне сайта. У второй команды есть модули для подключения к сайту, а наша — должна брать доступы вручную: данные из CRM, ключи и ID для интеграции.
Для регулярного обновления токенов использовалась крон-система периодического запуска скриптов на сервере. Крон-задачи часто сталкивались с ошибками на облачном сервере, что приводило к несвоевременному обновлению токенов и, как следствие, к сбоям в передаче данных. Скрипты, запускаемые кроном, иногда не запускались из-за ошибок на сервере или конфликтов с другими задачами. Это приводило к тому, что токены не обновлялись вовремя, и города временно или насовсем, если скрипт сильно сбивался, теряли связь с amoCRM.
Проблемы возникали по самым разным причинам, например, каждые несколько дней amoCRM баговал и в ответ на токен отдавал белую пустую страницу без данных. Однажды эта ошибка привела к тому, что в одночасье слетели все города. На следующий день несколько часов вручную подключали города и через 2 дня снова произошла та же ошибка. Произошло это по причине того, что тогда использовалась стандартная библиотека, которая не проверяла пустой ответ или нет.
Разработали более надежную систему крон-задач с дополнительными проверками и уведомлениями о сбоях. Если задача не выполнялась, система автоматически уведомляла администратора и запускала резервный процесс обновления токенов.
У amoCRM существует официальная PHP-библиотека, которая крайне запутана и периодически запрашивала обновления токенов и не перезаписывала их в базе при корректных настройках, что ломало функционал. Приходилось для данных городов обновлять токены вручную. Через множество итераций дебага выяснилось, что официальный PHP-клиент запрашивал новый токен при каждом действии, например, при отправке данных клиента в amoCRM и не при каждом действии записывал его в базу. Такие запросы могли происходить несколько раз в секунду и корректный токен терялся, т.к. соседний запрос происходил быстрее и затирал актуальный токен.
В феврале 2024 года amoCRM выпустила обновление, позволяющее создавать долгосрочные токены для внешних и приватных интеграций (до 5 лет). Полностью переписали логику работы сайта, чтобы использовать новые долгосрочные токены, что исключило необходимость их частого обновления.
В один момент для части городов перестал работать даже «официальный» пример кода из документации. После переписывания функционала «без библиотек», множества обращений в техподдержку, после перехода на «долгосрочные токены» проблема решилась за несколько дней.
Разработали удобную админ-панель, которая позволила быстро и легко подключать новые города. Теперь процесс добавления новых городов занимает минимальное время и не требует ручного вмешательства для каждого города. Также внедрили ID-поля для ввода даты рождения во всех городах.
Интегрировали формы с анкетами и согласием на обработку персональных данных, а также данные о бронировании. Для некоторых городов мы добавляли уникальные поля для передачи, например, о районе. Теперь для того, чтобы информация поступала в CRM-систему, разработчику нужно проделывать меньше действий.
После внедрения новых долгосрочных токенов и админ-панели команда техподдержки Webit: