Как создать для неё свои команды было наверное одним из первых моих вопросов после того, как она попала ко мне в руки.
В этой статье мы сделаем простую команду на PHP которая будет отвечать мне какая версия PHP сейчас на EvilCoder.
Вообще принцип работы очень простой. Вы говорите что-то Алисе, она это как-то распознаёт и просто отсылает вебхук туда, куда надо. За счёт этого можно сделать практически любые команды, например: "Сделай бэкап базы на моём сайте", "Скинь отчёт за сегодня по EvilCoder в Telegram", "Скажи какая температура процессора на сервере", "Прочитай последний комментарий на сайте", "Закажи мою любимую пиццу" и так далее.
По классике, вот такие этапы нас ждут:
- Создаём команду на сервере Yandex
- Пишем файл callback.php
- Тестируем
Для теста у нас будет команда, которая будет отвечать на вопрос: "Версия PHP на сервере".
Создаём команду на сервере Yandex
Команду для Алисы мы будем создавать приватную, т.е. исключительно для нашего использования. Такой команде не нужно проходить модерацию и можно сразу пускать её в ход и тестировать.
Так же это значит, что привязанный к яндекс станции аккаунт должен быть тем же, через который Вы будете создавать навык.
Сейчас я покажу на что нужно обратить внимание.
Нам нужно перейти по этой ссылке и жмакнуть на большую кнопку "Создать диалог" и выбрать "Навык в Алисе".
Здесь вы можете заполнять всё по своему желанию. Два самых важных поля, это "Backend" и "Тип доступа".
В "Backend" обязательно ставим URL до нашего скрипта, а в поле "Тип доступа" обязательно ставим, что это "Приватный".
Всё остальное можете выставить по своему усмотрению.
Дайте яндексу немного подумать и всё, он сохранит нашу команду и вебхук.
Пишем файл callback.php
Нам нужна минимально рабочая и понятная версия, без всякой воды. Однако добавить разные проверки и точку выхода не будет лишним. Вот такое вот содержимое файла callback.php:
<?php $data = file_get_contents('php://input'); //Получаем тело в виде json header('Content-Type: application/json'); $data = json_decode($data, true); //Раскодируем json файл //Проверяем нужные поля if (!isset($data['request'], $data['session'])) { //Возвращаем ничего, т.к. нам не пришло необходимых полей exit(json_encode([])); } else { //В данном тестовом примере нам не нужен текст запроса и т.д. //Однако текст запроса можно найти в $data['request']['command'] $response = json_encode([ 'version' => '1.0', 'session' => [ 'session_id' => $data['session']['session_id'], 'message_id' => $data['session']['message_id'], 'user_id' => $data['session']['user_id'] ], 'response' => [ 'text' => 'На сервере EvilCoder PHP версии ' . phpversion(), //Ставим плюсики перед теми гласными, на которые ударение 'tts' => 'На с+ервере +ивилкодера пиэйчп+и в+ерсии '. phpversion(), ] ]); exit($response); }
Тестируем
Всё, можем спросить у станции всё по той же команде, которую вы настроили ещё на этапе создания команды на сервере яндекса. :)