Почему при отправке медиагруппы в телеграм-бот не передаются файлы форматов doc, docx и других документов?

Здравствуйте! Я разрабатываю бота на платформе longman и реализую интеграцию с планфиксом. У меня возникла проблема: при отправке файлов форматов doc и docx, а также других типов, происходит ошибка: [description] => Bad Request: failed to send message #1 with the error message "WEBPAGE_CURL_FAILED". Однако, файлы в формате pdf и изображения отправляются корректно и обрабатываются без проблем. Можете подсказать, в чем может быть причина данной ошибки? Также стоит отметить, что в одной группе я отправляю файлы одного типа. 

Ниже приведен фрагмент кода, который отвечает за отправку вложений:
<pre><code class="php">$attachments1 = [];
// Ищем все элементы `attachments` в строке
preg_match_all('/attachments%5Burl%5D=([^&amp;]*)&amp;attachments%5Bname%5D=([^&amp;]*)/', $input, $matches, PREG_SET_ORDER);

// Обрабатываем найденные элементы
foreach ($matches as $match) {
    $url = urldecode($match[1]);
    $name = urldecode($match[2]);
    $attachments1[] = [
        'url' =&gt; $url,
        'name' =&gt; modifyFileName($name),
    ];
}

file_put_contents($log_file, "Состав массива вложений: " . print_r($attachments1, true) . "\n", FILE_APPEND);

$mediaGroup = [];
foreach ($attachments1 as $attach) {
    $file_extension = pathinfo($attach['name'], PATHINFO_EXTENSION);
    $allowed_photo_extensions = ['jpg', 'jpeg', 'png', 'gif'];
    $allowed_video_extensions = ['mp4', 'mkv'];

    if (in_array(strtolower($file_extension), $allowed_photo_extensions)) {
        $mediaGroup[] = [
            'type' =&gt; 'photo',
            'media' =&gt; $attach['url'],
            'caption' =&gt; $att
  • 31 декабря 2024 г. 13:43
Ответы на вопрос 1
Проблема, с которой вы сталкиваетесь, связана с особенностями отправки файлов через API Telegram. Ошибка `WEBPAGE_CURL_FAILED` может возникать по нескольким причинам, особенно когда речь идет о форматах файлов, таких как `.doc` и `.docx`.

Вот несколько моментов, которые стоит проверить:

1. **Поддержка форматов**: Telegram поддерживает разные типы файлов, но не все форматы могут быть отправлены в медиа-группах. В частности, `.doc` и `.docx` не поддерживаются для отправки в виде медиа-группы. Для большинства не изображений или видео требуется отправка через отдельное сообщение с использованием метода `sendDocument`.

2. **Использование медиа-групп**: Если вы отправляете медиа-группу, Telegram допускает определенные типы медиа (как изображения и видео). Если в вашей группе находятся неподдерживаемые форматы, возможно, Telegram просто не отправляет их и вызывает ошибку.

3. **Проверка URL**: Убедитесь, что предоставляемые URL для загрузки документов действительно доступны и корректны. Проверьте, что файлы можно открыть напрямую через браузер по этим ссылкам.

4. **Лимиты на размер файлов**: Убедитесь, что размеры отправляемых файлов не превышают ограничения Telegram (например, размер одного файла должен быть меньше 20 МБ).

5. **Отладочная информация**: Для дальнейшей диагностики можно добавить логирование ответов от API Telegram, чтобы просмотреть более подробную информацию о том, почему запрос завершился неудачей.

Чтобы решить вашу проблему, попробуйте изменить логику отправки вложений для форматов `.doc` и `.docx`:

```php
foreach ($attachments1 as $attach) {
    $file_extension = pathinfo($attach['name'], PATHINFO_EXTENSION);
    
    if (in_array(strtolower($file_extension), $allowed_photo_extensions)) {
        // Если файл изображения - добавляем в медиа-группу
        $mediaGroup[] = [
            'type' => 'photo',
            'media' => $attach['url'],
            'caption' => $attach['name'],
        ];
    } elseif (in_array(strtolower($file_extension), ['doc', 'docx'])) {
        // Если файл документа - отправляем отдельно
        // Здесь можно использовать метод sendDocument
        $telegram->sendDocument([
            'chat_id' => $chatId,
            'document' => $attach['url'],
            'caption' => $attach['name'],
        ]);
    }
    // Добавьте дополнительные условия для других типов файлов по мере необходимости
}
```

Это позволит вам обрабатывать документы отдельно, а изображения отправлять в медиа-группе, избегая ошибки `WEBPAGE_CURL_FAILED`.
Похожие вопросы