Метод sendLocation

Метод для отправки географического местоположения в чат с поддержкой живых геопозиций и дополнительных параметров.

Описание

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