Esp 32 cam Tg Foto

html

✩✩✩✩✩✩✩
10 Фев 2020
4
0
Нашел интересную библиотеку для работы с telegram. так то все хорошо работает кроме фото. Долго ковырялся перед тем как написать этот пост . И теперь мое терпение лопнуло и я прошу помощи друзья.
Вобщем проблема заключается в следующем . (самое смешное что при первом запуске все работало ,я даже создал файл worked wersion , чтобы исключить смерть скетча от детских пальчиков.) В библиотеке за отправку фото отвечает несколько функций , а именно
C++:
String UniversalTelegramBot::sendPhotoByBinary(
    const String& chat_id, const String& contentType, int fileSize,
    MoreDataAvailable moreDataAvailableCallback,
    GetNextByte getNextByteCallback, GetNextBuffer getNextBufferCallback, GetNextBufferLen getNextBufferLenCallback) {

  #ifdef TELEGRAM_DEBUG
    Serial.println(F("sendPhotoByBinary: SEND Photo"));
  #endif

  String response = sendMultipartFormDataToTelegram("sendPhoto", "photo", "img.jpg",
    contentType, chat_id, fileSize,
    moreDataAvailableCallback, getNextByteCallback, getNextBufferCallback, getNextBufferLenCallback);

  #ifdef TELEGRAM_DEBUG
    Serial.println(response);
  #endif

  return response;
}
UniversalTelegramBot::sendPhotoByBinary костыль для следующей
C++:
String UniversalTelegramBot::sendMultipartFormDataToTelegram(
    const String& command, const String& binaryPropertyName, const String& fileName,
    const String& contentType, const String& chat_id, int fileSize,
    MoreDataAvailable moreDataAvailableCallback,
    GetNextByte getNextByteCallback,
    GetNextBuffer getNextBufferCallback,
    GetNextBufferLen getNextBufferLenCallback) {

  String body;
  String headers;
 
  const String boundary = F("------------------------b8f610217e83e29b");

  // Connect with api.telegram.org if not already connected
  if (!client->connected()) {
    #ifdef TELEGRAM_DEBUG
        Serial.println(F("[BOT Client]Connecting to server"));
    #endif
    if (!client->connect(TELEGRAM_HOST, TELEGRAM_SSL_PORT)) {
      #ifdef TELEGRAM_DEBUG
        Serial.println(F("[BOT Client]Conection error"));
      #endif
    }
  }
  if (client->connected()) {
    String start_request;
    String end_request;
  

    start_request += F("--");
    start_request += boundary;
    start_request += F("\r\ncontent-disposition: form-data; name=\"chat_id\"\r\n\r\n");
    start_request += chat_id;
    start_request += F("\r\n" "--");
    start_request += boundary;
    start_request += F("\r\ncontent-disposition: form-data; name=\"");
    start_request += binaryPropertyName;
    start_request += F("\"; filename=\"");
    start_request += fileName;
    start_request += F("\"\r\n" "Content-Type: ");
    start_request += contentType;
    start_request += F("\r\n" "\r\n");

    end_request += F("\r\n" "--");
    end_request += boundary;
    end_request += F("--" "\r\n");

    client->print(F("POST /"));
    client->print(buildCommand(command));
    client->println(F(" HTTP/1.1"));
    // Host header
    client->println(F("Host: " TELEGRAM_HOST)); // bugfix - https://github.com/witnessmenow/Universal-Arduino-Telegram-Bot/issues/186
    client->println(F("User-Agent: arduino/1.0"));
    client->println(F("Accept: */*"));

    int contentLength = fileSize + start_request.length() + end_request.length();
    #ifdef TELEGRAM_DEBUG
        Serial.println("Content-Length: " + String(contentLength));
    #endif
    client->print(F("Content-Length: "));
    client->println(String(contentLength));
    client->print(F("Content-Type: multipart/form-data; boundary="));
    client->println(boundary);
    client->println(F(""));
    client->print(start_request);

    #ifdef TELEGRAM_DEBUG
     Serial.print("Start request: " + start_request);
    #endif

    if (getNextByteCallback == nullptr) {
        while (moreDataAvailableCallback()) {
            client->write((const uint8_t *)getNextBufferCallback(), getNextBufferLenCallback());
            #ifdef TELEGRAM_DEBUG
             Serial.println(F("Sending photo from buffer"));
            #endif
            }
    } else {
        #ifdef TELEGRAM_DEBUG
            Serial.println(F("Sending photo by binary"));
        #endif
        byte buffer[512];
        int count = 0;
        while (moreDataAvailableCallback()) {
            buffer[count] = getNextByteCallback();
            count++;
            if (count == 512) {
                // yield();
                #ifdef TELEGRAM_DEBUG
                    Serial.println(F("Sending binary photo full buffer"));
                #endif
                client->write((const uint8_t *)buffer, 512);
                count = 0;
            }
        }
      
        if (count > 0) {
            #ifdef TELEGRAM_DEBUG
                Serial.println(F("Sending binary photo remaining buffer"));
            #endif
            client->write((const uint8_t *)buffer, count);
        }
    }

    client->print(end_request);
    #ifdef TELEGRAM_DEBUG
        Serial.print("End request: " + end_request);
    #endif
    readHTTPAnswer(body, headers);
  }

  closeClient();
  return body;
}
Вообщем в процессе ее выполнения есп думает секунд 10 , видимо ждет ответа от апи и вроде говорит что все отправлено и великолепно ,но ничего бот не присылает . Я думаю что проблема в том что апи просто не понимает что я ему отправляю . либо я как то не правильно формирую запрос . HELP!!! уже всю голову сломал. Прилагаю библиотеку проверьте , даже пример не работает.
p.s.
от api ничего не приходит при отправке фото ///
 

Вложения