Python

Запустим навык «Купи слона», который предлагает пользователю купить слона, пока он не согласится. Нужно подготовить исходный код и развернуть веб-сервис.

  1. Исходный код
  2. Развертывание веб-сервиса

Исходный код

Чтобы развернуть навык на Python, подготовим исходный код и конфигурацию навыка:

  1. Создайте папку навыка, например, myskill-alice.
  2. Создайте в папке приведенные ниже файлы.

    Навык будет просить пользователя купить слона, пока он не согласится.

    # coding: utf-8
    # Импортирует поддержку UTF-8.
    from __future__ import unicode_literals
    
    # Импортируем модули для работы с JSON и логами.
    import json
    import logging
    
    # Импортируем подмодули Flask для запуска веб-сервиса.
    from flask import Flask, request
    app = Flask(__name__)
    
    
    logging.basicConfig(level=logging.DEBUG)
    
    # Хранилище данных о сессиях.
    sessionStorage = {}
    
    # Задаем параметры приложения Flask.
    @app.route("/", methods=['POST'])
    
    def main():
    # Функция получает тело запроса и возвращает ответ.
        logging.info('Request: %r', request.json)
    
        response = {
            "version": request.json['version'],
            "session": request.json['session'],
            "response": {
                "end_session": False
            }
        }
    
        handle_dialog(request.json, response)
    
        logging.info('Response: %r', response)
    
        return json.dumps(
            response,
            ensure_ascii=False,
            indent=2
        )
    
    # Функция для непосредственной обработки диалога.
    def handle_dialog(req, res):
        user_id = req['session']['user_id']
    
        if req['session']['new']:
            # Это новый пользователь.
            # Инициализируем сессию и поприветствуем его.
    
            sessionStorage[user_id] = {
                'suggests': [
                    "Не хочу.",
                    "Не буду.",
                    "Отстань!",
                ]
            }
    
            res['response']['text'] = 'Привет! Купи слона!'
            res['response']['buttons'] = getSuggests(user_id)
            return
    
        # Обрабатываем ответ пользователя.
        if req['request']['command'].lower() in [
            'ладно',
            'куплю',
            'покупаю',
            'хорошо',
        ]:
            # Пользователь согласился, прощаемся.
            res['response']['text'] = 'Слона можно найти на Яндекс.Маркете!'
            return
    
        # Если нет, то убеждаем его купить слона!
        res['response']['text'] = 'Все говорят "%s", а ты купи слона!' % (
            req['request']['command']
        )
        res['response']['buttons'] = getSuggests(user_id)
    
    # Функция возвращает две подсказки для ответа.
    def getSuggests(user_id):
        session = sessionStorage[user_id]
    
        # Выбираем две первые подсказки из массива.
        suggests = [
            {'title': suggest, 'hide': True}
            for suggest in session['suggests'][:2]
        ]
    
        # Убираем первую подсказку, чтобы подсказки менялись каждый раз.
        session['suggests'] = session['suggests'][1:]
        sessionStorage[user_id] = session
    
        # Если осталась только одна подсказка, предлагаем подсказку
        # со ссылкой на Яндекс.Маркет.
        if len(suggests) < 2:
            suggests.append({
                "title": "Ладно",
                "url": "https://market.yandex.ru/search?text=слон",
                "hide": True
            })
    
        return suggests
    

Развертывание веб-сервиса

Развернем приложение с помощью сервиса Now:

  1. Установите приложение Now.

    Примечание. Обратите внимание, что в бесплатном варианте Now ваш исходный код и логи приложений открыты для всех.
  2. Выполните консольную команду now в папке myskill-alice. Консоль выведет адрес созданного приложения.

  3. По умолчанию Now генерирует случайный адрес для ваших приложений. Чтобы использовать постоянный поддомен, используйте команду now alias:

    now alias https://myskill-alice-qfnzrtlply.now.sh myskill-alice

Теперь навык можно зарегистрировать, указав полученный URL в поле Webhook URL. Сразу после этого работу навыка можно будет проверить на вкладке Тестирование. Чтобы писать более сложные навыки, ознакомьтесь с протоколом работы Яндекс.Диалогов.