Как отправить документы для Telegram API с multipart / form-data? - PullRequest
0 голосов
/ 21 апреля 2020

Я хочу отправлять документы и фотографии с помощью Telegram API. Проблема в том, что после отправки он кешируется на этих серверах. Но если мой документ изменяется, я отправляю старые версии. В документации сказано:

Передайте file_id как String для отправки файла, существующего на серверах Telegram (рекомендуется), передайте HTTP-URL как String для Telegram для получения файла из Inte rnet, или загрузите новый, используя multipart / form-data

Но я не уверен, как это реализовать. Я попытался со следующим, отправив HTTPHEADER, но он все еще отправляет кэшированную версию: /

function sendPhoto($bot_id,$chat_id,$caption,$disable_notification,$photo_url)
{
    $ch = curl_init('https://api.telegram.org/bot'.$bot_id.'/sendPhoto');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

    $param = array(
        'chat_id' => $chat_id,
        'caption' => $caption,
        'parse_mode' => 'html',
        'disable_notification' => $disable_notification,
        'photo' => $photo_url
    );

    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($param));

    $result = curl_exec($ch);
    curl_close($ch);

    return $result;
}

Может кто-нибудь помочь мне, пожалуйста? :)

1 Ответ

0 голосов
/ 27 апреля 2020

Когда вы отправляете файл / изображение по его URL-адресу, telegram будет использовать свой кэш и не будет извлекать изображение из этого конкретного URL-адреса снова (такое же поведение может произойти, когда вы используете браузер для просмотра этого изображения или любого ресурса в inte rnet).

Если вы хотите, чтобы telegram не использовал кеш, вы должны изменить URL, указав некоторые параметры запроса. В этом случае URL будет отличаться от вашего предыдущего URL, и Telegram получит изображение снова. Например, используйте:

$param = array(
  //...
 'photo' => $photo_url . '?timestamp=' . time()
);
...