UploadFile#
Для метода UploadFile рекомендуется использовать хост mediaUrl из личного кабинета
Метод предназначен для загрузки файла в облачное хранилище, который можно отправить методом sendFileByUrl. А так же позволяет избежать ошибок получения файлов из внешних хранилищ и ускорить отправку сообщений, например, в сценарии рассылки.
Альтернативный способ отправить файл загрузкой с диска: sendFileByUpload.
Рекомендуется применять метод при рассылках однотипных сообщений:
- Методом UploadFile загрузите требуемый файл в хранилище Green-API, в ответе получите ссылку на файл.
- Методом SendFileByUrl производите отправку используя полученную ссылку.
Срок жизни ссылки 15 дней.
Максимальный размер отправляемых файлов равен 100 Мбайт.
Тип отправляемого файла и способ его отправки определяется по расширению файла.
Список файловых форматов, которые успешно отправляются и принимаются через API
Запрос#
Для выгрузки файла требуется выполнить запрос по адресу:
{{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.
Для этого:
-
Используя Postman создайте запрос типа
HEAD
-
В заголовке ответа найдите поле
X-Amz-Expiration
с указанием даты и времени хранения файла. - Полученное значение указывает до какого числа и времени будет доступна ссылка.
Например, поле X-Amz-Expiration
, содержит данные expiry-date="Sat, 01 Jun 2024 00:00:00 GMT"
. Это обозначает, что ссылка доступна до 01.06.2024 00:00:00
по часовому поясу GMT.
Пример тела ответа#
{
"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}}"
files = [
('file', ('window.jpg', open('C:/window.jpg','rb'),'image/jpeg'))
]
headers = {
'Content-Type': 'image/jpeg'
}
response = requests.post(url, files=files, headers=headers)
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 );