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

joinChat

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

Вступает в группу или подписывается на канал. После вступления новые сообщения чата приходят в ленту уведомлениями; то, что было до вступления, читайте через getChatHistory.

Запрос POST /waInstance{idInstance}/joinChat/{apiTokenInstance}
Тело JSON
Каналы Telegram, MAX

Параметры

Передайте link или chatId:

Параметр Тип Обязательный Описание
link string одно из двух ник, публичная ссылка или приглашение — те же форматы, что у getChatPreview
chatId string одно из двух id чата из searchChats или превью

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

Подписаться на публичный канал по ссылке:

curl

curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/joinChat/$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}/joinChat/{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}/joinChat/${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 . '/joinChat/' . 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:

{"status": "joined", "chatId": "-1001987654321"}

Поля ответа

Поле Тип Описание
status string итог — см. таблицу ниже
chatId string или null id чата. null — Telegram не раскрыл адрес: заявка по приглашению ещё ждёт админа
status Что значит
joined аккаунт в чате, сообщения пойдут в ленту
requested заявка ушла админу; после одобрения — см. «Особенности каналов»
already аккаунт уже в чате. Запроса на вступление нет, лимит вступлений не тратится

Ещё примеры

По приглашению

Ссылка t.me/+код открывает и закрытые группы:

curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/joinChat/$GRATIO_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"link": "https://t.me/+AbCdEfGhIjKlMnOp"}'

По id из поиска

curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/joinChat/$GRATIO_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"chatId": "-1001987654321"}'

Ошибки

Код code Когда Что делать
400 validation нет ни link, ни chatId добавить поле
400 bad_link ссылка или ник не этой площадки проверить ссылку
400 not_found чата нет или он закрыт —
400 not_a_chat по ссылке человек или бот —
400 invite_required в эту группу вступают только по приглашению попросить ссылку у админа
400 invite_invalid приглашение недействительно или отозвано попросить новую ссылку
400 private Telegram: чат закрыт или аккаунт в нём заблокирован —
400 chat_full в чате нет мест —
400 chats_too_much Telegram: аккаунт уже в 500 каналах и супергруппах (с Premium — в 1000) выйти из ненужных через leaveGroup
400 not_authorized канал не на связи проверить getStateInstance
402 payment_required канал на паузе за неоплату продлить канал в кабинете
429 too_frequent вступление чаще раза в минуту, больше 20 в час или 40 в сутки повторить после Retry-After
469 rate_limited площадка попросила паузу повторить после Retry-After
501 not_supported WhatsApp или почта —

Перед серией вступлений проверьте getJoinLimits: nextJoinInSeconds скажет, когда можно следующее.

Особенности каналов

  • Telegram. Обычную группу без ника по адресу не найти — только по приглашению: иначе invite_required. Заявку одобрили — придёт groupEvent participantJoinedByLink с self: true.
  • MAX. Вступление по заявке бывает только у каналов: закрытый канал отвечает requested, после одобрения его посты пойдут в ленту. В закрытую группу входят по приглашению — тогда придёт groupEvent participantJoinedByLink с self: true. Заявка, которая уже ждёт, — снова requested без расхода лимита. После отклонения заявки подать её снова MAX не даёт.

Что дальше

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