Альтернативное решение по интеграции с Яндекс.диалоги (Алиса)

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Аватара пользователя
vitt76
Сообщения: 373
Зарегистрирован: Вс апр 09, 2017 2:36 pm

Альтернативное решение по интеграции с Яндекс.диалоги (Алиса)

Сообщение vitt76 »

Разобравшись с Гугл, попробуем пойти дальше и покомандовать системой через Алису :)
Нам по-прежнему понадобится внешний адрес сервера и SSL-сертификат, можно бесплатный или через vpnki.
Создаем файл, например, webhook_yandex.php и кладем его в корень сайта
Содержимое файла:

Код: Выделить всё

<?php

//получаем данные
$requestBody = file_get_contents('php://input');

//декодим данные
$json = json_decode($requestBody);
$text = $json->request->command;
$sessionnew = $json->session->new;
$message_id = $json->session->message_id;
$session_id = $json->session->session_id;
$user_id = $json->session->user_id;

//передаем команду в систему
$_SERVER['PHP_AUTH_USER'] = 'login';
$_SERVER['PHP_AUTH_PW'] = 'pass';
include_once("./config.php");
include_once("./lib/loader.php");
$session = new session("prj");
$db = new mysql(DB_HOST, '', DB_USER, DB_PASSWORD, DB_NAME);
include_once(DIR_MODULES . "application.class.php");
include_once("./load_settings.php");
say(htmlspecialchars($text), 0, 1);

// читаем ответ
$sqlQuery = "SELECT MESSAGE
               FROM shouts
              WHERE MEMBER_ID = 0
              ORDER BY ID DESC
              LIMIT 1";

//$speech = current(SQLSelectOne($sqlQuery));
$speech = 'Команда принята';

//отвечаем яндексу
if ($sessionnew == true) $speech = "Привет, чем могу помочь?";
$response = new \stdClass();
$response->response->text = $speech;
$response->response->tts = $speech;
$response->response->end_session = false;
$response->session->message_id = $message_id;
$response->session->session_id = $session_id;
$response->session->user_id = $user_id;
$response->version = '1.0';
echo json_encode($response);
?>
Заполняем поля

Код: Выделить всё

$_SERVER['PHP_AUTH_USER'] = 'login';
$_SERVER['PHP_AUTH_PW'] = 'pass';
своим внешним логином и паролем, иначе яндекс работать пока не может.

Регистрируемся на https://dialogs.yandex.ru/
Создаем свой диалог, в поле Webhook URL ставим свой адрес
https://адрес_сервера/webhook_yandex.php
Всё, можно переходить в закладку тестирования и пробовать подавать команды ))

Текущие проблемы:
1. Сервис яндекса требует ответа от нашего сервера в течение 1,5 секунд, тогда как у меня время ответа доходит до 8 секунд.
Поэтому нам приходится отвечать

Код: Выделить всё

$speech = 'Команда принята';
вместо закомментированного

Код: Выделить всё

//$speech = current(SQLSelectOne($sqlQuery));
2. И всё бы ничего, но проблема из п.1 не позволяет мне пройти модерацию в Яндексе, так как модератор на все вопросы получает Команда принята и совершенно справедливо считает, что мой сервис фигня какая-то :) А без модерации я не могу его проверить на живой Алисе.
Такие дела, если есть предложения как решить проблемы сервиса, пишите!
Broadlink + Orange Pi PC ARMBIAN 5.31
o.a.ryzhov
Сообщения: 5
Зарегистрирован: Сб окт 27, 2018 2:07 am

Re: Альтернативное решение по интеграции с Яндекс.диалоги (Алиса)

Сообщение o.a.ryzhov »

Делаю по вашей инсрукци, но при регистрации ругается на вебхук ссылку, пишет "1. Невалидный JSON", как такое обойти, что я делаю не так? причем на сервер мажордома приходит команда "test"
Последний раз редактировалось o.a.ryzhov Пн ноя 05, 2018 4:17 pm, всего редактировалось 1 раз.
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Контактная информация:

Re: Альтернативное решение по интеграции с Яндекс.диалоги (Алиса)

Сообщение skysilver »

Ужас. Зачем цитировать весь пост?! Убирай давай овер квоттинг.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
vitt76
Сообщения: 373
Зарегистрирован: Вс апр 09, 2017 2:36 pm

Re: Альтернативное решение по интеграции с Яндекс.диалоги (Алиса)

Сообщение vitt76 »

o.a.ryzhov писал(а): Пн ноя 05, 2018 1:47 am Делаю по вашей инсрукци, но при регистрации ругается на вебхук ссылку, пишет "1. Невалидный JSON", как такое обойти, что я делаю не так? причем на сервер мажордома приходит команда "test"
Попробуйте запустить напрямую свой webhook
https://адрес_сервера/webhook_yandex.php
в браузере и посмотрите что он выдаст.
Broadlink + Orange Pi PC ARMBIAN 5.31
o.a.ryzhov
Сообщения: 5
Зарегистрирован: Сб окт 27, 2018 2:07 am

Re: Альтернативное решение по интеграции с Яндекс.диалоги (Алиса)

Сообщение o.a.ryzhov »

vitt76 писал(а): Пн ноя 05, 2018 3:15 pm Попробуйте запустить напрямую свой webhook
https://адрес_сервера/webhook_yandex.php
в браузере и посмотрите что он выдаст.
Warning: Creating default object from empty value in C:\_majordomo\htdocs\webhook_yandex.php on line 38 Warning: Creating default object from empty value in C:\_majordomo\htdocs\webhook_yandex.php on line 41 {"response":{"text":"\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430...","tts":"\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430...","end_session":false},"session":{"message_id":null,"session_id":null,"user_id":null},"version":"1.0"}
Аватара пользователя
vitt76
Сообщения: 373
Зарегистрирован: Вс апр 09, 2017 2:36 pm

Re: Альтернативное решение по интеграции с Яндекс.диалоги (Алиса)

Сообщение vitt76 »

Надо скрыть эти глупые варнинги и будет json валидный. Для этого используйте что-то типа
error_reporting(0);
Broadlink + Orange Pi PC ARMBIAN 5.31
o.a.ryzhov
Сообщения: 5
Зарегистрирован: Сб окт 27, 2018 2:07 am

Re: Альтернативное решение по интеграции с Яндекс.диалоги (Алиса)

Сообщение o.a.ryzhov »

vitt76 писал(а): Ср ноя 07, 2018 9:43 am Надо скрыть эти глупые варнинги и будет json валидный. Для этого используйте что-то типа
error_reporting(0);
поставил error_reporting(0); сразу после <?php во вторую строчку, результат тот же
Sinigamiruyk
Сообщения: 1
Зарегистрирован: Чт ноя 01, 2018 3:10 pm

Re: Альтернативное решение по интеграции с Яндекс.диалоги (Алиса)

Сообщение Sinigamiruyk »

Если у кого возникнет проблема с ошибкой диалогов "Невалидный JSON" то обратите внимание на кодировку. Например я изначально создал файл в кодировке Windows-1251 и получал ошибку пока не установил кодировку UTF-8 (если у кого-то выбор UTF-8 с BOM и Без BOM то надо выбирать без BOM)

Так же наверное будет правильным добавить заголовок указывающий что данный документ отдает JSON. Добавить эту строчку
header('Content-Type: application/json');
например после <?php
Аватара пользователя
Ron
Сообщения: 480
Зарегистрирован: Пт окт 27, 2017 6:44 pm

Re: Альтернативное решение по интеграции с Яндекс.диалоги (Алиса)

Сообщение Ron »

Sinigamiruyk писал(а): Ср ноя 14, 2018 12:23 pm пока не установил кодировку UTF-8 (если у кого-то выбор UTF-8 с BOM и Без BOM то надо выбирать без BOM)
Классику никто не отменял. Иначе головная боль и потраченное время с нервами )
chimik
Сообщения: 77
Зарегистрирован: Пн янв 09, 2017 1:39 pm

Re: Альтернативное решение по интеграции с Яндекс.диалоги (Алиса)

Сообщение chimik »

Здорово.!!!!! У меня заработала на Irbis. Пока тестирую. Вопросы;
"Не показывать в каталоге"- отмечать?
Возможно ли тестирование голосом?
Ответить