Как мы запилили в АЙТАТ.РФ обработку-бота, чтобы ускорить отгрузку в 2 раза или Реальный опыт внедрения нового механизма "Трансляция событий" от 1С-Коннект

24.06.20

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

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

Всё описанное ниже сделано на 1С УПП 1.3 + CRM, редакция 1.4, но всё это можно реализовать в любой конфигурации.

 

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

 

Трансляция событий представляет собой механизм, дополняющий основные команды по манипулированию данными, и предоставляющий информирование об изменении/добавлении данных на стороне 1С-Коннект, внешнему пользователю API (Документация "Трансляция событий").

 

Задача

У нас была задача, где надо было автоматизировать работу менеджера, которая заключалась в том, чтобы при получении определенных электронных писем об оплате создавать обращение в 1С-Коннекте в свободную линию поддержки (ЛП) специалиста, что клиент всё оплатил и нужно отгрузить товар. Всё это контролировал, ответственный за это дело менеджер, искал свободную ЛП и писал туда заявку менеджеру. Почему мы использовали чат вместо «тикетов»? В чате менеджеры могут писать доп. информацию и ввести переписку по текущей задаче или же смотреть историю переписки и обращении.

 

Разработка решения задачи.

Сначала для решения этой задачи была разработана обработка, которая после запуска должна была каждые 15 минут обрабатывать электронные письма и писать сообщение в 1С-Коннект. Работала обработка через Agent API (Что такое Agent API и его документация), т.к. раньше программно отправлять сообщение можно было только через Agent API , как нам было известно. Для этого необходимо было подключить внешнюю компоненту, которая отправляла команды через канал Named-Pipe (Подробнее о том, что такое Named-Pipe). У этого способа были такие минусы:

  1. Работает только через клиент
  2. 1С-Коннект и 1С должны быть всегда включены
  3. Нельзя отправлять сообщение от имени другого пользователя, а только от авторизованного в 1С-Коннекте
  4. Сложность в интеграции

Эти ограничения мешали нормальной работе обработки, нужно было выделить ПК, который должен был быть включённым 24/7, с запущенной программой 1С-Коннект и с запущенным 1С Предприятие, нужно было проверять всё ли работает в штатном состоянии.

После обращения с этой проблемой в тех. поддержку 1С-Коннекта нам предложили поучаствовать в бета-тестировании нового механизма, которая могла нам помочь. Мы с радостью согласились и когда настал день, когда предоставили доступ мы были восхищены тем, что это как раз то, что нам нужно.

Новый механизм избавил нас от ограничении Agent API и получил такие плюсы:

  1. Работает через сервер и нет зависимости от самой программы 1С-Коннект
  2. Можно программно отправлять сообщения от имени любого специалиста вашей компании
  3. Можно отправлять файлы
  4. Можно переводить обращение
  5. Закрывать обращения
  6. Не требует сложного программирования
  7. Быстро возвращает, в указанный URL, информацию о всех действиях 1С-Коннекта, с подробным описанием.

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

Обработка запускается фоновым заданием каждые 5 минут, после запуска обработка собирает данные по электронным письмам, какой контрагент, когда, сколько, по какому заказу и за что оплатил. Далее с помощью "Трансляция событий" получает список занятых ЛП и сохраняет в табличной части (ТЧ) «ТЧОктрытыеЗаявки». Для этого устанавливаем HTTPS соединение, отправляем GET запрос (Описание запроса в документации), получаем результат и обрабатываем. Для подключения HTTPS соединения используем такой же логин, пароль как и для WebAPI. 

Отмечу, что почти везде POST запросы.

Процедура ЗагрузитьОткрытыеЗаявки()
	
	ТЧОткрытыеЗаявки.Очистить();
	
	Сервер = "push.1c-connect.com";
	ТекстЗапрос = "/v1/line/treatment/";
	
	Логин = Константы.бфЛогин.Получить();   //логин и пароль для доступа такой же как и для WebApi
	Пароль = Константы.бфПароль.Получить();
	
	ssl1 = Новый ЗащищенноеСоединениеOpenSSL(
	Новый СертификатКлиентаWindows(),
	Новый СертификатыУдостоверяющихЦентровWindows());
	
	Соединение = Новый HTTPСоединение(Сервер,443,Логин,Пароль,,,ssl1);
	
	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Content-Type", "application/json");
	
	Запрос = Новый HTTPЗапрос(ТекстЗапрос,Заголовки);
	
	Попытка
		Результат = Соединение.Получить(Запрос);
	Исключение
		ЗаписьЖурналаРегистрации("Создать заявки менеджерамв Коннекте. " + ОписаниеОшибки(), 
		УровеньЖурналаРегистрации.Ошибка);  
	КонецПопытки;
	
	Если Результат.КодСостояния <> 200 Тогда
		Отказ = Истина;
		Возврат;
	КонецЕсли; 
	
	ЧтениеJSON = Новый ЧтениеJSON;
	ЧтениеJSON.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку());
	
	РезультатДерево = Неопределено;
	СформироватьДерево(ЧтениеJSON, РезультатДерево);
	
	Для Каждого Строка Из РезультатДерево Цикл
		line_id = СокрЛП(Строка.Получить("line_id"));
		
		НВСтр = ТЧОткрытыеЗаявки.Добавить();
		НВСтр.ServiceID = line_id;
	КонецЦикла;
	
КонецПроцедуры

 

Далее получаем список всех ЛП, которые хранятся в регистре сведении бфВидыСервисов и отсекаем, которые уже заняты.

Циклом проходим по ТЧ с данными об электронных письмах, создавая на каждое эл. письмо обращение в свободное ЛП с помощью бота "Трансляция событий". Если свободных ЛП нет, то ответственному менеджеру отправляется на почту письмо,  что все его ЛП заняты с информацией о заявке и об основном менеджере,  который должен был принять заявку. У каждого контрагента свой основной менеджер.

ЗагрузитьОткрытыеЗаявки();
	Для каждого Строка Из ТЧ Цикл
		
		Если Строка.Различаются или НЕ Строка.Обработать или Строка.ЗаявкаСоздана Тогда
			Продолжить;
		КонецЕсли; 
		
		// У каждого менеджера свои ЛП, найдём ЛП менеджера
		//ТЧСервисы с колонками "IDСервиса, ИмяСервиса, Менеджер"
		Найденные = ТЧСервисы.НайтиСтроки(Новый Структура("Менеджер", Строка.ОсновнойМенеджер));
		
		Если Найденные.Количество() > 0 Тогда		
			IDЛП = ПолучитьСвобнуюЛП(Найденные[0].IDСервиса, Строка.ОсновнойМенеджер); //Получаем ИД свободной ЛП
			
			Если ЗначениеЗаполнено(IDЛП) Тогда
				ТекстСообщения = ПолучитьТекстСообщения(Строка); //Формируем текст сообщения
				
				// Отправляется сообщение в указанный ЛП от имени Специалиста, тем самым создаёт обращение
				РезультатОбращение = бфСервер.НаписатьСообщениеВКоннектЧерезПушАпи(IDЛП, АйдиКлиента, ТекстСообщения, АйдиСпец);
				
				Если РезультатОбращение Тогда
					//Записываем в регистр информацию о том, что обращение создано и доп информацию
					ДействияСРегистром(Строка.ЭлПисьмо,,Строка.ЗаказКлиента,IDЛП, , Строка.Контрагент); 
				КонецЕсли; 
				УдалитьЛПИзТЧ(IDЛП); //Удалить ЛП из ТЧСервисы, чтобы туда больше не создавались заявки, т.к. уже занято
			КонецЕсли; 
			
		Иначе
			СообщениеОтправлено = ДействияСРегистром(Строка.ЭлПисьмо, 4,,,,Строка.Контрагент);
			Если НЕ СообщениеОтправлено Тогда
				Попытка
					//Отправляем на Эл. почту письмо менеджеру, с описанием заявки о том, что все ЛП Заняты
					ИсхПисьмо = ОтправитьСообщениеНаПочту(Строка.ОсновнойМенеджер, Строка.ЭлПисьмо, 1);
					
					//Записываем в регистр информацию о письме
					ДействияСРегистром(Строка.ЭлПисьмо, 5, ИсхПисьмо,,,Строка.Контрагент);  
				Исключение
				КонецПопытки;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла; 

 

Но перед тем как всё это работало надо боту один раз подключить каждую ЛП, по которым будут отправляться сообщения. Для этого отправляем POST запрос (Описание запроса в документации) со структурой обязательных параметров:

  1. Тип = бот
  2. URL адрес опубликованной базы, куда будет приходить ответ
  3. id линии поддержки, к которому нужно подключить бота

 

Функция ПодключитьЛинию(Соединение, IDЛП)
	
	ТекстЗапрос = "/v1/hook/";
	
	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Content-Type", "application/json");
	
	Запрос = Новый HTTPЗапрос(ТЕкстЗапрос,Заголовки);
	
	ЗаписьJSON = Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку();
	
	СтруктураЗапроса = Новый Структура;
	СтруктураЗапроса.Вставить("type", "bot");
	СтруктураЗапроса.Вставить("url", "https://push.example.com/connect/hook/");
	СтруктураЗапроса.Вставить("id", IDЛП);
	
	ЗаписатьJSON(ЗаписьJSON, СтруктураЗапроса);
	ТелоЗапроса = ЗаписьJSON.Закрыть();
		
	Запрос.УстановитьТелоИзСтроки(ТелоЗапроса,КодировкаТекста.UTF8,ИспользованиеByteOrderMark.НеИспользовать);
	
	Попытка
		Результат = Соединение.ОтправитьДляОбработки(Запрос);
	Исключение
		ЗаписьЖурналаРегистрации("Создать заявки менеджерамв Коннекте. " + ОписаниеОшибки(), 
		УровеньЖурналаРегистрации.Ошибка);  
	КонецПопытки;
	
	Если Результат.КодСостояния <> 200 Тогда
		Возврат Ложь;
	КонецЕсли; 

	Возврат Истина;
КонецФункции // ПодключитьЛинию()

А вот как открывать обращение (Описание запроса в документации)

Post запрос с параметрами

  1. id линии поддержки
  2. текст сообщения
  3. id пользователя, который получит сообщение
  4. id специалиста, от имени которого отправляется сообщение

Ещё можно добавить параметр «keyboard», который добавляет кнопки пользователю для быстрого ответа, он необязательный.

 

Функция ОткрытьОбращениеПушАпи(Соединение,АйдиЛинии,АйдиКлиента,ТекстСообщения, АйдиСпец)
	
	ТекстЗапрос = "/v1/line/send/message/";
	
	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Content-Type", "application/json");
	
	ЗаписьJSON = Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку();
	
	СтруктураЗапроса = Новый Структура;
	СтруктураЗапроса.Вставить("line_id", АйдиЛинии);
	СтруктураЗапроса.Вставить("text", ТекстСообщения);
	СтруктураЗапроса.Вставить("user_id", АйдиКлиента);
	СтруктураЗапроса.Вставить("author_id", АйдиСпец);
	
	ЗаписатьJSON(ЗаписьJSON, СтруктураЗапроса);
	ТелоЗапроса = ЗаписьJSON.Закрыть();
	Запрос = Новый HTTPЗапрос(ТекстЗапрос,Заголовки);
	Запрос.УстановитьТелоИзСтроки(ТелоЗапроса,КодировкаТекста.UTF8,ИспользованиеByteOrderMark.НеИспользовать);
	
	Попытка
		Результат = Соединение.ОтправитьДляОбработки(Запрос);
	Исключение
		#Если клиент Тогда
			Сообщить(ОписаниеОшибки());
		#КонецЕсли   
	КонецПопытки;
	
	Если Результат.КодСостояния <> 200 Тогда
		Сообщить("Код состояния " + Результат.КодСостояния);
		Возврат Ложь;
	КонецЕсли; 
	
	Возврат Истина;
	
КонецФункции

 

Записываем в регистр информацию о созданной заявке, чтобы потом видеть, что по такой-то электронной письме создано обращение. Измерение Объект - это "Электронное письмо"

 

Описание всех событии приходит на указанный URL адрес, например, в нашем случае это опубликованная база, где используется HTTP-сервис для получения ответа от "Трансляция событий". Хочу добавить, что ответ мы получаем быстро и оперативно обо всех событиях 1С-Коненкта.

 

Также мы добавили кнопку "Написать в 1С-Коннект" в формы контрагента, конт. лица контрагента, CRM_РабочийСтол и в документ Событие, которая работает через "Трансляция событий".

При нажатии на кнопку выводится список доступных и подключённых у конт. лица ЛП, после выбора ЛП выводится окно ввода сообщения, а дальше сообщение отправляется

 

Процедура КоманднаяПанельКонтактныеЛицаКонтрагентаНаписатьВКоннект(Кнопка)
	
	КонтактноеЛицо = ЭлементыФормы.КонтактныеЛицаКонтрагента.ТекущаяСтрока;
	
	Если НЕ ЗначениеЗаполнено(КонтактноеЛицо) Тогда
		Предупреждение("Контактное лицо не выбрано!");
		Возврат;
	КонецЕсли; 
	
	СписокСервсиов = бфСервер.ПолучитьСписокДоступныхЛППоКонтЛицу(КонтактноеЛицо);
	
	Если НЕ СписокСервсиов.Количество() > 0 Тогда
		Сообщить("У тек. пользователя нет доступных сервсиов для взаимодействия с клиентом");
		Возврат;
	КонецЕсли;
	
	Попытка
		
		Если СписокСервсиов.Количество() > 1 Тогда
			ВыбранноеЗначение = ВыбратьИзСписка(СписокСервсиов);
		Иначе
			ВыбранноеЗначение = СписокСервсиов[0];
		КонецЕсли; 
		
		СервисИД = СокрЛП(ВыбранноеЗначение.Значение);
		
		бфСервер.НаписатьСообщениеВКоннект(КонтактноеЛицо,СервисИД, Ссылка); 
	Исключение
		
	КонецПопытки;
	
КонецПроцедуры


//В общем модуле бфСервер
Функция НаписатьСообщениеВКоннект(КонтактноеЛицо, СервисИД, Контрагент = Неопределено) Экспорт
	Результат = Ложь;
	
	Если Контрагент = Неопределено Тогда
		Контрагент = КонтактноеЛицо.Владелец;
	КонецЕсли; 
	
	АйдиКонтрагента = ПолучитьАйдиКонтрагента(Контрагент);
	АйдиКлиента = ПолучитьАйдиПользователяКонтрагента(КонтактноеЛицо);
	АйдиСпец = ПолучитьАйдиКоннектТекПользователя();
	Если ЗначениеЗаполнено(СервисИД) и ЗначениеЗаполнено(АйдиКлиента) и ЗначениеЗаполнено(АйдиСпец) Тогда
		ТекстСообщения = "";
		ВвестиСтроку(ТекстСообщения, "Введите текст сообщения");
		
		Если СтрДлина(ТекстСообщения) > 0 Тогда
			
			Результат = НаписатьСообщениеВКоннектЧерезПушАпи(СервисИД, АйдиКлиента, ТекстСообщения, АйдиСпец);  
			
			Если НЕ Результат Тогда
				Ответ = ПодключитьЛиниюБоту(СервисИД);
				Если Ответ Тогда
					Результат = НаписатьСообщениеВКоннектЧерезПушАпи(СервисИД, АйдиКлиента, ТекстСообщения, АйдиСпец);
				КонецЕсли; 
			КонецЕсли;
			
			Если Результат Тогда
				Сообщить("Сообщение успешно отправлено!");
			Иначе
				Сообщить("Ошибка. Сообщение не отправлено!");
			КонецЕсли; 
			
		Иначе
			Сообщить("Текст сообщения не заполнен!");
		КонецЕсли;
	Иначе
		Сообщить("У тек. пользователя нет доступных сервисов для связи с клиентом");
	КонецЕсли;
	
	Если ИспользоватьБухФон() Тогда
		
		ДанныеСообщения = ПолучитьДанныеСообщения(АйдиКонтрагента, АйдиКлиента, СервисИД, АйдиСпец, ,ТекстСообщения);
		бфКлиент.ОбработатьСообщение(ДанныеСообщения);
	КонецЕсли; 
	
	Возврат Результат;
КонецФункции // НаписатьСообщениеВКоннект()


Функция НаписатьСообщениеВКоннектЧерезПушАпи(АйдиЛинии, АйдиКлиента, ТекстСообщения, АйдиСпец = "", Соединение = Неопределено) Экспорт
	
	Если Соединение = Неопределено Тогда
		Соединение = ПолучитьСоединениеПушАпи();
	КонецЕсли; 
		
	ТекстЗапрос = "/v1/line/send/message/";
	
	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Content-Type", "application/json");
	
	
	ЗаписьJSON = Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку();
	
	СтруктураЗапроса = Новый Структура;
	СтруктураЗапроса.Вставить("line_id", АйдиЛинии);
	СтруктураЗапроса.Вставить("text", ТекстСообщения);
	СтруктураЗапроса.Вставить("user_id", АйдиКлиента);
	Если ЗначениеЗаполнено(АйдиСпец) Тогда
		СтруктураЗапроса.Вставить("author_id", АйдиСпец);
	КонецЕсли; 
	
	
	ЗаписатьJSON(ЗаписьJSON, СтруктураЗапроса);
	ТелоЗапроса = ЗаписьJSON.Закрыть();
	Запрос = Новый HTTPЗапрос(ТекстЗапрос,Заголовки);
	
	Запрос.УстановитьТелоИзСтроки(ТелоЗапроса,КодировкаТекста.UTF8,ИспользованиеByteOrderMark.НеИспользовать);
	
	Попытка
		Результат = Соединение.ОтправитьДляОбработки(Запрос);
	Исключение
		#Если клиент Тогда
			Сообщить(ОписаниеОшибки());
		#КонецЕсли   
	КонецПопытки;
	
	Если Результат.КодСостояния <> 200 Тогда
		Сообщить("Код состояния " + Результат.КодСостояния);
		Возврат Ложь;
	КонецЕсли; 
	
	Возврат Истина;
	
КонецФункции

 

P.S. Первый раз пишу статью. Буду благодарен за адекватную критику и помощь в редактировании и улучшении статьи :) 

1С-Коннект ТрансляцияСобытий

См. также

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

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

36000 руб.

03.08.2020    17780    19    22    

16

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

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

5040 руб.

04.05.2021    19845    13    17    

16

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

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

22656 руб.

25.05.2021    14421    42    8    

18

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

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    1169    1    0    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. malikov_pro 1324 24.06.20 17:24 Сейчас в теме
"Возрадуйтесь, товарищи" - понятно что Вы рады, не все читающие понимают/разделяют радость.
Возможно сам сервис "1С-Коннект" Вам удобен, в каком общем контексте он используется непонятно. Если реализовано как готовый мессенджер с разделением на каналы, то будет интересно прочитать про реализацию.

Для доставки сообщений на клиент использую WebSocket сервер, да используется внешняя компонента, но вся инфраструктура локальна. Куда "утекают" данные при использовании сервисов 1С неизвестно.

По оформлению статьи:
* большие картинки и код в спойлеры, чтобы можно было прочитать текст не теряя контекст.
* код в виде текста (обертка code), возможно кто-то скопипастит и будет доволен.
* желательно уточнять термины, например Named-Pipe, добавить ссылку не сложно, информативность повысится.
* оставлять в публикации свои белые IP с портами чревато сканом/атакой на этот порт, "школьников" хватает.
* если есть схема, то возможно попробовать её отобразить графически, будет понятнее и нагляднее (Описание всех событии приходит на указанный URL адрес)
* желательно не забывать что если не пробросить порт то внешний сервис не "достучится", начинающие сис админы из за этого не могут настроить уведомления от АТС например. так же ограничить IP источника при пробросе порта.
user1835472; VasDmi666; +2 Ответить
2. capitan 2507 26.06.20 11:59 Сейчас в теме
(1)По мне так очень даже нормально.
Я не так параноидально настроен.

Вебсокеты у вас разве асинхронно срабатывают?
А на телеграм тоже неизвестно куда утекают данные.
Плюс однозначно
VasDmi666; freesourcer; +2 Ответить
3. malikov_pro 1324 26.06.20 12:50 Сейчас в теме
(2) Это базовые вещи по безопасности. Уже второй раз за месяц сталкиваюсь что настроенная "умными сис. админами" машина с 1С по их словам "изолированная" от пользователей на RDP по факту висит с белым IP в инет с опубликоваными базами по HTTP в фулл. Защиты от брутфорса в 1С до последних релизов не было.
4. TODD22 19 26.06.20 13:07 Сейчас в теме
(2)
Я не так параноидально настроен.

СБ в некоторых компаниях очень даже "так" настроены.

А на телеграм тоже неизвестно куда утекают данные.

Так себе аргумент.
5. verunca 23.01.23 16:35 Сейчас в теме
После регистрации хука, что надо указывать в соединении? Вот, например, в функции "НаписатьСообщениеВКоннектЧерезПушАпи" Соединение = ПолучитьСоединениеПушАпи() в соединении мы в качестве сервера укажем оригинальный "push.1c-connect.com" или зарегистрированный нами хук для трансляции событий (в вашем примере) "https://push.example.com/connect/hook/"?
Оставьте свое сообщение