Метод createForumTopic

Метод создаёт новую тему в супергруппе с форумом, если бот имеет права администратора на управление темами.

Описание

Используйте этот метод для создания темы в супергруппе с форумом. Бот должен быть администратором в чате и иметь права администратора can_manage_topics. Возвращает информацию о созданной теме в виде объекта ForumTopic.

Параметр Тип Обязательный Описание
chat_id Integer или String Да Уникальный идентификатор целевого чата или имя пользователя целевой супергруппы (в формате @supergroupusername)
name String Да Название темы, 1-128 символов
icon_color Integer Необязательный Цвет иконки темы в формате RGB. В настоящее время должен быть одним из 7322096 (0x6FB9F0), 16766590 (0xFFD67E), 13338331 (0xCB86DB), 9367192 (0x8EEE98), 16749490 (0xFF93B2) или 16478047 (0xFB6F5F)
icon_custom_emoji_id String Необязательный Уникальный идентификатор пользовательского эмодзи, отображаемого как иконка темы. Используйте getForumTopicIconStickers для получения всех разрешённых идентификаторов пользовательских эмодзи.

Примеры

php

<?php

// Токен вашего бота
$botToken = 'YOUR_BOT_TOKEN';

// Параметры для создания темы
$chatId = '@supergroupusername'; // или ID чата
$topicName = 'Новая тема обсуждения';
$iconColor = 7322096; // Необязательный параметр
$iconCustomEmojiId = '1234567890'; // Необязательный параметр

// Формируем URL API
$apiUrl = "https://api.telegram.org/bot{$botToken}/createForumTopic";

// Подготавливаем данные
$postData = [
    'chat_id' => $chatId,
    'name' => $topicName,
];

// Добавляем необязательные параметры, если они указаны
if (isset($iconColor)) {
    $postData['icon_color'] = $iconColor;
}

if (isset($iconCustomEmojiId)) {
    $postData['icon_custom_emoji_id'] = $iconCustomEmojiId;
}

// Инициализируем cURL
$ch = curl_init($apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json'
]);

// Выполняем запрос
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

// Проверяем ошибки cURL
if (curl_errno($ch)) {
    echo 'Ошибка cURL: ' . curl_error($ch);
} else {
    // Декодируем ответ
    $result = json_decode($response, true);
    
    if ($result['ok']) {
        // Успешное создание темы
        $topic = $result['result'];
        echo "Тема создана успешно!\n";
        echo "ID темы: " . $topic['message_thread_id'] . "\n";
        echo "Название: " . $topic['name'] . "\n";
        echo "Цвет иконки: " . ($topic['icon_color'] ?? 'не указан') . "\n";
    } else {
        // Ошибка от API
        echo "Ошибка: " . $result['description'] . "\n";
        echo "Код ошибки: " . ($result['error_code'] ?? 'неизвестно') . "\n";
    }
}

// Закрываем соединение
curl_close($ch);

// Альтернативный вариант с использованием file_get_contents (требует allow_url_fopen)
/*
$context = stream_context_create([
    'http' => [
        'method' => 'POST',
        'header' => 'Content-Type: application/json',
        'content' => json_encode($postData)
    ]
]);

$response = file_get_contents($apiUrl, false, $context);
$result = json_decode($response, true);

if ($result['ok']) {
    $topic = $result['result'];
    // Обработка успешного результата
} else {
    // Обработка ошибки
}
*/

?>

python

import requests

def create_forum_topic(bot_token, chat_id, name, icon_color=None, icon_custom_emoji_id=None):
    """
    Создает тему в супергруппе-форуме.
    
    :param bot_token: Токен бота
    :param chat_id: ID чата или username супергруппы
    :param name: Название темы (1-128 символов)
    :param icon_color: Цвет иконки темы в RGB (опционально)
    :param icon_custom_emoji_id: ID кастомного эмодзи для иконки (опционально)
    :return: Объект ForumTopic или None при ошибке
    """
    url = f"https://api.telegram.org/bot{bot_token}/createForumTopic"
    
    payload = {
        "chat_id": chat_id,
        "name": name
    }
    
    if icon_color is not None:
        payload["icon_color"] = icon_color
    
    if icon_custom_emoji_id is not None:
        payload["icon_custom_emoji_id"] = icon_custom_emoji_id
    
    try:
        response = requests.post(url, json=payload)
        response.raise_for_status()
        result = response.json()
        
        if result.get("ok"):
            return result.get("result")
        else:
            print(f"Ошибка: {result.get('description')}")
            return None
            
    except requests.exceptions.RequestException as e:
        print(f"Ошибка запроса: {e}")
        return None

# Пример использования
if __name__ == "__main__":
    BOT_TOKEN = "YOUR_BOT_TOKEN"
    CHAT_ID = "@supergroupusername"  # или числовой ID
    TOPIC_NAME = "Обсуждение проекта"
    
    # Пример 1: Создание темы с цветом иконки
    topic1 = create_forum_topic(
        bot_token=BOT_TOKEN,
        chat_id=CHAT_ID,
        name=TOPIC_NAME,
        icon_color=7322096  # 0x6FB9F0 (голубой)
    )
    
    # Пример 2: Создание темы с кастомным эмодзи
    topic2 = create_forum_topic(
        bot_token=BOT_TOKEN,
        chat_id=CHAT_ID,
        name="Технические вопросы",
        icon_custom_emoji_id="AgADBAADwZxgBw"  # Пример ID эмодзи
    )
    
    # Пример 3: Простое создание темы
    topic3 = create_forum_topic(
        bot_token=BOT_TOKEN,
        chat_id=CHAT_ID,
        name="Общие вопросы"
    )
    
    if topic1:
        print(f"Тема создана: {topic1.get('name')}, ID: {topic1.get('message_thread_id')}")

История изменений

  • API 6.3. Добавлен метод createForumTopic

Дополнительно

  • ForumTopic - Объект, представляющий тему в форуме Telegram с её идентификатором, названием и параметрами иконки.
  • getForumTopicIconStickers - Получение пользовательских стикеров-эмодзи для использования в качестве иконки темы форума.
Комментарии