webtolk / max
Pure Composer SDK for MAX Platform API
Requires
- php: >=8.1
- ext-json: *
- ext-mbstring: *
- ext-pcre: *
- psr/http-client: ^1.0
- psr/http-factory: ^1.0
- psr/http-message: ^1.1|^2.0
- psr/log: ^1.1 || ^2.0 || ^3.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.66
- guzzlehttp/guzzle: ^7
- joomla/http: ^4.0
- laminas/laminas-diactoros: ^3.6
- phpunit/phpunit: ^10.5
README
webtolk/max — framework-agnostic PHP SDK для MAX Platform API с архитектурой facade + modules + request objects + entities.
Что умеет SDK
- работать на PHP
8.1+ - принимать любой PSR-18 HTTP client
- использовать PSR-17
RequestFactoryInterfaceиStreamFactoryInterface - отдавать типизированные модули
bots,chats,messages,uploads,subscriptions,updates - сериализовать payload/query объекты без ручной сборки массивов по всему проекту
- гидрировать ответы API в entity-объекты вместо сырых массивов
Установка
Минимальная установка самой библиотеки:
composer require webtolk/max
Установка вместе со всеми необходимыми библиотеками. HTTP-клиент может быть любой: Guzzle, Joomla, Simphony и т.д.
composer require webtolk/max joomla/http laminas/laminas-diactoros
Runtime requirements:
php >= 8.1ext-jsonext-mbstringext-pcre
Важно: SDK не создаёт transport сам. До первого вызова любого модуля нужно передать HTTP client и PSR-17 фабрики через Max::setTransport().
Quick Start
Пример ниже показывает типичный старт с Joomla HTTP Client.
<?php declare(strict_types=1); use Joomla\Http\HttpFactory as JoomlaHttpFactory; use Laminas\Diactoros\RequestFactory; use Laminas\Diactoros\StreamFactory; use Webtolk\Max\Config\MaxConfig; use Webtolk\Max\Max; use Webtolk\Max\Payload\NewMessageBody; require_once __DIR__ . '/vendor/autoload.php'; $token = 'YOUR_BOT_TOKEN'; $httpClient = (new JoomlaHttpFactory())->getHttp([ 'timeout' => 20, ]); $max = new Max(new MaxConfig($token)); $max->setTransport( $httpClient, new RequestFactory(), new StreamFactory(), ); $bot = $max->bots()->me(); echo 'Bot ID: ' . $bot->getId() . PHP_EOL; echo 'Username: ' . $bot->getUsername() . PHP_EOL; $message = $max->messages()->sendToChat( 123456, NewMessageBody::text('Привет из MAX SDK') ); echo 'Message text: ' . ($message->getBody()?->getText() ?? '') . PHP_EOL;
Как это устроено
MaxConfigхранит токен и дополнительные HTTP headers.Max::setTransport()создаёт внутренний transport adapter.- Фасад
Maxотдаёт модуль:bots(),chats(),messages(),uploads(),subscriptions()илиupdates(). - Модуль вызывает соответствующий request object.
- Ответ MAX API гидрируется в entity-объект SDK.
Основные возможности
Bots
bots()->me()— получить профиль текущего бота
Chats
chats()->list()— список чатовchats()->getById()— карточка чатаchats()->members()— участникиchats()->memberMe()— текущий участникchats()->admins()— администраторыchats()->update()— изменение названия, иконки и pinned messagechats()->delete()— удаление чатаchats()->getPinnedMessage()— чтение закреплённого сообщенияchats()->pin()— закрепление сообщенияchats()->unpin()— снятие закрепленияchats()->addMembers()— добавление участниковchats()->removeMember()— удаление участникаchats()->leave()— выход бота из чатаchats()->addAdmins()— назначение администраторовchats()->removeAdmin()— снятие прав администратораchats()->sendAction()— отправка typing/photo/video/audio/file/seen action
Messages
messages()->sendToChat()— отправка в чатmessages()->sendToUser()— отправка пользователюmessages()->getById()— чтение поmessage_idsmessages()->list()— выборка сообщенийmessages()->edit()— редактированиеmessages()->delete()— удалениеmessages()->answerCallback()— callback answer
Uploads
uploads()->create()— получить upload URLuploads()->getVideo()— получить метаданные видео по токенуuploads()->pushBinary()— отправить бинарные данные на upload host поUploadUrl, полученному изuploads()->create()uploads()->upload()— пройти весь upload flow одним вызовом
Subscriptions и Updates
subscriptions()->list(),create(),delete()updates()->list()для long polling
JSON Schemas
Публичный репозиторий содержит обезличенный schema pack:
docs/api-schemas/index.jsondocs/api-schemas/methods/*.schema.json
Эти файлы нужны как публичный reference layer для формы запросов и ответов. Все чувствительные значения в schema/examples маскируются как XXXX.
Что важно учитывать
- До вызова
setTransport()модули использовать нельзя. messages.getById()используетGET /messagesс параметромmessage_ids.- Для
audioиvideoпосле успешной загрузки возможен временныйattachment.not.ready. - Для
messages.answerCallback()в публичном schema pack уже есть подтверждённый success example.
Тестирование
В публичном репозитории сохранены:
- unit tests в
tests/Unit/** - PHPUnit config в
phpunit.xml - обезличенные API schemas в
docs/api-schemas/**
Запуск unit tests:
vendor/bin/phpunit --configuration phpunit.xml