Интеграция с Битрикс24 WebHooks [Rest API]

13.06.23

Интеграция - WEB-интеграция

Описание интеграции 1С и Битрикс24 с помощью RestApi и Веб-хуков. Тестировалось на платформе 1С Предприятие версии - 8.3.21.1622 Конфигурация - Любая конфигурация на Базе БСП

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?] Купить один файл
Пример интеграции по управлению задачами в Битрикс24
.cfe 54,34Kb
32
32
1 SM
Скачать Купить за 1 850 руб.

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

Итак, у Битрикс24 есть система Веб-хуков:

1. Входящие - используется для работы с данными вашего Битрикс24 через API. Позволяет отправлять команды описанные в API в Битрикс24.

2. Исходящие - используется для получения информации о событиях, происходящих в вашем Битрикс24. Позволяет получать изменения происходящие в Битрикс24.

Веб-хуки - способ отправки уведомлений пользователю. Пуш уведомления, только в рамках интеграции.

Настройка входящих веб-хуков

Для этого требуется перейти в раздел "Разработчикам" в своем Битрикс



Далее перейти "Другое"




Открыть раздел "Входящий вебхук"






На странице будет предоставлен адрес вызова rest api вида - https://rs24.bitrix24.ru/rest/<id пользователя>/<идентификатор доступа>/. Нажимаем сохранить и копируем нужные данные. Так же можно задать права для полученной интеграции.





Эти данные требуются для подключения к порталу и отправки уведомлений.

Для этого потребуется выполнить примерно такой код:

// Функция - Отправить запрос
//
// Параметры:
//  Метод			 - Строка	 - имя метода который требуется выполнить
//  Параметры		 - Структура	 - Структура параметров для выполнения метода
//  СтрокаЗапроса	 - Строка	 - Строка запроса сгенерированная заранее, если задана, то не будет генерироваться обработчиком
// 
// Возвращаемое значение:
//   Соотвествие - Результат выполнения метода
//
Функция ОтправитьЗапрос(Метод, Параметры, СтрокаЗапроса = Неопределено)
	
    Идентификатор = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПараметрыСеанса.ТекущийПользователь, "Bitrix24_Идентификатор");
	АдресПортала  = "rs24.bitrix24.ru";
	IDПользователя= ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПараметрыСеанса.ТекущийПользователь, "Bitrix24_ID");
	
	Соединение = Новый HTTPСоединение(АдресПортала,,,,,, Новый ЗащищенноеСоединениеOpenSSL); // Создаем защищенное соединение с порталом.
	Если СтрокаЗапроса = Неопределено Тогда
		СтрокаЗапроса = СформироватьАдресЗапроса(Идентификатор, Параметры, Метод, IDПользователя); //Формируем адрес запроса, по стандарту REST API
	КонецЕсли;
							
	Запрос = Новый HTTPЗапрос(СтрокаЗапроса); // Создает HTTP запрос											
	
	Запрос.УстановитьТелоИзСтроки("");
			
	Ответ = Соединение.Получить(Запрос); // Отправляет на обработку серверу и получаем ответ
	СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку(); // Получаем результат выполнения как строку
	ДанныеJSON	 = РаскодироватьJSON(СтрокаОтвета); //Убираем экранирование символов

	Возврат ПрочитатьJSONНаСервере(ДанныеJSON, Истина); // Читаем JSON

КонецФункции

// Функция - Сформировать адрес запроса
//
// Параметры:
//  СтруктураНастроек		 - Структура	 - Структура настроек
//  ДополнительныеПараметры	 - 	 - 
//  Метод					 - Текст	 - Имя вызываемого метода
// 
// Возвращаемое значение:
// Текст  - Сформированный на основе настроек Адрес запроса
//
Функция  СформироватьАдресЗапроса(Идентификатор, ДополнительныеПараметры, Метод, IDПользователя)
	
	АдресЗапроса = "rest/" + IDПользователя + "/" + Идентификатор + "/" + Метод;
	НомерПараметра = 0;
	Для Каждого Настройка Из ДополнительныеПараметры Цикл
		Если НомерПараметра = 0 Тогда
			АдресЗапроса = АдресЗапроса + "?" + Настройка.Ключ+"=" + Настройка.Значение;			
		Иначе     
			АдресЗапроса = АдресЗапроса + "&" + Настройка.Ключ+"=" + Настройка.Значение; //Если параметр 2 и более то нужно использовать &	
		КонецЕсли;
	КонецЦикла;
		
	Возврат АдресЗапроса;
	
КонецФункции


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

На примере изменения поля "Крайний срок"
 

// Процедура - Изменить крайний срок задачи
//
// Параметры:
//  НомерЗадачи	 - Число	 - Номер задачи
//  НоваяДата	 - Дата	 	 - Новая дата крайнего срока
//
Процедура ИзменитьКрайнийСрокЗадачи(НомерЗадачи, НоваяДата, Отказ) Экспорт
	
	Идентификатор = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПараметрыСеанса.ТекущийПользователь, "Bitrix24_Идентификатор");
	IDПользователя= ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПараметрыСеанса.ТекущийПользователь, "Bitrix24_ID");

	Метод = "tasks.task.update"; // метод для обновления полей задачи
	Параметры = Новый Структура("taskId", Формат(НомерЗадачи, "ЧГ=0")); //параметр taskid обязательный, нужно чтобы понять какую задачу изменять
	
	СтрокаЗапроса = СформироватьАдресЗапроса(Идентификатор, Параметры, Метод, IDПользователя); // Генерим запрос пока по стандарту
	
	СтрокаЗапроса =СтрокаЗапроса + "&fields" + "[DEADLINE]=" + ПреобразоватьДату(НоваяДата, Истина); // Тут добавляем параметр fields и прибавляем к нему поле/поля, в данном случае DEADLINE в скобках []. 
                                                                                                     //После знак = и значение. Причем даты нужны в формате ISO 8601, поэтому преобразовываем его с помощью функции.
	
	Результат = ОтправитьЗапрос(Метод, Параметры, СтрокаЗапроса); //Далее отправляем запрос по стандарту.	
	
	ТекстОшибки = Результат.Получить("error_description"); //Тут проверяем результат на ошибку, может не хватить прав.
	Если ЗначениеЗаполнено(ТекстОшибки) Тогда
		ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,,Отказ);
	КонецЕсли;
	
КонецПроцедуры

// Функция - Преобразовать дату
//
// Параметры:
//  ИсхДата		 - Дата	 - Дата которую требуется преобразовать
//  ИСОФормат	 - Булево	 - Нужно преобразовать в ИСО формат, иначе будет декодировано из него.
// 
// Возвращаемое значение:
//   Дата, Неопределено - Преобразованная дата
//
Функция ПреобразоватьДату(ИсхДата , ИСОФормат=Истина)
	
	Если НЕ ЗначениеЗаполнено(ИсхДата) Тогда
      		Возврат Неопределено
	КонецЕсли;
	
    	Если ИСОФормат Тогда
       		Возврат Формат(ИсхДата,"ДФ=yyyy-MM-ddThh:mm:ss");
	Иначе 
       		Возврат XMLЗначение(Тип("Дата"), ИсхДата);
	КонецЕсли 
	
КонецФункции


 

Настройка исходящих веб-хуков

Тут немного замудреннее, особенно когда не знаешь. 

Тем же путем переходим в раздел "Разработчикам" -> "Другое" -> "Исходящий вебхук"




Далее нужно заполнить URL обработчика по следующим правилам:
http://<адрес или имя>:<внешний порт>/<имя публикации>/hs/<Имя http сервиса, у меня это - Bitrix24>/<имя шаблона, у меня это - WebHook>/<имя метода, у меня это - pushPost>/

Итого примерный адрес - http://223.234.43.23:8323/Bitrix24/hs/Bitrix24/WebHook/pushPost/

IP адрес обязательно должен быть общедоступным, иначе Битрикс не достучится до него.

Токен приложения нужно чтобы проверить из какой интеграции пришел веб-хук.



Далее публикуем http сервис вручную или средствами платформы, если http сервис в расширении, то в ручном варианте.





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



Далее выполняем действия, например создаем или изменяем задачу и получаем запрос от битрикс.





Далее уже начинаем работать с телом запроса.

Раскодируем строку, получим данные из события и обработаем их.
 

// Процедура - Обработать событие
//
// Параметры:
//  Событие	 -  Строка	 - Параметры события произошедшего в Битрикс
//
Процедура ОбработатьСобытие(Событие) Экспорт
 
 	СтрокаБезКодировки = РаскодироватьСтроку(Событие , СпособКодированияСтроки.URLВКодировкеURL);	
	СтруктураСобытия   = ПолучитьСобытиеКакСтруктуру(СтрокаБезКодировки);
	
	Событие = "";
	СтруктураСобытия.Свойство("Событие", Событие);
	Если СтруктураСобытия.Событие = "ONTASKUPDATE" Тогда
    	 	ОбновитьЗадачу(СтруктураСобытия.ID);	
	КонецЕсли;  
	 
 КонецПроцедуры
 
// Функция - Получить событие как структуру
//
// Параметры:
//  СтрокаДанных - 	Строка   - Параметры события произошедшего в Битрикс
// 
// Возвращаемое значение:
//   Структура - Структра данных о событии 
//								Событие - Строка  - Тип события в Битрикс
//								ID - Строка - ID объекта события Битрикс
//
Функция ПолучитьСобытиеКакСтруктуру(СтрокаДанных)
	
    //Тут вроде бы JSON должен быть, но прилетает что-то не то, опытным путем сделал через поиск в строке.

	Результат = Новый Структура();
	
	НачалоСобытия = СтрНайти(СтрокаДанных, "event=")+ 6;
	КонецСобытия  =	СтрНайти(СтрокаДанных, "&", НаправлениеПоиска.СНачала, НачалоСобытия);
	Событие		  = Сред(СтрокаДанных, НачалоСобытия, КонецСобытия- НачалоСобытия);
	Результат.Вставить("Событие", Событие);
	//Получаем ID и событие задачи. Далее уже можно развивать на другие события и делать проверки.
	НачалоID 	  = СтрНайти(СтрокаДанных, "[ID]=",, КонецСобытия)+5;
	КонецID		  = СтрНайти(СтрокаДанных, "&",,НачалоID); 
	ID			  = Сред(СтрокаДанных, НачалоID, КонецID - НачалоID);
	Результат.Вставить("ID", ID);	
	
	Возврат Результат;

КонецФункции // ПолучитьСобытиеКакСтруктуру(СтрокаДанных) 

Далее уже можно свободно читать API Битрикс24 и делать что-то свое. 

Ссылка на API - https://www.bitrix24.ru/apps/api.php.

Битрикс24 Интеграция

См. также

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    19021    10    16    

16

Управление взаимоотношениями с клиентами (CRM) WEB-интеграция Анализ продаж Системный администратор Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Подсистема интеграции Amo CRM с 1С: технические требования, порядок работы, возможности, доработки и обновления. Бесплатный период техподдержки - 1 месяц.

60000 руб.

07.05.2019    31886    62    40    

23

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    16773    15    19    

15

WEB-интеграция Программист Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    17009    45    49    

26

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    13383    36    8    

15
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. СаморезикРу 31.08.23 14:20 Сейчас в теме
Что такое Bitrix24_Идентификатор и Bitrix24_ID
2. Luchano37 30 02.09.23 08:35 Сейчас в теме
(1) Это реквизиты у справочника "Пользователи"
Позволяют заполнить следующие поля в адресе запроса:
https://rs24.bitrix24.ru/rest/<id пользователя>/<идентификатор доступа>/.
<id пользователя> = Bitrix24_ID
<идентификатор доступа> = Bitrix24_Идентификатор
3. aleksey2 87 21.11.23 07:43 Сейчас в теме
Bitrix24_ID можно кинуть в контактную информацию с типом другое
Luchano37; +1 Ответить
4. YakZub 03.07.24 15:28 Сейчас в теме
Добрый день. Столкнулся с проблемой, может подскажете.

Для события calendar.event.add выполняю запрос с телом

{
"type": "user",
"ownerId": "11",
"from": "03.07.2024 10:00:00",
"to": "03.07.2024 12:00:00",
"section": 5,
"name": "Событие:"
}

через postman все уходит.

при выполнении запроса из 1с получаю ошибку.

"{"error":"","error_description":"Не задан обязательный параметр \u0022from\u0022 для метода \u0022calendar.event.add\u0022"}"

то есть не заполнена дата. При отлавливании запроса фидлером вижу не все тело, а часть, хотя в загловок передаю

Заголовки.Вставить("Content-Length", СтрДлина(ТелоИзСтроки));

{
"type": "user",
"ownerId": "11",
"from": "03.07.2024 10:00:00",
"to": "03.07.2024 12:00:00",
"section": 5,
"name": "На:"




Сам код

ДатаС	=  "03.07.2024 10:00:00";
	ДатаПо	=  "03.07.2024 12:00:00";
	
	ЗаписьJSON = Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку();
	
	СтруктураДанных = Новый Структура;
	
	СтруктураДанных.Вставить("type",	"user");	
	СтруктураДанных.Вставить("ownerId",	"11");
	СтруктураДанных.Вставить("from",	ДатаС);
	СтруктураДанных.Вставить("to",		ДатаПо); 	
	СтруктураДанных.Вставить("section",	5);                                               
	СтруктураДанных.Вставить("name",	"На:");
	
		
	ЗаписатьJSON(ЗаписьJSON, СтруктураДанных);
	
	ТелоИзСтроки = ЗаписьJSON.Закрыть();

	//https
	АдресРесурса = "rest/***/***/calendar.event.add.json";
	
	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Content-Length",	СтрДлина(ТелоИзСтроки));
	Заголовки.Вставить("Content-type",		"application/json");
	
	HTTPСоединение = Новый HTTPСоединение("***.bitrix24.kz",,,,,,Новый ЗащищенноеСоединениеOpenSSL);
	
	ПакетныйЗапросHTTP	= Новый HTTPЗапрос;
	
	ПакетныйЗапросHTTP.АдресРесурса = АдресРесурса;
	ПакетныйЗапросHTTP.Заголовки	= Заголовки;
	
	ПакетныйЗапросHTTP.УстановитьТелоИзСтроки(ТелоИзСтроки,,);
	ПакетныйОтветHTTP = HTTPСоединение.ОтправитьДляОбработки(ПакетныйЗапросHTTP);
	Сообщить(ПакетныйОтветHTTP.ПолучитьТелоКакСтроку());   
	//https
Показать
5. Светлый ум 407 17.07.24 06:37 Сейчас в теме
Оставьте свое сообщение