Комментарии 4
А где почитать про Меню команд и метод его задания? Не нашел в документации
Спасибо, что обратили внимание; подкорректировал публикацию. Это не самостоятельный метод, а часть недокументированного запроса PATCH /me на изменение данных бота, который был подсмотрен в официальной TypeScript-либе MAX и про который я здесь упоминал. На чистом PHP работающий код задания меню команд выглядит так:
<?php
/**
* @param string $botToken токен бота
* @param array $commands Массив команд. Каждый элемент - key-value массив с элементами:
*
* name - название команды (без дроби в начале)
* description - описание команды.
*
* @return mixed Ответ от сервера
*/
function setCommandMenu(string $botToken, array $commands): mixed
{
/** @var string $url URL запроса */
$url = 'https://platform-api.max.ru/me';
/** @var CurlHandle $ch handle объекта cURL */
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, false);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Host: ' . parse_url($url, PHP_URL_HOST),
'Accept: application/json',
'Content-Type: application/json',
'Authorization: ' . $botToken,
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'commands' => $commands,
], JSON_UNESCAPED_UNICODE));
return curl_exec($ch);
}
echo setCommandMenu('токен бота', [
[
'name' => 'command1',
'description' => 'Описание команды 1',
],
[
'name' => 'command2',
'description' => 'Описание команды 2',
],
]) . "\n";Пока проверял код, освежил память и немного подысследовал вопрос. Результаты:
Работает в личке или в чате, где бот прописан админом (пользователя чата не пробовал, в чате у меня как у вызывающего меню права админа, под юзером не пробовал);
На клиенте Windows-десктопа не работает; работает под Android; веб-версию и огрызки не проверял;
Если у пользователя открыт чат с ботом (или чат, где бот-админ), а в боте в этот момент меняется меню команд, оперативного изменения не произойдёт. Нужно вылезть обратно в список чатов, снова открыть переписку с ботом или чат и вызвать меню нажатием / - тогда заработает.
Если в массиве в разных элементах дублируются названия команд, это будет проглочено как API, так и клиентом: будут два пункта. Не ругнётся и не сбойнёт ничего.
Спасибо, я таки решил воспользоваться maxapi с гитхаба)
В общем разумно. Единственная рекомендация - придержать копию репозитория где-то в бэкапе у себя на случай, если гитхаб внезапно заблокирует репозитории разработчиков плюшек для MAX. Ну и иметь возможность оперативно этот бэкап подключить к своему проекту, пока коллеги не перевыложат репозиторий куда-то ещё и не дадут официальные инструкции по переходу.

Практическое махоботоводство в 2026 году. Часть 1