Блог им. iddqd3n

Отправка уведомлений из QUIK на смартфон

    • 14 апреля 2020, 18:52
    • |
    • iddqd3n
  • Еще
К торговому роботу надо было приделать какие-то уведомления, видел кучу вариантов разной степени извращённости, но ни одного адекватного и изящного. На форуме Арки вообще к решению так и не пришли :)

Для себя сделал простой выбор — Slack. Это что-то типа мессенджера («для рабочих групп», как они говорят) с простым и открытым API, без заморочек вообще. Если не нужно городить мощный функционал с форматированием, аватарками, вложениями и прочим, достаточно двух функций, реализованных через HTTP-запросы, которые можно отправлять хоть curl-ом из системной консоли. Для него полно готовых библиотек на любые ЯП, но мне они показались перегруженными в конкретно моём случае.

В результате написал сам. У меня уже есть watchdog для Квика (на с++), добавил функционал в него. От Слака мне нужны всего два метода — chat.postMessage (отправляет сообщение) и conversations.history (загружает непрочитанные сообщения), это POST и GET запросы соответственно. Всё, буквально две функции, в каждой из которых по одному HTTP-запросу, работы на вечер максимум, если печатать одним пальцем и попутно отвлекаться на что-то ещё. Причём для Слака есть библиотека на Lua, скорее всего можно прямо в Квик запихнуть, но мне нужна именно отдельная софтина, поэтому так.

Также Слак поддерживает ботов сам по себе, не нужно создавать отдельные аккаунты, достаточно создать и прикрепить к чату своё приложение (app в их терминологии — это бот по сути), у приложения будет свой секретный токен, который и используется для авторизации при отправке/получении сообщений. Инструкция на сайте написана для полных профанов, любой разберётся :)

Отдельный бонус: поскольку я не использую Слак в обычной жизни, и пишет мне там только бот, я настроил для него отдельный звук сообщений, чтобы узнавать об уведомлениях от Квика на слух :)

В общем, рекомендую.

Напоследок, немного кода для дочитавших до конца :)

Отправка:
std::string autorize = "Authorization: Bearer " + botToken;
std::string msg = "{\"channel\" : \"" + channelID + "\", \"text\" : \"" + message + "\"}";

struct curl_slist* headers = NULL;
headers = curl_slist_append(headers, autorize.c_str());
headers = curl_slist_append(headers, "Content-type: application/json; charset=utf-8");

curl_easy_setopt(curl, CURLOPT_HTTPGET, 0L);
curl_easy_setopt(curl, CURLOPT_POST, 1L);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, msg.data());
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, msg.length());
curl_easy_setopt(curl, CURLOPT_URL, "https://slack.com/api/chat.postMessage");
Здесь json отдельным классом генерить не стал, слишком заморочено ради примитивной строки.

Получение:
struct curl_slist* headers = NULL;
headers = curl_slist_append(headers, "Content-type: application/x-www-form-urlencoded; charset=utf-8");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);
curl_easy_setopt(curl, CURLOPT_POST, 0L);
std::string url = "https://slack.com/api/conversations.history?token=" + botToken
    + "&channel=" + channelID + "&oldest=" + lastTS;
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
lastTS — это таймстамп последнего полученного сообщения, мы его запоминаем отдельно.
И вот тут уже ответ приходит как json, использую отдельный класс и парсю пришедшие сообщения через него.

Естественно, получение только по своему же запросу. Можно сгородить и постоянное подключение (обычный мессенджер по сути), и вебхуки, это всё у Слака есть. Но мне не надо, мне нужна максимальная простота.
  • обсудить на форуме:
  • QUIK
4.9К | ★21
18 комментариев
В принципе и на Мейл можно, там всего неск строк на С++. И тоже телефон блюмкать будет.
avatar
3Qu, это один из самых первых вариантов, который можно найти прямо на форуме Арки для qlua. Но есть нюансы. Без заморочек с полноценной учёткой и авторизацией есть вероятность, что сообщения будут улетать в спам периодически, а то и постоянно. Плюс вопрос обратного ответа — снова гемор.
avatar
Денис Г., в спам не будет.
Парсинг ответа, да, пожалуй, геммор.
Но если просто уведомление, то вопрос ответа решается мобильным Квик — это не делал.
ЗЫ в мобильный Квик зайти не дадут.)
avatar
Денис Г., к чему такие извращения то?  телеграм-бот через torsocks и будет вам счастье, незачем ставить всякие непонятные шняги то на мобилку
avatar
Petr S, как-то к «непонятной шняге» доверия больше, чем к туннелям через тор :)
avatar
А подскажите, возможно сделать отправку такого события как выставленная заявка из Квика в Телеграмм?
avatar
StockGamblers, теоретически — да. На форуме Арки этот момент пытались сделать как раз :) Но т.к. телеграм у нас забанен, то основной сложностью скорее всего будет не написание бота под него, а внедрение механизма смены периодически подыхающих прокси.

Например, у меня для телеграма нормально работает только приложение под win10 и андроид. Под линуксом иногда приходится самому искать прокси, под win10 mobile просто иногда неделями не работает, скорее всего по той же причине.

В общем, не рекомендую, если вы в России и нет VPN.
avatar
Денис Г., да телега уже давно нормально работает без впнов у всех ОПСОСов и провайдеров. ПО крайней мере у тех, с которыми я имел дело. Да и ВПН при необходимости не проблема. Тем более он имеется.
avatar
StockGamblers, ну тогда вам нужен бот для телеграма (у них есть сайт с инструкциями), даже видел реализации на lua, но не пробовал. А внутри квика есть событие на выставление заявки (OnOrder) — остаётся скомбинировать :)
avatar
StockGamblers, torsocks  решает проблемы и без VPN и без оглядок на опсосов.
avatar
Petr S, вот бы еще приблуду, чтобы слала инфу в телегу с квика.
avatar
Eugene Logunov, ну мне как бы и ответы надо ботом получать :) Т.е. внешнее управление по сути, в т.ч. возможность квик перезапустить.

Кстати, смс я даже не смотрел по другой причине — на форуме Арки этот момент тыкали, у них не вышло найти адекватный сайт с API, там кто-то парсил готовые сайты, а кто-то вообще в комп usb-свисток с симкой втыкал :) Ну а т.к. мне нужны не только алерты, я даже не стал проверять — это они такие кривые, или действительно с этим проблемы.
avatar
Денис Г., вот удалённые команды это прикольно.
а разве слак совсем бесплатный? я думал он платный, и для юрлиц
avatar
ПBМ, пока что денег не просит :) Мне нужен 1 текстовый чат всего.
avatar
Денис Г., внешнее управление отлично реализуется с помощью подключения через rdp с телефона
avatar

Читайте на SMART-LAB:
Фото
Актуальный состав портфеля и взгляд на рынок 2026: по-прежнему 0% позитива.
Добрый вечер! С момента предыдущего поста, касающегося моего портфеля, прошел квартал.  Пришло время актуализировать его состав. Также поделюсь...
Фото
Биткоин попробует разыграть «треугольную карту»?
«Цифровое золото» прорвало верхнюю границу восходящего треугольника на уровне 94 500 и сейчас тестирует пробитую горизонталь, формируя серию...
Фото
Индикатор Fractal: торговые сигналы и робот для OsEngine. Видео
В этом видео разбираем индикатор Fractal Билла Вильямса — один из самых известных инструментов в трейдинге. Покажем, как формируются фракталы,...
Фото
Стратегия 2026 по рынку акций от Mozgovik Research: трудный год, но, возможно, последний год низких цен
Сегодня у меня первый день официального отпуска. За окном темная звездная ночь, яркая белая луна, +24С и шум волн Андаманского моря. Неудачный...

теги блога iddqd3n

....все тэги



UPDONW
Новый дизайн