Нам по-прежнему понадобится внешний адрес сервера и 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));
Такие дела, если есть предложения как решить проблемы сервиса, пишите!