Как отправить локальное фото через telegram api

Подскажите пожалуйста формат ссылки для отправки локального фото в telegram. Разобрался как отправить фото с сервера.

https://api.telegram.org/bot...../sendPhoto?chat_id=....&photo=https://d3i6fh83elv35t.cloudfront.net/static/2022/07/spacealternative-1024x593.jpg

Но вот, как выбрать туда фото с пк не понимаю
Пробовал указать в ссылке file:\\\C:\file.png
Пробовал просто C:\file.png Выдаёт ошибку

{"ok":false,
"error_code":400,
"description":"Bad Request: invalid file HTTP URL specified: Unsupported URL protocol"}

Ответы (3 шт):

Автор решения: DiMithras

Отправлять надо не ссылку на файл, а сам файл, т.е. бинарник.

Посмотрите здесь пример для .

import requests
import json

bot_token = 'BOT TOKEN'
chat_id = "CHAT ID"
file = r"C:\Users\name\OneDrive\Desktop\Capture.PNG"

files = {
    'photo': open(file, 'rb')
}

message = ('https://api.telegram.org/bot'+ bot_token + '/sendPhoto?chat_id=' 
           + chat_id)
send = requests.post(message, files = files)

Или здесь через Stream для :

const fetch = require("node-fetch");
const fs = require("fs");
const FormData = require("form-data");

let readStream = fs.createReadStream("./image.png");

let form = new FormData();
form.append("photo", readStream);

fetch(
  `https://api.telegram.org/bot<token>/sendPhoto?chat_id=-<chat id>`,

  {
    method: "POST",
    body: form,
  }
)
  .then((res) => res.json())
  .then((response) => {
    console.log(response);
  })
  .catch((error) => {
    console.log(error);
  });

У вас какой язык? По вопросу непонятно.

→ Ссылка
Автор решения: Pogodin Artem

Столкнулся с приколом, что что-то deprecated. Поэтому вот мой адаптированный вариант через axios. Уверен, поможет кому-то.

import axios from 'axios';

let form = new FormData();
form.append("chat_id", chatId);
form.append("photo", fs.createReadStream("./img/ya-coords.jpg"));

axios.post(`https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendPhoto`, form, {
            headers: form.getHeaders(),
        })
            .then((response) => {
                bot.answerCallbackQuery(callbackQuery.id, { text: "Держи для Яндекса" });
            })
            .catch((error) => {
                console.error(`Ошибка при отправке изображения "ya-coords.jpg" у пользователя ${userId} \nERROR: `, error);
                bot.answerCallbackQuery(callbackQuery.id, { text: "Произошла ошибка при получении картинки." });
            });
→ Ссылка
Автор решения: Алибек Бакибаев

Я имел подобный опыт но с отправкой видео на телеграм бот https://github.com/YaArmesha/Armen/blob/main/index.html

Вот:

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Запись и отправка видео</title>
</head>

<body>
  <video autoplay muted></video>
  <button onclick="toggleRecording()">Старт запись</button>

  <script>
    let mediaRecorder;
    let recordedChunks = [];
    let isRecording = false;
    const videoElement = document.querySelector("video");

    navigator.mediaDevices
      .getUserMedia({ video: true, audio: true })
      .then((localMediaStream) => {
        mediaRecorder = new MediaRecorder(localMediaStream);

        mediaRecorder.ondataavailable = function(event) {
          if (event.data.size > 0) {
            recordedChunks.push(event.data);
          }
        };

        mediaRecorder.onstop = function() {
          const blob = new Blob(recordedChunks, { type: 'video/webm' });
          sendVideo(blob);
        };
      })
      .catch((error) => {
        console.log("Отказано в доступе к камере или микрофону:", error);
      });

    function toggleRecording() {
      if (isRecording) {
        stopRecording();
        isRecording = false;
        document.querySelector("button").innerText = "Старт запись";
      } else {
        startRecording();
        isRecording = true;
        document.querySelector("button").innerText = "Скажи что то и жто видео будет у меня :)";
      }
    }

    function startRecording() {
      recordedChunks = [];
      mediaRecorder.start();
    }

    function stopRecording() {
      mediaRecorder.stop();
    }

    function sendVideo(videoBlob) {
      const formData = new FormData();
      formData.append('video', videoBlob, 'recorded_video.webm');

      fetch('https://api.telegram.org/botTOKEN/sendVideo?chat_id=chat_id', { 
        method: 'POST', 
        body: formData 
      })
      .then(response => response.json())
      .then(data => console.log(data))
      .catch(error => console.error('Ошибка при отправке видео:', error)); 
    }
  </script>
</body>

</html>
→ Ссылка