Схема интеграции
- Widget - Размещен на стороне amoCRM
- Proxy-srv - размещается как на linux так и на windows сервере, откуда имеет доступ к 1С
- Proxy-web - для конфигурирования proxy-srv, просмотр логов взаимодействий с api и 1С
- Расширение 1С - web-сервис
Модуль интеграции AmoCRM и 1С
В web-интерфейсе AmoCRM в разделе «настройки» далее «Установленные интеграции» добавлена новая интеграция «Интеграция 1С». См скрин:
Как происходит взаимодействие AmoCRM и 1С:
• Пользователь создает новый "лид" или выгружает текущий
• После выгрузки в 1С создается документ «Заявка»
• Для отражения суммы оплаты от клиента нужно создать документ «Оказание услуг» в 1С, на основании «Заявки»
Разберем схему более подробно на примере.
Создаем новый лид в crm, заполняем все необходимые реквизиты.
В текущий момент в карточке лида добавлены следующие реквизиты:
- Дата записи к врачу
- Врач
- Время записи
- ФИО клиента
- Сумма1С
Что показано на рисунке ниже:
Для того, чтобы получить список врачей и свободное время на определенную дату, необходимо у реквизита «Дата записи к врачу» по иконке календаря выбрать нужную дату. Дата может быть как прошлое/текущее/будущее.
Из выбранной даты собирается список врачей работающих в этот день и их свободного времени.
Для примера возьмем дату 22.12.2021, через api 1С будет получен список врачей и свободное время для записи.
Скриншот ниже.
Выберем из списка врача «Ефимова Е.В.», после этого будет построен список свободного времени выбранного врача.
Обратите внимание: поля «Врач» и «Время записи» нельзя редактировать! Сделано это специально, чтобы в 1С попадали корректные данные.
ФИО клиента можно заполнить, а можно оставить пустым. Дальше будет показана разница между пустым полем и заполненным.
После того, как проделали все действия, заполнили реквизиты «Дата записи к врачу», «Врач» и «Время записи» - нажимаем на кнопку «Зарегистрировать запись к врачу в 1С».
На этом этапе данных достаточно чтоб отразить документ в учетной системе 1С.
При нажатии данной кнопки, данные отправляются в api 1С, в ответ приходит сообщение от 1С с номером созданного документа.
Был создан документ Заявка № 219.
В результате выгрузки из amoCRM в 1С создается документ «Заявка», в которой заполняются все необходимые реквизиты:
- Клиент
- Врач
- Номер AmoCRM
- Номенклатура
Если в web-интерфейсе было заполнено «ФИО Клиента», то в 1С будет сделан поиск по «Наименованию» клиента, если ничего не найдено, то будет создан новый клиент. Если реквизит не заполнен, будет выбран клиент по умолчанию - «Клиент из AmoCRM».
Реквизит «Номер AmoCRM» заполняется id лида из web-интерфейса, он необходим для выгрузки суммы по оплате от клиента.
Следующим этапом взаимодействия 1С и AmoCRM будет выгрузка суммы оплаты от клиента.
На основании документа «Заявка», у которой заполнен «Номер AmoCRM», необходимо в 1С создать документ «Оказание услуг». Если номера в документе отсутствует, обмен не будет происходить т. к. 1С не знает, на какой лид выгрузить сумму.
Скриншот ниже:
Пример созданного документа ниже
После того как документ заполнен корректно, проводим его.
В момент проведения документа «Оказание услуг» автоматически происходит выгрузка суммы в AmoCRM, при условии, если у этого документа есть документ основание «Заявка» и у заявки заполнен номер id Лида.
В 1С указали сумму «оказания услуг» в размере 150 рублей, эта же сумма отразилась в лиде.
При каждом проведении документа «Оказание услуг» будет автоматически переноситься сумма в лид!
Результат показан на скриншоте ниже.
Описание получения данных о врачах и их времени из 1С.
В 1С установкой даты и времени приема врача занимается документ «Установка графиков работ». На скриншоте ниже виден пример документа.
Занятое время врача отражается документом «Заявка».
Раздел для администратора
Widget
Widget полностью написан на JavaScript, занимается логикой расстановки элементов в интерфейсе, валидации данных и взаимодействие с proxy-srv.
Как только пользователь открывает карточку лида, widget генерирует разметку на странице и вешает события на элементы «Дата записи», «Список врачей», «Время записи» и кнопку «Зарегистрировать запись к врачу».
Как только пользователь сгенерировал одно из перечисленных событий, отправляется запрос на proxy-srv, после чего происходит его обработка.
При выборе «Дата записи» собирается json следующего вида
- Date – то, что выбрал пользователь
- Token – это token авторизации на proxy-srv
После получения ответа от proxy-srv , обработчик js заполняет данные врачей и свободного времени записи.
После записи лида ему присваивается id, с этим идентификатором будет создан документ в 1С.
Пример json для создания документа.
- Token – секретный ключ
- Date – дата записи к врачу
- Doctor – Врач
- Time – Время записи к врачу
- Customer – Клиент
- Gender – Пол клиента
- DateofBirth – дата рождения клиента
Обязательные поля: token, date, doctor, time.
Если получен успешный ответ, в alert присвоится номер документа, если произошла какая-то ошибка на сервере 1С или на proxy, то в результате будет показано содержимое ошибки.
Пример успешного создания документа.
Расширение 1С web
В базе 1С было создано расширение, которое позволяет, взаимодействует с web-сервисом без доработки основной конфигурации.
Структура расширения
Экспортирована подсистема «Администрирование» для работы со справочником «TokenAmoCRM»
Добавленная роль «Web_ОсновнаяРоль» имеет полные права на все объекты расширения.
Сервис AmoCRM занимается обслуживанием входящих GET, POST запросов
- TestRequest – принимает GET-запрос и возвращает «ок» с кодом 200
- GetSetData – занимается приемом POST-запросов. В текущей версии занимается обработкой данных «врач», «свободное время» и созданием/обновлением документа «Заявка».
Справочник TokenAmoCRM
Справочник необходим для работы с API amoCRM без посредников. Когда происходит проведения документа «Оказание услуг», вызывается процедура отправки суммы оплаты от клиента в лид. Процедура, которая расположена в модуле менеджера справочника.
Справочник предназначен для хранения одной записи, взаимодействие с элементом напрямую не происходит.
Для того, чтобы открыть «основную настройку», нужно нажать кнопку «Информация о token».
В шапке имеются 3 кнопки:
- Загрузить token – в случаях, когда переопубликовывается или обновлен widget, в этом случае меняется ключи: client id, client secret, code
- Обновить token – так как token действует 24 часа, а дальше он становиться не актуальным, нужно воспользоваться кнопкой «обновить». В низу формы есть дата и время последнего обновления token. При каждом успешном обновлении, дата смещается на момент загрузки.
- Сохранить token – сохраняет внесенные изменения.
Так выглядят данные в widgetе:
Для автоматического обновления token средствами 1С, была экспортирована процедура «ВыполнениеРегламентногоЗаданияРасширения» из регламентного задания «УниверсальноеРегламентноеЗадание».
Каждые 24 часа запускается процедура обновления токена.
Proxy server
Решаемые проблемы с помощью данного Proxy server приложения:
- трафик между amoCRM и Proxy server зашифрован с помощью самоподписанного сертификата
- ограничено прямое взаимодействие в 1С из внешнего интернета.
Proxy server делится на две части api и web-интерфейс.
1) Web-интерфейс необходим для настройки взаимодействия с 1С, просмотр логов обработанных соединений.
После авторизации на сайте доступны 3 раздела для просмотра и управления:
- logs
- users
- 1c settings
Раздел logs
Данный раздел выводит логи POST-запросов, время когда он был сделан, на какой url он был отправлен, данные которые пришли и статус обработки.
На одной странице логов содержится 10 строк, по этой причине логи разделены на страницы.
Раздел users
Форма показывает пользователей заведенных в БД, которые могут ходить в веб-интерфейс. Сверху таблицы пользователей есть форма для создания нового пользователя.
Заполняем логин, пароль и подтверждение пароля, если валидация прошла успешно, то пользователь заведен. Автоматически страничка перезагрузится, и в таблице появится созданный пользователь.
См скрин.
Раздел 1С settings.
В этом разделе выводится настройка с именем «1С». По умолчанию основные параметры заполняются при создании БД, но в этой форме их можно переопределить.
Поля, приведенные на скрине, понятные, объяснения не требуют. Обратите внимание на поле URL, сверху указано, как оно должно быть заполнено!
2) Реализация API
Реализованы два метода
- API/get_doctor_time
- API/cretate_document
Каждый из этих обработчиков проверяет token. Если он не равен эталону, хранящемуся в БД, то такой запрос не будет обрабатываться.
Каждый запрос, прошедший проверку, записывается в таблицу logs, для отслеживания проксирования запросов.
get_doctor_time — обрабатывает и пересылает post-запрос в 1С для получения списка врачей и свободного времени для записи
cretate_document - обрабатывает и пересылает post для создания документа «Заявка».
Если в теле post-запроса не будут заполнены необходимые параметры, вернется ошибка «error format Json», если токен не верный, то «Invalid token».
В приложение реализована следующая структура БД
- Logs — таблица содержащая запросы от amoCRM
- Users – список пользователей кому можно работать с web-интерфейсом приложения
- Token — токен для прохождения проверки post-запросов
- Settings — хранится настройка подключения в 1С
- TokenSession — при успешной авторизации в web-интерфейсе создается токен, который присваивается пользователю. Токен действует 60 дней.
Для корректной работы приложения нужны стартовые настройки, этим занимается процедура initDefaultSettings. Она проверяет, есть ли минимально-необходимые настройки для функционирования приложения:
- Users — root пользователь
- Token — токен, для взаимодействие с amoCRM
- Settings — для подключения к 1С
Если какой-либо из этих настроек нет в БД, то функция создаст их и заполнит значениями по умолчанию, которые присутствуют в коде.
Файл БД расположен рядом с приложением и имеет следующее наименование «DB.db».
В случае его отсутствия запустится процедура создания новой БД, после этого будет запуск initDefaultSettings.