Запас времени для ответа Алисы
1,8 секунды на источник, 2,8 на диалог. Кэш помогает пережить сбой.
В Гуапике оставил внешнему запросу 1,8 секунды, основной обработке диалога — 2,8. После ошибки загрузки ещё нужно успеть выбрать запасной ответ и собрать реплику.
Диалог обёрнут в asyncio.timeout(settings.handler_timeout). Снаружи заранее задан FALLBACK: при таймауте вебхук возвращает его в обычной структуре ответа. На чтение тела запроса отведена отдельная секунда. Этот этап тоже входит в полное время обработки.
Кэш расписания живёт по двум правилам. Первый час запись свежая: можно ответить без запроса к ГУАП. После часа пробую обновить её. Если источник недоступен, допускаю прежнюю запись ещё на 24 часа сверх свежего интервала.
В коде возраст сравнивается с cache_ttl + stale_ttl — при этих настройках меньше 25 часов. Потом старое расписание уже не отдаётся.
Ожидание ограничения частоты запросов тоже расходует диалоговый бюджет. Поэтому одного таймаута HTTP-клиента недостаточно: до сети может быть очередь, после неё — разбор страницы. Для расписания ограниченный запас кэша полезен; для денег или остатка номеров нужна другая политика обновления.
