Перейти к содержимому

getReactions

Обновлено 21 октября 2026

Отвечает, кто какой реакцией сейчас отмечает сообщения. Два вида запроса: по списку сообщений одного чата или на сообщения, отправленные за период, — например, чтобы собрать реакции на объявления за неделю.

Запрос POST /v1/instances/{idInstance}/getReactions
Ключ заголовок Authorization: Bearer {apiTokenInstance}
Тело JSON
Каналы MAX, Telegram, WhatsApp, чат на сайте; у почты реакций нет

Параметры

Параметр Тип Обязательный Описание
chatId string с idMessages — да, иначе нет чат — адрес из уведомления или истории. За период без chatId — по всем чатам канала
idMessages array нет до 500 idMessage одного чата; можно строкой через запятую. Есть — ответ по этим сообщениям, период не учитывается
since number или string нет начало периода, включительно: метка времени Unix или дата ГГГГ-ММ-ДД, можно со временем 2026-10-19T09:00
before number или string нет конец периода, не включительно, в том же виде
count number нет сколько сообщений за раз при запросе за период, от 1 до 1000; по умолчанию 100

Период — по времени отправки сообщения. Дата без часового пояса — по поясу канала, который задан в кабинете, по умолчанию Москва: since: "2026-10-19", before: "2026-10-20" — сутки 19 октября по времени филиала.

Пример запроса

Реакции на сообщения группы за два дня:

curl

curl -X POST "$GRATIO_URL/v1/instances/$GRATIO_ID/getReactions" \
  -H "Authorization: Bearer $GRATIO_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "chatId": "-80040066617372",
    "since": "2026-10-19",
    "before": "2026-10-21"
  }'

Python

import os
import requests

BASE = f"{os.environ['GRATIO_URL']}/v1/instances/{os.environ['GRATIO_ID']}"
HEADERS = {"Authorization": f"Bearer {os.environ['GRATIO_TOKEN']}"}

url = f"{BASE}/getReactions"
payload = {
    "chatId": "-80040066617372",
    "since": "2026-10-19",
    "before": "2026-10-21",
}
response = requests.post(url, json=payload, headers=HEADERS, timeout=60)
print(response.status_code, response.json())

Node.js

const { GRATIO_URL, GRATIO_ID, GRATIO_TOKEN } = process.env;
const base = `${GRATIO_URL}/v1/instances/${GRATIO_ID}`;
const auth = { Authorization: `Bearer ${GRATIO_TOKEN}` };

const url = `${base}/getReactions`;
const payload = { chatId: "-80040066617372", since: "2026-10-19", before: "2026-10-21" };
const response = await fetch(url, {
  method: "POST",
  headers: { ...auth, "Content-Type": "application/json" },
  body: JSON.stringify(payload),
});
console.log(response.status, await response.json());

PHP

<?php
$base = getenv('GRATIO_URL') . '/v1/instances/' . getenv('GRATIO_ID');
$auth = 'Authorization: Bearer ' . getenv('GRATIO_TOKEN');
$url = $base . '/getReactions';
$payload = [
    'chatId' => '-80040066617372',
    'since' => '2026-10-19',
    'before' => '2026-10-21',
];

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => [$auth, 'Content-Type: application/json'],
    CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 60,
]);
$response = json_decode(curl_exec($ch), true);
echo curl_getinfo($ch, CURLINFO_HTTP_CODE), PHP_EOL;
print_r($response);

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

Ответ 200 OK — массив, новые сообщения первыми. За период приходят только сообщения, у которых есть реакции; удалённые — нет:

[
  {
    "chatId": "-80040066617372",
    "idMessage": "117428956522361912",
    "type": "outgoing",
    "timestamp": 1791823671,
    "senderId": "457747484",
    "senderName": "",
    "typeMessage": "textMessage",
    "textMessage": "В субботу занятие переносится на 12:00",
    "reactions": [{"sender": "1111111", "reaction": "👍"}, {"sender": "8695836", "reaction": "👍"}],
    "counts": {"👍": 2}
  }
]

Поля ответа

Поле Тип Описание
chatId, idMessage string сообщение
type string или null incoming или outgoing; null — сообщения нет в журнале канала
timestamp number или null время сообщения; null — сообщения нет в журнале
senderId, senderName, typeMessage, textMessage string как в статье Элемент журнала; нет, если сообщения нет в журнале
reactions array по одной на участника: sender — id участника, reaction — эмодзи. Имя участника — getContactInfo
counts object сколько участников какой реакцией

Снятая реакция в ответ не попадает. Если площадка разрешает несколько реакций одного человека — Telegram Premium, — в ответе последняя.

Ещё примеры

По списку сообщений

Ответ — в порядке запроса, по элементу на каждый idMessage, даже без реакций:

curl -X POST "$GRATIO_URL/v1/instances/$GRATIO_ID/getReactions" \
  -H "Authorization: Bearer $GRATIO_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "chatId": "-80040066617372",
    "idMessages": [
      "117428956522361912",
      "117428955282341903"
    ]
  }'
[
  {
    "chatId": "-80040066617372", "idMessage": "117428956522361912", "type": "outgoing", "timestamp": 1791823671,
    "senderId": "457747484", "senderName": "", "typeMessage": "textMessage",
    "textMessage": "В субботу занятие переносится на 12:00",
    "reactions": [{"sender": "1111111", "reaction": "👍"}, {"sender": "8695836", "reaction": "👍"}],
    "counts": {"👍": 2}
  },
  {
    "chatId": "-80040066617372", "idMessage": "117428955282341903", "type": "incoming", "timestamp": 1791823658,
    "senderId": "8695836", "senderName": "Мария", "typeMessage": "textMessage", "textMessage": "Спасибо!",
    "reactions": [], "counts": {}
  }
]

Все реакции канала за неделю, страницами

Без chatId. Следующая страница — тот же запрос с before, равным timestamp последнего элемента; пустой массив — сообщений с реакциями за период больше нет. Страница бывает короче count: сообщения последней секунды целиком переходят на следующую, поэтому на границе страниц ничего не теряется и не повторяется.

curl -X POST "$GRATIO_URL/v1/instances/$GRATIO_ID/getReactions" \
  -H "Authorization: Bearer $GRATIO_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"since": 1791244800, "before": 1791849600, "count": 1000}'

WhatsApp

Адреса чата и участников — в виде WhatsApp:

curl -X POST "$GRATIO_URL/v1/instances/$GRATIO_ID/getReactions" \
  -H "Authorization: Bearer $GRATIO_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "chatId": "79991234567@c.us",
    "idMessages": [
      "3EB0C767D26A1D5A6F0B"
    ]
  }'
[
  {
    "chatId": "79991234567@c.us", "idMessage": "3EB0C767D26A1D5A6F0B", "type": "outgoing", "timestamp": 1791823671,
    "senderId": "79990000001@c.us", "senderName": "", "typeMessage": "textMessage", "textMessage": "Ждём вас в субботу",
    "reactions": [{"sender": "79991234567@c.us", "reaction": "🙏"}], "counts": {"🙏": 1}
  }
]

Ошибки

Код code Когда Что делать
400 validation idMessages пуст или длиннее 500; idMessages без chatId; since не раньше before; дата не в формате ГГГГ-ММ-ДД и не метка Unix; count вне 1–1000 исправить запрос
401 — неверный ключ канала проверить idInstance и ключ

Общие правила — в статье Ответы и ошибки.

Особенности

  • Метод отвечает из журнала реакций канала: в нём реакции, о которых площадка сообщила после подключения канала к Gratio, — уведомление Реакция, и загруженные refreshReactions. Реакции, поставленные до подключения, попадают в журнал только через refreshReactions.
  • Запрос не обращается к площадке: лимиты номера не тратятся, метод работает и когда канал на паузе.
  • MAX. Реакции на чужие сообщения в группах приходят, пока сообщению не больше 48 часов, — см. Реакция. Более поздние реакции на старые чужие сообщения попадают в ответ после refreshReactions.
  • Telegram. В больших группах и каналах площадка не сообщает, кто поставил реакцию, только число. Такие реакции в ответе есть только в личных чатах и свои.
  • Почта — реакций нет: по списку у каждого сообщения пустые reactions, за период — пустой массив.

Что дальше

  • refreshReactions — загрузить реакции с площадки, в том числе до подключения канала.
  • sendReaction — поставить реакцию.
  • Реакция — как приходят реакции собеседника.
  • getChatHistory — сообщения чата.

Была ли статья полезна?