[Модуль] API.AI (apiai)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

Аватара пользователя
Gelezako
Сообщения: 963
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Контактная информация:

Re: Модуль API.AI

Сообщение Gelezako »

А можно пример с терминалами? К примеру у меня в качестве терминалов добавлено несколько телефонов под андроид с установленным мажордроид. Как мне понять от какого терминала пришла команда?
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am

Re: Модуль API.AI

Сообщение olehs »

Gelezako писал(а):А можно пример с терминалами? К примеру у меня в качестве терминалов добавлено несколько телефонов под андроид с установленным мажордроид. Как мне понять от какого терминала пришла команда?
Если Вы на альфа-ветке, то имя терминала будет в переменной $source

Кроме того, терминал передается в качестве контекста:
укажите в настройках Developer access token , затем нажмите на кнопку Send напротив terminals на вкладке Entities.
После этих действий получить терминал можно из контекста, например так

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

foreach($contexts as $ctx) {
    if ('known-terminal' == $ctx['name']) {
        debmes($ctx['parameters']['terminal']);
        debmes($ctx['parameters']['terminal.original']);
        break;
    }
}
Аватара пользователя
Gelezako
Сообщения: 963
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Контактная информация:

Re: Модуль API.AI

Сообщение Gelezako »

проделал как описано, но в $source пусто и цикл тоже ничего не выводит. Подскажите куда копать?
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am

Re: Модуль API.AI

Сообщение olehs »

Gelezako писал(а):проделал как описано, но в $source пусто и цикл тоже ничего не выводит. Подскажите куда копать?
С $source - это мой косяк, поправлю. Но тот цикл точно должен писать в лог айди и имя терминала.
Проверьте, что Вы на альфа-ветке с последними обновлениями.
Убедитесь, что в терминалах есть все настройки для этого терминала: айпи, галка Majordroid API и т.д.
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург

Re: Модуль API.AI

Сообщение lanket »

Я правильно понял, что работа с контекстными возможна только в системе из Альфа ветки?

И ещё вопрос: Я хочу реализовать включение радио по наименованию станции из списка возможных модуля 101 точка ру соответственно пришедшие название я должен сравнить с существующим текущем списком возможных станций. Где это возможно обработать на стороне api.ai передав каким-то образом список всех станций или на стороне мажордомо получив название от api.ai сравнив со списком и если не найдено то заново переспросить название ?

Отправлено с моего Redmi Note 4 через Tapatalk
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am

Re: Модуль API.AI

Сообщение olehs »

Нет, просто в мастер-ветке сейчас нет передачи имени терминала в обработчик COMMAND.
Это означает, что только в альфа-ветке API.AI будет знать, откуда пришел запрос.
Остальное все должно работать.

Запрос на включение радио можно полностью обрабатывать на стороне сервиса. Список радиостанций можно передать в Entity.
SPOILERSPOILER_SHOW
1.png
1.png (27.34 КБ) 4327 просмотров

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

$stations = SQLSelect('select ID, TITLE from ru101_stations');
$total = count($stations);
$entries = array();
for($i=0; $i<$total; $i++) {
 $entries[] = array(
  'value' => $stations[$i]['ID'], 
  'synonyms' => array($stations[$i]['TITLE'])
 );
}

$entity = array(
 'name' => 'radio-station',
 'entries' => $entries
);

return $entity; 
Затем нажать на нем кнопку Send.

Далее создаете Intent
SPOILERSPOILER_SHOW
3.png
3.png (76.71 КБ) 4327 просмотров
И, наконец, обработчик для экшена radio
SPOILERSPOILER_SHOW
2.png
2.png (25.1 КБ) 4327 просмотров
Последний раз редактировалось olehs Пн мар 12, 2018 1:23 pm, всего редактировалось 1 раз.
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург

Re: Модуль API.AI

Сообщение lanket »

Круто, буду пробовать.

Вот только контексты как то не заработали у меня с первой попытки.

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

То есть 'Включи радио'
Спрашивает 'какое '
Говорю 'радио рекорд'
А она вместо вопроса 'где включить' пишет 'попробуйте выразить свои мысли по другому'

Отправлено с моего Redmi Note 4 через Tapatalk
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am

Re: Модуль API.AI

Сообщение olehs »

lanket писал(а):Круто, буду пробовать.

Вот только контексты как то не заработали у меня с первой попытки.

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

То есть 'Включи радио'
Спрашивает 'какое '
Говорю 'радио рекорд'
А она вместо вопроса 'где включить' пишет 'попробуйте выразить свои мысли по другому'

Отправлено с моего Redmi Note 4 через Tapatalk
Контексты - это не то, Вы что-то путаете.
На радио 101 я что-то не нашел Радио Рекорд.
Ну и возможно МЖД что-то не так распознал. Вобщем, вариантов много, надо смотреть как у Вас настроено, не люблю гадать.
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург

Re: Модуль API.AI

Сообщение lanket »

olehs писал(а): ....
Контексты - это не то, Вы что-то путаете.
На радио 101 я что-то не нашел Радио Рекорд.
Ну и возможно МЖД что-то не так распознал. Вобщем, вариантов много, надо смотреть как у Вас настроено, не люблю гадать.
Да рекорда нет, это просто что первое пришло в голову, так для примера.

Контексты я так понял это диалоги при недостающих параметров.
Полная фраза 'Включи радио enigma на кухне'
Если сказать 'Включи радио'
Алиса спрашивает 'Назовите название станции' как прописанно в dialogflow
По идее должна вызвать прослушивание и распознование уточняющего ответа название станции, в данном примере 'enigma'.
В консоли на сайте dialogflow это работает.
А в test query модуля api.ai нет, и в чат если вводить вручную нет. И если нажимаешь кнопку распознования голосовой команды в Мажордроид тоже не вызывается распознование ответа на уточняющие вопрос.
А если вручную ввести enigma то Мажордомо воспринимает как новую команду а не ответ на уточняющие вопрос.

По сути контексты в api.ai я так понял что это как в шаблонах поведения контексты. Да и в консоле dialogflow этот режим диалога с уточняющими вопросами недостающих переменных также называется Contexts. И в тестовой консоли это работает.

Или я не так понял?


Отправлено с моего Redmi Note 4 через Tapatalk
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am

Re: Модуль API.AI

Сообщение olehs »

Ну, почти так. Контексты - это скорей условия, при которых Интент вообще будет проверятся.
Можете прикрепить сюда ответы в JSON на запросы в test query?

p.s. Я там накосячил немного с получением имени терминала назад из ответа API.AI, потому может не работать уточнение на MajorDroid через ask, а будет делаться sayReply. Я кинул PR, но пока Сергей не принял.
Ответить