• Проблема с добавлением чек листа по событию б24. Что подскажете?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Не могу понять почему происходит удаление


    Это происходит потому что процесс создания задачи не заканчивается на создании записи о задаче.

    Добавление задачи из публичной части сводится к методу: `Bitrix\Tasks\Manager\Task::add`, где вначале происходит создание записи и инициирование события (строчка 139), а затем объединение чек-листов (строчка 177). Таким образом получается что изначально при создании задачи передается пустой набор чек-листов, потом вы создаете элементы чек-листов, а затем merge производит удаление существующих чек-листов, которые не были переданы в изначальном запросе, а так как их не было - просто удаляет ваши созданные чек-листы.

    Как можно избежать этой ситуации?

    1. Наилучшим вариантом будет попробовать использовать другое событие: before.
    Т.е. не создавать элементы чек-листов, а дополнить исходный массив данных структурой, которая будет создавать чек-листы.
    Попробуйте отловить прочку событий before с чек-листами чтобы понять что нужно делать

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

    3. Так же, неплохим хаком будет являться использование background job - т.к. он выполняется в конце страницы уже после выполнения всех правок.

    Обращу ваше внимание - событие является независимым от контекста, поэтому вполне может быть такая ситуация, что при создании задачи на агентах (или консольном скрипте) у вас `$USER` будет null, таким образом ваш скрипт упадет с фатальной ошибкой. Но наличие `$USER` еще не являетися поводом для радости, сам GetId может вернуть `null`, таким образом фатальная ошибка прилетит уже от контроллера прав.
    Рекомендую использовать выполнить проверки и сделать fallback механим - подставить ID = 1 (или самому бросить фатальную ошибку) в случае непредвиденной ситуации
    Ответ написан
  • Как выполнять метод crm.entity.mergeBatch автоматически?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    В Битрикс24 нет метода который бы прошелся по списку и вернул наборы сущностей "которые он посчитал дубликатами".
    Есть метод на объединение уже известных и на изменение поиска (добавление в дубликаты своих полей).

    Здесь работают 2 других механизма:
    1. Автоматический поиск и объединение. Включается в настройках CRM, после чего сам проверяет актуальность.
    2. Ручной поиск через `crm.duplicate.findbycomm` или `crm.*.list`.

    Метод скорее выдан не для регулярного использования, а для точечного, когда например есть какие-то косвенные признаки (например приложение добавляет какой-нибудь уникальный ключ и потом в фоне по нему делает склейки).
    Ответ написан
  • Как поменять сотрудника отвечающего за обработку лида в Битрикс24?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Я вижу два варианта как это можно проделать:

    Вариант 1: Найти кто отправляет лиды на сайте. Скорее всего есть какой-то обработчик события добавления элемента в инфоблок (или кусок кода отправляющий в б24 в самом компоненте).
    И там можно задать поле ASSIGNED_BY_ID и передать туда идентификатор нового ответственного.

    Вариант 2: сделать БП при добавлении (или робота на первой стадии), проверять ответственного и менять.

    Я бы рекомендовал все же выполнить пункт 1, т.к. это наиболее разумный шаг.
    Ответ написан
    Комментировать
  • Как одновременно создать сделку и контакт?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Я умею это делать через батч, но в данном случае нужен обычный метод, как такое сделать?


    В формулировке "одного стандартного метода" никак.
    Вы путаете интерфейсные возможности с возможностями REST, а это не одно и то же. Собсвтенно говоря в самом битриксе это тоже не один механизм - сначала выполняются задания контроллеров (т.е. создание контакта), а потом уже основное действие (создание сделки).

    Битрикс в плане api досаточно примитивная система: при создании сделки вы создаете только сделку, а при создании контакта только контакт.

    Таким образом есть 2 варианта как это можно сделать:
    - Через батч (создать контакт, создать сделку указав CONTACT_ID)
    - Через бизнес-процессы. Т.е. создать Н доп.полей в сделке и БП запускаемый при создании, который получит поля, создаст контакт и изменит сделку
    Ответ написан
    Комментировать
  • Как реализовать дублирование сообщений из чата Битрикс24 в чат Telegram?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Как уже сказали в предыдущем комментарии от SHADRIN можно воспользоваться API, но есть другой путь: если у вас есть маркет, то можно использовать чат-бот Многоцелевой и telegram (телеграм) бот , который это умеет и еще много всего другого.
    Ответ написан
    1 комментарий
  • Как кастомизировать/переименовать элементы карточки сделки в коробке?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    В курсе Bitrix Framework есть глава по работе с языковыми фразами и там есть раздел посвященный этому - "Замена фраз в продукте".

    Соответственно принцип такой:
    1. Сначала ищем языковую фразу. В Битриксе много однотипных фраз в разных компонентах системы, поэтому задача будет не самой простой. Для этого проще всего воспользоваться средством поиска языковых фраз из модуля Переводы (дописать к адресу страницы "show_lang_files=Y" и после обновления будет специальный дополнительный диалог поиска языковых фраз).
    2. Затем через механизм user_lang изменяем нужную фразу.
    3. Повторяем шаги 1 и 2 для всех фраз.
    Ответ написан
    1 комментарий
  • Нужен совет по облачной версии Битрикс24. Разрабатывать своё или использовать Б24?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Однозначного ответа на ваш вопрос не будет.

    Во-первых, непонятно что именно вы подразумеваете под "функционалом документооборта". Просто централизованное хранилище документов с простым согласованием между отделами? Или сложное типиированного согласование с использованием ЭДО? Какой именно "функционал" вам требуется? Какое представление?

    Во-вторых, можно воспользоваться универсальным ответом - "Посмотрите что есть из доступного и если вас не устроит - делайте свое приложение".

    Начните с простых шагов:
    1. Определите что вы вкладываете в понятие документооборот. Какая цель стоит перед этой системой. Что самое важное (хранение, согласование или что-то другое)
    2. Распределите все фичи по уровням важности и сравните с тем что есть в наборе Битрикс24. Обратите внимание на смарт-процессы и универсальные списки в Битрикс24.
    3. Попробуйте собрать тестовую схему, потом попробуйте расширить ее.

    Как только вы проделаете эти шаги, то у вас сложится представление о возможностях системы.
    Ответ написан
    Комментировать
  • Как выделить в статистики звонок из исключения?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Готового модуля нет.
    Для облачного Битрикс24 такое можно сделать только через браузерный плагин.
    Для коробки можете попытаться разработать свое, но будет не просто
    Ответ написан
  • Как в БП к лиду указать контакт?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Но не могу найти Активити которое позволит туда записать.


    Можно использовать действие "Изменение документа" если БП запущен на том же элементе. Если БП запущен на другом элементе то можно сделать маленький БП на изменение и запускать этот БП
    Ответ написан
    Комментировать
  • В какой таблице Битрикс.24 хранятся благодарности?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Технически благодарности это не просто записи инфоблока "Доска почета" в типе "Орг.структура", но и пост в ленту.

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

    Что касается таблицы, то это таблица элементов (b_iblock_element), но это не все - часть данных находятся в таблице свойств (b_iblock_element_property).

    В предыдущем сообщении есть указание на `iblock_id = 2`, однако это не совсем верно. Идентификатор этого инфоблока находится в b_option (MODULE_ID: `intranet`, NAME: `iblock_honour`). В реальности там может быть и 2 и 4 и любое другое число.
    Ответ написан
  • Как в Битрикс24 установить тип клиента через API?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Когда оформляется заказ, то нужно отловить комментарии заказа и записать их в сделку. Так же и "тип клиента" установить.


    Никак. Архитектурно заказ в Битрикс24 устроен так, что сначала создается заказ, потом создается сделка, потом связь заказа с сделкой и уже после чего контакты/компании (если необходимо).
    Можете попробовать подвязаться на событие Timeline, получить создание первой записи для заказа - в этот момент все связи уже есть и все элементы созданы и после этого можете менять сделку и заказ как вам нужно
    Ответ написан
    Комментировать
  • Как в Битрикс 24 создать свою сущность для диалога выбора сущностей?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Нет, не имеется.
    В данном контексте понимается что вы можете создать свой набор элементов из своего источника. В данном случае этим источником может выступать что угодно, а прослойка между источником и тем что пользователи будут видеть и называется сущность.
    Ответ написан
    1 комментарий
  • Как с помощью REST API получить значения пользовательских полей пользователя битрикс24?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Пользовательские поля вы можете получить через любой REST метод на получение пользователей, если у вас выбран scope "user.userfield" и если код поля начинается с UF_USR_

    Например, если вы создали поле UF_MONDAY и назначили его пользователю, то получить его через REST по работе с пользователем будет нельзя*.

    * - вы можете попробовать подменить класс Bitrix\Rest\Api\User или перекрыть пользовательский scope, но это очень трудоемкий процесс
    Ответ написан
    Комментировать
  • Как выгрузить через API историю лида?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    REST метода на историю изменений нет, есть только на Timeline, но это не одно и то же.

    По результатам вашего сообщения, я оставил заявку (43406) на реализацию этого метода и было бы очень хорошо, если бы вы поставили плюс и повысили ее приоритет.
    Ответ написан
    Комментировать
  • Как передать значение в список?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Дело в том, что строка представляет из себя последовательность символов, а поля типа Список, Привязка к * это комплексные поля, которые хранят в себе идентификатор элемента.
    Таким образом, вы пытаетесь записать строку в поле, которое ожидает число.

    Для того чтобы ваша задумка заработала вам нужно промежуточное звено: некоторый скрипт, который примет от вас строку, поищете среди сущности элемент с таким названием и вернет его ID (либо создаст новый элемент и вернет его ID) и далее уже нужно использовать именно этот ID.
    Вы можете воспользоваться как API, который предложил belc, вы так же можете составить ручной маппинг (через блоки "Условия", если список не большой).
    Ответ написан
    Комментировать
  • Возможно ли автоматизировать процесс в Битрикс, при котором при нажатии кнопки данное поле будет выставлять дата/время?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Штатно - нет.

    Вы написали вопрос: "Возможно ли автоматизировать процесс в Битрикс, при котором при нажатии кнопки данное поле будет выставлять дата/время?"
    Но я подозреваю, что в вы хотели спросить другое: "Можно ли штатными средствами, в облачном Битрикс24 выполнить настройку системы таким образом, чтобы при экспорте данных записывались операции экспорта и была бы возможность поставить операцию экспорта на регулярную основу".

    Разобьем искусственно вопрос на 2 части:
    1. Можно ли логгировать операцию экспорта?
    2. Можно ли автоматически запускать экспорт?

    Универсальный ответ на оба вопроса: Штатные средства Битрикс24 не предполагают такую возможность, однако есть обходные пути к реализации похожей механики.

    Что касается операции экспорта: нажатие на кнопку не гарантирует того что операция будет запущена и завершена, однако операция экспорта заносит запись о том, что данная сущность была экспортирована. Не уверен что в облачном Битрикс24 есть доступ к истории изменения сделки (в коробке такая возможность имеется), так что скорее всего вам придется завести какого-то фонового эмулятора браузера, который бы логинился на портал и проверял сделки и их последние записи, чтобы получить те сделки, по которым осуществлялся экспорт.

    Что касается автоматического запуска экспорта: штатного экспорта по расписанию в Битрикс24 нет, но эту ситуацию вы можете обойти через какую-нибудь RPA (не путать с RPA Битрикс24) - вы можете использовать подручные средства (например скрипты selenium и т.п.) чтобы автоматизировать этот процесс.
    Ответ написан
    Комментировать
  • Как опубликовать BIMI изображение в bitrix24?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Если вы говорите про коробочный Битрикс24, то вы можете просто загрузить файл используя административный интерфейс.
    Если вы говорите про облачный Битрикс24 или Сайты24 построенные на Битрикс24, то такая возможность отсутствует.
    Ответ написан
  • Битрикс24 (коробка) и почта для домена, как использовать несколько почтовых аккаунтов?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Включите локальный smtp и позвольте пользователям подключать любые ящики.

    Вы можете упростить подключение яндекс почты, если подключите его как приложение согласно статье в документации (см. Коробочная версия Битрикс24).

    Это рекомендуемый способ как этого достичь.

    Еще можно купить приложения по подмене smtp аккаунта отправителя, например "Вебпростор: Отправка почты через SMTP", "Fusion: Прозрачная почта" и другие. Однако это менее рекомендумый вариант.

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


    Будет браться либо дефолтный, либо заданный явно.
    Например можно сделать custom_mail и на основании входящих параметров поискать подходящий account и подставлять его для отправки - тоже вариант.
    Ответ написан
  • Возможно ли запретить пользователям принимать звонки из битрикс с мобильного приложения?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Подобной настройки нет и не будет (битрикс24 нацелен на развитие мобильного приложения).
    Можно конечно вообще выключить мобильное приложение или варварски модифицировать его код чтобы убрать вообще такую возможность, но это серьезная кастомизация ядра продукта.
    Ответ написан
    Комментировать
  • Как присвоить стиль через JS?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    В вашем коде сразу несколько ошибок.

    Во-первых, вы предполагаете что поведение браузера эквивалентно коду на странице. Т.е. одно и то же действие в браузере и в коде дают одинаковый результат, но это не так. Браузер отрисовывает страницу по частям и нет никаких гарантий что в момент выполнения вашего кода (фрагмент document.querySelector('.crm-kanban-item-repeated')) на странице существует хотя бы один элемент с подобным селектором. Более того скажу сразу - этот элемент не существует, так как он добавляется позже через javascript.
    Вам нужно почитать больше про js и про то как браузер рисует страницу - без этого вы далеко не уйдете.

    Во-вторых, вы полагаете что у вас всего 1 элемент (querySelector - вернет первый(!) элемент подходящий под условия), а у вас их может быть много. Т.е. нужно использовать как минимум querySelectorAll. Вы так же полагаете что наличие ноды автоматически делает элемент "повторным", что совершенно не так. Ноду можно вывести у любого элемента, но повторным он от этого не станет.

    В-третьих, даже если вы окрасите элементы, то после перезагрузки данных (не страницы), например при применении фильтра, ваш код не выполнится еще раз и не будет иметь силы.

    Предположим наша задача - покрасить элементы в красный если они повторные.

    Для начала определимся как мы будем красить: я полагаю что проще всего будет создать какой-нибудь css-класс, который будет отрабатывать, если карточка подходит под указанные условия.
    Я буду использовать кастомный класс flah_repeated и для этого я создам css правило:

    .crm-kanban-item.flah_repeated {
    	background-color: red !important;
    }


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

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

    BX.addCustomEvent("Kanban.Grid:onRender", function(kanbanGrid){
    
    	if ( kanbanGrid.getData().entityType != 'LEAD' )
    	{
    		return;
    	}
    
    	let kanbanItems = kanbanGrid.getItems();
    
    	for (let key in kanbanItems)
    	{
    		if ( key < 1 ) continue;
    
    		let kanbanItem = kanbanItems[key];
    
    		if ( kanbanItem.getDataKey('return') )
    		{
    			BX.addClass(kanbanItem.container, "flah_repeated");
    		}
    	}
    });


    Ну и когда все будет готово, я сделаю расширение (extension) и подключу его на событии пролога, чтобы добавлять к каждой странице.

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