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