Skip to main content

alice-py-ycf

v 0.2.3

Python >= v 3.8

Фреймворк для разработки навыков Яндекс Алисы на Python

Адаптирован для работы с Yandex Cloud Function

  • Минималистичен
  • Нет внешних зависимостей
  • Достаточно базового уровня Python

Пример файла requirements.txt для Yandex Cloud Function

alice-py-ycf==0.2.3

Пример возможностей.
Файл index.py с функцией handler для Yandex Function Cloud:

def handler(event, context):
    # подключение только базового управления
    from alice_py_ycf import Alice, AddScene

    # создание еще одной сцены
    Alice.red_room = AddScene()

    # выполняется при первом запуске навыка 
    @Alice.start()
    def start_f(ctx):
        return {
            "txt" : 'Это первый запуск приложения',
        }

    # выполняется в основной комнате только если придет "привет" или "хай"
    @Alice.command(['привет','хай'])
    def comm_f(ctx):
        return {
            "txt":'И тебе привет!',
        }

    @Alice.command(['хочу в красную комнату','пошли в красную комнату'])
    def comm_f(ctx):
        ctx['data']['scene'] = 'red_room'
        return {
            "txt": 'Отлично! Переходим в красную комнату'
        }

    # выполняется в основной комнате если это не первый запуск и 
    # не подходит ни под один из command( !! )
    @Alice.any()
    def any_f(ctx):
        return {
            "txt": 'Неизвестная команда',
            'tts': 'Эта команда мне неизвестна'
        }

    # выполняется в дополнительной комнате (red_room) если 
    # пользователь находится в ней и 
    # не подходит ни под один из command( !! ) из этой комнаты
    @Alice.red_room.any()
    def any_f(ctx):
        return {
            "txt": 'Неизвестная команда красная комната',
            'tts': 'Эта команда мне неизвестна'
        }

    # выполняется в только в дополнительной комнате (red_room) 
    # если пользователь в ней и не одна команда 
    # не подходит ни под один из command( !! ) из этой комнаты
    @Alice.red_room.command(['привет','хай'])
    def any_f(ctx):
        return {
            "txt": 'И тебе привет из красной комнаты',
            'tts': 'И тебе прив+ет из кр+асной комнаты'
        }
    
    # команда для возврата в основную комнату
    @Alice.red_room.command(['обратно в основной комнату','назад'])
    def any_f(ctx):
        ctx['data']['scene'] = ''
        return {
            "txt": 'И тебе привет из красной комнаты',
            'tts': 'И тебе прив+ет из кр+асной комнаты'
        }
    
    # выполняется за пределами установленного таймаута
    @Alice.timeout()
    def any_f(ctx):
        return {
            "txt": 'Что-то пошло не так..'
        }

    # работа фреймворка
    # установлен timeout 4сек, за пределами которого 
    # будет отправлено 
    # подготовленное сообщение. 
    # default timeout = 3сек.
    return Alice.run(event, timeout=4)

Обработка не обязательных, но рекомендуемых возможностей:

обработка запроса "помощь":

# Данные функция будет вызвана если 
# пользователь сказал "помощь"
# Обработка данного запроса является 
# рекомендованной для всех навыков
@Alice.help()
    def hlp(ctx):
        return {
            "txt": 'вы находитесь в навыке',
            'tts': 'Вы находитесь в навыке'
        }

обработка запроса "что ты умеешь":

# Данные функция будет вызвана если 
# пользователь сказал "что ты умеешь"
# Обработка данного запроса является 
# рекомендованной для всех навыков
@Alice.whatcyd()
    def hlp(ctx):
        return {
            "txt": 'вы можете управлять навыком..',
            'tts': 'вы можете управлять навыком.'
        }

Особенности работы с фреймворком:

  • Значение "tts" не является обязательным и может отсутствовать. В этом случае подставляется значение из "txt".

  • Значение "txt" можно передавать массивом:

choice_response = [
    {'txt':'первый вариант'}
    {'txt':'вариант посложней',
    'tts': 'вариант посложн+ей'},
    {'txt':'третий вариант ответа'}
]
@Alice.any()
    def any_f(ctx, data):
        return {
            "txt":choice_response,
        }

Из массива будет взят один случайный вариант ответа.

  • Если навык не сможет ответить за отведенное время, можно ответить пользователю подготовленным ответом.
# (...)

# ответ который последует если навык выйдет за пределы timeout`а
@Alice.timeout()
    def any_f(ctx, data):
        return {
            "txt": 'Что-то пошло не так, но мы обязательно разберемся.. Давай попробуем еще раз.',
        }

    # не обязательный параметр timeout = количество секунд, через которые последует подготовленный ответ
    return Alice.run(event, timeout=4)

ctx - контекст вызова. По ключу "json" хранится полный json запроса. По ключу "data" хранятся данные сессий и данные сцены (комнаты)

ctx = {
    # полный json request`а
    'json': { ... }
    
    # Данные для быстрого доступа. Данные в них будут отправлены response.
    'data': {
        # название сцены. Пустая строка = основная комната
        'scene': '',

        # хранение состояния сессии
        'us': {},

        # хранение состояния между сессиями
        'ws': {},

        # хранение состояние для экземпляра приложения
        'as': {}
    }
}

Release files for alice-py-ycf 0.2.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for alice-py-ycf 0.2.3
File Size Uploaded
alice_py_ycf-0.2.3.tar.gz 5.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for alice-py-ycf 0.2.3
File Interpreter ABI Platform
alice_py_ycf-0.2.3-py3-none-any.whl Python 3 none any Details

Total release size: 11.0 kB

Release files / alice_py_ycf-0.2.3.tar.gz

Download URL alice_py_ycf-0.2.3.tar.gz
Size 5.4 kB
Tags Source
SHA-256 checksum
How to use checksums
88a443ea266b87f1830d49e2812d80b398e658f46b5e7c2ad3bdeba175427442
BLAKE2b-256 checksum
How to use checksums
75ef28238f0f17358d7f2bcc76a53bdbcd567ce4d57245d66ea6566b2638fe25
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.11.0

Release files / alice_py_ycf-0.2.3-py3-none-any.whl

Download URL alice_py_ycf-0.2.3-py3-none-any.whl
Size 5.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d781ce10dbaa6ec19f1edbf5945b00980c760de89f5d08b3fe03bd42da7ece53
BLAKE2b-256 checksum
How to use checksums
4a9fde0d7efd115d23c2a34600547a8b39c384d2a859b57b40f8ab3ed0a7f8ab
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.11.0

Release history Release notifications | RSS feed

This release

0.2.3 This release

2 release files

0.2.2

2 release files

0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page