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

UploadFile#

Для метода UploadFile рекомендуется использовать хост media.green-api.com

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

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

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

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

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

Применение метода UploadFile

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

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

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

Для этого:

  1. Получите ссылку на файл
  2. Выполните HEAD запрос с полученной ссылкой

    head-request

  3. Из результата получите значение поля X-Amz-Expiration

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

Например, получили значение поля X-Amz-Expiration, который равен expiry-date="Thu, 25 Apr 2024 00:00:00 GMT". Это обозначает, что ссылка доступна до 25.04.2024 00:00:00 по нулевому часовому поясу.

head-result

Запрос#

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

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

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

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

В качестве тела запроса необходимо указать сам файл
  • В заголовке запроса необходимо указать тип файла Content-Type в соответствии со списком MIME-типов.
  • Если файл отсутсвует в списке MIME-типов, вы можете передать заголовок GA-Filename, указав имя файла с расширением. Это позволит загружать такие файлы, как .go или .py.
  • Если система не сможет определить тип файла, то произойдет отправка с типом по умолчанию (бинарный файл): .bin
Параметр Тип Обязательный Описание
file binary Да Выгружаемый файл

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

Примеры кода

import requests

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

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

response = requests.request("POST", url, headers = headers, data = payload)

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("https://media.greenapi.com")
    .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("https://media.greenapi.com")
    .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 );

Ответ#

Поля ответа#

Поле Тип Описание
urlFile string Ссылка на выгруженный файл

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

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

Пример кода с использованием методов 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 );

Ошибки UploadFile#

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

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