теоретически наверно как то так это должно работать
есть у вас wifi controller (WC) и внешнее приложение captive portal (CP)
клиент регистрируется в CP
CP авторизует клиента в WC ровно на пол часа
проходит пол часа или больше и следующий запрос от клиента WC редиректит в CP
CP смотрит по своей базе, видит, что это клиент уже зарегистрирован, а значит он пришел за рекламой. Показывает ему рекламу и вновь авторизует на WC пересылая обратно запрос от клиента.
не знаю как для всех контоллеров, а для unify, например, редирект на CP выглядит так
GET /guest/s/default/?id=be:ef:00:df:dd:ee&ap=78:78:78:78:78:78&t=1500000000&url=http://captive.apple.com%2fhotspot-detect.html&ssid=blabla HTTP/1.0
а авторизация клиента на контроллере вот так:
from pyunifi.controller import Controller
c = Controller(UNIFI_WLC_IP, UNIFI_WLC_USER, UNIFI_WLC_PASSW, UNIFI_WLC_PORT, INIFI_WLC_VER, UNIFI_WLC_SITE_ID, UNIFI_WLC_SSL_VERIFY)
c.authorize_guest(mac, TIME_QOUTE,
up_bandwidth=None, down_bandwidth=None, byte_quota=None, ap_mac=None)