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

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

Модератор: immortal

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

Re: Модуль API.AI

Сообщение vitt76 » Вт фев 13, 2018 2:35 pm

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

Re: Модуль API.AI

Сообщение vitt76 » Вт фев 13, 2018 10:32 pm

А Google assistant не работает пока?
Broadlink + Orange Pi PC ARMBIAN 5.31
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Модуль API.AI

Сообщение fandaymon » Вт фев 13, 2018 11:26 pm

vitt76 писал(а):А Google assistant не работает пока?
С русским - нет. И в ближайшее время не обещают. К тому же ключевая фраза OK Google как-то не очень подходит для общения с умным домом
Аватара пользователя
Gelezako
Сообщения: 963
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Благодарил (а): 205 раз
Поблагодарили: 106 раз
Контактная информация:

Re: Модуль API.AI

Сообщение Gelezako » Ср фев 14, 2018 1:57 am

fandaymon писал(а): Ну и совершенно зря... Для некоторых применений API.AI очень удобен. Например, я с его помощью реализовал добавление голосом в гугл календарь разных мероприятий

Говоришь, например Добавь напоминание в среду в 17:00 встреча или Добавь напоминание Завтра День рождения или Добавь напоминание на 30 марта в десять Отправить показания, а модуль возвращает тебе дату,время и текст напоминания, остаётся только добавить в календарь. Да, конечно, всё это можно сделать и шаблонами, но придётся помучиться...
делись кодом )
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
Аватара пользователя
Gelezako
Сообщения: 963
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Благодарил (а): 205 раз
Поблагодарили: 106 раз
Контактная информация:

Re: Модуль API.AI

Сообщение Gelezako » Ср фев 14, 2018 2:01 am

ребят, на счёт приоритетов, ну вот лично я уже давно отказался от шаблонов и использую только API.AI, но я понимаю что другим удобнее шаблоны. Что думаете если добавить в настройки возможность через интерфейс выставлять приоритет для шаблонов, ПУ и API.AI ?
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Модуль API.AI

Сообщение fandaymon » Ср фев 14, 2018 3:53 am

Gelezako писал(а):
fandaymon писал(а): Ну и совершенно зря... Для некоторых применений API.AI очень удобен. Например, я с его помощью реализовал добавление голосом в гугл календарь разных мероприятий

Говоришь, например Добавь напоминание в среду в 17:00 встреча или Добавь напоминание Завтра День рождения или Добавь напоминание на 30 марта в десять Отправить показания, а модуль возвращает тебе дату,время и текст напоминания, остаётся только добавить в календарь. Да, конечно, всё это можно сделать и шаблонами, но придётся помучиться...
делись кодом )
Скачал на https://github.com/google/google-api-php-client файл, распаковал его в директорию Google в корне веб-сервера. В lib не стал помещать, так как там старая гугловская библиотека от модуля Ивана.

Далее - сделал сервисный экаунт, как написано здесь http://rtportal.ru/index.php?id=164:calendar-python-bot

Получил джейсон, сохранил его на Desktop
Зашел в настройки своего гугл-календаря и в пункте Доступ для отдельных пользователей, дал разрешение на редактирование имейлу, который присваивается сервисному экаунту (Без этого пункта сервисный экаунт не хотел видеть мой календарь)

На apia.ai сделал intent Add_Event, который возвращает Event_Date @sys.date, Event_Desc @sys.any и Event_Time@sys.time. Потренировал на нескольких фразах, так чтобы бралась обязательная дата, необязательное время, а всё что после - в само напоминание
Ну и сделал в модуле api.ai для Add_Event такой скриптик
СпойлерПоказать

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

// $params['Event_Date']
// $params['Event_Desc'] 
// $params['Event_Time']
require_once './Google/vendor/autoload.php';

putenv('GOOGLE_APPLICATION_CREDENTIALS=/home/pi/Desktop/sarah-home-calendar.json');
$client = new Google_Client();

$event_desc=$params['Event_Desc'];

$client->useApplicationDefaultCredentials();
$client->setApplicationName(‘TestCalendarAPI’);
$client->setScopes('https://www.googleapis.com/auth/calendar');
$service = new Google_Service_Calendar($client);

$calendarId = 'mail@gmail.com';  // Тут надо поставить свой адрес 

if ($params['Event_Time']=='') {
$event = new Google_Service_Calendar_Event(array(
  'summary' => $event_desc,
  'location' => '',
  'description' => '',
  'start' => array(
    'date' => $params['Event_Date'],
    'timeZone' => 'Europe/Riga',
  ),
  'end' => array(
    'date' => $params['Event_Date'],
    'timeZone' => 'Europe/Riga',
  ),
  'attendees' => array(
    array('email' => 'mail@gmail.com'),
  ),
  'reminders' => array(
    'useDefault' => FALSE,
    'overrides' => array(
      array('method' => 'email', 'minutes' => 24 * 60),
      array('method' => 'popup', 'minutes' => 10),
    ),
  ),
));
}
else {
$event = new Google_Service_Calendar_Event(array(
  'summary' => $event_desc,
  'location' => '',
  'description' => '',
  'start' => array(
    'dateTime' => $params['Event_Date'] . 'T' . $params['Event_Time'],
    'timeZone' => 'Europe/Riga',
  ),
  'end' => array(
    'dateTime' => $params['Event_Date'] . 'T' . $params['Event_Time'],
    'timeZone' => 'Europe/Riga',
  ),
  'attendees' => array(
    array('email' => 'mail@gmail.com'),
  ),
  'reminders' => array(
    'useDefault' => FALSE,
    'overrides' => array(
      array('method' => 'email', 'minutes' => 24 * 60),
      array('method' => 'popup', 'minutes' => 10),
    ),
  ),
));
}
$event = $service->events->insert($calendarId, $event);
Как-то так...

Проверка о мероприятиях на сегодня примерно так
СпойлерПоказать

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

require_once './Google/vendor/autoload.php';

putenv('GOOGLE_APPLICATION_CREDENTIALS=/home/pi/Desktop/sarah-home-calendar.json');
$client = new Google_Client();

$client->useApplicationDefaultCredentials();
$client->setApplicationName(‘TestCalendarAPI’);
$client->setScopes('https://www.googleapis.com/auth/calendar');
$service = new Google_Service_Calendar($client);

$calendarId = 'lv.latvian#holiday@group.v.calendar.google.com';
$optParams = array(
  'maxResults' => 10,
  'orderBy' => 'startTime',
  'singleEvents' => TRUE,
  'timeMin' => date('c'),
  'timeMax' => date('Y-m-d',strtotime('tomorrow')) .'T00:00:00+02:00',
);
$results = $service->events->listEvents($calendarId, $optParams);

$today_events='';
 
if (count($results->getItems()) == 0) {
} else {
  foreach ($results->getItems() as $event) {
    $start = $event->start->dateTime;
    if (empty($start)) {
     $start='';
    }
   else {
    $start=date_format(date_create($start),'H:i');
   } 
   $today_events.=$start . ' ' . holidaysru($event->getSummary()) . '. ';
  }
} 
 
$calendarId = 'mail@gmail.com';
$optParams = array(
  'maxResults' => 10,
  'orderBy' => 'startTime',
  'singleEvents' => TRUE,
  'timeMin' => date('c'),
  'timeMax' => date('Y-m-d',strtotime('tomorrow')) .'T00:00:00+02:00',
);
$results = $service->events->listEvents($calendarId, $optParams);
 
if (count($results->getItems()) == 0) {
} else {
  foreach ($results->getItems() as $event) {
    $start = $event->start->dateTime;
    if (empty($start)) {
     $start='';
    }
   else {
    $start=date_format(date_create($start),'H:i');
   } 
   $today_events.=$start . ' ' . $event->getSummary() . '. ';
  }
}
 
if ($today_events<>'') {
 $hello.='Сегодня: ' . $today_events;
}
Сначала проверяются праздники, потом то что запланировано в гугл-календаре. За качество кода не отвечаю, так как на PHP до Мажордомо не писал, но вроде работает
За это сообщение автора fandaymon поблагодарил:
Gelezako (Ср фев 14, 2018 12:34 pm)
Рейтинг: 1.16%
Аватара пользователя
vitt76
Сообщения: 372
Зарегистрирован: Вс апр 09, 2017 2:36 pm
Благодарил (а): 101 раз
Поблагодарили: 51 раз

Re: Модуль API.AI

Сообщение vitt76 » Ср фев 14, 2018 6:57 am

fandaymon писал(а):
vitt76 писал(а):А Google assistant не работает пока?
С русским - нет. И в ближайшее время не обещают. К тому же ключевая фраза OK Google как-то не очень подходит для общения с умным домом
Я встроенной интеграции в api.ai, с ходу не разобрался что там надо сделать.
Broadlink + Orange Pi PC ARMBIAN 5.31
Denis_k
Сообщения: 587
Зарегистрирован: Сб мар 19, 2016 7:24 pm
Благодарил (а): 299 раз
Поблагодарили: 27 раз

Re: Модуль API.AI

Сообщение Denis_k » Вт фев 20, 2018 9:49 am

Камрады, а кто нибудь может подсказать как в обсуждаемом сервисе переключаются контексты? если уж пользоваться, то построение нелинейный диалогов кажется наиболее правильным вариантом.
С простым получением параметров из той или иной фразы проблем не возникло. Отдельное спасибо Игорю (Gelezako).
т.е. "расскажи о погоде", где "погода" является сущностью/параметром
или "расскажи анекдот", где последнее параметр, с подобным все ок, а вот так, чтобы
"расскажи" - как контекст с исходящими контекстами: "о погоде", "анекдот", "новости", ..... с этим затык
PS. про построение нелинейных диалогов читал в документации сервиса
https://dialogflow.com/docs/dialogs
но на строчке
...
Set the Action to question.location
...
возникает устойчивое непонимание происходящего
MD на raspberry pi3
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

Re: Модуль API.AI

Сообщение lanket » Вт фев 20, 2018 10:55 am

Denis_k писал(а):Камрады, а кто нибудь может подсказать как в обсуждаемом сервисе переключаются контексты?...
Тут объясняется доходчиво и по русски, есть и про контексты.
Оно?

Отправлено с моего Redmi Note 4 через Tapatalk
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

Re: Модуль API.AI

Сообщение lanket » Вт фев 20, 2018 10:57 am

Правда, помоему модуль Мажордомо не отрабатывает контексты. Вроде как обсуждалось ранее.

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