Нашел интересную библиотеку для работы с telegram. так то все хорошо работает кроме фото. Долго ковырялся перед тем как написать этот пост . И теперь мое терпение лопнуло и я прошу помощи друзья.
Вобщем проблема заключается в следующем . (самое смешное что при первом запуске все работало ,я даже создал файл worked wersion , чтобы исключить смерть скетча от детских пальчиков.) В библиотеке за отправку фото отвечает несколько функций , а именно
UniversalTelegramBot::sendPhotoByBinary костыль для следующей
Вообщем в процессе ее выполнения есп думает секунд 10 , видимо ждет ответа от апи и вроде говорит что все отправлено и великолепно ,но ничего бот не присылает . Я думаю что проблема в том что апи просто не понимает что я ему отправляю . либо я как то не правильно формирую запрос . HELP!!! уже всю голову сломал. Прилагаю библиотеку проверьте , даже пример не работает.
p.s.
от api ничего не приходит при отправке фото ///
Вобщем проблема заключается в следующем . (самое смешное что при первом запуске все работало ,я даже создал файл 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;
}
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;
}
p.s.
от api ничего не приходит при отправке фото ///
Вложения
-
94.9 KB Просмотры: 9