Diskussion zum Artikel "Die Erstellung des Bots für Telegram in der Sprache MQL5" - Seite 32
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Hallo zusammen,
Vielleicht können einige von euch helfen, ich versuche verzweifelt eine Lösung zu finden, um einen lokalen Screenshot über MT4 an Telegram zu senden.
Kurzer Code-Schnipsel
Der erste funktioniert, da ich die Nachricht erhalte, auch wenn ich @channelname verwende
Der zweite funktioniert nur mit chatID, was ok ist, ich kann damit leben
Beim dritten bekomme ich den Fehler:
2020.08.07 21:40:15.175 xxx1: {"ok":false, "error_code":400, "description": "Bad Request: chat not found"}
Irgendeine Idee, was ich falsch mache?
Hallo zusammen,
Vielleicht können einige von euch helfen, ich bin verzweifelt versucht, eine Lösung zu finden, um einen lokalen Screenshot über MT4 zu Telegram zu senden.
Schnell Code schnippelte
Der erste funktioniert, da ich die Nachricht erhalte, auch wenn ich @channelname verwende
Der zweite funktioniert nur mit chatID, was ok ist, ich kann damit leben
Bei der dritten bekomme ich den Fehler:
2020.08.07 21:40:15.175 xxx1: {"ok":false, "error_code":400, "description": "Bad Request: chat not found"}
Irgendeine Idee, was ich falsch mache?
Ja, Sie müssen die mqh-Datei so ändern, dass sie diese negative Zahl akzeptiert.
@Marco vd Heijden danke!
Das ist interessant, ich habe mir Telegram.mqh angeschaut und ich sehe drei Funktionen für SendPhoto, von denen ich mich frage, wie der Code weiß, welche er verwenden soll. Die dritte kommt jedenfalls nicht in Frage.
Erstens:
Zweitens:
Könnte es sein, dass der Code nicht weiß, welche ich nehmen will? Ich versuche, den ersten auszulösen, aber eigentlich wäre der zweite besser.
Zweitens habe ich versucht, in der ersten Funktion zu suchen, was mit _chat_id passiert, aber ich kann nur eine einfache Integer-zu-String-Konvertierung sehen:
Der zweite Parameter ist ein Long und der zweite ein String
und
Dies ist Teil der Mql-Grundlagen. Man kann Millionen von Funktionen mit demselben Namen und unterschiedlichen Parametern oder einer unterschiedlichen Anzahl von Parametern haben.
@Jefferson Metha ja das verstehe ich, das war nur mein Gedanke, da es so schwierig war, die Probleme zu finden.
Ich habe jetzt die Tipps, die in https://www.mql5.com/en/forum/89826/page15#comment_17079865 beschrieben sind, benutzt, aber ich komme immer noch nicht weiter.
Ich möchte mich auf die Funktion sendPhoto konzentrieren, wo die Eingabe der Name des Kanals ist, nicht die Chat-ID, also konzentrieren wir uns nur auf eine Sache.
Was ich bis jetzt gemacht habe, in Telegarm.mqh in der Funktion
Ich habe die folgende Zeile geändert:
Im Grunde genommen habe ich die StringTrim-Funktion entfernt, aber es wird nicht besser.
Endlich habe ich es herausgefunden.
Änderungen:
Entfernt:
Und schließlich in der EA, so einfach wie:
Guten Tag!
Danke für den ausführlichen Artikel. Sehr hilfreich.
Ich bin darauf gestoßen, dass die WEB-Anfrage nicht funktioniert hat.
Es gibt einen Fehler
2020.08.19 15:56:04.830 Moving Average Signal To Alert (RTSRIU0,M1) Fehler: URL ist für WebRequest nicht erlaubt
Nach Recherchen stellte sich heraus, dass es sich um ein fehlendes ?( Frage) nach /sendmessage?
Wurde dies schon behoben? Gibt es eine neue Version?
Ich werde es selbst beheben.
Ich sende Text an Telegram aus dem Indikator. Aber ich musste die Art der Anfrage von POST auf GET ändern.
Wenn ich mit POST sende, erhalte ich Fehler 400. Wenn ich den gleichen Code aus dem EA sende (aber ich verwende WebRequest anstelle von _WebRequest), funktioniert der Code im POST-Modus. Können Sie mir sagen, wo zu suchen, wie in der GET-Methode habe ich eine Grenze für die Länge der Anforderung?
Fehler und bei GET auch Fehler 400...
2020.08.21 08:52:20.138 testWININET GBPUSD,M1: Fehler beim Laden von 'https://api.telegram.org/bot123123123:ываываыукаыва /sendMessage?chat_id=-123123123123123&parse_mode=HTML&text=Hello', Code 400
Wenn ich sie über den Browser sende, geht die Anfrage durch.
#property link "https://www.mql5.com"
#Eigenschaft version "1.00"
#property strict
#property indicator_chart_window
//#include <Wininet.mqh>
#include <Webrequest_dll.mqh>
#define telegramBaseURL "https://api.telegram.org"
//https://tlgrm.ru/docs/bots/api zu lesen, wie was zu senden ist
input string inpToken="11111212:vapvapYVVAEFfer";//Token
input string inpChat_id="-3123123123123213";
bool inpParsMode =true;
int OnInit()
{
string Daten;
string url="https://api.telegram.org/bot" + inpToken + "/sendMessage?chat_id="+inpChat_id;
if(inpParsMode){
url = url + "&parse_mode=HTML"
}
// url = url + "&text= " + "<b>1114</b>"
// url = url + "&text= " + "<i>1114</i>";
url = url + "&text=" + "1118";
Print (url);
string cookie=NULL,headers;
char post[],result[];
int res=_WebRequest("GET",url,cookie,NULL,500,post,0,result,headers);
if(res==-1)
{
Print("Fehler in WebRequest. Fehlercode =",GetLastError());
//--- die URL fehlt wahrscheinlich in der Liste, drucken Sie eine Meldung über die Notwendigkeit, sie hinzuzufügen.
MessageBox("Es ist notwendig, die Adresse '"+url+"' zur Liste der erlaubten URLs in der Registerkarte 'Advisors' hinzuzufügen", "Fehler",MB_ICONINFORMATION);
}
sonst
{
if(res==200)
{
//--- erfolgreicher Download
PrintFormat("Datei erfolgreich hochgeladen, Größe %d Bytes.",ArraySize(result));
//DruckFormat("Server-Kopfzeilen: %s",Kopfzeilen);
//--- Daten in Datei speichern
int filehandle=FileOpen("url.htm",FILE_WRITE|FILE_BIN);
if(filehandle!=INVALID_HANDLE)
{
//--- den Inhalt des result[]-Arrays in einer Datei speichern
FileWriteArray(filehandle,result,0,ArraySize(result));
//--- die Datei schließen
FileClose(filehandle);
}
sonst
Print("Fehler bei FileOpen. Fehlercode =",GetLastError());
}
sonst
PrintFormat("Fehler beim Laden von '%s', Code %d",url,res);
}
// ReadUrl(url,data);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Benutzerdefinierte Indikator-Iterationsfunktion |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &Volumen[],
const int &spread[])
{
//---
//--- Rückgabewert von prev_calculated für den nächsten Aufruf
return(rates_total);
}
//+------------------------------------------------------------------+