@Dark_Dante

Как отправить документ в телегу через GuzzleHttp?

Здравствуйте. Необходимо отправить сгенерированный документ чат боту. Для взаимодействия с ботом используется GuzzleHttp Client.
Отправку делаю так:
$body = [
                'chat_id' => $chatId,
                'document' => 'https://picsum.photos/200/300'
            ]; 
$client->post($path, $body);

Все отлично, приходит изображение. А вот как сделать отправку чистого контента, например полученного функцией file_get_content() или сгенерированную строку (логи)?
Пробовал так:
$body = [
                'multipart' => [
                    [
                        'name' => 'chat_id',
                        'contents' => $chatId
                    ],
                    [
                        'name'     => 'document',
                        'contents' => $content, //строка контента, полученная например через file_get_contents('log.txt');
                        'filename' => 'file.txt'
                    ],
                ],
            ];

Да и вообще как только не пробовал... Ответ от телеги такой {"ok":false,"error_code":400,"description":"Bad Request: there is no document in the request"}.
Как отправить в телегу файл?
  • Вопрос задан
  • 85 просмотров
Решения вопроса 1
@Dark_Dante Автор вопроса
В общем ответ на свой же вопрос. Пошел читать на гитхабе реализацию всяких разных ботов и отправку документов. И таки нашел!
Тело запроса должен выглядеть так:
$body = [
                'multipart' => [
                    [
                        'name' => 'chat_id',
                        'contents' => $chatId,
                    ],
                    [
                        'name' => 'document',
                        'contents' => Utils::streamFor($content, ['metadata' =>['uri'=>'filename.txt']]),
                    ],
                ],
            ];

Где Utils - GuzzleHttp\Psr7\Utils
Скармливаем методу streamFor RAW content и в метадате прописываем имя файла. Ну и отправляем $client->post($url, $body)
Надеюсь кому то помог съэкономить чуточку времени
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы