Как создать для неё свои команды было наверное одним из первых моих вопросов после того, как она попала ко мне в руки.
В этой статье мы сделаем простую команду на 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);
}
Тестируем
Всё, можем спросить у станции всё по той же команде, которую вы настроили ещё на этапе создания команды на сервере яндекса. :)
