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

UploadFile Протестировать#

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

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

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

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

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

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

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

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

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

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

Запрос#

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

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

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

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

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

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

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

Ответ#

Поля ответа#

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

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

{
    "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 Возникает при отправке файлов в обработке 1С (версия 8.3.22.1923). Возможное решение: Сменить версию 1С.

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

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

Примеры кода

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({{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 );