SendMessage#
Метод предназначен для отправки текстового сообщения в личный или групповой чат. Сообщение будет добавлено в очередь на отправку. Сообщение на отправку хранится 24 часа в очереди и будет отправлено сразу же после авторизации телефона. Скорость отправки сообщений из очереди регулирует параметр Интервал отправки сообщений.
Видеоинструкция#
Отправка сообщения себе
При отправке сообщений себе на номер или в группу с одним участником, статус сообщения будет sent (одна галочка). 
Запрос#
Для отправки текстового сообщения требуется выполнить запрос по адресу:
{{apiUrl}}/waInstance{{idInstance}}/sendMessage/{{apiTokenInstance}}
Для получения параметров запроса apiUrl, idInstance и apiTokenInstance обратитесь к разделу Перед началом работы.
Параметры запроса#
| Параметр | Тип | Обязательный | Описание | 
|---|---|---|---|
chatId |  string | Да | Идентификатор чата | 
message |  string | Да | Текст сообщения.  Поддерживаются символы emoji 😃. Максимальная длина текстового сообщения составляет 20000 символов. Форматирование текста производится в соответствии с правилами, указанными в нашей статье. Требуется использовать кодировку UTF-8 без BOM.  |  
quotedMessageId |  string | Нет | Идентификатор цитируемого сообщения. При заполнении параметра сообщение отправится с цитированием указанного сообщения чата.  Цитирование сообщения возможно только из того же чата, в который производится отправка. Для отправки сообщений из другого чата используется метод ForwardMessages  |  
linkPreview |  boolean | Нет | Параметр включает отображение превью и описание ссылки. По умолчанию включен.  Принимает значения: true/false Превью ссылки не будет добавлено, если оно весит более 2Мб  |  
typePreview |  string | Нет | Размер превью. Возможные значения: large для большого превью и small для маленького. Если typePreview: large и передается jpegThumbnail, вместо urlFile, то превью ссылки будет маленькое |  
customPreview |  object | Нет | Объект пользовательского превью.  Для отправки сообщения с превью рекомендуем ознакомиться со статьей Как отправить сообщение с превью.  |  
typingTime |  integer | Нет | Время показа уведомления набора сообщения в чате собеседника.  Время ограничено значениями от 1000 до 20000 миллисекунд (от 1 до 20 секунд).  |  
Поля объекта customPreview:
| Поле | Тип | Обязательный | Описание | 
|---|---|---|---|
title |  string | Да | Заголовок превью (до 300 символов) | 
description |  string | Нет | Описание (до 300 символов) | 
link |  string | Нет | Доменное имя сайта со ссылкой (до 300 символов). Обязательно должно дублироваться в поле message. |  
urlFile |  string | Нет | Ссылка на файл с картинкой для создания большого превью. Рекомендуемый формат изображения - jpeg |  
jpegThumbnail |  string | Нет | Предпросмотр изображения в base64 | 
Цитирование сообщений
Для корректной работы с механизмом цитирования сообщений система должна знать о сообщении, которое будет процитировано. Убедится о том что сообщение доступно к цитированию можно запросив метод журналирования getMessage, если сообщение отсутствует в системе, то цитировать такое сообщение невозможно.
-  
Для цитирования входящих сообщений необходимо включить настройку
Получать уведомления о входящих сообщениях и файлах. -  
Для цитирования исходящих сообщений отправленных с телефона, включите настройку
Получать уведомления о сообщениях, отправленных с телефона.
Так сообщения будут попадать в систему и их можно будет цитировать. 
Установку настроек можно сделать методом SetSettings или через личный кабинет.
Пример тела запроса#
Отправка сообщения в личный чат:
{
    "chatId": "79876543210@c.us",
    "message": "I use Green-API to send this message to you!"
}
Отправка сообщения в групповой чат:
{
    "chatId": "120363043968066561@g.us",
    "message": "I use Green-API to send this message to you!"
}
Отправка сообщения с цитированием:
{
    "chatId": "79876543210@с.us",
    "message": "I use Green-API to send this message to you!",
    "quotedMessageId": "361B0E63F2FDF95903B6A9C9A102F34B"
}
Отправка сообщения с большим пользовательским превью:
{
    "chatId": "79876543210@c.us",
    "message": "ссылка 1: https://green-api.com/docs/api/sending/SendMessage/ \n ссылка 2: https://green-api.com",
    "linkPreview": true,
    "typePreview": "large", 
    "customPreview": { 
        "title": "Пользовательское превью", 
        "description": "Уау", 
        "link": "https://green-api.com", 
        "urlFile": "https://storage.yandexcloud.net/green-api.com/logo/Logo_GREEN-API.jpg"
    }
}
Отправка сообщения с маленьким пользовательским превью:
{
    "chatId": "79876543210@c.us",
    "message": "ссылка 1: https://green-api.com/docs/api/sending/SendMessage/ \n ссылка 2: https://green-api.com",
    "linkPreview": true,
    "typePreview": "small", 
    "customPreview": { 
        "title": "Пользовательское превью", 
        "description": "Уау", 
        "link": "https://green-api.com", 
        "jpegThumbnail": "https://storage.yandexcloud.net/green-api.com/logo/Logo_GREEN-API.jpg"
    }
}
Ответ#
Поля ответа#
| Поле | Тип | Описание | 
|---|---|---|
idMessage |  string | Идентификатор отправленного сообщения | 
Пример тела ответа#
{
    "idMessage": "3EB0C767D097B7C7C030"
}
Ошибки SendMessage#
Перечень общих для всех методов ошибок смотрите в разделе Стандартные ошибки
| Код HTTP | Идентификатор ошибки | Описание | 
|---|---|---|
| 400 | Bad Request Validation failed |  Ошибка валидации | 
| 400 | Validation failed. Details: 'message' length must be less than or equal to 20000 characters long |  Текст сообщения должен быть меньше или равен 20000 символам | 
| 500 | request entity too large |  Превышение допустимой длины json (>100кб) | 
Отправка с неверным идентификатором цитируемого сообщения
В случае некорректного указания quotedMessageId, система вернёт код 200 и id отправляемого сообщения, но оно не будет доставлено получателю.
Примеры кода#
import requests
url = "{{apiUrl}}/waInstance{{idInstance}}/sendMessage/{{apiTokenInstance}}"
payload = {
    "chatId": "79876543210@c.us",
    "message": "I use Green-API to send this message to you!"
}
headers = {
'Content-Type': 'application/json'
}
response = requests.post(url, json=payload, headers=headers)
print(response.text.encode('utf8'))
<?php
//The apiUrl, idInstance and apiTokenInstance values are available in console, double brackets must be removed
$url = '{{apiUrl}}/waInstance{{idInstance}}/sendMessage/{{apiTokenInstance}}';
//chatId is the number to send the message to (@c.us for private chats, @g.us for group chats)
$data = array(
    'chatId' => '71234567890@c.us',
    'message' => 'Hello World'
);
$options = array(
    'http' => array(
        'header' => "Content-Type: application/json\r\n",
        'method' => 'POST',
        'content' => json_encode($data)
    )
);
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
echo $response;
?>
curl --location '{{apiUrl}}/waInstance{{idInstance}}/sendMessage/{{apiTokenInstance}}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "chatId": "71234567890@c.us",
    "message": "Hello World"
}'
var restTemplate = new RestTemplate();
var requestUrl = new StringBuilder();
requestUrl
    .append({{apiUrl}})
    .append("/waInstance").append({{idInstance}})
    .append("/sendMessage/")
    .append({{apiTokenInstance}});
var headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
var jsonBody = "{\r\n\t\"chatId\": \"79876543210@c.us\",\r\n\t\"message\": \"I use Green-API to send this message to you!\"\r\n}";
var requestEntity = new HttpEntity<>(jsonBody, headers);
var response = restTemplate.exchange(requestUrl.toString(), HttpMethod.POST, requestEntity, String.class);
System.out.println(response);
var requestUrl = new StringBuilder();
requestUrl
    .append({{apiUrl}})
    .append("/waInstance").append({{idInstance}})
    .append("/sendMessage/")
    .append({{apiTokenInstance}});
var response = Unirest.post(requestUrl.toString())
    .header("Content-Type", "application/json")
    .body("{\r\n\t\"chatId\": \"79876543210@c.us\",\r\n\t\"message\": \"I use Green-API to send this message to you!\"\r\n}")
    .asString();
System.out.println(response);
Sub SendMessage()
Dim URL As String
Dim RequestBody As String
Dim http As Object
' The apiUrl, idInstance and apiTokenInstance values are available in console, double brackets must be removed
URL = "{{apiUrl}}/waInstance{{idInstance}}/sendMessage/{{apiTokenInstance}}"
' chatId is the number to send the message to (@c.us for private chats, @g.us for group chats)
RequestBody = "{""chatId"":""71234567890@c.us"",""message"":""Hello World""}"
Set http = CreateObject("MSXML2.XMLHTTP")
With http
    .Open "POST", URL, False
    .setRequestHeader "Content-Type", "application/json"
    .send RequestBody
End With
Set http = Nothing
End Sub
program sendMessage;
{$APPTYPE CONSOLE}
uses
System.SysUtils,
System.Classes, System.Net.HttpClient, System.Net.URLClient, System.Net.HttpClientComponent;
var
HttpClient: TNetHTTPClient;
RequestBody: TStringStream;
RequestHeaders: TNetHeaders;
Response: IHTTPResponse;
EndpointURL, ID_INSTANCE, API_TOKEN_INSTANCE: string;
begin
ID_INSTANCE := '110100001';
API_TOKEN_INSTANCE := 'd75b3a66374942c5b3c019c698abc2067e151558acbd451234';
EndpointURL := 'https://api.green-api.com/waInstance' + ID_INSTANCE + '/sendMessage/' + API_TOKEN_INSTANCE;
HttpClient := TNetHTTPClient.Create(nil);
RequestBody := TStringStream.Create('{ "chatId": "71234567890@c.us", "message": "test" }', TEncoding.UTF8);
RequestHeaders := [
    TNetHeader.Create('Content-Type', 'application/json')
];
try
    Response := HTTPClient.Post(EndpointURL, RequestBody, nil, RequestHeaders);
    if Response.StatusCode = 200 then
    Writeln('[Response]: ' + Response.ContentAsString)
    else
    Writeln('[ERROR ' + IntToStr(Response.StatusCode) + ']:' + Response.StatusText + '' + Response.ContentAsString);
    readln;
except
    on E: Exception do
    Writeln(E.ClassName, ': ', E.Message);
end;
HttpClient.Free;
RequestBody.Free;
end.