Skip to main content

Module for easy writing of Yandex Alice skills.

Project description

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': {}
    }
}

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.3.tar.gz (5.4 kB view details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

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

File metadata

  • Download URL: alice_py_ycf-0.2.3.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.3.tar.gz
Algorithm Hash digest
SHA256 88a443ea266b87f1830d49e2812d80b398e658f46b5e7c2ad3bdeba175427442
MD5 a77f696648c1d4b8cd528289618aba5d
BLAKE2b-256 75ef28238f0f17358d7f2bcc76a53bdbcd567ce4d57245d66ea6566b2638fe25

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for alice_py_ycf-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 d781ce10dbaa6ec19f1edbf5945b00980c760de89f5d08b3fe03bd42da7ece53
MD5 161cdc0f78ca1cccf292352282b6bd52
BLAKE2b-256 4a9fde0d7efd115d23c2a34600547a8b39c384d2a859b57b40f8ab3ed0a7f8ab

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