Метод editMessageLiveLocation

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

Описание

Используйте этот метод для редактирования сообщений с живой геолокацией. Местоположение можно редактировать до тех пор, пока не истечёт его live_period или редактирование не будет явно отключено вызовом stopMessageLiveLocation. В случае успеха, если отредактированное сообщение не является инлайн-сообщением, возвращается отредактированное Message, в противном случае возвращается True.

Параметр Тип Обязательный Описание
business_connection_id String Опционально Уникальный идентификатор бизнес-подключения, от имени которого было отправлено редактируемое сообщение
chat_id Integer или String Опционально Обязателен, если не указан inline_message_id. Уникальный идентификатор целевого чата или имя пользователя целевого канала (в формате @channelusername)
message_id Integer Опционально Обязателен, если не указан inline_message_id. Идентификатор редактируемого сообщения
inline_message_id String Опционально Обязателен, если не указаны chat_id и message_id. Идентификатор инлайн-сообщения
latitude Float Да Широта нового местоположения
longitude Float Да Долгота нового местоположения
live_period Integer Опционально Новый период в секундах, в течение которого местоположение может обновляться, начиная с даты отправки сообщения. Если указано 0x7FFFFFFF, то местоположение можно обновлять бесконечно. В противном случае новое значение не должно превышать текущий live_period более чем на день, а дата истечения срока действия живой геолокации должна оставаться в пределах следующих 90 дней. Если не указано, то live_period остаётся неизменным
horizontal_accuracy Float Опционально Радиус неопределённости местоположения, измеряемый в метрах; 0-1500
heading Integer Опционально Направление движения пользователя в градусах. Должно быть от 1 до 360, если указано.
proximity_alert_radius Integer Опционально Максимальное расстояние для оповещений о приближении к другому участнику чата, в метрах. Должно быть от 1 до 100000, если указано.
reply_markup InlineKeyboardMarkup Опционально JSON-сериализованный объект для новой инлайн-клавиатуры.

Примеры

php

<?php

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

// Параметры для редактирования live location
$params = [
    'chat_id' => 123456789, // ID чата или @username канала
    'message_id' => 987, // ID сообщения с live location
    'latitude' => 55.7558, // Новая широта (Москва)
    'longitude' => 37.6173, // Новая долгота (Москва)
    'live_period' => 3600, // Период обновления в секундах (1 час)
    'horizontal_accuracy' => 50, // Точность в метрах
    'heading' => 90, // Направление движения (90° - восток)
    'proximity_alert_radius' => 100, // Радиус оповещения о приближении
    'reply_markup' => json_encode([
        'inline_keyboard' => [[
            ['text' => 'Остановить отслеживание', 'callback_data' => 'stop_live_location']
        ]]
    ])
];

// URL API Telegram
$apiUrl = "https://api.telegram.org/bot{$botToken}/editMessageLiveLocation";

// Отправка запроса через cURL
$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL => $apiUrl,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $params,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 10,
]);

$response = curl_exec($ch);
curl_close($ch);

// Обработка ответа
$result = json_decode($response, true);

if ($result['ok']) {
    if (isset($result['result']['message_id'])) {
        // Редактировано обычное сообщение
        echo "Сообщение обновлено. ID: " . $result['result']['message_id'];
    } else {
        // Редактировано inline-сообщение (возвращает true)
        echo "Inline-сообщение обновлено успешно";
    }
} else {
    echo "Ошибка: " . $result['description'];
}

// Альтернативный вариант для inline-сообщений
$inlineParams = [
    'inline_message_id' => '1234567890abcdef', // ID inline-сообщения
    'latitude' => 59.9343, // Санкт-Петербург
    'longitude' => 30.3351,
    'reply_markup' => json_encode([
        'inline_keyboard' => [[
            ['text' => 'Обновить', 'callback_data' => 'refresh'],
            ['text' => 'Закрыть', 'callback_data' => 'close']
        ]]
    ])
];

// Пример с использованием business_connection_id
$businessParams = [
    'business_connection_id' => 'bc_123456789',
    'chat_id' => 123456789,
    'message_id' => 987,
    'latitude' => 40.7128, // Нью-Йорк
    'longitude' => -74.0060,
    'live_period' => 7200 // 2 часа
];

?>

python

import asyncio
from telegram import Bot, InlineKeyboardMarkup, InlineKeyboardButton

async def edit_live_location():
    bot = Bot(token="YOUR_BOT_TOKEN")
    
    # Пример редактирования сообщения в чате
    try:
        result = await bot.edit_message_live_location(
            chat_id=123456789,  # ID чата
            message_id=100,     # ID сообщения
            latitude=55.7558,   # Широта (Москва)
            longitude=37.6173,  # Долгота (Москва)
            live_period=3600,   # Период обновления 1 час
            horizontal_accuracy=50,  # Точность 50 метров
            heading=90,         # Направление движения 90°
            proximity_alert_radius=1000,  # Радиус оповещения 1 км
            reply_markup=InlineKeyboardMarkup([
                [InlineKeyboardButton("Остановить", callback_data="stop_location")]
            ])
        )
        print(f"Сообщение отредактировано: {result}")
    
    except Exception as e:
        print(f"Ошибка: {e}")

    # Пример редактирования inline-сообщения
    try:
        success = await bot.edit_message_live_location(
            inline_message_id="inline_msg_123",
            latitude=40.7128,   # Широта (Нью-Йорк)
            longitude=-74.0060, # Долгота (Нью-Йорк)
            live_period=0x7FFFFFFF  # Бесконечный период
        )
        print(f"Inline сообщение отредактировано: {success}")
    
    except Exception as e:
        print(f"Ошибка: {e}")

# Запуск асинхронной функции
asyncio.run(edit_live_location())

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

  • API 3.4. Добавлен метод editMessageLiveLocation
  • API 5.0. Обновлен метод editMessageLiveLocation: Добавлены параметры heading, proximity_alert_radius, horizontal_accuracy
  • API 7.3. Обновлен метод editMessageLiveLocation: Добавлен параметр live_period
  • API 7.5. Обновлен метод editMessageLiveLocation: Добавлен параметр business_connection_id

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

  • stopMessageLiveLocation - Метод для остановки обновления сообщения с живой геолокацией до истечения периода обновления.
  • Message - Это основной объект, представляющий сообщение в Telegram, который содержит информацию об отправителе, чате, контенте (текст, медиа, служебные данные) и различные метаданные.
  • InlineKeyboardMarkup - Объект для создания встроенной клавиатуры, которая отображается непосредственно в сообщении.
Комментарии