Метод savePreparedInlineMessage

Сохраняет сообщение для отправки пользователем мини-приложения с настройкой доступных типов чатов.

Описание

Сохраняет сообщение, которое может быть отправлено пользователем мини-приложения. Возвращает объект PreparedInlineMessage.

Параметр Тип Обязательный Описание
user_id Integer Да Уникальный идентификатор целевого пользователя, который может использовать подготовленное сообщение
result InlineQueryResult Да JSON-сериализованный объект, описывающий отправляемое сообщение
allow_user_chats Boolean Необязательный Передайте True, если сообщение можно отправлять в личные чаты с пользователями
allow_bot_chats Boolean Необязательный Передайте True, если сообщение можно отправлять в личные чаты с ботами
allow_group_chats Boolean Необязательный Передайте True, если сообщение можно отправлять в групповые чаты и супергруппы
allow_channel_chats Boolean Необязательный Передайте True, если сообщение можно отправлять в чаты каналов

Примеры

php

<?php

// Пример использования метода savePreparedInlineMessage

// Токен вашего бота
$botToken = 'ВАШ_ТОКЕН_БОТА';

// ID пользователя, который сможет использовать подготовленное сообщение
$userId = 123456789;

// Создаем объект InlineQueryResultArticle (один из типов InlineQueryResult)
$inlineQueryResult = [
    'type' => 'article',
    'id' => uniqid(), // Уникальный идентификатор результата
    'title' => 'Пример подготовленного сообщения',
    'input_message_content' => [
        'message_text' => 'Это подготовленное сообщение, которое можно отправить через Mini App!',
        'parse_mode' => 'HTML'
    ],
    'description' => 'Описание подготовленного сообщения',
    'thumbnail_url' => 'https://example.com/image.jpg'
];

// Параметры для метода
$params = [
    'user_id' => $userId,
    'result' => json_encode($inlineQueryResult),
    'allow_user_chats' => true,
    'allow_bot_chats' => false,
    'allow_group_chats' => true,
    'allow_channel_chats' => false
];

// URL для вызова метода
$url = "https://api.telegram.org/bot{$botToken}/savePreparedInlineMessage";

// Отправка запроса с использованием cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
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);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if (curl_errno($ch)) {
    echo 'Ошибка cURL: ' . curl_error($ch);
} else {
    $responseData = json_decode($response, true);
    
    if ($responseData['ok']) {
        echo "Подготовленное сообщение успешно сохранено!\n";
        echo "ID сообщения: " . $responseData['result']['id'] . "\n";
        echo "Ссылка для отправки: " . $responseData['result']['url'] . "\n";
    } else {
        echo "Ошибка: " . $responseData['description'] . "\n";
    }
}

curl_close($ch);

// Альтернативный вариант с использованием file_get_contents (требует allow_url_fopen = On)
/*
$options = [
    'http' => [
        'header' => "Content-type: application/x-www-form-urlencoded\r\n",
        'method' => 'POST',
        'content' => http_build_query($params)
    ]
];

$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);

if ($response !== false) {
    $responseData = json_decode($response, true);
    // Обработка ответа
}
*/

?>

python

import requests

def save_prepared_inline_message(bot_token, user_id, result, allow_user_chats=None, 
                                 allow_bot_chats=None, allow_group_chats=None, 
                                 allow_channel_chats=None):
    """
    Сохраняет сообщение, которое может быть отправлено пользователем Mini App.
    
    Args:
        bot_token (str): Токен бота
        user_id (int): Уникальный идентификатор пользователя
        result (dict): Объект InlineQueryResult в формате JSON
        allow_user_chats (bool, optional): Разрешить отправку в личные чаты с пользователями
        allow_bot_chats (bool, optional): Разрешить отправку в личные чаты с ботами
        allow_group_chats (bool, optional): Разрешить отправку в групповые чаты
        allow_channel_chats (bool, optional): Разрешить отправку в каналы
    
    Returns:
        dict: Ответ от Telegram API в формате JSON
    """
    
    url = f"https://api.telegram.org/bot{bot_token}/savePreparedInlineMessage"
    
    payload = {
        "user_id": user_id,
        "result": result
    }
    
    # Добавляем необязательные параметры, если они переданы
    if allow_user_chats is not None:
        payload["allow_user_chats"] = allow_user_chats
    if allow_bot_chats is not None:
        payload["allow_bot_chats"] = allow_bot_chats
    if allow_group_chats is not None:
        payload["allow_group_chats"] = allow_group_chats
    if allow_channel_chats is not None:
        payload["allow_channel_chats"] = allow_channel_chats
    
    response = requests.post(url, json=payload)
    return response.json()

# Пример использования
if __name__ == "__main__":
    # Токен вашего бота
    BOT_TOKEN = "YOUR_BOT_TOKEN"
    
    # ID пользователя, который сможет использовать сообщение
    USER_ID = 123456789
    
    # Пример InlineQueryResult (статья)
    inline_result = {
        "type": "article",
        "id": "1",
        "title": "Пример заголовка",
        "input_message_content": {
            "message_text": "Текст сообщения, которое будет отправлено"
        },
        "description": "Описание статьи",
        "thumbnail_url": "https://example.com/image.jpg"
    }
    
    # Вызов метода
    result = save_prepared_inline_message(
        bot_token=BOT_TOKEN,
        user_id=USER_ID,
        result=inline_result,
        allow_user_chats=True,
        allow_group_chats=True,
        allow_bot_chats=False,
        allow_channel_chats=False
    )
    
    print(result)

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

  • API 8.0. Добавлен метод savePreparedInlineMessage

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

  • PreparedInlineMessage - Объект описывает подготовленное встроенное сообщение для отправки пользователем мини-приложения с указанием его уникального идентификатора и срока действия.
  • InlineQueryResult - Этот объект представляет один результат inline-запроса и может быть одного из 20 поддерживаемых типов, таких как аудио, фото, видео, документы и другие медиаформаты.
Комментарии