Как сделать новый навык для "Алисы" на Python
Хоть "Алиса" и голосовой помощник, она может отправлять пользователю картинки. Напишем навык, который будет отправлять пользователю случайную картинку. Чтобы использовать изображения, их необходимо загрузить в твой личный кабинет на "Яндекс. Диалогах". Для этого переходите на вкладку "Ресурсы" и выбирай файлы.
После загрузки у каждой из картинок появится свой идентификатор. именно по ним мы и будем обращаться.
Чтобы отправить пользователю картинку, необходимо модифицировать наш JSON. Добавить ключ card с такими полями:
- type - тип карточки, для добавления одного изображения используется Bigimage;
- image_id - идентификатор изображения, полученный в предыдущем пункте.;
- title - заголовок картинки, который появляется вместе с ней.
- Важно, что даже если мы отправляем картинку, нужно указывать уже знакомый нам параметр - text, он необходим и не может быть пустым.
Для хранения изображений будем использовать список картежей вида (id_картинки, заголовок). Как мы уже привыкли, функция main неизменна, так что я приведу лишь handle_dialog и список картинок.
Image = ["1652229/7f9f71c93b5b613efac3", "Енотик").
def handle_dialog(res,req):
if req ['request']['original_utterance']: res ['response']['text']= "Это случайная картинка" img, title = random.choice(Images) ## Генерируем изображение res ['respose']['card'] = { "type": "BigImage", "image_id": img, "title": title } else: ## Если это первое сообщение- представляемся res['response']['text'] = "Привет! Ты мне фразу - я тебе картинку"
Не забудь импортировать модуль random. Теперь, если мы запустим наш навык на тестовом стенде, мы увидим что получилось.
Подробнее про формирование JSON и про то, как добавить несколько изображений, можно прочитать в справке (https://yandex.ru/dev/dialogs/alice/doc/resourceupload-docpage/).
Размещение в сети
Теперь, когда мы научились делать разных ботов, можно задуматься о их размещение в интернете, чтобы наш навык работал круглосуточно и не был случайно выключен, когда ты решишь отдохнуть от шума системника.
Поскольку на навык по своей сути - это сервер на Flask, для его запуска подойдет практически любой хостинг, например Heroku или его аналоги. Но для запуска первых навыков имеет смысл воспользоваться каким-то бесплатным ресурсом. В качестве примера можно рассмотреть Pythonanywhere (https://www.pythonanywhere.com).
Это не столько хостинг, хотя так им тоже можно пользоваться, сколько развернутая в Интернете и доступная из любого места среда разработки на Python. Об использовании этого сервиса для разработки можно почитать на "Хабре" (https://habr.com/ru/post/144420/), а мы посмотрим, как задеплоить нашего бота.
Для начала необходимо зарегистрироваться, после этого при входе вы увидите всю информацию о своих проектах, хранящихся или запущенных на сервисе.
Как видите, на Dashboard есть отдельная вкладка Web apps. Откроем ее и создадим новое приложение. Для него будет выделено отдельное доменное имя, твой_логин.pythonanywhere.com В процессе создания у вас будет возможность выбрать фреймворк - выбирайте Flask и версию Python (я использую 3.6, но если ты писал на более новом или более старом, выбирай свою).
Среди твоих файлов появиться папка mysiti, а в ней- файл flask_app.py. Копируем сюда код навыка и можем запускать. Не забудь только заменить в настройках бота адрес сайта для обработки запроса- и все готов!
Напоследок- несколько полезных ссылок:
- Библиотека на Python для одновременного создания навыков в "Алисе" и ботов в Телеграм (http://github.com/avidale/tgalice).
Я надеюсь, что эта статья была интересна. Буду рад вашим комментариям и мыслям. Спасибо за внимания!