Добрый день! Пишу бота для telegram на php, прицеплен через webhook. Бот уже умеет отправлять файлы через url. Но не хотелось бы раз за разом отсылать их повторно.
Не могу понять, как:
$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, как понять, который из них мне нужен? или, может быть при форварде используется другой маркер, непонятно, другого метода не придумал пока)
$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;
}
Но не работает. Подскажите, пожалуйста, куда копать.
Как понять, который из идентификаторов файлом мне нужен для пересылки фотографий?
Лучше используйте file_id фотографии самого большого разрешения. Хоть это явно и не зафиксировано в документации, но фотки записываются в массиве в порядке возрастания линейных размеров. Так что надо брать самый последний айдишник из переданных.
В примере вашем, как уже было отмечено, неправильно заполняется массив с параметрами. Поле photo должно содержать только строку — id отправляемого фото (ну или ссылку, или байты файла в формате multipart/form-data). Так сказано в описании метода sendPhoto.
Кроме того, учтите, что бот может таким образом отправлять только те file_id, которые он сам получил от телеграма. Чужие, от другого бота, не подойдут.
На этом всё, касаемо особенностей Telegram. Из возможных проблем стоит также рассмотреть отсутствие библиотеки curl. Чтобы её установить в Ubuntu или Debian, поставьте пакет php-curl.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей