Если развернуть веб сервер с вебхуком возможности нет, а принимать сообщения от какого-то сервиса (например Telegram) нужно, мы используем polling. Это когда мы сами спрашиваем у сервиса, нет ли у него для нас новостей. В случае с Telegram, это происходит через запрос getUpdates.

Но что, если сервис не имеет своего поллинг сервера и предлагает лишь доставку апдейтов на webhook, как например GitHub? Или есть ряд других проблем, которые перечислены в разделе "Применения"?

Решение

poll.gmod.app — микросервис, который может выступить в качестве вебхука, а сам отдавать обновления по запросу (по подобию getUpdates у телеграм)

Одной этой схемы достаточно, чтобы понять как все работает

Там где вам нужно указать ссылку на вебхук, вы указываете ссылку на наш микросервис. Мы принимаем входящие сообщения, храним их у себя, а вы потом получаете их через http GET запрос

API

Мы хотели сделать максимально простой API, поэтому нет никаких токенов, паролей, регистраций.

Всего 2 метода:

Все данные считаются публичными (любой может прочесть или записать), но вы можете спрятать их, подставив вместо SECRET_UID что-то вроде пароля

getUpdates

Можно выполнить даже с браузера и у него есть 2 поддерживаемых параметра: sleep и ts. В каждом update тоже есть поле ts, которое обозначает id последнего элемента. Если указать ts в параметрах запроса и комбинировать со sleep, то соединение будет удерживаться до той поры, пока не появится новое обновление или пока не истечет время ожидания (sleep)

Это полезно для того, чтобы получать обновления мгновенно, когда они появятся вместо того, чтобы проверять их наличие повторением одного запроса раз в несколько секунд

Имейте в виду, сейчас сервис хранит только последние 10 обновлений (пушей). Старые перезаписываются. Это число может быть увеличено, если мне напишут

pushUpdates

Выполняется только POST запросом, так что с адресной строки браузера "засунуть" обновление не выйдет. Именно ссылку с pushUpdates придется указать в качестве вебхука в нужном вам сервисе. Например https://poll.gmod.app/mytelegramwebhook/pushUpdates?anykey=anyvalue

Обратите внимание на anykey=anyvalue в конце ссылки. Это фича, позволяющая использовать почти один и тот же адрес в poll.gmod.app для разных сервисов.

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

Пример библиотеки для работы с сервисом

Библиотека для работы с poll.gmod.app для Garry’s Mod сервера. Полная версия + зависимости включены в сборку IGS от gm-donate.ru
Библиотека для работы с poll.gmod.app для Garry’s Mod сервера. Полная версия + зависимости включены в сборку IGS от gm-donate.ru - README.MD

Применения

  • Сервисы, где требуется указание вебхука, но возможности поднять веб сервер нет (например, внутри игры)
  • Telegram боты, чтобы обновления были в одном месте со всех ботов сразу
  • Telegram боты, работающие на нескольких серверах сразу. Этот сервис допускает параллельные getUpdates в отличии от Telegram
  • gm-donate: игроки донатят на нашем сайте, мы пушим инфу в poll.gmod.app, а игровой сервер сразу подхватывает эти пуши