Push сообщения приходят частично (для админов)

 

Здравствуйте, проблема с push-сообщениями (MQID - 4A253808 и 0BF211E6). Не все сообщения почему-то приходят. Сообщения отсылаются подряд, но с паузами в секунду, но к сожалению приходит только первое/последнее из 4-5-ти сообщений отправленых подряд. Ошибки не какой не выдает, то есть возвращает true при отправке. Единственное обьяснение - блокировка на сервере, проверьте пожалуйста. Код на всякий случай (в массиве notify[] текстовые сообщения):

void Sending()
{
  for(int a=0;a<=49;a++)
  {
    if(notify[a]==null) continue;
    ResetLastError();
    for(int b=0;b<10;b++)
    {
      if(SendNotification(notify[a])==true) 
      {
        Print(notify[a]);
        if(GetLastError()>0)
        {
          Print("Error ",GetLastError());
          ResetLastError();
        }
        Sleep(1000); 
        break;
      }
      else 
      {
        Print(GetLastError()," - Неудачная отправка сообщения: ",notify[a]);
        Sleep(1000);
        break;
      }
    }
  }
}
 
Никто не знает куда можно обратиться по этому вопросу?
 
Там есть ограничения на частоту отправки. Загляните в журнал терминала и в справку по SendNotification
 

Вот:

Для функции SendNotification() установлены жесткие ограничения по использованию: не более 2-х вызовов в секунду и не более 10 вызовов в минуту. Контроль за частотой использования осуществляется динамически, и функция может быть заблокирована при нарушении.

 
Andrey Khatimlianskii:

Вот:

Это все учтено, да и если бы было превышение по лимиту возвращало бы ошибку, но нет, запрос уходит без ошибок, но до конечного адресата доходит только 1-2 сообщения из 3-5 (сообщения однотипные, но не одинаковые, отправка раз в секунду). Во время тестирования, были нарушения из-за неправильного кода, из-за этого скорее всего и блочат, но сейчас я решил эту проблему и хочу чтобы сняли фильтр, но не знаю куда писать? В сервисдеске только финансовые вопросы, другой техподдержки я не нашел
 
Pavlo Minakov:
Это все учтено, да и если бы было превышение по лимиту возвращало бы ошибку, но нет, запрос уходит без ошибок, но до конечного адресата доходит только 1-2 сообщения из 3-5 (сообщения однотипные, но не одинаковые, отправка раз в секунду). Во время тестирования, были нарушения из-за неправильного кода, из-за этого скорее всего и блочат, но сейчас я решил эту проблему и хочу чтобы сняли фильтр, но не знаю куда писать? В сервисдеске только финансовые вопросы, другой техподдержки я не нашел

Сообщений всего 5?

В журнале об отправке запись есть?

Попробуйте воткнуть смартфон в розетку и открыть держать МТ открытым. Если все будет доходить, значит проблема в экономном андроиде (тут об этом писали).

 
Andrey Khatimlianskii:

Сообщений всего 5?

В журнале об отправке запись есть?

Попробуйте воткнуть смартфон в розетку и открыть держать МТ открытым. Если все будет доходить, значит проблема в экономном андроиде (тут об этом писали).

В журнале записи есть, при проблеме с андроидом сообщения доходят, но с опозданием (когда открывают приложение). У меня же просто частично доходят сообщения (то есть из 3-5 однотипных сообщений, отправленных по очереди через 1 секунду, доходит только 1)
 
Pavlo Minakov:
В журнале записи есть, при проблеме с андроидом сообщения доходят, но с опозданием (когда открывают приложение). У меня же просто частично доходят сообщения (то есть из 3-5 однотипных сообщений, отправленных по очереди через 1 секунду, доходит только 1)

Дайте минимальный код для воспроизведения, покажите журнал терминала и советника.

Позапускаем у себя.

 

Советник делает отправку push сообщений из файла notifylist.txt (если он существует) по строкам, в конце удаляет файл. Сообщения типа "Открыт buy ордер 0.01 по AUDUSD #937492923 *название советника*" и когда одновременно открывается несколько ордеров, соответственно отправляется несколько таких однотипных сообщений, разница только в номере ордера, но доходит только одно.

string notify[50],null,CopierMagic="SendNotify";

void OnInit()
{
  EventSetTimer(5);
  comment(0,Red,CopierMagic); //0 -номер строки (0..19)
}
//+------------------------------------------------------------------+

void OnTimer()
{ 
  if(FileIsExist("notifylist.txt",FILE_COMMON)==true && FileIsExist("busyfile.txt",FILE_COMMON)==false)
  {
    int busy=FileOpen("busyfile.txt",FILE_WRITE|FILE_TXT|FILE_COMMON);
    FileClose(busy);
    int handle=FileOpen("notifylist.txt",FILE_READ|FILE_TXT|FILE_COMMON);
    if(handle!=INVALID_HANDLE)
    {
      for(int a=49;a>=0;a--) notify[a]=null;
      for(a=0;a<=49;a++)
      {
        if(FileIsEnding(handle))
          {
            FileClose(handle);
            FileDelete("notifylist.txt",FILE_COMMON);
            FileDelete("busyfile.txt",FILE_COMMON);
            break;
          }
        notify[a]=FileReadString(handle);
      }
      Sending();
    }
  }
}
//+------------------------------------------------------------------+

void Sending()
{
  int count;
  for(int a=0;a<=49;a++)
  {
    if(notify[a]==null) continue;
    ResetLastError();
    for(int b=0;b<10;b++)
    {
      if(SendNotification(notify[a])==true) 
      {
        Print(notify[a]);
        if(GetLastError()>0)
        {
          Print("Error ",GetLastError());
          ResetLastError();
        }
        Sleep(1000); 
        count++;
        if(count==10) 
        {
          Sleep(60000);
          count=0;
        }
        break;
      }
      else 
      {
        Sleep(1000);
        Print(GetLastError()," - Неудачная отправка сообщения: ",notify[a]);
        break;
      }
    }
  }
}
//+------------------------------------------------------------------+

void comment(int n,color c,string s0="",string s1="",string s2="",string s3="",string s4="",string s5="",                           
             string s6="",string s7="",string s8="",string s9="",string s10="",string s11="", 
             string s12="",string s13="",string s14="",string s15="",string s16="",string s17="", 
             string s18="",string s19="")
  {    
    string r=s0+s1+s2+s3+s4+s5+s6+s7+s8+s9+s10+s11+s12+s13+s14+s15+s16+s17+s18+s19;  
    string name=CopierMagic+n;  //_comment-имя советника или любой идентификатор для маркировки "своих" объектов    
    int y=20+n*15;    
    int x=5;    
    if(ObjectFind(name)<0) ObjectCreate(name,OBJ_LABEL,0,0,0);   
    ObjectSet(name,OBJPROP_XDISTANCE,x);    
    ObjectSet(name,OBJPROP_YDISTANCE,y);   
    ObjectSetText(name,r,12,"Arial black",c); 
  }
//+------------------------------------------------------------------+

void OnDeinit(const int reason)
{
  EventKillTimer();
  for(int a=0;a<20;a++)
      ObjectDelete(CopierMagic+a);
}
//+------------------------------------------------------------------+
 
Pavlo Minakov:

Советник делает отправку push сообщений из файла notifylist.txt (если он существует) по строкам, в конце удаляет файл. Сообщения типа "Открыт buy ордер 0.01 по AUDUSD #937492923 *название советника*" и когда одновременно открывается несколько ордеров, соответственно отправляется несколько таких однотипных сообщений, разница только в номере ордера, но доходит только одно.

Просил же минимальный код для воспроизведения.

А тут куча лишнего, и файл нужно какой-то готовить. Зачем?


Прикрепленный срипт отправил 10 сообщений (файл тоже прикрепил), и все дошли:


Упростите код для легкого воспроизведения ошибки кем угодно.

Я потратил достаточно времени.

Файлы:
 
в коде нет ошибки, и не надо ее там искать, это проблема на стороне сервера. Поэтому я и хочу выяснить как связаться с разрабами, чтобы снять фильтр с моего IP
Причина обращения: