Telegram API: Bild-Versand funktioniert nur noch sporadisch

Pfandfinder

Lieutenant
Registriert
Nov. 2020
Beiträge
619
hallo,

ich habe einen telegram-bot welcher Bilder verschickt. seit einigen Tagen funktioniert das nur noch sporadisch, manchmal kommt bei einem Abruf das foto einfach nicht an. Im serverlog ist kein Fehler. ich habe nichts an meinem Bot geändert die letzte Zeit. ich habe gerade mal rum-getestet mit einem einfachen /foto Befehl und es muss an telegram liegen - auch bei einem bot eines kollegen ist es das Problem. wir verwenden diese Funktion :

PHP:
<?php
function sendPhoto($bot_id,$chat_id,$caption,$disable_notification,$photo_url)
{
    $ch = curl_init('https://api.telegram.org/bot'.$bot_id.'/sendPhoto');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

    $param = array(
        'chat_id' => $chat_id,
        'caption' => $caption,
        'parse_mode' => 'html',
        'disable_notification' => $disable_notification,
        'photo' => $photo_url
    );

    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($param));

    $result = curl_exec($ch);
    if(!curl_errno($ch))
    {
        $statusCode = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
        if($statusCode == 403)
        {
            global $denied;
            $denied = $chat_id;
        }
    }
    curl_close($ch);

    return $result;
}
?>

es funktioniert ja ab und zu - also die Funktion kann ja nicht veraltet sein. kann das Problem jemand bestätigen ?
 
Zuletzt bearbeitet:
du holst dir ja den statuscode ab . Das ist schonmal gut. Aber du behandelst nur 403 - Smagst du mal loggen welchen statuscode du da so bekommst wenn es sonst nicht funktioniert?
Das gibt gute hinweise wo der Fehler zu suchen ist.
 
  • Gefällt mir
Reaktionen: Der Lord
Wie viele Bilder X werden denn so verschickt in Zeitraum Y und an wie viele User Z? Ggf. schlägt hier irgendeine Art Rate Limit zu. Denn wäre deine Methode grundsätzlich falsch, würde ja gar kein Versand funktionieren - daher die Idee mit dem Limit. Falls es recht viele Requests sind ggf. mal paar Pausen mit einbauen und testen.

Weitere Idee: $photo_url ist bei allen Versuchen (also bei 200er und bei den 400ern) korrekt befüllt und die Url auflösbar? Generell würde ich einfach mal ne Zeit lang die Variablen zusammen mit dem HTTP-Code loggen, um ggf. Zusammenhänge zu finden.
 
Zuletzt bearbeitet:
das sollten nicht viele sein, alle paar Minuten mal eins vielleicht... in der Doku steht für dateien zumindest auch:

"If the file is already stored somewhere on the Telegram servers, you don't need to reupload it: each file object has a file_id field, simply pass this file_id as a parameter instead of uploading. There are no limits for files sent this way."

zu rate limit finde ich gar nichts.
 
na dann wie schon vorgeschlagen: alles loggen und var_dumpen (input und output) wenn's ungleich 200 ist und prüfen woran es liegen könnte, dass der server n 400er zurückgibt.

ich hab festgestellt, dass der tg-server manchmal etwas hängt und verspätet ausliefert - aber bei mir handelt es sich nur um reine textnachrichten und 400er bekomme ich auch nicht - denke also dass es hier andere gründe hat.
 
  • Gefällt mir
Reaktionen: Pfandfinder
Zurück
Oben