Всем привет, с вами TagdTagd. И это вторая часть. Практическая.
Скрипт писался с привлечением ИИ, но мной отлажен, и точно работает. Требует jq и curl. В отличие от телеграма, в максе заявлено, что бот может писать сообщения пользователю только в течение суток, после последнего сообщения пользователя боту.
С определением номеров пользователей и групп разбирался по статье Романа. Там очень хорошо описано.
#!/bin/bash
# Скрипт отправляет текстовое сообщение пользователю или в чат
# $1 "user" для отправки пользователю, "chat" для отправки в чат
# $2 ID пользователя или чата, соответственно
# $3 "Текст сообщения в кавычках"
# $4 "Имя файла в кавычках"
# если файл есть, а текста нет - вместо текста ""
# v 20260812
declare -x PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
set -euo pipefail
exec 1>&2
declare BASE_URL="https://platform-api2.max.ru" # база API + нужны сert минцифры
declare BOT_TOKEN="AAAAAAAAAAAAAAAAAAA_BBBBBBBB_CCCCCCCCCCCCCCCC"
# === Параметры скрипта ===
case "$#" in
0|1|2)
clear
head -6 "$0"
exit 1 ;;
3)
declare FILE="" ;;
*)
declare FILE=$4
if [[ -f "$FILE" ]];then
clear
echo -e "Файл '$FILE' не найден"
exit 1
fi ;;
esac
if [[ -z "$3" && -z "$4" ]]; then
clear
echo -e "Ошибка. Нет текста или файла."
exit 1
fi
declare -l RECEPIENT=$1
declare ID=$2
declare TEXT=$3
case $RECEPIENT in
user | chat )
declare TO_URL="$BASE_URL/messages?${RECEPIENT}_id=$ID" ;;
*)
clear
echo -e "ошибка параметра 1" $RECEPIENT\\n
head -6 "$0"
exit 1 ;;
esac
#declare -p RECEPIENT ID TEXT FILE TO_URL
# === 1. Получить URL для загрузки файла ===
if [[ -n "$FILE" ]]; then
UPLOAD_META=$(curl -s -X POST \
"$BASE_URL/uploads?type=file" \
-H "Authorization: $BOT_TOKEN")
UPLOAD_URL=$(echo "$UPLOAD_META" | jq -r '.url')
if [[ -z "$UPLOAD_URL" || "$UPLOAD_URL" == "null" ]]; then
echo "Не удалось получить URL для загрузки"
echo "Ответ API: $UPLOAD_META"
exit 2
fi
# === 2. Загрузить файл ===
UPLOAD_RESULT=$(curl -s -X POST \
"$UPLOAD_URL" \
-F "data=@$FILE")
# Сохраняем результат загрузки в переменную для вложения
ATTACHMENT_PAYLOAD="$UPLOAD_RESULT"
fi
# === 3. Формируем JSON сообщения ===
# Если есть файл, добавляем attachment
if [[ -n "$FILE" ]]; then
MESSAGE_JSON=$(jq -n \
--arg text "$TEXT" \
--argjson attachment "$ATTACHMENT_PAYLOAD" \
'{
text: $text,
attachments: [
{
type: "file",
payload: $attachment
}
]
}')
else
MESSAGE_JSON=$(jq -n --arg text "$TEXT" '{text: $text}')
fi
sleep 3 # для антифлуда
# === 4. Отправляем сообщение ===
curl -s -X POST \
"$TO_URL" \
-H "Authorization: $BOT_TOKEN" \
-H "Content-Type: application/json" \
-d "$MESSAGE_JSON" | jq .
Сохраняем send_max.sh
chmod +x ./send_max.sh
/send_max.sh "chat" 123456 "text" "/path/to/file"








Комментарии