Данный метод позволяет отправить файл получателю через канал связи, передавая содержимое в теле запроса в кодировке 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":"..."}).


Параметры запроса
ПараметрТипОбязательныйОписание
tokenstringДаAPI-токен канала (Настройки > Управление > API)
phonestringДаНомер в международном формате (например, 79001234567) или ID чата / никнейм для Telegram и MAX. Передаётся в URL (путь или GET ?phone=)
file_namestringДаИмя файла с расширением (например, document.pdf). В теле POST или JSON. Из имени удаляются недопустимые символы
file_base64stringДаСодержимое файла в BASE64 (без префикса data:...). В теле POST или JSON
quote_msg_idintegerНет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;