[Настройка] Альтернативное решение по интеграции с google assistant: настройка собственного webhook для dialogflow
Добавлено: Ср окт 10, 2018 3:31 pm
Здесь описано как получить интеграцию с google assistant через connect
https://kb.smartliving.ru/google-assist ... majordomo/
В этой же статье читаем:
*Почему обязательна работа через сервис CONNECT? Это особенность работы навыков ассистента -- они могут работать только через интернет-сервер, доступный по доменному имени и (важно) имеющий действующий и удостоверенный SSL-сертификат. Вы можете сделать собственный частный навык и работать с ним в тестовом режиме без публикации в каталоге, но вам всё равно понадобится, чтобы ваш сервер удовлетворял вышеописанным условиям.*
Вот и будем делать свой частный навык, который будем использовать сами.
Готовый результат выглядит на смарте так:
Итак, поехали.
1. Нам нужен ssl-сертификат для нашего сервера. Я пользуюсь бесплатным ddns-сервером для того, чтобы иметь внешнее доменное имя, для нас этого вполне достаточно. Система у меня установлена на orange pi, сервер apache, так что пользуемся https://certbot.eff.org/docs/using.html#apache и через 10 минут будет всё готово.
Также подходит сертификат, который выдает нам сервис vpnki!
2. Модуль API.AI нам не поможет и не нужен, он для других целей.
При создании actions можно опираться на это видео: https://www.youtube.com/watch?v=r9EKAbrOUS8
Я оставил default action нетронутым, только включил в нем Fulfillments
Welcome-action я удалил, чтобы он не мешал.
Свой action называем как угодно и заполняем как на картинках
В общих настройках обязательно проверяем, чтобы стояло API v.1
3. Создаем свою ответную часть webhook, например, файл webhook.php, который обязательно должен лежать в корне сайта.
В настройки Fulfillment Dialogflow вписал путь до файла и данные внешней авторизации
Все, можно через телефон, можно через тест на Dialogflow попробовать вызвать и проверить свой action.
Решение уже лишено детских болезней, спасибо sorochan.ilya и ovcher за помощь!
https://kb.smartliving.ru/google-assist ... majordomo/
В этой же статье читаем:
*Почему обязательна работа через сервис CONNECT? Это особенность работы навыков ассистента -- они могут работать только через интернет-сервер, доступный по доменному имени и (важно) имеющий действующий и удостоверенный SSL-сертификат. Вы можете сделать собственный частный навык и работать с ним в тестовом режиме без публикации в каталоге, но вам всё равно понадобится, чтобы ваш сервер удовлетворял вышеописанным условиям.*
Вот и будем делать свой частный навык, который будем использовать сами.
Готовый результат выглядит на смарте так:
СпойлерПоказать
1. Нам нужен ssl-сертификат для нашего сервера. Я пользуюсь бесплатным ddns-сервером для того, чтобы иметь внешнее доменное имя, для нас этого вполне достаточно. Система у меня установлена на orange pi, сервер apache, так что пользуемся https://certbot.eff.org/docs/using.html#apache и через 10 минут будет всё готово.
Также подходит сертификат, который выдает нам сервис vpnki!
2. Модуль API.AI нам не поможет и не нужен, он для других целей.
При создании actions можно опираться на это видео: https://www.youtube.com/watch?v=r9EKAbrOUS8
Я оставил default action нетронутым, только включил в нем Fulfillments
СпойлерПоказать
Свой action называем как угодно и заполняем как на картинках
СпойлерПоказать
СпойлерПоказать
Код: Выделить всё
<?php
//получаем данные
$requestBody = file_get_contents('php://input');
//декодим данные
$json = json_decode($requestBody);
$text = $json->result->resolvedQuery;
//передаем команду в систему
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));
if ($text == 'GOOGLE_ASSISTANT_WELCOME') {$speech ='Привет, чем могу помочь?';}
//отвечаем гуглу
$response = new \stdClass();
$response->speech = $speech;
$response->displayText = $speech;
$response->source = "webhook";
echo json_encode($response);
?>
СпойлерПоказать
Решение уже лишено детских болезней, спасибо sorochan.ilya и ovcher за помощь!