Описание
Используйте этот метод для отправки точки на карте. При успешном выполнении возвращается отправленное Message.
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| business_connection_id | String | Опционально | Уникальный идентификатор бизнес-подключения, от имени которого будет отправлено сообщение |
| chat_id | Integer или String | Да | Уникальный идентификатор целевого чата или имя пользователя целевого канала (в формате @channelusername) |
| message_thread_id | Integer | Опционально | Уникальный идентификатор целевой ветки сообщений (темы) форума; только для супергрупп-форумов |
| direct_messages_topic_id | Integer | Опционально | Идентификатор темы прямых сообщений, в которую будет отправлено сообщение; требуется, если сообщение отправляется в чат прямых сообщений |
| latitude | Float | Да | Широта местоположения |
| longitude | Float | Да | Долгота местоположения |
| horizontal_accuracy | Float | Опционально | Радиус неопределённости местоположения, измеряемый в метрах; 0-1500 |
| live_period | Integer | Опционально | Период в секундах, в течение которого местоположение будет обновляться (см. Живые геопозиции), должен быть между 60 и 86400, или 0x7FFFFFFF для живых геопозиций, которые можно редактировать бесконечно. |
| heading | Integer | Опционально | Для живых геопозиций — направление, в котором движется пользователь, в градусах. Должно быть от 1 до 360, если указано. |
| proximity_alert_radius | Integer | Опционально | Для живых геопозиций — максимальное расстояние для оповещений о приближении к другому участнику чата, в метрах. Должно быть от 1 до 100000, если указано. |
| 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';
$apiUrl = "https://api.telegram.org/bot{$botToken}/sendLocation";
// Координаты Красной площади в Москве
$latitude = 55.753930;
$longitude = 37.620795;
$data = [
'chat_id' => 123456789, // Замените на реальный chat_id
'latitude' => $latitude,
'longitude' => $longitude,
'horizontal_accuracy' => 50, // Точность ±50 метров
'live_period' => 300, // Живое местоположение на 5 минут
'heading' => 90, // Направление движения 90° (восток)
'proximity_alert_radius' => 100, // Оповещение при приближении на 100 метров
'disable_notification' => false,
'protect_content' => false,
'reply_parameters' => json_encode([
'message_id' => 42 // ID сообщения для ответа
]),
'reply_markup' => json_encode([
'inline_keyboard' => [
[
['text' => 'Открыть в Картах', 'url' => "https://maps.google.com/?q={$latitude},{$longitude}"],
['text' => 'Обновить', 'callback_data' => 'refresh_location']
]
]
])
];
// Для отправки в топик форума
// $data['message_thread_id'] = 123;
// Для бизнес-аккаунтов
// $data['business_connection_id'] = 'business_connection_id_here';
// Для эффектов сообщений
// $data['message_effect_id'] = 'effect_id_here';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
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);
// Обработка ответа
$result = json_decode($response, true);
if ($result['ok']) {
echo "Местоположение отправлено! ID сообщения: " . $result['result']['message_id'];
} else {
echo "Ошибка: " . $result['description'];
}
?>
python
import asyncio
from telegram import Bot, ReplyKeyboardMarkup, KeyboardButton
from telegram.constants import ParseMode
async def send_location_example():
# Инициализация бота с токеном
bot = Bot(token="YOUR_BOT_TOKEN")
# ID чата (можно использовать числовой ID или username)
chat_id = 123456789 # или "@channelusername"
# Координаты (широта и долгота)
latitude = 55.7558 # Москва
longitude = 37.6173
try:
# Пример 1: Простая отправка локации
message = await bot.send_location(
chat_id=chat_id,
latitude=latitude,
longitude=longitude
)
print(f"Сообщение отправлено с ID: {message.message_id}")
# Пример 2: Отправка с дополнительными параметрами
message2 = await bot.send_location(
chat_id=chat_id,
latitude=latitude,
longitude=longitude,
horizontal_accuracy=50, # Точность 50 метров
live_period=3600, # Живая локация на 1 час
heading=90, # Направление движения 90 градусов
proximity_alert_radius=100, # Оповещение при приближении на 100м
disable_notification=True, # Без звука
protect_content=True, # Защита от пересылки
reply_to_message_id=message.message_id # Ответ на предыдущее сообщение
)
# Пример 3: С клавиатурой
reply_markup = ReplyKeyboardMarkup(
[[KeyboardButton("Поделиться локацией", request_location=True)]],
resize_keyboard=True
)
message3 = await bot.send_location(
chat_id=chat_id,
latitude=latitude,
longitude=longitude,
reply_markup=reply_markup,
allow_paid_broadcast=True # Разрешить платную рассылку
)
# Пример 4: Для бизнес-аккаунта
message4 = await bot.send_location(
business_connection_id="business_connection_id_here",
chat_id=chat_id,
latitude=latitude,
longitude=longitude
)
# Пример 5: С эффектом сообщения (для личных чатов)
message5 = await bot.send_location(
chat_id=chat_id,
latitude=latitude,
longitude=longitude,
message_effect_id="effect_id_here"
)
except Exception as e:
print(f"Ошибка: {e}")
# Запуск асинхронной функции
if __name__ == "__main__":
asyncio.run(send_location_example())
История изменений
- API 3.4. Обновлен метод sendLocation: Добавлено поле live_period
- API 5.0. Обновлен метод sendLocation: Добавлены параметры heading, proximity_alert_radius, horizontal_accuracy
- API 5.6. Обновлен метод sendLocation: Добавлено поле protect_content
- API 6.3. Обновлен метод sendLocation: Добавлен параметр message_thread_id
- API 7.0. Обновлен метод sendLocation: Заменены параметры reply_to_message_id и allow_sending_without_reply на reply_parameters
- API 7.4. Обновлен метод sendLocation: Добавлен параметр message_effect_id
- API 7.11. Обновлен метод sendLocation: Добавлен параметр allow_paid_broadcast
- API 9.2. Обновлен метод sendLocation: Добавлен параметр direct_messages_topic_id
- API 9.3. Обновлен метод sendLocation: Поддержан параметр message_thread_id в личных чатах с темами для отправки сообщения в конкретную тему.
Дополнительно
- Message - Это основной объект, представляющий сообщение в Telegram, который содержит информацию об отправителе, чате, контенте (текст, медиа, служебные данные) и различные метаданные.
- SuggestedPostParameters - Объект содержит параметры публикации, предлагаемой ботом, включая цену и дату отправки.
- ReplyParameters - Объект, описывающий параметры для ответа на сообщение, включая идентификатор сообщения, чат, цитирование и дополнительные настройки.
- InlineKeyboardMarkup - Объект для создания встроенной клавиатуры, которая отображается непосредственно в сообщении.
- ReplyKeyboardMarkup - Объект, представляющий пользовательскую клавиатуру с вариантами ответа для ботов Telegram.
- ReplyKeyboardRemove - Объект для удаления пользовательской клавиатуры и возврата к стандартной буквенной клавиатуре в клиентах Telegram.
- ForceReply - Объект ForceReply принудительно отображает интерфейс ответа в клиентах Telegram, упрощая создание пошаговых диалогов с ботом.