Метод pinChatMessage

Метод для закрепления сообщения в чате, требующий соответствующих прав администратора в группах и каналах.

Описание

Используйте этот метод, чтобы добавить сообщение в список закреплённых сообщений в чате. В личных чатах и прямых сообщениях каналов можно закреплять все неслужебные сообщения. В группах и каналах бот должен быть администратором с правом 'can_pin_messages' или 'can_edit_messages' соответственно, чтобы закреплять сообщения. Возвращает True при успешном выполнении.

Параметр Тип Обязательный Описание
business_connection_id String Опционально Уникальный идентификатор бизнес-подключения, от имени которого будет закреплено сообщение
chat_id Integer или String Да Уникальный идентификатор целевого чата или имя пользователя целевого канала (в формате @channelusername)
message_id Integer Да Идентификатор сообщения для закрепления
disable_notification Boolean Опционально Передайте True, если не нужно отправлять уведомление всем участникам чата о новом закреплённом сообщении (в каналах и личных чатах уведомления всегда отключены).

Примеры

php

<?php

$botToken = 'YOUR_BOT_TOKEN';
$apiUrl = "https://api.telegram.org/bot{$botToken}/";

// Пример данных для закрепления сообщения
$chatId = -1001234567890; // ID группы/канала или @username для канала
$messageId = 12345; // ID сообщения, которое нужно закрепить

// Параметры запроса
$params = [
    'chat_id' => $chatId,
    'message_id' => $messageId,
    'disable_notification' => true, // Опционально: отключить уведомление
    // 'business_connection_id' => 'business_connection_id' // Опционально: для бизнес-аккаунтов
];

// Отправка запроса
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl . 'pinChatMessage');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Для локального тестирования

$response = curl_exec($ch);
curl_close($ch);

// Обработка ответа
$result = json_decode($response, true);
if ($result['ok']) {
    echo "Сообщение успешно закреплено!";
} else {
    echo "Ошибка: " . $result['description'];
}

// Альтернативный вариант с использованием file_get_contents
/*
$url = $apiUrl . 'pinChatMessage?' . http_build_query($params);
$response = file_get_contents($url);
$result = json_decode($response, true);
*/

// Пример с использованием библиотеки (например, TelegramBotPHP)
/*
use TelegramBot\Api\BotApi;

$bot = new BotApi($botToken);
try {
    $bot->pinChatMessage($chatId, $messageId, $disableNotification = true);
    echo "Сообщение закреплено!";
} catch (\Exception $e) {
    echo "Ошибка: " . $e->getMessage();
}
*/
?>

python

import requests

def pin_chat_message(bot_token, chat_id, message_id, disable_notification=None, business_connection_id=None):
    """
    Закрепляет сообщение в чате.
    
    Args:
        bot_token (str): Токен вашего бота
        chat_id (int | str): ID чата или username канала
        message_id (int): ID сообщения для закрепления
        disable_notification (bool, optional): Отключить уведомление
        business_connection_id (str, optional): ID бизнес-соединения
    
    Returns:
        bool: True при успешном выполнении
    """
    url = f"https://api.telegram.org/bot{bot_token}/pinChatMessage"
    
    payload = {
        "chat_id": chat_id,
        "message_id": message_id
    }
    
    if disable_notification is not None:
        payload["disable_notification"] = disable_notification
    
    if business_connection_id:
        payload["business_connection_id"] = business_connection_id
    
    response = requests.post(url, json=payload)
    result = response.json()
    
    if result.get("ok"):
        return True
    else:
        raise Exception(f"Ошибка: {result.get('description')}")

# Пример использования
if __name__ == "__main__":
    BOT_TOKEN = "ВАШ_ТОКЕН_БОТА"
    
    # Пример 1: Закрепление в группе/супергруппе
    try:
        success = pin_chat_message(
            bot_token=BOT_TOKEN,
            chat_id=-1001234567890,  # ID группы
            message_id=123,  # ID сообщения
            disable_notification=True  # Без уведомления
        )
        print(f"Сообщение закреплено: {success}")
    except Exception as e:
        print(f"Ошибка: {e}")
    
    # Пример 2: Закрепление в канале
    try:
        success = pin_chat_message(
            bot_token=BOT_TOKEN,
            chat_id="@my_channel",  # Username канала
            message_id=456  # ID сообщения
        )
        print(f"Сообщение закреплено в канале: {success}")
    except Exception as e:
        print(f"Ошибка: {e}")

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

  • API 3.1. Добавлен метод pinChatMessage
  • API 3.5. Обновлен метод pinChatMessage: Теперь поддерживает каналы
  • API 4.2. Обновлен метод pinChatMessage: Расширена поддержка: теперь работает в обычных группах
  • API 7.8. Обновлен метод pinChatMessage: Добавлен параметр business_connection_id
Комментарии