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

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

Модератор: immortal

olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

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

Сообщение olehs » Пн дек 10, 2018 12:15 pm

За это сообщение автора olehs поблагодарил:
Yashalta (Пн дек 10, 2018 1:08 pm)
Рейтинг: 1.16%
Аватара пользователя
Gelezako
Сообщения: 963
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Благодарил (а): 205 раз
Поблагодарили: 106 раз
Контактная информация:

Re: Модуль API.AI

Сообщение Gelezako » Пн дек 10, 2018 12:33 pm

Yashalta писал(а):
Пн дек 10, 2018 12:11 pm
А сайт http://apia.ai/ открывается? или там другая должна быть ссылка? Я пытаюсь проделать все шаги, что описаны выше и дошел до места На apia.ai сделал intent Add_Event, который возвращает Event_Dateгде нужно ... но, сайт не открывается!!!
вы неврено урл сайта вписали, нужно http://api.ai , а вообще это старый домен, они переехали вот сюда https://dialogflow.com/
За это сообщение автора Gelezako поблагодарил:
Yashalta (Пн дек 10, 2018 1:07 pm)
Рейтинг: 1.16%
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
Аватара пользователя
Kvantos
Сообщения: 295
Зарегистрирован: Вт окт 31, 2017 1:05 pm
Благодарил (а): 26 раз
Поблагодарили: 49 раз

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

Сообщение Kvantos » Пн дек 10, 2018 1:04 pm

это сайт https://dialogflow.com/

адд: ух как все быстро среагировали... значит пользователи сего чуда есть :)
За это сообщение автора Kvantos поблагодарил:
Yashalta (Пн дек 10, 2018 1:07 pm)
Рейтинг: 1.16%
MDM живет на 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 GNU/Linux
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Модуль API.AI

Сообщение fandaymon » Пн дек 10, 2018 1:12 pm

Yashalta писал(а):
Пн дек 10, 2018 12:11 pm

А сайт http://apia.ai/ открывается? или там другая должна быть ссылка? Я пытаюсь проделать все шаги, что описаны выше и дошел до места На apia.ai сделал intent Add_Event, который возвращает Event_Dateгде нужно ... но, сайт не открывается!!!
Он теперь называется https://dialogflow.com/
За это сообщение автора fandaymon поблагодарил:
Yashalta (Пн дек 10, 2018 1:15 pm)
Рейтинг: 1.16%
Yashalta
Сообщения: 315
Зарегистрирован: Вс май 20, 2018 9:27 am
Благодарил (а): 160 раз
Поблагодарили: 29 раз

Re: Модуль API.AI

Сообщение Yashalta » Пн дек 10, 2018 3:10 pm

fandaymon писал(а):
Ср фев 14, 2018 3:53 am
...
На 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 до Мажордомо не писал, но вроде работает
Подскажите, делаю в впервые... Может где видео инструкция для чайников есть?
Изображение
Вот пытаюсь создать новый "Intend name" какое имя нужно дать, возможно, нужно присвоить какое то специальное или имя не имеет значения? Как сделать, что бы он возвращал то, что автор поста описал выше ...возвращает Event_Date @sys.date, Event_Desc @sys.any и Event_Time@sys.time.
Куда прописывать скрипт?
Аватара пользователя
Kvantos
Сообщения: 295
Зарегистрирован: Вт окт 31, 2017 1:05 pm
Благодарил (а): 26 раз
Поблагодарили: 49 раз

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

Сообщение Kvantos » Пн дек 10, 2018 3:14 pm

(1) Имя любое, латиницей
(2) - сюда ничего пока не надо - это события по которым активируется интент
Потом "набить" ентитиес
Потом их "обозначить" в интентах
Вот небольшая "обучалка"
https://www.youtube.com/watch?v=gWNUg_v25dw
https://www.youtube.com/watch?v=biN00SoMRI8
https://www.youtube.com/watch?v=jJFTIZ4kLTY
За это сообщение автора Kvantos поблагодарил:
Yashalta (Пн дек 10, 2018 11:03 pm)
Рейтинг: 1.16%
MDM живет на 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 GNU/Linux
Аватара пользователя
Kvantos
Сообщения: 295
Зарегистрирован: Вт окт 31, 2017 1:05 pm
Благодарил (а): 26 раз
Поблагодарили: 49 раз

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

Сообщение Kvantos » Пн дек 10, 2018 3:21 pm

Вот пример моего интента управления любым объектом в любой комнате
Вложения
Snap 2018-12-10 at 14.26.57.png
Snap 2018-12-10 at 14.26.57.png (43.47 КБ) 3738 просмотров
Snap 2018-12-10 at 14.25.02.png
Snap 2018-12-10 at 14.25.02.png (27.93 КБ) 3739 просмотров
Snap 2018-12-10 at 14.26.08.png
Snap 2018-12-10 at 14.26.08.png (98.51 КБ) 3739 просмотров
Snap 2018-12-10 at 14.20.49.png
Snap 2018-12-10 at 14.20.49.png (69.5 КБ) 3742 просмотра
За это сообщение автора Kvantos поблагодарил:
Yashalta (Пн дек 10, 2018 11:02 pm)
Рейтинг: 1.16%
MDM живет на 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 GNU/Linux
Yashalta
Сообщения: 315
Зарегистрирован: Вс май 20, 2018 9:27 am
Благодарил (а): 160 раз
Поблагодарили: 29 раз

Re: Модуль API.AI

Сообщение Yashalta » Пт дек 14, 2018 12:29 pm

fandaymon писал(а):
Ср фев 14, 2018 3:53 am
...сделал 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 писал(а):
Ср фев 14, 2018 3:53 am

Ну и сделал в модуле api.ai для Add_Event такой скриптик
Если сюда,
Изображение
то, думаю это не совсем правильно т.к. нужно удалить имеющийся по дефолту скрип?!?! Или тут еще есть место куда можно добавить?

Так же у меня не получается и реализовать что бы Add_Event, возвращал Event_Date @sys.date, Event_Desc @sys.any и Event_Time @sys.time
Изображение

А здесь я просто показываю какой Entities я создал
Изображение
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

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

Сообщение fandaymon » Пт дек 14, 2018 1:10 pm

Скрипт записывается в Actions модуля Api.Ai. Надо чтобы этот интент отработал, тогда в списке Actions появляется Add_Event с параметрами. Нажимая карандашик можно отредактировать, что именно он будет делать - именно туда надо скопировать мой скрипт.

Для того чтобы параметры возвращались, надо вписывать пробные строчки и выделять в них дату, время и описание события
Yashalta
Сообщения: 315
Зарегистрирован: Вс май 20, 2018 9:27 am
Благодарил (а): 160 раз
Поблагодарили: 29 раз

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

Сообщение Yashalta » Пт дек 14, 2018 4:49 pm

fandaymon писал(а):
Пт дек 14, 2018 1:10 pm
Скрипт записывается в Actions модуля Api.Ai. Надо чтобы этот интент отработал, тогда в списке Actions появляется Add_Event с параметрами. Нажимая карандашик можно отредактировать, что именно он будет делать - именно туда надо скопировать мой скрипт.
Сделал так как Вы описали выше! Интент отработал и в списке Actions появился Add_Event далее нажал на карандашик и добавил Ваш скрипт! После положил фаил zerg_secret.json на Raspberry где у меня MajorDomo живет, по этому пути как у Вас /home/pi/Desktop/zerg_secret.json и так же в скрипте поправил эту строчку на свое значение

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

putenv('GOOGLE_APPLICATION_CREDENTIALS=/home/pi/Desktop/zerg_secret.json');
Снова тестирую и получаю это в новом окне браузера

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

Warning: require_once(./Google/vendor/autoload.php): failed to open stream: No such file or directory in /var/www/modules/apiai/apiai.class.php(663) : eval()'d code on line 4

Fatal error: require_once(): Failed opening required './Google/vendor/autoload.php' (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/modules/apiai/apiai.class.php(663) : eval()'d code on line 4
Такое ощущение что просит какой то модуль?!?!
Ответить