Перейти к основному содержимому

poll.gmod.app документация

· 2 мин. чтения

🆘 UPD 2023.12.15

Этот пост немного устарел, но он уже переписан и актуализирован тут 👈 Рекомендую сразу читать статью по ссылке

  • Все упоминания poll.gmod.app в этом посте заменены на poll.def.pm (но оба домена рабочие в демо режиме)

Это простейший Long Polling микросервис, который выступает в качестве своеобразного WebHook сервера для POST запросов. Принятые данные можно получить с сервера по GET запросу.

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

Рекомендую прочесть это, если вы представляете LongPolling как GET запрос раз в 10 секунд (это не так).

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

В недавнем посте рассказаны варианты применения этого сервиса. Рекомендую почитать: Webhook без веб сервера

API

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

Больше ничего. Почти. У GET запроса есть возможность указания некоторых параметров, но сначала покажу пример ответа от GET запроса

Возвращается массив с полями ok, ts и updates. Обратите внимание на ts, он пригодится для формирования GET запроса

  • ?ts=12345. Это offset. Его нужно обновлять каждый раз, когда вы получаете новый апдейт. Без этого параметра каждый раз будут возвращаться все последние апдейты, а следующий параметр sleep не будет обрабатываться, потому что сервер решит, что возвращает вам что-то новое
  • ?sleep=60 , default 0, max 60. Время ожидания появления обновлений на сервере. Это время poll.def.pm будет как бы "висеть". На самом деле он будет удерживать соединение, пока не появятся новые данные или не истечет указанный срок. Без указания sleep смысла с Long Polling мало, ведь суть как раз в удержании соединения до появления данных. После получения данных или сброса по таймауту можно смело заново выполнять GET запрос. sleep=60 означает 1 GET запрос в минуту.

Определение какой сервис прислал апдейт

POST запрос может принять любые параметры. Они будут добавлены в каждый update объект, что полезно для идентификации сервиса, с которого пришел апдейт, если вы указываете один webhook на нескольких сервисах. Например, для определения какой телеграм бот прислал апдейт, я задаю каждому боту вебхук в таком стиле: /setWebhook?url=https://poll.def.pm/myS3cretU1D?botname=video_thumbnails_bot.

Теперь на GET https://poll.def.pm/myS3cretU1D в каждом таком апдейте будет поле botname=video_thumbnails_bot

Пример библиотеки на Lua для работы с poll.def.pm

IGS/akupol_sv.lua at main · GM-DONATE/IGS