REST API Битрикс24 позволяет приложениям не только добавлять и модифицировать данные, но и автоматически реагировать на изменение данных при помощи обработки событий REST.

Это открывает широкие возможности по синхронизации данных с внешней системой, различным автоматическим проверкам согласованности информации, автозапуску сценариев в приложениях и многое другое.

В этом уроке мы научимся работать с событиями, реализовав простую задачу – автоформатирование ФИО в контактах CRM, чтобы они гарантировано начинались с заглавных букв.

События REST

7 мин

Зайдем в кабинет разработчика и создадим новое приложение, как мы это делали в предыдущем уроке.

Нажмем кнопку «Добавить приложение». Выберем, как и ранее, основной регион для будущей публикации решения. В карточке приложения нажмем на кнопку «Создать» и укажем тип «Использовать REST API». Убедимся, что скоуп CRM добавлен в список разделов.

Скачайте пример, прикрепленный к уроку, и загрузите его на свой сервер так же, как мы это делали на уроках, посвященным локальным интеграциям.

Вставьте в карточке версии пути к выгруженному на сервер приложению, как мы это делали ранее. Скопируйте значения из полей client_id, client_secret и вставьте их в соответствующие константы в файле settings.php.

Доступность из внешней сети

Очень важно, чтобы адрес выгруженного на сервер примера был доступен из внешней сети. Никаких localhost, никаких самоподписанных SSL-сертификатов и так далее. Проверяйте доступность вашего URL какими-то сторонними сервисами, не уповайте, пожалуйста, на то, что именно в вашем браузере этот адрес успешно открывается.

Посмотрим код примера, и начнем с install.php. Здесь вызывается уже известный нам из предыдущих уроков метод installApp, который сохранит полученные токены авторизации в файл для дальнейшего использования.

И здесь же мы сразу воспользуемся этими токенами для выполнения метода event.bind. В нашем примере используются только три параметра:

  • EVENT. Название события, которое вызывает обработчик. В нашем случае, это событие onCrmContactUpdate
  • HANDLER. Ссылка на обработчик, в который будет приходить POST-запрос от Битрикс24 с данными о произошедшем событии
  • EVENT_TYPE. Тип события, который может быть online, как в нашем примере, или offline.

Полезно

Offline события не вызывают обработчик приложения, но складируются в специальную очередь, доступную для приложений. Об этом варианте работы с событиями мы расскажем в другом уроке.

Здесь же в примере мы регистрируем сразу и обработчик второго события, а именно onCrmContactAdd. В результате, наш обработчик будет вызываться и при добавлении нового контакта в CRM, и при изменении существующего.

Вернемся в кабинет разработчика.

Текущая страница позволит установить приложение на наш Битрикс24 и протестировать его до публикации в Битрикс24.Маркет.

Укажем адрес своего Битрикс24, на котором мы являемся администратором и нажмем Установить.

Произойдет редирект на портал и откроется интерфейс установки приложения. Когда мы опубликуем приложение в каталоге, заполнив описания и прикрепив скриншоты, установка будет выглядеть эффектнее, но сейчас нам нужно просто убедиться в технической работоспособности приложения.

Битрикс24 автоматически откроет приложение после завершения установки, поскольку у нашего приложения есть пользовательский интерфейс.

Полезно

Если основной функционал вашего приложения – это обработчики событий, которые работают незаметно для конечного пользователя, то основной URL приложения вы можете использовать для сценария онбординга, рассказывающего пользователю о функционале приложения и содержащего какие-то необходимые этапы настройки.

Перейдем в контакты CRM, и добавим новый контакт, указав значения в полях ФИО в самом разном виде. Обновим список и обнаружим, что обработчик из нашего приложения сработал, поменяв формат введенного имени.

Давайте посмотрим, как работает эта магия.

Для начала посмотрим, что именно передает Битрикс24 на наш обработчик в своем POST-запросе. Это массив очень простой структуры.

Мы видим, какое именно событие инициировало вызов обработчика и в нашем случае, это добавление контакта. Сюда же Битрикс24 передает идентификатор добавленного контакта, который мы сможем использовать для получения подробной информации. И, наконец, в событие приходят данные авторизации и информация о портале, на котором произошло событие.

Эти данные можно использовать для вызовов REST из приложения. Однако, авторизационные данные не всегда приходят в обработчик события. Не всегда изменения данных происходят в результата вмешательства конкретного пользователя, а значит, Битрикс24 не всегда может понять, чьи токены авторизации он должен передать в обработчик события.

Поэтому в реальном тиражном приложении нужно обеспечивать сохранение и продление токенов авторизации, полученных при установке приложения на конкретный Битрикс24. В этом случае вы гарантировано сможете ими воспользоваться в обработчике события, даже если авторизационные данные от Битрикс24 в POST-запросе отсутствуют.

Кроме того, тиражное приложение, опубликованное в Битрикс24.Маркет, может одновременно использоваться на большом количестве разных порталов, а значит для очередного вызова REST запроса приложение должно указывать, к какому конкретно порталу делается вызов прямо сейчас.

Полезно

Тема правильной работы с многими порталами в рамках одного приложения раскрыта в отдельном уроке, а пока мы посмотрим, что происходит в обработчике события.

В начале мы проверяем, что обработчик вызван в результате нужных нам событий.

Далее, мы вызываем метод crm.contact.get для получения полной информации о добавленном или измененном контакте, взяв его идентификатор из POST-запроса.

Следующим шагом, мы преобразуем поля, содержащий имя, фамилию и отчество в нужный нам регистр.

И наконец, мы проверяем, отличаются ли преобразованные нами значения от полученных в текущем контакте. Это очень важная проверка, которая позволит нам избежать зацикливания событий. Ведь когда мы обновляем данные контакта, вызвав метод crm.contact.update, подставив туда преобразованные нами значения, то в результате изменений, Битрикс24 снова инициирует событие onCrmContactUpdate и так далее, по кругу. Только мы в своем коде можем понять, что дальнейшие преобразования не нужны и прервать этот порочный круг.

Мы научились работать с событиями в Битрикс24. Зная, что REST API предоставляет вам сотни различных типов событий, которые описаны в документации, уверен, вы согласитесь, что это очень удобный механизм для многих сценариев в ваших приложениях.

Список ресурсов

Материалы уроку: