Корректировка статьи выполнена
Алиса – голосовой помощник поисковой системы Яндекс. Работает в операционных системах Android, iOS, также в Windows в браузере Яндекс.Браузер. Позволяет обойтись без поисковой строки и соответственно без клавиатуры, вопрос можно задать устно и спросить у Алисы голосом.
Яша расширил возможности платформы Алисы, открыв проект Яндекс.Диалоги с .
«Теперь любой желающий сможет обучить Алису новым навыкам и с её помощью привлечь пользователей к своим проектам». Блог Яндекса для вебмастеров
Навык для Алисы
Принял решение научить Алису навыку заработка в интернете, тем самым привлечь внимание к своему проекту «DaWork.ru».

Что же понимается под термином «навык» в Я.Диалогах? Для пользователей, навык – режим работы Алисы, когда она передает вопрос пользователя на удаленный сервер и отвечает на него устным сообщением, текстом, контентом на экране устройства, подготовленными и размещенными там (на сервере) разработчиком. Для разработчика – это веб-сервис, реагирующий на реплики пользователя.
В этой статье описываю, как создавал, размещал на Heroku простой навык "Заработок в интернете — финансово-выгодный", состоящий всего из четырех файлов: Procfile, README.md, composer.json, index.php.
О том как создавался уже более сложный Навык Алисы на языке PHP с использованием ООП и MVC на эту же тему рассказано в другой статье.
Развертывание веб-сервиса
Когда начинал этот проект, Яндекс предлагал развертывание навыка (перенос своего проекта на удаленный сервер) производить с помощью сервиса Now (https://zeit.co/now). Для этого необходимо установить на компьютер приложение Now. Именно под это приложение заточена работа платформы Диалоги. Предпринял попытку это сделать, но потерпел неудачу. Оказывается, это приложение устанавливается только на 64-разрядную систему. У меня же на компьютере и планшете стоит 32-разрядная операционная система Windows 10.
Сегодня проект Диалогов расширил настройки, предоставляется дополнительная возможность производить развертывания на платформах Microsoft Azure и Amazon Web Services. К сожалению, эти ресурсы были предоставлены, когда моя работа была почти закончена.
Чтобы не переустанавливать операционную систему и не менять железо на своем компьютере пришлось искать другую площадку, поддерживающую работу с 32-разрядной системой. Не терпелось развернуть и разместить мой веб-сервис с программой диалога пользователя и Алисы. Проект выполнил на языке PHP.
Посмотреть моё приложение «Alice» с навыком для Алисы можно на GitHub.
Heroku
Остановил выбор на облачном хостинге – Heroku. Большое преимущество данной платформы, кроме всего прочего, - Героку позволяет развернуть сервис бесплатно.
В отличие от достойного уровня обслуживания платформой Диалоги сервиса Now, Яндекс не имеет никаких настроек для работы с хостингом Героку. Мне пришлось приспосабливать Я.Диалоги к Героку самостоятельно. В Интернете, к сожалению, никакой информации про это не имелось. Делюсь алгоритмом действий по развертыванию приложения PHP.
Начало использования Heroku
Хероки очень любит сотрудничать с GitHub. Поэтому, желательно иметь аккаунт на веб-сервисе GitHub, а на компе систему контроля версий Git. Скачать можно на сайте git-scm.com/. Но это вовсе не обязательно – можно готовое приложение для развертывания на Хероки, расположить на своем локальном компе.
Хорошо знающим английский язык, рекомендую начать использование облачного хостинга с изучения учебника на странице devcenter.heroku.com/articles/getting-started-with-php#introduction. В учебнике пошагово даны инструкции по развертыванию проекта на PHP.
Прежде всего, надо оформить бесплатный аккаунт - https://signup.heroku.com/dc.
Затем установить Composer - инструмент управления зависимостями с библиотеками в PHP - getcomposer.org/doc/00-intro.md.
Обязательно требуется загрузить и установить интерфейс командной строки Heroku (CLI). Есть ссылка на странице devcenter.heroku.com/articles/getting-started-with-php#set-up. Командная строка CLI упрощает создание и управление приложениями Хероки. Это важная часть использования Heroku. С помощью этого терминала происходит общение программиста с Хероки.
Подготовка приложения
На удаленный репозиторий GitHub загружается проект, или на локальной машине создаётся папка с именем, например, как у меня - Alice. В эту папку положить файлы:
- Файл с исходным кодом обработчика веб-сервиса. Этот код принимает уведомления от Яндекс.Диалогов и отдаёт ответы для ретрансляции Алисой. В моём случае – index.php.
- Специальный файл Procfile.
- Файл composer.json.
Если composer.json пустой, composer.lock создавать не надо.
Этих файлов в приложении PHP достаточно для простого диалога пользователя с Алисой.
В моём случае потребовалось создать файл composer.lock
Потребность в файле composer.lock для приложения Алисы на Героку
В PHP есть прекрасная функция mb_strtolower для преобразования строки с кириллицей в нижний регистр. Для этой цели функция strtolower не работает должным образом. А в приложении есть необходимость преобразовывать в русских словах заглавные буквы в строчные.
В коробке Героку нет расширения mbstring в конфигурации PHP. Для решения проблемы потребовалось в файл composer.json прописать require ext-mbstring": "*".
Эта команда заставит Composer сделать две вещи:
-
Он разрешит нужные зависимости, заданные в composer.json файле, и загрузит пакеты файлов с их актуальными версиями в файл composer.lock, привязывая приложение Алисы к так необходимым версиям. Необходимо зафиксировать файл composer.lock в репозитории проекта.
Это выполнит команда composer update в программе Git Bash.
- Затем он неявно запускает install команду. Это загрузит файлы зависимостей в vendor каталог проекта. ( vendor — это общепринятое наименование места для хранения всего стороннего кода в проекте).
Таким образом установятся определенные зависимости для работы функции mb_strtolower в Героку.
Развертывание навыка на Heroku
Теперь подготовленный навык можно загрузить на облачный хостинг Heroku. Для развертывания применяется системная командная строка от имени администратора. В Windows 10 – Программы ->Служебные-Windows -> Командная строка. При помощи интерфейса командной строки Heroku (CLI), который уже установлен на компьютере, происходит развертывание приложения на Хероки.
Последовательность действий по развертыванию навыка идентична описанию по установке сайта. После установки навыка переименовал рандомное название, выданное хостингом, на выразительное alice-yandex.
После успешного развертывания в личном аккаунте хостинга доступен Журнал сборки:
Для регистрации в Яндекс.Диалоги в качестве Webhook URL взял этот адрес: https://alice-yandex.herokuapp.com/
Webhook URL хостинга Heroku
Webhook-ом в веб-разработке является способ реагирования или изменения поведения веб-страницы с помощью пользовательских обратных вызовов, пользовательских HTTP обратных вызовов. Когда происходит событие от пользователя, вебхук спрашивает адрес расположения приложения и отдает ему в теле POST-запроса параметры. Происходит информационный обмен между онлайн-сервисами. Webhook выступает перехватчиком каких-то данных и автоматически генерирует HTTP-запрос.
Хостинг Heroku имеет сервис для вебхук – можно создать веб-сайт на Хероки и подписаться на уведомления о каждом развертывании приложения Хероки. Приложение Webhooks Viewer предоставляет такую возможность. Но это вовсе не то, что требуется для Яндекс.Диалогов. Для навыка Алисы веб-хуком выступает URL расположения проекта на Хероки.
При регистрации навыка в Яндекс.Диалоги у меня в многочисленных попытках возникала ошибка: «Ошибка в ответе Webhook».

Приложение на хостинге Хероки содержало ошибки. Благодарен Roman Paradeev, что решил мою проблему с вебхук и починил его.
Приложение для Алисы на Heroku
Когда приложение успешно сохранено в Я.Диалогах на вкладке Настройки, можно протестировать его и отправлять на модерацию. А после принятия модератором можно навык для Алисы, развернутый на Heroku, опубликовать. Самый трудный этап для меня оказался – пройти операцию сохранения.
Работающий навык Алисы «Заработок в интернете»
Кому интересно ознакомиться с исходниками РНР диалога с Алисой, это можно сделать на примере моего другого навыка: «Исходный код навыка Алисы с использованием ООП и MVC - Монетизация компьютера».
У хостинга Heroku нет бесплатных сервисов
С 30 ноября 2022 года больше нет бесплатных Heroku Dynos.
Самая дешевая услуга сервиса будет стоить 7 долларов в месяц. Столько стоят теперь Dynos, которые раньше были бесплатные. Именно на этих вычислительных ресурсах хостинга 5 лет работало моё приложение Навык для Алисы.
Естественно на столь дорогой тариф я не согласился переходить и мои проекты на Героку перестали работать. Учетная запись на облачном хостинге Героку сохранилась и у меня остался доступ к ней.
Приложение Алиса я перенес на платный хостинг, реклама которого есть внизу этой страницы. Там оно продолжает успешно действовать. В чем можно убедиться .