file_id от файлов бота в telegram (php)

588
29 марта 2017, 18:55

Добрый день! Пишу бота для telegram на php, прицеплен через webhook. Бот уже умеет отправлять файлы через url. Но не хотелось бы раз за разом отсылать их повторно.

Не могу понять, как:

  1. получить file_id его файлов, отправленных ранее. (пытаюсь делать форвард сообщения бота, выводя в канал
$output = json_decode(file_get_contents('php://input'), TRUE);
sendMessage($chat_id, $output['message']['photo'][0]['file_id']);
sendMessage($chat_id, $output['message']['photo'][1]['file_id']);
sendMessage($chat_id, $output['message']['photo'][2]['file_id']);

выходят три разных маркера вида AgADBAAD1acxG_hEyFKdehxkDtYNbECcpxkABKdphgFcKKFpkRMAAgI, как понять, который из них мне нужен? или, может быть при форварде используется другой маркер, непонятно, другого метода не придумал пока)

  1. как их использовать? пытаюсь так:
$api = 'https://api.telegram.org/bot' . $access_token;
function sendPhotoId($chat_id, $file) {
    $target_url = $GLOBALS['api'] . '/sendphoto';
    $post = array(
        'chat_id'   => $chat_id,
        'photo'     => array(
            'file_id' => "AgADBAAD1acxG_hEyFKdehxkDtYNbECcpxkABOusfARhbKj6kxMAAgI"
        )
    );
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$target_url);
    curl_setopt($ch, CURLOPT_POST,1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    $result=curl_exec ($ch);
    curl_close ($ch);
    echo $result;
}

Но не работает. Подскажите, пожалуйста, куда копать.

Answer 1

Как понять, который из идентификаторов файлом мне нужен для пересылки фотографий?

Лучше используйте file_id фотографии самого большого разрешения. Хоть это явно и не зафиксировано в документации, но фотки записываются в массиве в порядке возрастания линейных размеров. Так что надо брать самый последний айдишник из переданных.

В примере вашем, как уже было отмечено, неправильно заполняется массив с параметрами. Поле photo должно содержать только строку — id отправляемого фото (ну или ссылку, или байты файла в формате multipart/form-data). Так сказано в описании метода sendPhoto.

Кроме того, учтите, что бот может таким образом отправлять только те file_id, которые он сам получил от телеграма. Чужие, от другого бота, не подойдут.

На этом всё, касаемо особенностей Telegram. Из возможных проблем стоит также рассмотреть отсутствие библиотеки curl. Чтобы её установить в Ubuntu или Debian, поставьте пакет php-curl.

READ ALSO
Временные интервалы в дате php

Временные интервалы в дате php

Доброго времени! Столкнулся с такой задачей, есть 2 переменные с датой и временем

300
Ошибка при создании формы по аннотациям [Syntax Error] Expected PlainValue, got '$' at position 78

Ошибка при создании формы по аннотациям [Syntax Error] Expected PlainValue, got '$' at position 78

Создаю сайт и потребовалось создать элемент формы select который бы выводил список всех пользователей для выбораСоздавать форму мне удобнее...

354
PHP парсинг XML param в yandex.xml

PHP парсинг XML param в yandex.xml

Подскажите, пожалуйста, как прочитать и вывести данные из файла XML? Есть файл стандарта yandex

215