Перейти к содержанию

Особые события

Таймаут

Таймаут-событие возникает, когда время обработки запроса на стороне навыка длиться дольше 4 секунд (по умолчанию).

Если хэндлер находится в режиме ожидания выполнения чего-то асинхронного, то диспетчер остановит обработку события и создаст "экстренное" событие таймаута. \

Его можно обработать также, как и любое другое входящее событие:

1
2
3
@router.timeout()
async def timeout_handler(event: TimeoutUpdate) -> str:
    return "У меня что-то пошло не так, я какой-то долгодум..."

Важно

От таких хэндлеров требуется молниеносный ответ. В них не должно быть ничего, что может долго работать.
Если навык ничего не ответит, то Алиса завершит сессию.

Таймаут-событие

aliceio.types.timeout_event.TimeoutUpdate

Bases: Update

Внутренннее событие, используется для реакции на выход за время ответа.

event: AliceEvent property

event_type: str property

Запуск и завершение

В диспетчере можно зарегистрировать вспомогательные функции на включение и выключение.
В них можно, например, инициализировать подключение к бд или проверить место для файлов навыка:

1
2
3
4
5
6
7
8
@dispatcher.startup()
async def on_startup(skill: Skill, dispatcher: Dispatcher) -> None:
    space: SpaceStatus = await skill.status()
    if space.images.quota.available < 1024 or space.sounds.quota.available < 1024:
        exit("ALARM!!! NOT ENOUGH SPACE")

    db_conn = await init_db()
    dispatcher["db_conn"] = db_conn  # Расширение контекста, глава про DI
1
2
3
4
async def on_shutdown() -> None:
    await close_all_sessions()

dispatcher.shutdown.register(on_shutdown)

Примеры