Skip to main content

Module for easy writing of Yandex Alice skills.

Project description

alice-py-ycf

Alice-Python-YandexCloudFunction

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

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

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

Файл 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, data):
        return {
            "txt" : 'Это первый запуск приложения',
        }

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

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

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

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

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

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

  • В любом ответе, значение "txt" обязателено:
    return {
    "txt": 'текст ответа',
    ( ... )

  • Значение "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.
data - хранит данные сессий и данные сцены (комнат)

data = {
    # название сцены. Пустая строка = основная комната
    'scene': '',

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

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

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

}

Изменения в data добавляются в отправляемый json если это явно добавлено в return.

Из всех комнат, кроме основной, передача data является обязательной.

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

Uploaded Source

Built Distribution

alice_py_ycf-0.1-py3-none-any.whl (4.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: alice_py_ycf-0.1.tar.gz
  • Upload date:
  • Size: 4.7 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.1.tar.gz
Algorithm Hash digest
SHA256 901560bf342023ab514fd0a3dad5abdf47d6de1855187e99ff8c9b33b10113dc
MD5 89499f8599579a785c36fa0c6560ddcf
BLAKE2b-256 ed4ffd67ef0ae5e77ccf1c57199d49962d79d684becc38ee9bf2c6109aaa8a91

See more details on using hashes here.

File details

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

File metadata

  • Download URL: alice_py_ycf-0.1-py3-none-any.whl
  • Upload date:
  • Size: 4.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.0

File hashes

Hashes for alice_py_ycf-0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d43d0c1a2fcce86932b6895fa01e263ca9e9de09106d5147a65fb1ce933ff1f1
MD5 e132c3d611b09bf8f915d3b876658145
BLAKE2b-256 dcd09e70659a8ddada522bea487e9852dca7bb0cd6366f97b3308ef8d772ca18

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