Skip to main content

Module for easy writing of Yandex Alice skills.

Project description

alice-py-ycf

v 0.2.01

Python >= v 3.8

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

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

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

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

alice-py-ycf==0.2.2

Пример возможностей.
Файл 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': {}
    }
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

alice_py_ycf-0.2.2.tar.gz (5.4 kB view details)

Uploaded Source

Built Distribution

alice_py_ycf-0.2.2-py3-none-any.whl (5.6 kB view details)

Uploaded Python 3

File details

Details for the file alice_py_ycf-0.2.2.tar.gz.

File metadata

  • Download URL: alice_py_ycf-0.2.2.tar.gz
  • Upload date:
  • Size: 5.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.0

File hashes

Hashes for alice_py_ycf-0.2.2.tar.gz
Algorithm Hash digest
SHA256 d9eae900f71682914d437529f0a99bff29245718a6ed09c9de2949ab86e1e95d
MD5 a0241d3735889502829cb80f0a4ec3f8
BLAKE2b-256 7642a5aadcb19d1071f83ee2706b7d9ab95ebe12bc94cc9ebbe1f06c8b230980

See more details on using hashes here.

File details

Details for the file alice_py_ycf-0.2.2-py3-none-any.whl.

File metadata

File hashes

Hashes for alice_py_ycf-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 14483d3c70df8d4707cf6998606dc6849b2ea2700129908800250a1de7350928
MD5 be9226fb415b62328a275129461dc955
BLAKE2b-256 b96d76a24e1a39432e0753cfb85f2ae429ba8ea54b21e58d68b3e0055556c742

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page