Описание
Используйте этот метод, чтобы остановить опрос, отправленный ботом. В случае успеха возвращается остановленный 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 - Объект для создания встроенной клавиатуры, которая отображается непосредственно в сообщении.