Метод unpinChatMessage

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

Описание

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

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

Примеры

php

<?php

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

// Пример 1: Открепление последнего закрепленного сообщения
$chatId = -1001234567890; // ID группы или канала
$data1 = [
    'chat_id' => $chatId,
    // message_id не указан - открепит последнее закрепленное сообщение
];

// Пример 2: Открепление конкретного сообщения
$messageId = 12345; // ID сообщения для открепления
$data2 = [
    'chat_id' => $chatId,
    'message_id' => $messageId,
];

// Пример 3: Открепление через бизнес-соединение (требует message_id)
$businessConnectionId = 'business_connection_id_example';
$data3 = [
    'business_connection_id' => $businessConnectionId,
    'chat_id' => $chatId,
    'message_id' => $messageId, // Обязательно при business_connection_id
];

// Функция для отправки запроса
function sendRequest($method, $data) {
    global $apiUrl;
    
    $url = $apiUrl . $method;
    $ch = curl_init();
    
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
    
    $response = curl_exec($ch);
    curl_close($ch);
    
    return json_decode($response, true);
}

// Отправка запроса на открепление (пример с data1)
$result = sendRequest('unpinChatMessage', json_encode($data1));

// Проверка результата
if ($result && $result['ok']) {
    echo "Сообщение успешно откреплено!";
} else {
    echo "Ошибка: " . ($result['description'] ?? 'Неизвестная ошибка');
}

// Альтернативный вариант с использованием file_get_contents
function sendRequestAlt($method, $data) {
    global $apiUrl;
    
    $url = $apiUrl . $method;
    $context = stream_context_create([
        'http' => [
            'method' => 'POST',
            'header' => "Content-Type: application/json\r\n",
            'content' => json_encode($data)
        ]
    ]);
    
    $response = file_get_contents($url, false, $context);
    return json_decode($response, true);
}

// Пример для канала по username
$channelUsername = '@my_channel';
$data4 = [
    'chat_id' => $channelUsername,
    'message_id' => $messageId,
];

// $result = sendRequest('unpinChatMessage', json_encode($data4));

?>

python

import requests

def unpin_chat_message(bot_token, chat_id, message_id=None, business_connection_id=None):
    """
    Удаляет сообщение из списка закрепленных в чате.
    
    Args:
        bot_token (str): Токен вашего бота
        chat_id (int or str): ID чата или username канала
        message_id (int, optional): ID сообщения для открепления
        business_connection_id (str, optional): ID бизнес-подключения
    
    Returns:
        bool: True при успешном выполнении
    """
    url = f"https://api.telegram.org/bot{bot_token}/unpinChatMessage"
    
    payload = {
        "chat_id": chat_id
    }
    
    if message_id is not None:
        payload["message_id"] = message_id
    
    if business_connection_id is not None:
        payload["business_connection_id"] = business_connection_id
    
    response = requests.post(url, json=payload)
    return response.json().get("result", False)

# Пример использования:
bot_token = "YOUR_BOT_TOKEN"

# Пример 1: Открепить последнее закрепленное сообщение в группе
unpin_chat_message(bot_token, chat_id=-1001234567890)

# Пример 2: Открепить конкретное сообщение в канале
unpin_chat_message(
    bot_token=bot_token,
    chat_id="@my_channel",
    message_id=12345
)

# Пример 3: Открепить сообщение от имени бизнес-подключения
unpin_chat_message(
    bot_token=bot_token,
    chat_id=-1001234567890,
    message_id=67890,
    business_connection_id="business_connection_id_here"
)

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

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