Обсуждение статьи "Создание бота для Telegram на языке MQL5" - страница 16

 
в виндовс 7 , 8 и 8.1 не работает ни через вебреквест в мт , ни через вининет .виндовс сервер 2012 и все что выше - работает нормально.Проверил также доступ к апи через Интернет Експлоер в этих системах , так вот на 7 и 8 и 8,1 даже браузер не получает ответ .
 

Добрый день.

Спасибо за подробную статью. Очень помогла.

Столкнулся с тем, что WEB запрос  не отрабатывался.

Выдает ошибку

2020.08.19 15:56:04.830 Moving Average Signal To Alert (RTSRIU0,M1) Error: URL does not allowed for WebRequest

2020.08.19 15:54:01.332 Moving Average Signal To Alert (RTSRIU0,M1) выход канал https://api.telegram.org/bot1234567:AAHwDJwwrh-m16O0EoIA7--3BG0I5ayk3E0/sendMessage chat_id=@MyTestSignal&text=HELLO

После исследований оказалось что пропущен ?( вопрос) после /sendmessage?

Это уже исправлено было? Есть новая версия ?

Сам то я исправлю. 

 

Делаю отправку текста в телеграм из индикатора. Но пришлось изменить POST на GET  тип запроса.

Если отправляю с POST то возникает ошибка 400. Если отправляю из советника такой же код(но использу.ю не _WebRequest а WebRequest) то код работает в режиме POST. Подскажите куда стоит посмотреть, так как в методе GET у меня есть ограничение на длину запроса?

Ошибка и с GET тоже ошибка 400...

2020.08.21 08:52:20.138 testWININET GBPUSD,M1: Ошибка загрузки 'https://api.telegram.org/bot123123123:ываываыукаыва /sendMessage?chat_id=-123123123123123&parse_mode=HTML&text=Привет', код 400

Если отправляю через браузер запрос проходит.



#property link      "https://www.mql5.com"

#property 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 почитать как что отправлять

input string inpToken="11111212:вапвапапЫВВАEFfer";//Token

input string inpChat_id ="-3123123123123213";

bool inpParsMode =true;


int OnInit()

  {

    string data;

    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("Ошибка в WebRequest. Код ошибки  =",GetLastError());

      //--- возможно, URL отсутствует в списке, выводим сообщение о необходимости его добавления

      MessageBox("Необходимо добавить адрес '"+url+"' в список разрешенных URL во вкладке 'Советники'","Ошибка",MB_ICONINFORMATION);

     }

   else

     {

      if(res==200)

        {

         //--- успешная загрузка

         PrintFormat("Файл успешно загружен, размер %d байт.",ArraySize(result));

         //PrintFormat("Заголовки сервера: %s",headers);

         //--- сохраняем данные в файл

         int filehandle=FileOpen("url.htm",FILE_WRITE|FILE_BIN);

         if(filehandle!=INVALID_HANDLE)

           {

            //--- сохраняем содержимое массива result[] в файл

            FileWriteArray(filehandle,result,0,ArraySize(result));

            //--- закрываем файл

            FileClose(filehandle);

           }

         else

            Print("Ошибка в FileOpen. Код ошибки =",GetLastError());

        }

      else

         PrintFormat("Ошибка загрузки '%s', код %d",url,res);

     }   

   // ReadUrl(url,data);


    return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

//| Custom indicator iteration function                              |

//+------------------------------------------------------------------+

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 &volume[],

                const int &spread[])

  {

//---

   

//--- return value of prev_calculated for next call

   return(rates_total);

  }

//+------------------------------------------------------------------+


Bots: An introduction for developers
  • core.telegram.org
Bots are third-party applications that run inside Telegram. Users can interact with bots by sending them messages, commands and inline requests. You control your bots using HTTPS requests to our Bot API. 1. What can I do with bots? To name just a few things, you could use bots to: Get customized notifications and news . A bot can act as a smart...
 
operlay:

Делаю отправку текста в телеграм из индикатора. Но пришлось изменить POST на GET  тип запроса.


Вообще-то документация гласит:

Функция WebRequest() является синхронной, это означает, что она приостанавливает выполнение программы и ждет ответа от запрашиваемого сервера. Так как задержки при получении ответа на отправленный запрос могут быть большими, то функция запрещена для вызовов из индикаторов, поскольку индикаторы работают в едином потоке, общем для всех индикаторов и графиков на данном символе. Задержка выполнения индикатора на одном из графиков символа может привести к остановке обновления всех графиков по данному символу.

Функцию можно вызывать только из экспертов и скриптов, так как они работают в собственном потоке выполнения. При вызове из индикатора 
 
Mikhail Dovbakh:

Вообще-то документация гласит:

У него отправка через dll, а так можно и в индикаторах

Проблема видимо с заголовками

Код состояния ответа "HTTP 400 Bad Request" указывает, что сервер не смог понять запрос из-за недействительного синтаксиса.
 
Ошибку нашел, 400 ошибка исправлена.  Все успешно отправляется. Спасибо за помощь! Не кодировал строку.
 
В закрытые каналы никак нельзя отправлять сообщения с помощью бота?
 
Yevhenii Levchenko:
В закрытые каналы никак нельзя отправлять сообщения с помощью бота?

Если бот есть в канале и у него есть право отправлять сообщения, можно.

 
Andrey Khatimlianskii:

Если бот есть в канале и у него есть право отправлять сообщения, можно.

Бот добавлен в администраторы канала и есть право отправки сообщений. В публичный канал отправляет, но как только делаю закрытым , то начинает писать "Bad request". Там, как понимаю, нужно заместо ссылки на канал (для публичной версии) подставить ссылку на приватную версию канала...? Или как тут корректно все сделать?

 
Yevhenii Levchenko:

Бот добавлен в администраторы канала и есть право отправки сообщений. В публичный канал отправляет, но как только делаю закрытым , то начинает писать "Bad request". Там, как понимаю, нужно заместо ссылки на канал (для публичной версии) подставить ссылку на приватную версию канала...? Или как тут корректно все сделать?

Ты про приватный канал?
Причина обращения: