@Enkei1

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

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

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

Похожие вопросы