[Настройка] Альтернативное решение по интеграции с google assistant: настройка собственного webhook для dialogflow

Описание настройки чего либо

Модераторы: immortal, newz20

Аватара пользователя
vitt76
Сообщения: 372
Зарегистрирован: Вс апр 09, 2017 2:36 pm
Благодарил (а): 101 раз
Поблагодарили: 50 раз

[Настройка] Альтернативное решение по интеграции с google assistant: настройка собственного webhook для dialogflow

Сообщение vitt76 » Ср окт 10, 2018 3:31 pm

Здесь описано как получить интеграцию с google assistant через connect
https://kb.smartliving.ru/google-assist ... majordomo/
В этой же статье читаем:
*Почему обязательна работа через сервис CONNECT? Это особенность работы навыков ассистента -- они могут работать только через интернет-сервер, доступный по доменному имени и (важно) имеющий действующий и удостоверенный SSL-сертификат. Вы можете сделать собственный частный навык и работать с ним в тестовом режиме без публикации в каталоге, но вам всё равно понадобится, чтобы ваш сервер удовлетворял вышеописанным условиям.*
Вот и будем делать свой частный навык, который будем использовать сами.
Готовый результат выглядит на смарте так:
СпойлерПоказать
photo_2018-10-08_14-29-27.jpg
photo_2018-10-08_14-29-27.jpg (44.39 КБ) 5888 просмотров
Итак, поехали.
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
СпойлерПоказать
1.png
1.png (51.15 КБ) 5758 просмотров
Welcome-action я удалил, чтобы он не мешал.
Свой action называем как угодно и заполняем как на картинках
СпойлерПоказать
2.png
2.png (36.37 КБ) 5758 просмотров
3.png
3.png (60.43 КБ) 5758 просмотров
В общих настройках обязательно проверяем, чтобы стояло API v.1
СпойлерПоказать
4.png
4.png (68.2 КБ) 5758 просмотров
3. Создаем свою ответную часть webhook, например, файл webhook.php, который обязательно должен лежать в корне сайта.

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

<?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);

?>
В настройки Fulfillment Dialogflow вписал путь до файла и данные внешней авторизации
СпойлерПоказать
412_image.png
412_image.png (230.5 КБ) 5888 просмотров
Все, можно через телефон, можно через тест на Dialogflow попробовать вызвать и проверить свой action.

Решение уже лишено детских болезней, спасибо sorochan.ilya и ovcher за помощь!
Последний раз редактировалось vitt76 Чт окт 25, 2018 2:39 pm, всего редактировалось 4 раза.
За это сообщение автора vitt76 поблагодарили (всего 13):
Logrus (Ср окт 10, 2018 3:35 pm) • skysilver (Ср окт 10, 2018 3:42 pm) • SoulTaker (Ср окт 10, 2018 3:49 pm) • VooDooN (Ср окт 10, 2018 4:06 pm) • Samir77 (Ср окт 10, 2018 5:57 pm) • chimik (Чт окт 11, 2018 12:39 am) • ovcher (Чт окт 11, 2018 9:02 pm) • ILGAS (Чт окт 11, 2018 11:07 pm) • sorochan.ilya (Вт окт 16, 2018 9:51 am) • Strangeman (Ср окт 31, 2018 11:02 am) и ещё 3
Рейтинг: 15.29%
Broadlink + Orange Pi PC ARMBIAN 5.31
Chainik
Сообщения: 1346
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 222 раза
Поблагодарили: 422 раза

Re: Альтернативное решение по интеграции с google assistant: настройка собственного webhook для dialogflow

Сообщение Chainik » Ср окт 10, 2018 5:13 pm

Немного не по вопросу, но по делу.
А если в сценарии заменить getURL на file_get_contents не ускорится его выполнение?
За это сообщение автора Chainik поблагодарили (всего 2):
vitt76 (Ср окт 10, 2018 5:26 pm) • ovcher (Пт окт 12, 2018 1:32 pm)
Рейтинг: 2.35%
Аватара пользователя
vitt76
Сообщения: 372
Зарегистрирован: Вс апр 09, 2017 2:36 pm
Благодарил (а): 101 раз
Поблагодарили: 50 раз

Re: Альтернативное решение по интеграции с google assistant: настройка собственного webhook для dialogflow

Сообщение vitt76 » Ср окт 10, 2018 5:26 pm

Chainik, спасибо, попробуем :)
Broadlink + Orange Pi PC ARMBIAN 5.31
Аватара пользователя
vitt76
Сообщения: 372
Зарегистрирован: Вс апр 09, 2017 2:36 pm
Благодарил (а): 101 раз
Поблагодарили: 50 раз

Re: Альтернативное решение по интеграции с google assistant: настройка собственного webhook для dialogflow

Сообщение vitt76 » Чт окт 11, 2018 12:54 pm

Выше немного подробнее расписал создание actons.
С удовольствием сообщаю, что всё прекрасно работает через SSL-сертификат VPNKI :)
За это сообщение автора vitt76 поблагодарил:
ovcher (Пт окт 12, 2018 1:31 pm)
Рейтинг: 1.18%
Broadlink + Orange Pi PC ARMBIAN 5.31
Аватара пользователя
vitt76
Сообщения: 372
Зарегистрирован: Вс апр 09, 2017 2:36 pm
Благодарил (а): 101 раз
Поблагодарили: 50 раз

Re: Альтернативное решение по интеграции с google assistant: настройка собственного webhook для dialogflow

Сообщение vitt76 » Чт окт 11, 2018 5:34 pm

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

<?php

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

//декодим данные
$json = json_decode($requestBody);
$text = $json->originalRequest->data->inputs[0]->arguments[0]->textValue;

//передаем $text в обертку
@file_put_contents("webhook.dat", $text);
$url = 'http://localhost/command.php?qry='.urlencode($text).'&Submit=Say';
$match = @file_get_contents($url);
$re = '/<\/b>: (.+?)<br/';
$i = preg_match($re, $match, $matches);
if ($matches[1] == '') $speech = "Команда принята"; else $speech = $matches[1];

//отвечаем гуглу
$response = new \stdClass();
$response->speech = $speech;
$response->displayText = $speech;
$response->source = "webhook";
echo json_encode($response);

?>
Новый вебхук работает БЕЗ сценария и получает правильный ответ.
За это сообщение автора vitt76 поблагодарили (всего 2):
ovcher (Чт окт 11, 2018 9:03 pm) • skysilver (Чт окт 11, 2018 10:04 pm)
Рейтинг: 2.35%
Broadlink + Orange Pi PC ARMBIAN 5.31
Аватара пользователя
sorochan.ilya
Сообщения: 21
Зарегистрирован: Вс янв 24, 2016 11:20 am
Благодарил (а): 21 раз
Поблагодарили: 10 раз

Re: Альтернативное решение по интеграции с google assistant: настройка собственного webhook для dialogflow

Сообщение sorochan.ilya » Чт окт 11, 2018 8:11 pm

Спасибо Все заработало, только у меня немного другой json прилетал, поэтому заменил:

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

//декодим данные
$json = json_decode($requestBody);
$text = $json->result->resolvedQuery;
Аватара пользователя
ovcher
Сообщения: 183
Зарегистрирован: Сб сен 12, 2015 3:11 am
Откуда: Волгоград
Благодарил (а): 60 раз
Поблагодарили: 38 раз
Контактная информация:

Re: Альтернативное решение по интеграции с google assistant: настройка собственного webhook для dialogflow

Сообщение ovcher » Чт окт 11, 2018 9:02 pm

Илья а не было так чтобы была неактивна Россия и еще целая куча стран в Location targeting. Потому что и у меня и у Витали активно для включения/выключения только 12 стран все остальное серое. Только у Витали под серым все галки включены, а у меня выключены в том числе и Россия, в результате если в симуляторе ставлю штатовскую или немецкую локацию все нормуль, если русскую локацию то Пишет что приложение в этом регионе не поддерживается, отже самое и с мобилой. Может знаете как побороть?
Аватара пользователя
sorochan.ilya
Сообщения: 21
Зарегистрирован: Вс янв 24, 2016 11:20 am
Благодарил (а): 21 раз
Поблагодарили: 10 раз

Re: Альтернативное решение по интеграции с google assistant: настройка собственного webhook для dialogflow

Сообщение sorochan.ilya » Пт окт 12, 2018 9:33 am

ovcher писал(а):
Чт окт 11, 2018 9:02 pm
Илья а не было так чтобы была неактивна Россия и еще целая куча стран в Location targeting. Потому что и у меня и у Витали активно для включения/выключения только 12 стран все остальное серое. Только у Витали под серым все галки включены, а у меня выключены в том числе и Россия, в результате если в симуляторе ставлю штатовскую или немецкую локацию все нормуль, если русскую локацию то Пишет что приложение в этом регионе не поддерживается, отже самое и с мобилой. Может знаете как побороть?
Нет, у меня не было такой проблемы.
PS Чтобы не было сообщения "Неизвестная команда" при запуске добавил:

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

if ($text == 'GOOGLE_ASSISTANT_WELCOME'){$speech ='Привет!';}
//отвечаем гуглу
$response = new \stdClass();
$response->speech = $speech;
$response->displayText = $speech;
$response->source = "webhook";
echo json_encode($response);

Теперь при запуске говорит: "Привет!"
За это сообщение автора sorochan.ilya поблагодарили (всего 2):
vitt76 (Пт окт 12, 2018 12:48 pm) • ovcher (Пт окт 12, 2018 1:30 pm)
Рейтинг: 2.35%
Аватара пользователя
vitt76
Сообщения: 372
Зарегистрирован: Вс апр 09, 2017 2:36 pm
Благодарил (а): 101 раз
Поблагодарили: 50 раз

Re: Альтернативное решение по интеграции с google assistant: настройка собственного webhook для dialogflow

Сообщение vitt76 » Пт окт 12, 2018 1:39 pm

sorochan.ilya, спасибо, еще раз поправил шапку!
Broadlink + Orange Pi PC ARMBIAN 5.31
Аватара пользователя
sorochan.ilya
Сообщения: 21
Зарегистрирован: Вс янв 24, 2016 11:20 am
Благодарил (а): 21 раз
Поблагодарили: 10 раз

Re: Альтернативное решение по интеграции с google assistant: настройка собственного webhook для dialogflow

Сообщение sorochan.ilya » Вс окт 14, 2018 1:51 pm

Для версии 2 нужно изменить:

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

//декодим данные
$json = json_decode($requestBody);
$text = $json->queryResult->queryText;

//отвечаем гуглу
$response = new \stdClass();
$response->fulfillmentText = $speech;
$response->source = "webhook";
echo json_encode($response);
За это сообщение автора sorochan.ilya поблагодарили (всего 2):
vitt76 (Вс окт 14, 2018 1:53 pm) • VooDooN (Вс окт 14, 2018 6:39 pm)
Рейтинг: 2.35%
Ответить