Метод stopPoll

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

Описание

Используйте этот метод, чтобы остановить опрос, отправленный ботом. В случае успеха возвращается остановленный Poll.

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

Примеры

php

<?php

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

// Параметры для остановки опроса
$chatId = 123456789; // ID чата или канала
$messageId = 987; // ID сообщения с опросом

// Опциональные параметры
$businessConnectionId = null; // Или 'your_business_connection_id'
$replyMarkup = null; // Или массив с клавиатурой

// Формируем данные для запроса
$data = [
    'chat_id' => $chatId,
    'message_id' => $messageId
];

// Добавляем опциональные параметры, если они заданы
if ($businessConnectionId !== null) {
    $data['business_connection_id'] = $businessConnectionId;
}

if ($replyMarkup !== null) {
    $data['reply_markup'] = json_encode($replyMarkup);
}

// URL для API запроса
$apiUrl = "https://api.telegram.org/bot{$botToken}/stopPoll";

// Создаем контекст для POST запроса
$options = [
    'http' => [
        'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
        'method'  => 'POST',
        'content' => http_build_query($data)
    ]
];

$context = stream_context_create($options);

// Отправляем запрос и получаем ответ
$result = file_get_contents($apiUrl, false, $context);

if ($result === FALSE) {
    // Обработка ошибки
    echo "Ошибка при отправке запроса";
} else {
    // Декодируем JSON ответ
    $response = json_decode($result, true);
    
    if ($response['ok']) {
        // Опрос успешно остановлен
        $poll = $response['result'];
        echo "Опрос остановлен. ID: " . $poll['id'];
        
        // Пример работы с данными опроса
        echo "\nВопрос: " . $poll['question'];
        echo "\nВсего голосов: " . $poll['total_voter_count'];
        
        // Выводим результаты по вариантам
        foreach ($poll['options'] as $option) {
            echo "\n- " . $option['text'] . ": " . $option['voter_count'] . " голосов";
        }
    } else {
        // Ошибка от API
        echo "Ошибка API: " . $response['description'];
    }
}

// Альтернативный вариант с использованием cURL
function stopPollWithCurl($botToken, $chatId, $messageId, $businessConnectionId = null, $replyMarkup = null) {
    $data = [
        'chat_id' => $chatId,
        'message_id' => $messageId
    ];
    
    if ($businessConnectionId !== null) {
        $data['business_connection_id'] = $businessConnectionId;
    }
    
    if ($replyMarkup !== null) {
        $data['reply_markup'] = json_encode($replyMarkup);
    }
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://api.telegram.org/bot{$botToken}/stopPoll");
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    
    $response = curl_exec($ch);
    curl_close($ch);
    
    return json_decode($response, true);
}

// Пример использования cURL версии
// $result = stopPollWithCurl($botToken, $chatId, $messageId);
// if ($result['ok']) {
//     // Обработка успешного результата
// }

?>

python

import requests

def stop_poll(bot_token, chat_id, message_id, business_connection_id=None, reply_markup=None):
    """
    Останавливает опрос, отправленный ботом.
    
    Args:
        bot_token (str): Токен вашего бота
        chat_id (int or str): ID чата или username канала
        message_id (int): ID сообщения с опросом
        business_connection_id (str, optional): ID бизнес-подключения
        reply_markup (dict, optional): Inline клавиатура для замены
    
    Returns:
        dict: Ответ от Telegram API с остановленным опросом
    """
    url = f"https://api.telegram.org/bot{bot_token}/stopPoll"
    
    payload = {
        "chat_id": chat_id,
        "message_id": message_id
    }
    
    if business_connection_id:
        payload["business_connection_id"] = business_connection_id
    
    if reply_markup:
        payload["reply_markup"] = reply_markup
    
    response = requests.post(url, json=payload)
    return response.json()

# Пример использования
if __name__ == "__main__":
    # Ваши данные
    BOT_TOKEN = "YOUR_BOT_TOKEN"
    CHAT_ID = -1001234567890  # или "@channelusername"
    MESSAGE_ID = 123
    
    # Пример 1: Простая остановка опроса
    result = stop_poll(BOT_TOKEN, CHAT_ID, MESSAGE_ID)
    print(result)
    
    # Пример 2: С бизнес-подключением
    business_id = "business_connection_id_example"
    result = stop_poll(BOT_TOKEN, CHAT_ID, MESSAGE_ID, 
                      business_connection_id=business_id)
    print(result)
    
    # Пример 3: С заменой клавиатуры
    inline_keyboard = {
        "inline_keyboard": [[
            {"text": "Посмотреть результаты", "callback_data": "poll_results"}
        ]]
    }
    result = stop_poll(BOT_TOKEN, CHAT_ID, MESSAGE_ID,
                      reply_markup=inline_keyboard)
    print(result)

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

  • API 4.2. Добавлен метод stopPoll
  • API 7.5. Обновлен метод stopPoll: Добавлен параметр business_connection_id

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

  • Poll - Объект, содержащий информацию об опросе, включая вопрос, варианты ответов, настройки и результаты голосования.
  • InlineKeyboardMarkup - Объект для создания встроенной клавиатуры, которая отображается непосредственно в сообщении.
Комментарии