Интеграция сторонних CRM-систем с 1С — задача, с которой рано или поздно сталкивается каждый разработчик. Часто возникает необходимость «слушать» события в AmoCRM (например, изменение статуса сделки или создание контрагента) и мгновенно реагировать на них в своей учетной системе. Рассмотрим подробно, как организовать этот процесс с помощью механизма HTTP-сервисов.
Когда мы говорим о webhook, мы подразумеваем, что AmoCRM будет отправлять POST-запрос с данными (в формате JSON) на ваш публичный URL. Чтобы 1С смогла эти данные «увидеть» и обработать, она должна выступить в роли веб-сервера. Это значит, что нам нужно пройти путь от подготовки инфраструктуры до написания кода обработки запроса.
Поскольку 1С по своей природе — это десктопное приложение, для работы с веб-запросами её необходимо «выставить» в сеть. Для этого мы публикуем базу на веб-сервере (Apache или IIS).
Конфигуратор вашей базы.Администрирование -> Публикация на веб-сервере./AmoIntegration).Публиковать HTTP-сервисы.http://ваш-домен-или-ip/AmoIntegration/hs/.Важно: Ваш сервер должен быть доступен из интернета. Если он находится в локальной сети, настройте проброс портов (NAT) на роутере.
После публикации базы приступаем к созданию объекта HTTP-сервис в конфигурации:
HTTP-сервисы, создайте новый сервис (назовем его, например, AmoWebhooks).Корневой URL, например, amo.Шаблон URL с путем /events.POST. Именно этот метод будет принимать данные от AmoCRM.Теперь самое интересное — логика обработки входящего JSON. В модуле метода POST мы должны считать данные, которые прислала CRM.
Разберем пример кода, который принимает тело запроса и преобразует его в структуру 1С:
Функция PostМетод(Запрос)
// Получаем тело запроса как строку
СтрокаJSON = Запрос.ПолучитьТелоКакСтроку();
// Записываем полученные данные в лог для отладки
ЗаписьТекста = Новый ЗаписьТекста("C:\Temp\webhook_log.txt", КодировкаТекста.UTF8, , Истина);
ЗаписьТекста.ЗаписатьСтроку(СтрокаJSON);
ЗаписьТекста.Закрыть();
// Преобразуем JSON в структуру 1С
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
ДанныеСтруктура = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
// Здесь размещаем логику работы с данными
// Например: СоздатьСделку(ДанныеСтруктура);
Возврат Новый HTTPСервисОтвет(200);
КонецФункции
Работая с веб-сервисами, мы должны учитывать несколько критических моментов:
PostМетод. Лучше просто сохранить JSON в РегистрСведений или ОчередьСообщений, а затем обработать записи регламентным заданием. Это позволит быстро вернуть ответ 200 OK серверу AmoCRM.JSON от CRM изменилась или оказалась некорректной.Помните, что настройка webhook — это процесс, требующий внимательности. Сначала протестируйте отправку POST-запросов через инструменты вроде Postman, чтобы убедиться, что ваш HTTP-сервис отвечает, и только потом подключайте реальную интеграцию с AmoCRM.