webtolk/max — framework-agnostic PHP SDK для MAX Platform API с архитектурой facade + modules + request objects + entities.
- работать на 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-diactorosRuntime requirements:
php >= 8.1ext-jsonext-mbstringext-pcre
Важно: SDK не создаёт transport сам. До первого вызова любого модуля нужно передать HTTP client и PSR-17 фабрики через Max::setTransport().
Пример ниже показывает типичный старт с 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()->me()— получить профиль текущего бота
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()->sendToChat()— отправка в чатmessages()->sendToUser()— отправка пользователюmessages()->getById()— чтение поmessage_idsmessages()->list()— выборка сообщенийmessages()->edit()— редактированиеmessages()->delete()— удалениеmessages()->answerCallback()— callback answer
uploads()->create()— получить upload URLuploads()->getVideo()— получить метаданные видео по токенуuploads()->pushBinary()— отправить бинарные данные на upload host поUploadUrl, полученному изuploads()->create()uploads()->upload()— пройти весь upload flow одним вызовом
subscriptions()->list(),create(),delete()updates()->list()для long polling
Публичный репозиторий содержит обезличенный 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