Bitrix24 Apps & BITRIX24-PHP-SDK
126 subscribers
7 photos
8 videos
38 links
Разработка приложений для Bitrix24 на базе BITRIX24-PHP-SDK
Download Telegram
В рамках работы с batch-запросами в документацию добавлена страница с замерами времени работы в зависимости от:
— сортировка, подсчёт количества элементов в выборке;
— сортировка, без подсчёта количества элементов в выборке;
— сортировка по умолчанию, подсчёт количества элементов в выборке;
— сортировка по умолчанию, без подсчёта количества элементов в выборке;

Тесты проводились на портале где было создано 100к контактов.

TL;DR;
1. По возможности старайтесь избегать выборки всех данных по сущности.
2. Сортировка данных при больших выборках тоже слишком дорогая операция
3. В roadmap SDK будет добавлена задача на поддержку batch-запросов в режиме «отключенный подсчёт количества» элементов, сейчас там указано not implemented.

Вся статья → https://amp.gs/oei3
👍1
Была очередная суббота, я немного покомитил в #BITRIX24PHPSDK
что нового с 14 декабря:

— я заболел ковидом, повалялся в больнице и выписался с 30% поражением лёгких, сейчас потихоньку восстанавливаюсь;

— до болезни получилось обстоятельно поговорить с Валентин Удальцов (https://t.iss.one/vudaltsov/) по поводу подходов к проектированию новой версии SDK, рекомендую. Пожалуй, лучшая трата 6к рублей за консультацию.

— изменений в само SDK приехало много, как и обещал я стараюсь во второй версии гораздо больше внимания уделять DX — developer experience. Описание изменений в самой доке тут https://amp.gs/MRII

Кратко:
— результаты API-вызовов иммутабельные и полностью аннотированные в формате phpstan

— все API-методы аннотированны и предоставляют автокомплит (нарежу видосы и гифки в ближайшх субботних подходах).

— результаты CRUD-операций стали типизированы и получили свой синтаксический сахар

— т.к. #Bitrix24 порой в ответах заставляет меня удивляться, то в папка tests теперь содержит и интеграционные тесты. Да, подпихни свой вебхух и смотри, как отвечает конкретный портал.

— батч-запросы тоже унифицирую по сервисам и типизирую, они стали ещё лаконичнее

Ближайший чекпоинт — это полное покрытие сервисами для scope CRM, на нём соберу большую часть граблей, дальше будет уже механическая работа по добавлению остальных 38(?) скоупов.

https://amp.gs/MRIT — вторая версия про которую идёт речь
#bitrix24phpsdk новости от 30.01.2021

Ветка 2.0 приводится в порядок, стал писать осмысленный чейнджлог:

https://github.com/mesilov/bitrix24-php-sdk/tree/2.x
remove Travis CI and migrate to Github Actions
add unit-tests in independent GitHub action
add phpstan checks in independent GitHub action
add in scope «CRM» Contacts service and integration test
add in scope «CRM» Contacts batch service and integration test
add in scope «CRM» Products service and integration test
add in scope «CRM» Settings service and integration test
add in scope «CRM» DealCategoryStage service and integration test
add in scope «CRM» DealProductRows service and integration test
add in scope «CRM» DealContact service and integration test
add in scope «IM» IM service and integration test
add in default scope «Main» default service


Следующая точка приложения усилий — документация для разработчиков, сейчас вроде всё очевидно, но вопросы в личных сообщениях намекают, что документацию нужно писать)
Привет, я снова выхожу на связь (*・ω・)ノ
Две новости:

1. Текущая кодовая база в ветке 0.x замораживается и будет жить в ветке релизов 1.x, возможностей поддерживать её у меня нет, если нужно — открывайте MR. В своих проектах можно зафиксировать тег 1.0.0 и у вас уже ничего не изменится.

2. 💥 В мастер будет влита текущая ветка 2.x с полной потерей обратной совместимости. Релизы по ней будут идти с альфа префиксами.

Если у вас старый проект, то можно жить на ветке 1.x и планировать миграцию на 2.x, гайд по миграции я положу в документацию.

Новые проекты лучше сразу стартовать на 2.x 🙂
Привет, у нас сборка 2.0-alpha.5 и 300 🍾 на GitHub

Добавили
— метод countByFilter подсчёт количества элементов по фильтру.
— для скоупа «CRM» добавлен сервис по работе с пользовательскими полями сущности Deal и интеграционные тесты.
— для скоупа «CRM» добавлен сервис по работе с пользовательскими полями сущности Contact и интеграционные тесты.
— для объекта ContactItemResult добавлен метод getUserfieldByFieldName.
— для объекта DealItemResult добавлен метод getUserfieldByFieldName.

Удалили
— старый код, который относился к кодовой базе веток 0.x и 1.x

Изменения
Мы начинаем двигаться 🐌 в сторону более строгой типизации возвращаемых результатов.

ContactItemResult теперь возвращает ожидаемые типы данных: DateTimeInterface, int, boolean и т.д.
DealItemResult теперь возвращает ожидаемые типы данных: DateTimeInterface, int, boolean и т.д.
— добавлены интеграционные тесты на все поддерживаемые на текущий момент сервисы, для их запуска почитайте доку и подставьте входящий вебхук от тестового портала.
— в сборку релиза добавлены шаги запуска интеграционных тестов и статического анализа силами phpstan, пусть работают роботы.

Из-за объёма кодовой базы работа предстоит большая, поэтому в каждом релизе будем постепенно добавлтяь новые объекты типа *Result

https://amp.gs/jYskW
🚀 Новый релиз bitrix24-php-sdk 2.0-alpha.6

Добавлено
— интеграционные тесты запускаются в GitHub Actions pipeline 🎉, пока для ветки dev.
— для разработчиков REST-API Битрикс24 сделана ручка vendor-check.yml которая позволяет запускать интеграционные тесты после релиза новой версии на тестовый NFR-портал. Так будут проверять, что при релизе новой версии Битрикс24 соблюдается контракт на API.
— в batch добавлен метод getTraversableList который по умолчанию не использует подсчёт количества элементов, на больших объёмах данных получили x2 прироста к скорости выборки данных и довольного модератора в маркетплейсе, т.к. снизится нагрузка на порталы.
— в CoreBuilder добавили Credentials.
— в Batch::deleteEntityItems добавлен метод для пакетного удаления элементов.
— добавлен сервис BulkItemsReader который содержит в себе стратегии получения данных для приложений заточенных на экспорт данных. Сейчас там только «наивная» стратегия использующая батч-запросы без подсчёта количества элементов, есть большой задел по оптимизации скорости выборки данных за счёт мультиплексирования запросов.
— добавлен интегрфейc Core\Contracts\DeletedItemResultInterface c результатом удалёния сущности.
— для скоупа «CRM» добавлен метод пакетного удаления сделок
Services\CRM\Deal\Service\Batch:delete batch delete deals.
— добавлен NetworkTimingsParser для разбора и проброса структур данных curl_info в логи для отладки.

Изменено
— компоненты Symfony обновлены до 5.4
— psr/log ожидается версий от 1 до 3.

Полный список изменений
👍1
У Битрикс24 наблюдаются проблемы в работе rest-api, ребята в курсе проблемы и занимаются её решением.

Если у вас в sdk включены логи, то проверьте дисковое пространство и успокойте клиентов.

Для критически важных интеграций после восстановления работы не забудьте пропихнуть данные, если алгоритм обмена не имеет встроенной защиты от подобных ситуаций.
Починили, теперь все работает как надо
👍1
Релокейт-ориентированное программирование
👎2
Вышли на финишную прямую сборки билда v2-alpha7, список изменений и закрытых задач — https://github.com/mesilov/bitrix24-php-sdk/issues/273

Если у вас ещё не горят сроки, то переключитесь на ветку и погоняйте новый функционал.
Быстрый вопрос: у когото были потребности вида «достать активити определённого типа» например, заполнения конкретной CRM-формы или звонки там. Т.е. можно поверх активити сделать хелперы для получения конкретных типов.

Если с таким сталкивались — напишите пожалуйста в комментариях
Новый релиз bitrix24-php-sdk — 2.0-alpha.7
Обновляемся и тестируем! 🚀
https://github.com/mesilov/bitrix24-php-sdk

Добавлено:
— скоуп Telephony и сервисы по работе с ней
— скоуп UserConsent и сервисы по работе с ним
— скоуп Placements и сервисы по работе с ним
— скоуп IMOpenLines и сервисы по работе с ним
— скоуп CRM добавлен сервис Leads
— скоуп CRM добавлен сервис Activity
— скоуп CRM добавлен метод Services\CRM\Deal\Service\Batch:update
— скоуп CRM добавлен метод Services\CRM\Contact\Service\Batch:delete
— скоуп CRM добавлены сервисы Services\CRM\Activity\ReadModel для: EmailFetcher, OpenLineFetcher, VoximplantFetcher, WebFormFetcher
— скоуп Main добавлена поддержка сервиса Events
— добавлена поддержка событий уровня приложения: ONAPPINSTALL и ONAPPUNINSTALL
— добавлена поддержка событий уровня приложения: PortalDomainUrlChangedEvent
— добавлен метод Core\Batch:updateEntityItems
— добавлен метод Core\Contracts\BatchInterface:updateEntityItems
— скоуп Placements добавлен сервис Placement\Service\UserFieldType для работы с типами полей подразумеващюих встройку
— скоуп Telephony, добавлена поддержка событий: OnExternalCallBackStart, OnExternalCallStart, OnVoximplantCallEnd, OnVoximplantCallEnd, OnVoximplantCallInit, OnVoximplantCallStart
— добавлена поддержка DTO ApplicationStatus
— добавлен метод AccessToken:initFromPlacementRequest
— добавлен метод ApplicationProfile:initFromArray when application profile stored in ENV-variables
— добавлена поддержка инициализации плейсментов Bitrix24\SDK\Application\Requests\Placement\PlacementRequest
— добавлен метод Credentials:initFromPlacementRequest когда приложение инициализируется при загрузке плеймента
— добавлен метод Services\Main\Service:getServerTime возвращает время сервера
— добавлен метод Services\Main\Service:getCurrentUserProfile возвращает базовую инфу по текущему юзеру.
— добавлен метод Services\Main\Service:getAccessName возвращает наименования разрешений.
— добавлен метод Services\Main\Service:checkUserAccess
— добавлен метод Services\Main\Service:getMethodAffordability
— добавлена поддержка полей operating и operating_reset_at в Bitrix24\SDK\Core\Response\DTO\Time

Изменено
— обновили состав скоупов
— увеличили требования для компонентов symfony/* до версии 6.*
— метод Services\Main\Service:getAvailableMethods помечен как deprecated
— метод Services\Main\Service:getAllMethods помечен как deprecated
— метод Services\Main\Service:getMethodsByScope помечен как deprecated
❗️метод Bitrix24\SDK\Core\Credentials переименован: createFromWebhook, createFromOAuth, createFromPlacementRequest
❗️удалён класс Bitrix24\SDK\Core\Response\DTO\ResponseDataCollection
❗️удалён класс Bitrix24\SDK\Core\Response\DTO\Result
❗️удалён метод CoreBuilder:withWebhookUrl, используйте
method CoreBuilder:withCredentials

Исправления ошибок
— add bugfix for batch method for reverse order queries
— fix type compatible errors for Core\Result\AbstractItem
— error in NetworkTimingParser
— error in RenewedAccessToken DTO, remove Scope
enum

etc
— добавлена возможность спонсирования разработки https://boosty.to/bitrix24-php-sdk
👍2🔥2
Bitrix24 Apps & BITRIX24-PHP-SDK pinned «Новый релиз bitrix24-php-sdk — 2.0-alpha.7 Обновляемся и тестируем! 🚀 https://github.com/mesilov/bitrix24-php-sdk Добавлено: — скоуп Telephony и сервисы по работе с ней — скоуп UserConsent и сервисы по работе с ним — скоуп Placements и сервисы по работе с…»
Привет, новая сборка SDK на подходе:

2.0-beta.1 — 18.02.2024
https://github.com/mesilov/bitrix24-php-sdk/releases – полный список изменений

Добавлено
add php 8.3, 8.2 support, drop 8.1 and 8.0 support
add Symfony\Component\Uid\Uuid requirements
add contracts for bitrix24 applications based on bitrix24-php-sdk - Bitrix24\SDK\Application\Contracts, now added Bitrix24Account
add service builder factory https://github.com/mesilov/bitrix24-php-sdk/issues/328
add method Bitrix24\SDK\Core\Credentials\Scope::initFromString
add method Bitrix24\SDK\Application\ApplicationStatus::initFromString
add system CRM multi-field type Bitrix24\SDK\Services\CRM\Common\Result\SystemFields\Types\Phone
add scope user,user_basic,user_brief,user.userfield and services https://github.com/mesilov/bitrix24-php-sdk/issues/339
Bitrix24\SDK\Services\User\Service\User::fields - get user fields
Bitrix24\SDK\Services\User\Service\User::current - get current user
Bitrix24\SDK\Services\User\Service\User::add - add user
Bitrix24\SDK\Services\User\Service\User::get - get user
Bitrix24\SDK\Services\User\Service\User::update - update user
Bitrix24\SDK\Services\User\Service\User::search - search users
add method \Bitrix24\SDK\Services\CRM\Contact\Service\Batch::update() for batch update contacts
add crm item support https://github.com/mesilov/bitrix24-php-sdk/issues/330
add enum DealStageSemanticId
add Duplicate search support for Bitrix24\SDK\Services\CRM\Duplicates\Service\Duplicate
add x-request-id header support https://github.com/mesilov/bitrix24-php-sdk/issues/354
add CRM multifields support https://github.com/mesilov/bitrix24-php-sdk/issues/338
Email
Phone
Website
IM
add Catalog https://github.com/mesilov/bitrix24-php-sdk/issues/364 scope services support
👍7
Привет, у нас хорошие новости!

Спонсором разработки https://github.com/mesilov/bitrix24-php-sdk на этот год становится компания Яндекс.

В рамках программы грантов Yandex Open Source компания перечислит 600 000 руб. для развития проекта.
Поддержка будет оказана в виде оплаты расходов в их вычислительном облаке.

По всей видимости, в течении этого года, можно будет ожидать примеров приложений, развёрнутых на базе yandex.cloud
stay tuned 🚀

Если вы уже живёте в их облаке и разрабатываете приложения, то напишите пожалуйста в комментариях свои впечатления и какие сервисы вы используете.
🔥14👍2
Привет, вот вам тема на подумать и предложить более элегантное решение:

При разработке bitrix24-php-sdk я все методы стараюсь покрывать интеграционными тестами, это позволяет:
⁃ найти расхождения с документацией по структурам данных
⁃ убедиться здесь и сейчас, что оно работает
⁃ быстро дёрнуть метод при поиске решения и убедиться, что это то что надо.

Авторизация идёт через входящий вебхук, который прокидывается из переменных окружения, это позволяет:
- гнать тесты внутри CI пайплайна
- при необходимости подпихнуть свой и вызвать тест на интересующий метод (об свой портал)

Боль: часть методов требует токенов приложения, от вебхука они не работают.

Варианты:
1. На эти методы тестов не писать 🤡, а проверить работу на локальном приложении и надеяться на лучшее. Считаю, что этот подход можно использовать если остальные слишком дорогие в реализации.

2. Тесты написать, сделать костыль для получения токена локального приложения которое запущено рядом, т.е. если хотите протестировать эти методы, то сделайте локальное приложение по инструкции, поднимите его, получите актуальные токены и уже потом запускайте все тесты. Из минусов - такое не взлетит в CI-пайплайне.

3. Тесты написать, сделать костыль для получения и обновления токенов приложения, которое бежит как условная лямбда в облаке и хранит там-же актуальные токены. Будет работать локально и в CI-пайплайне, больше всего мороки.

Что выбираем?
🤯1
Обнаружил себя в ситуации, когда в одном окне у меня открыта документация к REST-API Битрикс24 и ряд дампов с ответами от сервера, а в другом — руководство от посудомоечной машины.
В одном из них все сразу понятно, хорошо структурировано и не допускает различных прочтений.
А второе — это записки сумасшедшего, что ты несёшь блядь.

Так вот, с телефонией разобраться проще.
👍2
Привет!
В рамках работ по выпуску сборки bitrix24-php-sdk v2.0 был полностью переписан скоуп telephony,

https://github.com/mesilov/bitrix24-php-sdk/pull/388

Теперь поддерживаются все методы, в т.ч. из неймспейса voximplant, всё покрыто тестами, в проект занесли rector.
Т.к. меняется мажорная версия, то происходит полная потеря обратной совместимости с предыдущими версиями 🤗
🔥2