← Вернуться к списку тем

sendDocument + thumb (превью к файлу)

Привет!
iMakeBots, подскажи plz решение.
Пытаюсь отправить методом sendDocument с превью. https://i.postimg.cc/kGb7fRNK/image.png
Бьюсь уже какой день.
Как вот сюда свое изображение вставить?
$postContent = [
	'chat_id' => $chat_id,
	'document' => "$fileID",
];
$postContent['thunb'] = new CURLFile($thumb);

botApiQuery('sendDocument', $postContent);
echo json_encode($postContent);

function botApiQuery($method, $postContent)
{
	$curl = curl_init();
	curl_setopt($curl, CURLOPT_URL, "https://api.telegram.org/bot" . $GLOBALS['token'] . "/" . $method);
	curl_setopt($curl, CURLOPT_POSTFIELDS, $postContent);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type: multipart/form-data']);
	$result = curl_exec($curl);
	curl_close($curl);
	return $result;
}

Json вот такой
{
  "chat_id": "-xxxxxxx",
  "document": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "thunb": {
    "name": "https://telegra.ph/file/xxxxxxxxxxxxxxxxx.jpg",
    "mime": "",
    "postname": ""
  }
}

Ответы


  • iMakeBots [09.05.2022 в 10:08 → amun ra]
    Без проверки кода на работоспособность заметил ошибку

    thumb необходимо вместо thunb
  • amun ra [09.05.2022 в 10:42 → iMakeBots]
    iMakeBots, не заработало.(
    В доках про attach:// написано
    На канале https://t.me/shieldstorage реализовано, я json смотрел, там как-то получается thumb внутри document ещё две фигурные скобки имеет.
    json с канала
    {
     "update_id": 932838882,
     "message": {
      "message_id": 1028316,
      "from": {
       "id": 448656663,
       "is_bot": false,
       "first_name": "amun ra",
       "language_code": "ru"
      },
      "chat": {
       "id": 448656663,
       "first_name": "amun ra",
       "type": "private"
      },
      "date": 1652081893,
      "document": {
       "file_name": "VPNlat_PRO_v3-8-3-6-4.apk",
       "mime_type": "application/vnd.android.package-archive",
       "thumb": {
        "file_id": "AAMCAgADGQEAAQ-w3GJ4xOWfOpoMUFDanXkcfkCAi1hMAAIPFgACpGOQSV1ZQAABgZKp4gEAB20AAyQE",
        "file_unique_id": "AQADDxYAAqRjkEly",
        "file_size": 11547,
        "width": 320,
        "height": 320
       },
       "file_id": "BQACAgIAAxkBAAEPsNxieMTlnzqaDFBQ2p15HH5AgItYTAACDxYAAqRjkEldWUAAAYGSqeIkBA",
       "file_unique_id": "AgADDxYAAqRjkEk",
       "file_size": 11261552
      },
      "caption": "SHIELD ? APK",
      "caption_entities": [
       {
        "offset": 0,
        "length": 13,
        "type": "text_link",
        "url": "https://t.me/ HddemnV2y3k3ZjM1"
       }
      ]
     }
    }
  • amun ra [09.05.2022 в 14:09 → amun ra]
    Вот такое от телеграм в ответ приходит.

    "{"ok":true,"result":{"message_id":3213,"sender_chat":{"id":-1001320259426,"title":"TEST_CHANNEL_FOR_BOT","type":"channel"},"chat":{"id":-1001320259426,"title":"TEST_CHANNEL_FOR_BOT","type":"channel"},"date":1652094280,"document":{"file_name":"testfile.rar","mime_type":"application/vnd.rar","file_id":"BQACAgIZAx0EThj0-gACDI1iePVI9TS57WkVRVs57mNeBvoG0AACvBcAAjLbyEs6e9n9_tyNWiQE","file_unique_id":"AgADvBcAAjLbyEs","file_size":76}}}"

    Файл отправляет, а thumb нет.
  • amun ra [09.05.2022 в 14:47 → amun ra]
    У меня получилось.
    $postContent = [
    	'chat_id'  => $chat_id,
    	'document' => new CURLFile($fileID),
    	'thumb'    => [],
    	'caption'  => 'caption'
    ];
    $postContent['thumb'] = new CURLFile($thumb);
    iMakeBots, спасибо, без тебя долго бы тупил.
  • amun ra [09.05.2022 в 15:36 → amun ra]
    iMakeBots, не всё так радужно получилось))
    Отправляет только 'document' => new CURLFile($fileID) по ссылке, а по file_id не хочет.
    Можешь что-то посоветовать?
  • iMakeBots [10.05.2022 в 11:51 → amun ra]
    Ого сколько ты по-напечатал )) не подписался на обновления темы и все пропустил.
    ---
    Сейчас не у компьютера, протестить нет возможности, но исходя из доков: Thumbnails can't be reused and can be only uploaded as a new file (Превьюшку можно направить только новым файлом)
    ---
    По Document через file_id:
    new CURLFile() - принимает путь по которому он возьмет файл и подготовите его к отправке, file_id - это просто строка, поэтому передай ее 'document' => $fileID
  • amun ra [13.05.2022 в 08:26 → amun ra]
    iMakeBots, Привет!

    $postContent = [
    	'chat_id'  => $chat_id,
    	'document' =>$fileID,
    	'thumb'    => [],
    	'caption'  => 'caption'
    ];
    $postContent['thumb'] = new CURLFile($thumb);

    Если файл оправлять через new CURLFile(), то превью появляется, а если файл оправлять по ID ('document' =>$fileID,) то превью нет.
    Вот такие вот странности)
  • iMakeBots [13.05.2022 в 08:29 → amun ra]
    Про превью чуть выше написал))) там только новым файлом можно по id не получиться - из документации
  • amun ra [13.05.2022 в 08:39 → amun ra]
    Это я все понимаю.
    Я хочу сказать что имея ID ранее загруженного файла не получается добавить к нему превью не по id а по ссылке.
    Поясню: у меня в базе имеется куча ранее загруженных архивов, которые выдаются пользователю по запросу.
    Моя задача стилизовать стандартные иконки красивыми превью.
  • iMakeBots [13.05.2022 в 08:42 → amun ra]
    Тогда можно предположить, что они отдаются телегой из своей базы (кэшированние), можно попробовать сменить путь в адресе до файла - тогда телега посмотрит на него как на новый файл и закеширует уже с превьюшкой.

    Как вариант
  • amun ra [13.05.2022 в 08:46 → amun ra]
    iMakeBotsб ты прав, так и есть.
    Кеширут даже скорее клиент, а не телега.
    Посмотрел на телефоне Thumbnails присутствуют.
    Ещё раз спасибо тебе.
  • iMakeBots [13.05.2022 в 08:48 → amun ra]
    )) отлично - еще нам в копилку опыта добавилось
  • amun ra [13.05.2022 в 14:47 → amun ra]
    iMakeBots, дезинформировал я всех либо запутался.
    Посмотри plz код (токен рабочий, канал https://t.me/r2d2testtest)
    не добавляет превью
    
    $token    = "5341363388:AAEVtyMYjidoI0Jxa10BBNWyVED5A16GcKY";
    $chat_id  = '-1001565144995';
    $fileID   = 'BQACAgIAAx0EXUo3owADB2J-QhN-gi64WF-j2qcVJjybMTyTAAJ6GgACQP35S94bMRqoj3UNJAQ';
    $thumbURL = 'https://telegra.ph/file/0138a02ae64b42dc66f2d.jpg'; //ZIPpic
    
    $postContent = ['chat_id' => $chat_id, 'document' => $fileID,];
    
    $postContent['thumb'] = new CURLFile($thumbURL);
    
    $request = botApiQuery('sendDocument', $postContent);
    
    
    vаr_dump(json_decode($request));
    
    
    function botApiQuery($method, $postContent)
    {
    	$curl = curl_init();
    	curl_setopt($curl, CURLOPT_URL, "https://api.telegram.org/bot" . $GLOBALS['token'] . "/" . $method);
    	curl_setopt($curl, CURLOPT_POSTFIELDS, $postContent);
    	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    	curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type: multipart/form-data']);
    	$result = curl_exec($curl);
    	curl_close($curl);
    	return $result;
    }

    добавляет
    $token    = "5341363388:AAEVtyMYjidoI0Jxa10BBNWyVED5A16GcKY";
    $chat_id  = '-1001565144995';
    $fileID   = 'BQACAgIAAx0EXUo3owADB2J-QhN-gi64WF-j2qcVJjybMTyTAAJ6GgACQP35S94bMRqoj3UNJAQ';
    $fileURL = 'https://www.dropbox.com/s/1mz3m40iblyn8cf/Social%20Media%20Icons%20and%20Buttons%20%282%29.rar?dl=1';
    $thumbURL = 'https://telegra.ph/file/0138a02ae64b42dc66f2d.jpg'; //ZIPpic
    
    $postContent = ['chat_id' => $chat_id, 'document' => new CURLFile($fileURL),];
    
    $postContent['thumb'] = new CURLFile($thumbURL);
    
    $request = botApiQuery('sendDocument', $postContent);
    
    
    vаr_dump(json_decode($request));
    
    
    function botApiQuery($method, $postContent)
    {
    	$curl = curl_init();
    	curl_setopt($curl, CURLOPT_URL, "https://api.telegram.org/bot" . $GLOBALS['token'] . "/" . $method);
    	curl_setopt($curl, CURLOPT_POSTFIELDS, $postContent);
    	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    	curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type: multipart/form-data']);
    	$result = curl_exec($curl);
    	curl_close($curl);
    	return $result;
    }
  • iMakeBots [14.05.2022 в 16:47 → amun ra]
    Вот это у меня работает: Файл по ссылке, Локальный файл, Файл по file_id

        $post = [
            "chat_id" => "CHAT_ID",
    //          "document" => new \CURLFile("https://studentlib.com/skachat/referat-201582-razrabotka_i_issledovanie_modeli_otrazhatelya_modulyatora_winword_zip_1mb.zip"),
    //          "document" => new \CURLFile(__FILE__),
            "document" => "BQACAgIAAxkDAAJEr2J_sNih-IEbpeY0hp3jgZgUPpdfAAL2FgACTfIBSIaEcgq3avwKJAQ",
            "caption" => "Описание файла",
            "thumb" => new \CURLFile("https://telegra.ph/file/0138a02ae64b42dc66f2d.jpg")
        ];
        
        send($post, "TOKEN");
        
        function send($fields, $token)
        {
            $curl = curl_init();
            curl_setopt_array($curl, [
                CURLOPT_URL => 'https://api.telegram.org/bot' . $token . '/sendDocument',
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_HTTPHEADER => ['Content-Type: multipart/form-data'],
                CURLOPT_POST => true,
                CURLOPT_POSTFIELDS => $fields
            ]);
            $result = json_decode(curl_exec($curl));
            curl_close($curl);
            return $result;
        }