Возвращает превью чата: название, описание, число участников, можно ли читать без вступления и нужна ли заявка. Аккаунт при этом в чат не вступает.
| Запрос | POST /waInstance{idInstance}/getChatPreview/{apiTokenInstance} |
| Тело | JSON |
| Каналы | Telegram, MAX |
Параметры
Передайте link или chatId:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
link |
string | одно из двух | ссылка, ник или приглашение — форматы в таблице ниже |
chatId |
string | одно из двух | id чата, например из searchChats |
| Площадка | Что принимает link |
|---|---|
| Telegram | @ник, t.me/ник, ссылка на пост t.me/ник/123, t.me/s/ник, ник.t.me, tg://resolve?domain=ник; приглашение t.me/+код, t.me/joinchat/код, tg://join?invite=код; пост закрытого канала t.me/c/<id>/<номер> |
| MAX | @ник, max.ru/ник, приглашение max.ru/join/код |
Пример запроса
Превью публичного канала Telegram по ссылке:
curl
curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/getChatPreview/$GRATIO_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"link": "https://t.me/robo_school"}'
Python
import os
import requests
BASE = f"{os.environ['GRATIO_URL']}/waInstance{os.environ['GRATIO_ID']}"
TOKEN = os.environ["GRATIO_TOKEN"]
url = f"{BASE}/getChatPreview/{TOKEN}"
payload = {"link": "https://t.me/robo_school"}
response = requests.post(url, json=payload, timeout=60)
print(response.status_code, response.json())
Node.js
const { GRATIO_URL, GRATIO_ID, GRATIO_TOKEN } = process.env;
const base = `${GRATIO_URL}/waInstance${GRATIO_ID}`;
const url = `${base}/getChatPreview/${GRATIO_TOKEN}`;
const payload = { link: "https://t.me/robo_school" };
const response = await fetch(url, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(payload),
});
console.log(response.status, await response.json());
PHP
<?php
$base = getenv('GRATIO_URL') . '/waInstance' . getenv('GRATIO_ID');
$url = $base . '/getChatPreview/' . getenv('GRATIO_TOKEN');
$payload = ['link' => 'https://t.me/robo_school'];
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['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": "-1001987654321",
"type": "channel",
"title": "Робототехника для школьников",
"username": "robo_school",
"link": "https://t.me/robo_school",
"description": "Конкурсы, наборы и идеи для занятий",
"members": 2400,
"joined": false,
"joinRequest": false,
"public": true,
"verified": false,
"warning": "",
"hasAvatar": true,
"linkedChatId": "-1001987654322"
}
Поля превью
| Поле | Тип | Описание |
|---|---|---|
chatId |
string или null | id чата. null — Telegram не раскрывает адрес чата по приглашению до вступления; его вернёт joinChat |
type |
string | group, channel, user или bot |
title |
string | название или имя |
username |
string | публичный ник без @; нет ника — пустая строка |
link |
string | публичная ссылка или ссылка, по которой открыли |
description |
string | описание чата или «о себе» |
members |
integer или null | участников или подписчиков; null — площадка не сообщила |
joined |
boolean | аккаунт уже в чате. У людей и ботов — false |
joinRequest |
boolean | вступление по заявке: одобряет админ |
public |
boolean | историю можно читать без вступления — см. Поиск и вступление: правила и лимиты |
verified |
boolean | отметка площадки: в MAX — «официальный» |
warning |
string | Telegram: scam или fake — отметка Telegram; иначе пустая строка |
hasAvatar |
boolean | есть аватар — получите его через getAvatar по chatId |
linkedChatId |
string | Telegram: обсуждение канала или канал группы; иначе пустая строка |
Ещё примеры
По приглашению Telegram
Аккаунта в чате нет — chatId будет null, вступить можно по той же ссылке:
curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/getChatPreview/$GRATIO_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"link": "https://t.me/+AbCdEfGhIjKlMnOp"}'
{
"chatId": null, "type": "group", "title": "Родители 3А", "username": "",
"link": "https://t.me/+AbCdEfGhIjKlMnOp", "description": "", "members": 26,
"joined": false, "joinRequest": true, "public": false, "verified": false,
"warning": "", "hasAvatar": false, "linkedChatId": ""
}
В MAX
По приглашению MAX сразу отдаёт chatId и название:
curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/getChatPreview/$GRATIO_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"link": "https://max.ru/join/AbCdEfGhIjKl"}'
Ошибки
| Код | code |
Когда | Что делать |
|---|---|---|---|
400 |
validation |
нет ни link, ни chatId |
добавить поле |
400 |
bad_link |
ссылка или ник не этой площадки | проверить ссылку |
400 |
not_found |
чата нет или он закрыт | — |
400 |
invite_invalid |
приглашение недействительно или отозвано | попросить новую ссылку |
400 |
private |
Telegram: чат закрыт или аккаунт в нём заблокирован | — |
400 |
not_authorized |
канал не на связи | проверить getStateInstance |
429 |
too_frequent |
темп поиска и проверки приглашений | повторить после Retry-After |
469 |
rate_limited |
площадка попросила паузу | повторить после Retry-After |
501 |
not_supported |
WhatsApp или почта | — |
Особенности каналов
- Telegram. Приглашение, по которому Telegram разрешает смотреть чат до вступления, приходит с
public: true. Проверка приглашенийt.me/+…— не больше 10 в час; ответ хранится 5 минут, поэтому превью и следующее за ним вступление тратят одну проверку. - MAX.
warningиlinkedChatIdвсегда пустые. У закрытой группы по приглашениюmembersможет бытьnull.
Что дальше
- joinChat — вступить по той же ссылке.
- getChatHistory — прочитать публичный чат без вступления.
- Поиск и вступление: правила и лимиты — лимиты и отличия площадок.
