Небольшая утилита для Windows PowerShell 5.1, которая загружает один локальный файл в MAX Bot API.
Поддерживаются типы:
imagevideoaudiofile
- Запрашивает upload URL через
POST /uploads?type=.... - Загружает один локальный файл как
multipart/form-dataс именем поляdata. - Автоматически определяет тип загрузки по расширению файла.
- Передаёт подходящий MIME type для известных расширений.
- Даёт две версии запуска:
- подробную, с ответами MAX и готовыми примерами JSON;
- короткую, которая выводит только тело запроса одной строкой и копирует его в буфер обмена.
Никаких команд вводить не нужно. После настройки .env достаточно перетащить файл мышкой на нужный .bat:
- нужен полный подробный вывод — перетащите файл на
run.bat; - нужно только тело запроса и автоматическое копирование в буфер — перетащите файл на
run-body.bat.
После перетаскивания откроется окно PowerShell. Дождитесь завершения загрузки: большие файлы и видео могут загружаться заметно дольше, и в этот момент может казаться, что окно “зависло”. Это нормально, не закрывайте окно, пока не появится результат.
- Windows
- PowerShell 5.1
curl.exe- Токен MAX-бота
- Локальный файл для загрузки
Перед первым запуском нужно один раз создать файл настроек .env.
В папке проекта уже есть файл .env.example. Это пример настроек. Его нужно скопировать или переименовать так, чтобы в названии осталось только .env, без .example.
Самый простой вариант:
- Найдите файл
.env.example. - Сделайте его копию в этой же папке.
- Переименуйте копию в
.env. - Откройте
.envобычным текстовым редактором, например Блокнотом. - Вставьте токен MAX-бота вместо
PUT_YOUR_MAX_BOT_TOKEN_HERE.
Можно сделать то же самое командой:
copy .env.example .envПосле этого откройте .env Блокнотом или любым другим текстовым редактором.
Пример содержимого .env:
MAX_BOT_TOKEN=PUT_YOUR_MAX_BOT_TOKEN_HERE
MAX_UPLOAD_TYPE=autoНужно заменить только значение после MAX_BOT_TOKEN=. Строку MAX_UPLOAD_TYPE=auto обычно трогать не нужно.
Например:
MAX_BOT_TOKEN=ваш_токен_бота
MAX_UPLOAD_TYPE=autoПуть к файлу удобнее не хранить в .env: можно перетащить файл на .bat, передать путь аргументом или вставить путь при запуске.
Если всё-таки нужен файл по умолчанию, можно добавить:
MAX_FILE_PATH=C:\temp\voice.mp3Старый параметр AUDIO_FILE_PATH ещё поддерживается, но лучше перейти на новый способ.
Используйте эту версию, если нужен полный ответ: upload URL response, raw response загрузки, attachment JSON и пример body для POST /messages.
Самый простой запуск: перетащите файл мышкой на run.bat.
Альтернативно можно запустить с вводом пути:
run.batЗапуск с путём:
run.bat "C:\temp\picture.png"Запуск с явным типом:
run.bat "C:\temp\unknown.bin" fileМожно вызвать PowerShell-скрипт напрямую:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\upload-max-file.ps1 -FilePath "C:\temp\movie.mp4" -UploadType videoПосле строки Uploading file with curl.exe... дождитесь ответа сервера. Для больших файлов и видео это может занять время.
Используйте эту версию, если нужно сразу получить только body запроса одной строкой и скопировать его в буфер обмена.
Самый простой запуск: перетащите файл мышкой на run-body.bat.
Альтернативно можно запустить с вводом пути:
run-body.batЗапуск с путём:
run-body.bat "C:\temp\picture.png"С явным типом:
run-body.bat "C:\temp\unknown.bin" fileВ конце скрипт выводит JSON одной строкой, без переносов:
{"text":"","attachments":[{"type":"image","payload":{"token":"TOKEN"}}],"format":"html"}Эта строка автоматически копируется в буфер обмена. type определяется автоматически.
В теле запроса заранее используется пустой text: MAX API не ругается на пустую строку, а при необходимости текст к вложению проще быстро вписать прямо в готовый JSON.
Также сразу добавлено "format":"html". Если HTML-форматирование не нужно, это поле можно удалить или поменять значение на markdown.
Для image скрипт достаёт token из вложенного ответа MAX и приводит payload к виду {"token":"..."}.
После строки Uploading file and preparing request body... дождитесь завершения загрузки. Если файл большой или это видео, скрипт может некоторое время не выводить новые строки, пока upload-сервер принимает файл.
Для видео скрипт показывает ответ upload-сервера. Если MAX принял файл, но готовое тело запроса не срабатывает сразу, подождите немного и повторите отправку: видео может обрабатываться не мгновенно.
Если нужен вывод только JSON без служебных строк, можно вызвать PowerShell-скрипт напрямую:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\upload-max-body.ps1 -FilePath "C:\temp\picture.png" -JsonOnlyПри MAX_UPLOAD_TYPE=auto расширения сопоставляются так:
- Изображения:
.jpg,.jpeg,.png,.gif,.tiff,.tif,.bmp,.heic - Видео:
.mp4,.mov,.mkv,.webm,.matroska - Аудио:
.mp3,.wav,.m4a,.aac,.ogg,.opus,.flac - Всё остальное:
file
Поддерживаемые типы MAX: image, video, audio, file.
Подробный скрипт выводит готовый attachment JSON. Точная форма payload зависит от ответа MAX и типа файла.
{
"type": "file",
"payload": {
"fileId": 123,
"token": "TOKEN"
}
}И пример полного body для последующего POST /messages:
{
"text": null,
"attachments": [
{
"type": "file",
"payload": {
"fileId": 123,
"token": "TOKEN"
}
}
]
}Для audio и video MAX возвращает token при создании upload URL. Для image и file token берётся из ответа загрузки.
Реальные тесты API подтвердили file, image, audio с MP3 и video с MP4. Для WAV во время тестирования MAX вернул 415 Unsupported Media Type; если это повторится, конвертируйте аудио в MP3 и попробуйте снова.
Если MAX возвращает attachment.not.ready при отправке сообщения, подождите несколько секунд и повторите отправку.