Перейти к содержанию

UploadFile#

Тест Postman

Для метода UploadFile рекомендуется использовать хост mediaUrl из личного кабинета

Метод предназначен для загрузки файла в облачное хранилище, который можно отправить методом sendFileByUrl. А так же позволяет избежать ошибок получения файлов из внешних хранилищ и ускорить отправку сообщений, например, в сценарии рассылки.

Альтернативный способ отправить файл загрузкой с диска: sendFileByUpload.

Рекомендуется применять метод при рассылках однотипных сообщений:

  1. Методом UploadFile загрузите требуемый файл в хранилище Green-API, в ответе получите ссылку на файл.
  2. Методом SendFileByUrl производите отправку используя полученную ссылку.

Срок жизни ссылки 15 дней.

Максимальный размер отправляемых файлов равен 100 Мбайт.

Тип отправляемого файла и способ его отправки определяется по расширению файла.

Список файловых форматов, которые успешно отправляются и принимаются через API

Запрос#

Для выгрузки файла требуется выполнить запрос по адресу:

POST
{{mediaUrl}}/waInstance{{idInstance}}/uploadFile/{{apiTokenInstance}}

Для получения параметров запроса mediaUrl, idInstance и apiTokenInstance обратитесь к разделу Перед началом работы.

Параметры заголовка#

Параметр Обязательный Описание
Content-Type Да Тип файла в соответствии со списком MIME-типов . (Если тип файла отсутствует в списке, то вместо данной стоки передаётся GA-Filename)
GA-Filename Нет Имя файла с расширением, если файл отсутсвует в списке MIME-типов. Например, файлы как .go или .py. (Если тип файла соответствует списку, строка не передаётся, используется только Content-Type)

Если система не сможет определить тип файла, то произойдет отправка с типом по умолчанию (бинарный файл): .bin

Параметры запроса#

Параметр Тип Обязательный Описание
file binary Да Выгружаемый файл

Пример тела запроса#

В качестве тела запроса необходимо указать сам файл

Ответ#

Поля ответа#

Поле Тип Описание
urlFile string Ссылка на выгруженный файл
Как получить информацию о сроке хранения файла в хранилище GREEN API

Чтобы получить информацию о сроке хранения файла, нужно выполнить запрос типа HEAD.

Для этого:

  1. Используя Postman создайте запрос типа HEAD

    head-request

  2. В заголовке ответа найдите поле X-Amz-Expiration с указанием даты и времени хранения файла.

  3. Полученное значение указывает до какого числа и времени будет доступна ссылка.

Например, поле X-Amz-Expiration, содержит данные expiry-date="Sat, 01 Jun 2024 00:00:00 GMT". Это обозначает, что ссылка доступна до 01.06.2024 00:00:00 по часовому поясу GMT.

head-result

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

{
    "urlFile": "https://sw-media-out.storage.yandexcloud.net/1101123456/c1aabd48-c1c2-49b1-8f2d-f575a41777be.jpg"
}

Ошибки uploadFile#

Перечень общих для всех методов ошибок смотрите в разделе Стандартные ошибки

Код HTTP Идентификатор ошибки Описание
400 file should not be empty Пользователь отправил пустой файл. Загружаемый файл не должен быть пустым.
413 request entity too large Превышение допустимого размера файла (~99.9mb)
Возникает при отправке файлов в обработке 1С (версия 8.3.22.1923). Возможное решение: Сменить версию 1С.
500 Internal Server Error Неверно указан метод запроса. Измените метод на POST и повторите запрос

Примеры кода#

Примеры кода uploadFile#

import requests

url = "{{mediaUrl}}/waInstance{{idInstance}}/uploadFile/{{apiTokenInstance}}"

payload = "<file contents here>"
headers = {
  'Content-Type': 'image/jpeg'
}

response = requests.post(url, data=payload, files=files)

print(response.text.encode('utf8'))
curl --location '{{mediaUrl}}/{{idInstance}}/uploadFile/{{apiTokenInstance}}' \
--header 'Content-Type: image/jpeg' \
--data '@test.jpg'
var file = new File("/Users/user/Desktop/fileExample.jpeg");
var restTemplate = new RestTemplate();
var requestUrl = new StringBuilder();
requestUrl
    .append({{mediaUrl}})
    .append("/waInstance").append({{idInstance}})
    .append("/uploadFile/")
    .append({{apiTokenInstance}});

var byteArrayResource = new ByteArrayResource(Files.readAllBytes(file.toPath()));

var headers = new HttpHeaders();
headers.setContentType(MediaTypeFactory.getMediaType(file.getName())
    .orElse(MediaType.APPLICATION_OCTET_STREAM));

var requestEntity = new HttpEntity<>(byteArrayResource, headers);

var response = restTemplate.exchange(requestUrl.toString(), HttpMethod.POST, requestEntity, String.class);
System.out.println(response);
var file = new File("/Users/user/Desktop/fileExample.jpeg");
var requestUrl = new StringBuilder();
requestUrl
    .append({{mediaUrl}})
    .append("/waInstance").append({{idInstance}})
    .append("/uploadFile/")
    .append({{apiTokenInstance}});

var response = Unirest.post(requestUrl.toString())
    .header("Content-Type", Files.probeContentType(file.toPath()))
    .body(Files.readAllBytes(file.toPath()))
    .asString();

System.out.println(response);
<?php
// Need to use SDK https://github.com/green-api/whatsapp-api-client-php
require './vendor/autoload.php';

use GreenApi\RestApi\GreenApiClient;

define( "ID_INSTANCE", "1101712345" );
define( "API_TOKEN_INSTANCE", "d75b3a66374942c5b3c019c698abc2067e151558acbd412345" );

$greenApi = new GreenApiClient( ID_INSTANCE, API_TOKEN_INSTANCE );

$result = $greenApi->sending->uploadFile(
    'C:\Games\PicFromDisk.png'
);

print_r(  $result->data );

Пример кода с использованием методов uploadFile + sendFileByUrl#

<?php
// Need to use SDK https://github.com/green-api/whatsapp-api-client-php
require './vendor/autoload.php';

use GreenApi\RestApi\GreenApiClient;

define( "ID_INSTANCE", "1101123456" );
define( "API_TOKEN_INSTANCE", "d75b3a66374942c5b3c019c698abc2067e151558acbd412345" );

$greenApi = new GreenApiClient( ID_INSTANCE, API_TOKEN_INSTANCE, 'http://127.0.0.1:8080' );

$result = $greenApi->sending->uploadFile(
    'C:\Games\PicFromDisk.png'
);

print_r(  $result->data );

$result = $greenApi->sending->sendFileByUrl(
    '11001234567@c.us',
    $result->data->urlFile,
    'googlelogo_color_272x92dp.png',
    'Google logo'
);

print_r(  $result->data );