Описание
Используйте этот метод для отправки статических .WEBP, анимированных .TGS или видео .WEBM стикеров. При успешном выполнении возвращается отправленное Message.
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| business_connection_id | String | Опционально | Уникальный идентификатор бизнес-подключения, от имени которого будет отправлено сообщение |
| chat_id | Integer или String | Да | Уникальный идентификатор целевого чата или имя пользователя целевого канала (в формате @channelusername) |
| message_thread_id | Integer | Опционально | Уникальный идентификатор целевой ветки сообщений (темы) форума; только для супергрупп-форумов |
| direct_messages_topic_id | Integer | Опционально | Идентификатор темы прямых сообщений, в которую будет отправлено сообщение; требуется, если сообщение отправляется в чат прямых сообщений |
| sticker | InputFile или String | Да | Стикер для отправки. Передайте file_id в виде String для отправки файла, существующего на серверах Telegram (рекомендуется), передайте HTTP-URL в виде String, чтобы Telegram получил .WEBP стикер из интернета, или загрузите новый .WEBP, .TGS или .WEBM стикер, используя multipart/form-data. Подробнее об отправке файлов ». Видео и анимированные стикеры не могут быть отправлены через HTTP-URL. |
| emoji | String | Опционально | Эмодзи, связанное со стикером; только для только что загруженных стикеров |
| disable_notification | Boolean | Опционально | Отправляет сообщение бесшумно. Пользователи получат уведомление без звука. |
| protect_content | Boolean | Опционально | Защищает содержимое отправленного сообщения от пересылки и сохранения |
| allow_paid_broadcast | Boolean | Опционально | Передайте True, чтобы разрешить до 1000 сообщений в секунду, игнорируя ограничения рассылки за плату 0,1 Telegram Stars за сообщение. Соответствующие Stars будут списаны с баланса бота |
| message_effect_id | String | Опционально | Уникальный идентификатор эффекта сообщения, который будет добавлен к сообщению; только для приватных чатов |
| suggested_post_parameters | SuggestedPostParameters | Опционально | JSON-сериализованный объект, содержащий параметры предлагаемой публикации для отправки; только для чатов прямых сообщений. Если сообщение отправляется как ответ на другую предлагаемую публикацию, то эта предлагаемая публикация автоматически отклоняется. |
| reply_parameters | ReplyParameters | Опционально | Описание сообщения, на которое нужно ответить |
| reply_markup | InlineKeyboardMarkup или ReplyKeyboardMarkup или ReplyKeyboardRemove или ForceReply | Опционально | Дополнительные параметры интерфейса. JSON-сериализованный объект для встроенной клавиатуры, пользовательской клавиатуры ответа, инструкций по удалению клавиатуры ответа или принудительному ответу от пользователя |
Примеры
php
<?php
// Токен вашего бота
$botToken = 'YOUR_BOT_TOKEN';
// ID чата или username канала
$chatId = '123456789'; // или '@channelusername'
// Стикер для отправки (file_id, URL или путь к файлу)
$sticker = 'CAACAgIAAxkBAAIB...'; // Пример file_id
// $sticker = 'https://example.com/sticker.webp'; // URL для .WEBP
// $sticker = '/path/to/sticker.webp'; // Локальный файл
// Формируем URL API
$apiUrl = "https://api.telegram.org/bot{$botToken}/sendSticker";
// Подготавливаем данные
$postData = [
'chat_id' => $chatId,
'sticker' => $sticker,
// Опциональные параметры (раскомментировать при необходимости):
// 'message_thread_id' => 123, // Для тем форума
// 'emoji' => '😀', // Эмодзи для загруженного стикера
// 'disable_notification' => true, // Без звука
// 'protect_content' => true, // Защита от пересылки
// 'allow_paid_broadcast' => true, // Платный широковещательный режим
// 'message_effect_id' => 'effect_id', // Эффект сообщения
// 'reply_parameters' => json_encode(['message_id' => 456]), // Ответ на сообщение
// 'reply_markup' => json_encode(['inline_keyboard' => [[['text' => 'Кнопка', 'url' => 'https://example.com']]]]), // Клавиатура
];
// Определяем, отправляем ли мы файл
$isLocalFile = !filter_var($sticker, FILTER_VALIDATE_URL) && !preg_match('/^[\w\-]+$/i', $sticker);
if ($isLocalFile && file_exists($sticker)) {
// Отправка локального файла через multipart/form-data
$postData['sticker'] = new CURLFile(realpath($sticker));
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: multipart/form-data']);
} else {
// Отправка file_id или URL через обычный POST
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
}
// Выполняем запрос
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
// Обработка ответа
if ($httpCode === 200) {
$result = json_decode($response, true);
if ($result['ok']) {
echo "Стикер отправлен! ID сообщения: " . $result['result']['message_id'];
} else {
echo "Ошибка API: " . $result['description'];
}
} else {
echo "HTTP ошибка: " . $httpCode;
}
?>
python
import requests
from typing import Optional, Union
def send_sticker(
bot_token: str,
chat_id: Union[int, str],
sticker: Union[str, bytes],
business_connection_id: Optional[str] = None,
message_thread_id: Optional[int] = None,
direct_messages_topic_id: Optional[int] = None,
emoji: Optional[str] = None,
disable_notification: Optional[bool] = None,
protect_content: Optional[bool] = None,
allow_paid_broadcast: Optional[bool] = None,
message_effect_id: Optional[str] = None,
suggested_post_parameters: Optional[dict] = None,
reply_parameters: Optional[dict] = None,
reply_markup: Optional[dict] = None
) -> dict:
"""
Send static .WEBP, animated .TGS, or video .WEBM stickers.
Args:
bot_token: Your bot's token
chat_id: Unique identifier for target chat or @channelusername
sticker: file_id as string, HTTP URL, or file bytes for upload
business_connection_id: Business connection ID
message_thread_id: Forum topic ID
direct_messages_topic_id: Direct messages topic ID
emoji: Emoji for uploaded stickers
disable_notification: Send silently
protect_content: Protect from forwarding
allow_paid_broadcast: Allow paid broadcasting
message_effect_id: Message effect for private chats
suggested_post_parameters: Suggested post params for DM
reply_parameters: Reply parameters
reply_markup: Keyboard markup
Returns:
Dictionary with sent Message object
"""
url = f"https://api.telegram.org/bot{bot_token}/sendSticker"
# Prepare data
data = {
'chat_id': chat_id,
}
# Add optional parameters if provided
optional_params = {
'business_connection_id': business_connection_id,
'message_thread_id': message_thread_id,
'direct_messages_topic_id': direct_messages_topic_id,
'emoji': emoji,
'disable_notification': disable_notification,
'protect_content': protect_content,
'allow_paid_broadcast': allow_paid_broadcast,
'message_effect_id': message_effect_id,
'suggested_post_parameters': suggested_post_parameters,
'reply_parameters': reply_parameters,
'reply_markup': reply_markup
}
for key, value in optional_params.items():
if value is not None:
data[key] = value
# Handle sticker input
files = None
if isinstance(sticker, bytes):
# Upload new sticker file
files = {'sticker': ('sticker.webp', sticker, 'image/webp')}
elif sticker.startswith(('http://', 'https://')):
# HTTP URL
data['sticker'] = sticker
else:
# file_id
data['sticker'] = sticker
# Send request
if files:
response = requests.post(url, data=data, files=files)
else:
response = requests.post(url, json=data)
return response.json()
# Example 1: Send sticker using file_id
def example_send_by_file_id():
bot_token = "YOUR_BOT_TOKEN"
chat_id = 123456789
file_id = "CAACAgIAAxkBAAIB..." # Existing sticker file_id
result = send_sticker(
bot_token=bot_token,
chat_id=chat_id,
sticker=file_id,
disable_notification=True,
protect_content=True
)
print(result)
# Example 2: Send sticker from URL
def example_send_by_url():
bot_token = "YOUR_BOT_TOKEN"
chat_id = "@my_channel"
sticker_url = "https://example.com/sticker.webp"
result = send_sticker(
bot_token=bot_token,
chat_id=chat_id,
sticker=sticker_url,
reply_markup={
'inline_keyboard': [[
{'text': 'Like', 'callback_data': 'like_sticker'},
{'text': 'Share', 'callback_data': 'share_sticker'}
]]
}
)
print(result)
# Example 3: Upload new sticker file
def example_upload_sticker():
bot_token = "YOUR_BOT_TOKEN"
chat_id = 123456789
# Read sticker file
with open('sticker.webp', 'rb') as f:
sticker_data = f.read()
result = send_sticker(
bot_token=bot_token,
chat_id=chat_id,
sticker=sticker_data,
emoji="😀",
message_thread_id=123, # Forum topic
reply_parameters={
'message_id': 456,
'chat_id': chat_id
}
)
print(result)
# Example 4: With business connection
def example_with_business():
bot_token = "YOUR_BOT_TOKEN"
chat_id = 123456789
result = send_sticker(
bot_token=bot_token,
chat_id=chat_id,
sticker="FILE_ID_HERE",
business_connection_id="business_123",
allow_paid_broadcast=True
)
print(result)
История изменений
- API 5.0. Обновлен метод sendSticker: Добавлено поле allow_sending_without_reply
- API 5.6. Обновлен метод sendSticker: Добавлено поле protect_content
- API 6.3. Обновлен метод sendSticker: Добавлен параметр message_thread_id
- API 6.6. Обновлен метод sendSticker: Добавлен параметр emoji
- API 7.0. Обновлен метод sendSticker: Заменены параметры reply_to_message_id и allow_sending_without_reply на reply_parameters
- API 7.4. Обновлен метод sendSticker: Добавлен параметр message_effect_id
- API 7.11. Обновлен метод sendSticker: Добавлен параметр allow_paid_broadcast
- API 9.2. Обновлен метод sendSticker: Добавлен параметр direct_messages_topic_id
- API 9.3. Обновлен метод sendSticker: Поддержан параметр message_thread_id в личных чатах с темами для отправки сообщения в конкретную тему.
Дополнительно
- Message - Это основной объект, представляющий сообщение в Telegram, который содержит информацию об отправителе, чате, контенте (текст, медиа, служебные данные) и различные метаданные.
- InputFile - Объект, представляющий содержимое файла для загрузки через multipart/form-data.
- SuggestedPostParameters - Объект содержит параметры публикации, предлагаемой ботом, включая цену и дату отправки.
- ReplyParameters - Объект, описывающий параметры для ответа на сообщение, включая идентификатор сообщения, чат, цитирование и дополнительные настройки.
- InlineKeyboardMarkup - Объект для создания встроенной клавиатуры, которая отображается непосредственно в сообщении.
- ReplyKeyboardMarkup - Объект, представляющий пользовательскую клавиатуру с вариантами ответа для ботов Telegram.
- ReplyKeyboardRemove - Объект для удаления пользовательской клавиатуры и возврата к стандартной буквенной клавиатуре в клиентах Telegram.
- ForceReply - Объект ForceReply принудительно отображает интерфейс ответа в клиентах Telegram, упрощая создание пошаговых диалогов с ботом.