Евгений (Автор тем)

Выбрать дату в календаре…Выбрать дату в календаре

Страницы: 1
Использование мессенджера MAX для обмена данными в QUIK, Использование мессенджер для обмена для отправки сообщений и управление торговым приводом в QUIK
 
Поскольку , эта тема вроде нигде не поднималась , опишу свой опыт , может быть будет кому то полезно.
Для информирования и  контроля за работой торгового привода у меня был поднят небольшой   саит на локальном компе с QUIK ,и меня все  устраивало,
Сейчас эта схема практически утратила смысл из за почти постоянного отключения мобильного интернета. Я решил  посмотреть  , что можно использовать взамен.  Нормально работали только саиты из белого списка и MAX.  Поскольку других вариантов  не было , выбор пал на MAX ,
И так , что же мог предложить MAX для решения этой задачи ?    В MAX можно создавать чат боты , но делать это могут только OOO ,ИП и самозанятые.
Я давно имею статус самозанятого , а для тех кто его не имеет , получить его можно онлаин за 5 минут и этот статус ни к чему не обязывает.
Для самозанятых MAx ставит ограничение в 2 чат бота. Мне хватило 1 бота, и 1  канала.
Я зашел в лк MAX (https://business.max.ru/self/services ) как самозанятый и зарегил бота , создал там же канал.  Далее чат бота я сделал администратором канала.
В чат чат- бота я направил информационные сообщения от робота а в  канале закрепил набор кнопок для  отправки управляющих команд для торгового привода.  Правда пришлось помучиться  с вычислением идентификаторов каналов chat_id. Проще всего это сделать запустив web версию  и взять эти id из URL   (у чат бота это положительное число в конце URL ,  а у канала отрицательное).

Привожу пример отправки сообщения в чат бот Max.
Для отправки HTTP сообщения я использовал c библиотеку  luacom.dll +WinHttp.WinHttpRequest.5.1, но есть и много других способов (напимер curl)
Код
-----------------------------------  
function send_max(msg,chat_id,access_token,nFormat)
   -----------------------------------
   ---грузим luacom
   luacom = require("luacom")
   
   --для формата markdown
   -- # Формат markdown \n **жирный**, _курсив_, ~~зачёркнутый~~, ++подчёркнутый++, `моноширинный`  ,   ^^Выделенный^^ , [Документация](https://dev.max.ru/) 
   local url,status,responseText,cUser,body,cFormat,http
   --chat_id =117.......474
    --access_token = "f9LHodD0cOIq...................0BhMw0gm_6f1-DBY" 
   if not nFormat then 
      nFormat=0
   end 
   ---выбор формата разметки 
   if nFormat==0 then 
      --без формата 
      cFormat=''
      elseif nFormat==1 then 
      --HTML
      cFormat=   ',"format": "html"'
      elseif nFormat==2 then 
      --markdown
      cFormat=   ',"format": "markdown"'
   end 
   
   -- URL   
   url = "https://platform-api2.max.ru/messages?" .. "chat_id=" .. chat_id
   
   --Тело запроса (JSON)
   body ='{"text":"' .. msg .. '"'..cFormat..'}'
   -- Создаём COM-объект
   http = luacom.CreateObject("WinHttp.WinHttpRequest.5.1")
   if  http then
      -- Открываем соединение (синхронно)
      http:Open("POST", url, false)
      -- Заголовки
      http:SetRequestHeader("Authorization", access_token)
      http:SetRequestHeader("Content-Type", "application/json")
      http:SetRequestHeader("Accept","application/json")
      --Отправляем
      http:Send(body)
      --Получаем ответ
      status = http.Status
      responseText = http.ResponseText
      if http.Status==200 then 
        ---ok
      else    
          message("Status: " ..  tostring(status), 3)
          message("Response: " ..  tostring(responseText), 3)
      end    
      -- Освобождаем объект
      http = nil
   else    
      message("Не удалось создать WinHttp.WinHttpRequest.5.1", 3)
   end
end 
Обработка ошибок из функции main
 
Обратил внимание , что сообщения об ошибках  , в случае выполнении скрипта внутри функции main ,  не выводятся в окно системных сообщений . Скрипт  просто молча останавливает работу. Есть ли возможность включить вывод ошибок в окно сист сообщений или получить текст сообщений об ошибках другим способом ?
Не верные данные в таблице заявок, Данные в таблице заявок обновляются с задержкой
 
С QLUA познакомился только неделю назад , так что прошу извинить , если пишу какие то глупости.
Суть проблемы такая . Скрипт работает на событии  OnQuote. Анализируется содержимое стакана , остатки депо по инструменту и текущие заявки. На основании анализа выставляются новые или отменяются  старые заявки на покупку. Создаются транзакции и далее работа приостанавливается до получения ответа  от OnTransReply. И вот тут то и возникает проблема. Допустим  была 1 заявка на покупку , скрипт дает транзакцию на отмену заявки ,   от OnTransReply приходит ответ об успешном выполнении. Далее сразу идет срабатывание  OnQuote и вызов логики моего скрипта. Скрипт читает таблицу заявок и там эта удаленная заявка  присутствует , как будто бы она не была удалена только что. Соответственно вся логика работы ломается на корню. При следующем вызове  OnQuote уже все OK. Эта же проблема присутствует и при выставлении заявок на покупку.  Пробовал вставлять временную задержку , но это не помогает.  Видимо мне  просто не  хватает  знаний по событийному механизму QLUA.  Просьба помочь с решением данной проблемы.
Страницы: 1
Наверх