Пример навыка алисы php

Яндекс.Алиса и бот Telegram на PHP с единым функционалом

На тему Telegram-ботов статей очень много, а вот про навыки для Алисы мало кто пишет, а информации как сделать единого бота я вообще не нашел, поэтому решил поделиться своим опытом о том, как сделать простого бота Telegram и навык Яндекс.Алиса для сайта, имеющих единый функционал.

Итак, как поднимать веб-сервер и получить ssl-сертификат я рассказывать не буду, про это написано достаточно.

Создание Telegram-бота

Сначала создадим Telegram-бота, для этого идем в Telegram и находим там бота BotFather.

Вводим название бота, по которому он будет отзываться, потом вводим имя бота, в ответ получаем токен для управления ботом, записываем этот ключ, он нам пригодится в дальнейшем.

Следующий шаг — это сообщить серверам Telegram, на какой сервер отправлять данные от бота. Для этого делаем ссылку вида:

https: //api.telegram.org/bot___ТОКЕН___/setWebhook?url=https://____ПУТЬ_ДО_СКРПИТА___ 

___ТОКЕН___ заменяем на наш токен от бота, полученный ранее

____ПУТЬ_ДО_СКРПИТА___ заменяем на адрес скрипта на нашем сервере, где будет происходить обработка данных (например, www.my_server.ru/webhook_telegram.php).

Тут есть проблема, сервер api.telegram.org находится под блокировкой, но можно сделать так: арендовать самый дешевый сервер там, где нет ограничений и дать из консоли этого сервера команду

wget ___ПОЛУЧИВШИЙСЯ_АДРЕС___ 

Все, Telegram-бот создан и связан с вашим сервером.

Создание навыка для Яндекс.Алиса

Перейдем к созданию навыка для Яндекс.Алиса.

Для создания навыка нужно перейти на страницу разработчиков Яндекс.Диалоги страницу разработчиков Яндекс.Диалоги, нажать там «Создать диалог» и выбрать «Навык в Алисе».

Откроется диалог настроек навыка.

Начинаем вводить настройки навыка.

Активационное имя следует подбирать очень внимательно, чтобы Алиса правильно его понимала, из нюансов – мобильное приложение с Алисой и колонки типа Яндекс.Станция или Irbis A могут воспринимать слова по-разному.

Вводим путь до скрипта на нашем сервере так же, как и для Telegram, но это будет скрипт именно для Алисы, например www.my_server.ru/webhook_alice.php.

Выбираем голос, которым будет говорить навык, мне больше нравится именно голос Алисы.

Если планируется работа только на мобильных устройствах или в браузере, то выбираем «Нужно устройство с экраном».

Далее вводим настройки для каталога навыков Алисы. Если вы планируете использовать для активации слово — бренд, нужно пройти верификацию сайта бренда в сервисе webmaster.yandex.ru.

С настройками все, переходим к скриптам.

Скрипт Telegram-бота

Начнем со скрипта для Telegram.

Подключаем библиотеку, где будут обрабатываться сообщения от бота и Алисы:

include_once 'webhook_parse.php'; 
$tg_bot_token = "_____YOUR_BOT_TOKEN_____"; 
$request = file_get_contents('php://input'); $request = json_decode($request, TRUE); 

Разбираем данные на переменные:

if (!$request) < die(); // Some Error output (request is not valid JSON) >else if (!isset($request['update_id']) || !isset($request['message'])) < die(); // Some Error output (request has not message) >else

Теперь можно работать с переменными:

$tokens — тут теперь все слова, которые пользователь ввел

$user_id — тут id пользователя

$msg_chat_id — чат, в котором бот получил команду

$msg_user_name — имя пользователя

Далее, вызываем для обработки функцию Parse_Tokens:

$Out_Str = Parse_Tokens($tokens); 

функция Send_Out проста и выглядит так:

function Send_Out($user_id, $text, $is_end = true) < global $tg_bot_token; if (strlen($user_id) < 1 || strlen($text) < 1) $json = file_get_contents('https://api.telegram.org/bot' . $tg_bot_token . '/sendMessage?chat_id=' . $user_id . '&text=' . $text); > 

Скрипт навыка для Яндекс.Алиса

Теперь перейдем к скрипту для Алисы, он почти такой же, как и для Telegram.

Также подключаем библиотеку, где будут обрабатываться сообщения от бота и Алисы, плюс библиотеку с классами для Алисы:

include_once 'classes_alice.php'; include_once 'webhook_parse.php'; 
$data = json_decode(trim(file_get_contents('php://input')), true); 

Разбираем данные на переменные:

if (isset($data['request'])) < //original_utterance if (isset($data['meta'])) < $data_meta = $data['meta']; if (isset($data_meta['client_id'])) > if (isset($data['request'])) < $data_req = $data['request']; if (isset($data_req['original_utterance'])) < $original_utterance = $data_req['original_utterance']; >if (isset($data_req['command'])) if (isset($data_req['nlu'])) < $data_nlu = $data_req['nlu']; if (isset($data_nlu['tokens'])) // $data_token_count = count($data_tokens); > > if (isset($data['session'])) < $data_session = $data['session']; if (isset($data_session['new'])) if (isset($data_session['message_id'])) if (isset($data_session['session_id'])) if (isset($data_session['skill_id'])) if (isset($data_session['user_id'])) > > 

Тут нужных переменных чуть меньше:

$tokens — тут теперь все слова, которые пользователь ввел

$user_id — тут id пользователя

Яндекс постоянно пингует опубликованные навыки, и я добавил строчку, чтобы сразу выходить из скрипта, не запуская полную обработку сообщения:

Вызываем для обработки функцию Parse_Tokens, он тот же самый, что и для Telegram:

$Out_Str = Parse_Tokens($tokens); 

Функция Send_Out тут посложней:

function Send_Out($user_id, $out_text, $out_tts = "", $is_end = false) < global $data_msg_sess_id, $user_id; ///// GENERATE BASE OF OUT ////// $Data_Out = new Alice_Data_Out(); $Data_Out->response = new Alice_Response(); $Data_Out->session = new Alice_Session(); ///// GENERATE BASE OF OUT End ////// ///// OUT MSG GENERATE ///// $Data_Out->session->session_id = $data_msg_sess_id;; $Data_Out->session->user_id = $user_id; $Data_Out->response->text = $out_text; $Data_Out->response->tts = $out_tts; if (strlen($out_tts) < 1) response->tts = $out_text;> $Data_Out->response->end_session = $is_end; header('Content-Type: application/json'); print(json_encode($Data_Out, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT)); die(); > 

Закончили скрипт для Алисы.

Сам скрипт обработки Parse_Tokens сделал чисто для примера, вы сможете сделать там любые проверки и обработки.

function Parse_Tokens($tokens) < $out = ""; // do something with tokens // $out = "Your eneter " . count($tokens) . " words: " . implode($tokens, " "); return $out; >

Если вам нужно общение с пользователем более сложного вида, чем вопрос-ответ, то нужно будет сохранять в базе (например mysql) $user_id пользователя и уже полученные от пользователя данные и анализировать их в функции Parse_Tokens.

Собственно это почти все, если все сделано правильно, то Telegram-бот уже доступен, навык Алисы можно проверить dialogs.yandex.ru/developer, перейдя в свой новый навык на закладку тестирование.

Если все корректно работает, можно отправить навык на модерацию, нажав кнопку «На модерацию».

Теперь у вас есть сразу два бота для разных платформ, которые работают одинаково.

Документация по сервису Яндекс.Диалоги тут

Полные скрипты выложены на github скачать.

Обновление: завернул все в классы и обновил репозитарий на github

Источник

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Пример PHP скрипта для навыка Алисы Яндекса.

AlexSuperStar/Yandex-Alisa-PHP-Example

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Пример PHP скрипта для навыка Алисы Яндекса.

Устанавливаем необходимые компоненты

composer init composer require alexsuperstar/jsonmaker composer install

Создание скрипта обрабатывающего запросы от Алисы

 header('Content-type:application/json;charset=utf-8'); include 'vendor/autoload.php'; $in = new \alexstar\JsonMaker(file_get_contents('php://input')); if(isset($in->version))< # если есть параметр version то будем считать что входные данные в порядке # формируем ответ $out = new \alexstar\JsonMaker(); # необходимые параметры ответа $out->version = '1.0'; $out->response->end_session = false; $out->session->session_id = $in->session->session_id; $out->session->message_id = $in->session->message_id; $out->session->user_id = $in->session->user_id; # Ответ Алисы $out->response->text='Привет'; # Например ссылка под текстом $out->response->buttons[0]->title = 'Открыть сайт разработчика'; $out->response->buttons[0]->url = 'https://alexstar.ru/'; echo $out; > ?>

About

Пример PHP скрипта для навыка Алисы Яндекса.

Источник

Читайте также:  Sign Up
Оцените статью