@Enkei1

Как связать приложение в битрикс через push and pull?

Здравствуйте. Есть встроенное самописное приложение, встроенное в коробочную версию битрикс. Цель - связать все открытые страницы с нашим приложением через обработчик событий битрикс. Т.е. при нажатии кнопки в приложении, у всех пользователей, у которых открыто данное приложение, вывести в консоль условный 'Hello World'.
Короче говоря - зарегистрировать событие, подписаться, и научиться ловить срабатывание событий из битрикса. Возможно ли это сделать?
  • Вопрос задан
  • 65 просмотров
Пригласить эксперта
Ответы на вопрос 2
Вот как у меня:

Пользователь подписыается на события связанные с объектом $dctList['UUID']:
\CPullWatch::Add($UserID, $dctList['UUID']);

Отправляем уведомление всем пользователям при событии связанным с объектом с индентификатором $list_uuid
\CPullWatch::AddToStack($list_uuid,
				Array(
					'module_id' => 'list',
					'command' => 'exchange',
					'params' => [
							'provocative' => $dctData['head']['UID'],
							'list_uuid'=> $list_uuid
						]
				)
			);


загрузка модуля:
BX.loadScript('/bitrix/js/pull/protobuf/protobuf.js', ()=>{
					BX.loadScript('/bitrix/js/pull/protobuf/model.js', ()=>{
							BX.loadScript('/bitrix/js/rest/client/rest.client.js', ()=>{
									BX.loadScript('/bitrix/js/pull/client/pull.client.js',()=>{APP.bitrixreinit._pullinit()});
								});
						});
				});


Подписка на события в методе _pullinit:
// подписываемся на события P&P
		BX.addCustomEvent("onPullEvent", function(module_id,command,params) {
			
			if (APP.getConfigParam('uid') == params.provocative) {
				//if ('production' != APP.getConfigParam('mode')) console.log('собственное событие пропущено');
				return;
			}
			if ('exchange' == command) {
				APP.exchange({basis: 'pull', context: params});
			}
		});

		BX.addCustomEvent("onPullStatus", function(status) {
			if ('online' != APP.$store.state.status.push_and_pull
					&& 'online' == status) {
				// не онлайн сменился на онлайн
				//let last_sync_time = APP.$store.state.db.sync.last.time.client || 0
				//let now_time = Date.now()/1000
				//if (now_time - last_sync_time < 30) {
				//	
				//} else {
				//	
				//}
				APP.exchange({basis: 'reconnect'});
			}
			APP.$store.commit("updateStatus",{key:'push_and_pull',data:status})
		});
		
		BX.PULL.start();
Ответ написан
babarun
@babarun Куратор тега 1С-Битрикс
Безумный план моих идей в руках больных людей
Т.е. при нажатии кнопки в приложении, у всех пользователей, у которых открыто данное приложение, вывести в консоль условный 'Hello World'.
Можно, но лучше самостоятельно реализовать через вебсокеты или матрикс.

Есть встроенное самописное приложение
60145d9295cdd858871488.jpeg
Вы уж определитесь, встроенное битриксовое приложение или самописное?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы