Перейти к содержимому

sendFileByUpload

Обновлено 17 октября 2026

Отправляет файл, который лежит у вашего приложения, одним запросом multipart/form-data. Картинка уходит фото, видео — видео, OGG/Opus в Telegram и WhatsApp — голосовым, остальное — документом.

Запрос POST /waInstance{idInstance}/sendFileByUpload/{apiTokenInstance}
Тело multipart/form-data
Каналы MAX, Telegram, WhatsApp, почта

Параметры

Параметр Тип Обязательный Описание
chatId string да получатель: личный чат, группа или номер 79991234567@c.us — см. Идентификаторы чатов и сообщений
file файл да сам файл, до 100 МБ
fileName string нет имя файла у получателя; без него — имя из формы
caption string нет подпись под файлом; у почты — текст письма
quotedMessageId string нет ответить цитатой на сообщение этого же чата
clientMessageId string нет ваш ключ от дублей: повтор с тем же ключом и тем же файлом не создаст второе сообщение — см. Надёжная отправка без дублей

Пример запроса

Расписание в PDF по номеру телефона, с подписью и ключом от дублей:

curl

curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/sendFileByUpload/$GRATIO_TOKEN" \
  -F 'chatId=79991234567@c.us' \
  -F 'caption=Расписание на ноябрь' \
  -F 'clientMessageId=schedule-nov-79991234567' \
  -F 'file=@schedule.pdf;type=application/pdf'

Python

import os
import requests

BASE = f"{os.environ['GRATIO_URL']}/waInstance{os.environ['GRATIO_ID']}"
TOKEN = os.environ["GRATIO_TOKEN"]

url = f"{BASE}/sendFileByUpload/{TOKEN}"
fields = {
    "chatId": "79991234567@c.us",
    "caption": "Расписание на ноябрь",
    "clientMessageId": "schedule-nov-79991234567",
}
with open("schedule.pdf", "rb") as f:
    files = {"file": ("schedule.pdf", f, "application/pdf")}
    response = requests.post(url, data=fields, files=files, timeout=120)
print(response.status_code, response.json())

Node.js

import { readFile } from "node:fs/promises";
const { GRATIO_URL, GRATIO_ID, GRATIO_TOKEN } = process.env;
const base = `${GRATIO_URL}/waInstance${GRATIO_ID}`;

const url = `${base}/sendFileByUpload/${GRATIO_TOKEN}`;
const form = new FormData();
form.append("chatId", "79991234567@c.us");
form.append("caption", "Расписание на ноябрь");
form.append("clientMessageId", "schedule-nov-79991234567");
const file = new Blob([await readFile("schedule.pdf")], { type: "application/pdf" });
form.append("file", file, "schedule.pdf");
const response = await fetch(url, { method: "POST", body: form });
console.log(response.status, await response.json());

PHP

<?php
$base = getenv('GRATIO_URL') . '/waInstance' . getenv('GRATIO_ID');
$url = $base . '/sendFileByUpload/' . getenv('GRATIO_TOKEN');
$form = [
    'chatId' => '79991234567@c.us',
    'caption' => 'Расписание на ноябрь',
    'clientMessageId' => 'schedule-nov-79991234567',
    'file' => new CURLFile('schedule.pdf', 'application/pdf', 'schedule.pdf'),
];

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $form,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 120,
]);
$response = json_decode(curl_exec($ch), true);
echo curl_getinfo($ch, CURLINFO_HTTP_CODE), PHP_EOL;
print_r($response);

Пример ответа

Ответ 200 OK:

{
  "idMessage": "117428956522361912",
  "urlFile": "https://api.gratio.net/media/7100000001/8695836/117428956522361912/0/d8f9…"
}

Поля ответа

Поле Тип Описание
idMessage string id отправленного сообщения
urlFile string ссылка на отправленный файл в хранилище Gratio. Подписанная, без токена — её можно отдать в браузер или CRM, см. Файлы и ссылки на них

После отправки приходят outgoingAPIMessageReceived с fileMessageData и статус outgoingMessageStatus sent.

Ещё примеры

Голосовое

Файл OGG/Opus в Telegram и WhatsApp уходит голосовым сообщением с длительностью, как из приложения:

curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/sendFileByUpload/$GRATIO_TOKEN" \
  -F 'chatId=79991234567@c.us' \
  -F 'file=@answer.ogg;type=audio/ogg'

Фото с ответом цитатой

Фото в MAX — ответ на вопрос собеседника:

curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/sendFileByUpload/$GRATIO_TOKEN" \
  -F 'chatId=8695836' \
  -F 'caption=Вот схема проезда' \
  -F 'quotedMessageId=117428955282341903' \
  -F 'file=@map.jpg;type=image/jpeg'

Ошибки

Код code Когда Что делать
400 validation нет chatId или file добавить поле
400 file_empty файл пустой проверить файл
400 upload_failed мессенджер не принял файл повторить или отправить в другом формате
400 not_authorized канал не на связи проверить getStateInstance
400 no_account на номере …@c.us нет аккаунта в этом мессенджере выбрать другой канал
400 код площадки чата нет, собеседник закрыл сообщения см. message
402 payment_required канал на паузе за неоплату продлить канал в кабинете
409 idempotency_conflict тот же clientMessageId с другим файлом или подписью новый ключ для нового сообщения
413 — тело запроса больше 100 МБ уменьшить файл
429 too_frequent и другие темп канала, правило WhatsApp, суточный предел писем повторить после Retry-After
469 rate_limited Telegram попросил паузу повторить после Retry-After
503 outcome_unknown связь оборвалась посреди отправки повторить с тем же clientMessageId

Общие правила — в статье Ответы и ошибки.

Особенности каналов

Как уходит файл:

Файл MAX Telegram WhatsApp Почта
JPEG, PNG фото фото до 10 МБ, больше — документ фото вложение
GIF, WebP фото документ документ вложение
Видео видео видео видео вложение
OGG/Opus документ голосовое голосовое вложение
MP3, M4A, AAC, AMR документ аудио аудио без подписи вложение
Остальное документ документ документ вложение
  • Тип картинки Gratio определяет по содержимому, а не по имени файла.
  • MAX. Не принял картинку как фото или видео как видео — файл уходит документом. Перед отправкой Gratio отмечает прочитанными сообщения собеседника, пришедшие до неё.
  • WhatsApp. У аудио нет подписи: caption не уйдёт. Цитировать можно сообщения, которые канал видел с момента привязки.
  • Почта. Письмо с файлом во вложении, caption — текст письма. Письмо целиком — до 20 МБ, больше — 400 too_large.

Что дальше

  • sendFileByUrl — отправить файл по ссылке.
  • uploadFile — загрузить файл один раз и отправлять многим.
  • Файлы и альбомы — как приходят файлы собеседника.

Была ли статья полезна?