Данный метод позволяет отправить файл получателю через канал связи, передавая содержимое в теле запроса в кодировке BASE64 — без публичной ссылки на файл. Это удобно для CRM, 1С и других систем, где файл хранится локально или в закрытом хранилище. Перед отправкой выполняется та же проверка получателя, что и при отправке сообщений. Если файл уже доступен по URL в интернете, можно использовать отправку файлов по ссылке. Статус доставки проверяйте через получение статуса сообщения или WebHook.
При нескольких отправках подряд сообщения ставятся в очередь (интервал порядка 8–12 секунд между файлами). Для тестовых аккаунтов действует ограничение — не более 30 исходящих сообщений по API в сутки.
Поддерживаемые мессенджеры
Метод доступен для каналов: WhatsApp, MAX Personal, Telegram Personal, Telegram Bot. Для Telegram Bot и MAX Bot получатель должен уже быть в контактах WAMM.chat (как при отправке текста).
Пример запроса:
POST https://wamm.chat/api2/file_from_base64/{token}/?phone={phone} или
POST https://wamm.chat/api2/file_from_base64/{token}/{phone} Тело запроса: поля file_name и file_base64 — в формате application/x-www-form-urlencoded (POST) или в JSON (Content-Type: application/json, тело {"file_name":"...","file_base64":"..."}).
Параметры запроса
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| token | string | Да | API-токен канала (Настройки > Управление > API) |
| phone | string | Да | Номер в международном формате (например, 79001234567) или ID чата / никнейм для Telegram и MAX. Передаётся в URL (путь или GET ?phone=) |
| file_name | string | Да | Имя файла с расширением (например, document.pdf). В теле POST или JSON. Из имени удаляются недопустимые символы |
| file_base64 | string | Да | Содержимое файла в BASE64 (без префикса data:...). В теле POST или JSON |
| quote_msg_id | integer | Нет | ID сообщения WAMM.chat (msg_id из ответа отправки), если нужен ответ на конкретное сообщение. GET-параметр |
Ответ при успехе
{"err":0,"msg_id":1234567} Значение msg_id — идентификатор сообщения в WAMM.chat; используйте его для запроса статуса.
Возможные ошибки
| Код ошибки, значение «err» | Описание |
|---|---|
| token fail | Ошибка в токене или канал не активен по тарифу |
| acc not authorized | Канал не авторизован (не в состоянии authorized / suspended) |
| Limit 30 send messages per 1 day on TEST accounts | Лимит 30 исходящих сообщений по API в сутки на тестовом тарифе |
| phone fail | Ошибка в номере или идентификаторе получателя |
| no WhatsApp on the number | Нет WhatsApp на указанном номере (канал WhatsApp) |
| no Account on the number | Нет аккаунта на номере (Telegram, MAX и др.) |
| phone not checked for WhatsApp, please retry | Номер не проверен для WhatsApp — повторите запрос |
| phone not checked, please retry | Номер не проверен для канала — повторите запрос |
| file_name fail | Не указано имя файла или оно недопустимо после очистки |
| file_base64 fail | Не передано тело файла в BASE64 |
| file upload fail: … | Ошибка загрузки/разбора файла на сервере WAMM.chat |
| url fail | После загрузки не получена корректная ссылка на файл (http/https) |
| quote_msg_id fail, not found | Сообщение для цитирования не найдено |
Примеры использования
/**
* Отправка файла через API file_from_base64 (POST, form-data).
*/
function sendFileBase64($token, $phone, $fileName, $filePath) {
$fileContent = file_get_contents($filePath);
if ($fileContent === false) {
throw new RuntimeException('Не удалось прочитать файл: ' . $filePath);
}
$url = 'https://wamm.chat/api2/file_from_base64/' . rawurlencode($token)
. '/?phone=' . rawurlencode($phone);
$postData = [
'file_name' => $fileName,
'file_base64' => base64_encode($fileContent),
];
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $postData,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 120,
]);
$response = curl_exec($ch);
$httpCode = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($response === false) {
throw new RuntimeException('Ошибка HTTP-запроса к API');
}
$data = json_decode($response, true);
if (!is_array($data) || !array_key_exists('err', $data)) {
throw new RuntimeException('Некорректный ответ API: ' . $response);
}
if ($data['err'] === 0 || $data['err'] === '0') {
return (int) $data['msg_id'];
}
throw new RuntimeException('API error: ' . (is_string($data['err']) ? $data['err'] : json_encode($data['err'])));
}
// Пример вызова
$msgId = sendFileBase64('YOUR_TOKEN', '79001234567', 'document.pdf', '/path/to/document.pdf');
echo 'Файл поставлен в очередь, msg_id: ' . $msgId;