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

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

Модератор: immortal

olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am

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

Сообщение olehs »

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

Re: Модуль API.AI

Сообщение Gelezako »

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

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

Сообщение Kvantos »

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

адд: ух как все быстро среагировали... значит пользователи сего чуда есть :)
MDM живет на 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 GNU/Linux
fandaymon
Сообщения: 1576
Зарегистрирован: Сб янв 13, 2018 5:00 pm

Re: Модуль API.AI

Сообщение fandaymon »

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

Re: Модуль API.AI

Сообщение Yashalta »

fandaymon писал(а): Ср фев 14, 2018 3:53 am ...
На apia.ai сделал intent Add_Event, который возвращает Event_Date @sys.date, Event_Desc @sys.any и [email protected]. Потренировал на нескольких фразах, так чтобы бралась обязательная дата, необязательное время, а всё что после - в само напоминание
Ну и сделал в модуле api.ai для Add_Event такой скриптик
SPOILERSPOILER_SHOW

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

// $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 = '[email protected]';  // Тут надо поставить свой адрес 

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' => '[email protected]'),
  ),
  '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' => '[email protected]'),
  ),
  'reminders' => array(
    'useDefault' => FALSE,
    'overrides' => array(
      array('method' => 'email', 'minutes' => 24 * 60),
      array('method' => 'popup', 'minutes' => 10),
    ),
  ),
));
}
$event = $service->events->insert($calendarId, $event);
Как-то так...

Проверка о мероприятиях на сегодня примерно так
SPOILERSPOILER_SHOW

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

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#[email protected]';
$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 = '[email protected]';
$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 и [email protected].
Куда прописывать скрипт?
Аватара пользователя
Kvantos
Сообщения: 295
Зарегистрирован: Вт окт 31, 2017 1:05 pm

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

Сообщение Kvantos »

(1) Имя любое, латиницей
(2) - сюда ничего пока не надо - это события по которым активируется интент
Потом "набить" ентитиес
Потом их "обозначить" в интентах
Вот небольшая "обучалка"
https://www.youtube.com/watch?v=gWNUg_v25dw
https://www.youtube.com/watch?v=biN00SoMRI8
https://www.youtube.com/watch?v=jJFTIZ4kLTY
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

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

Сообщение Kvantos »

Вот пример моего интента управления любым объектом в любой комнате
Вложения
Snap 2018-12-10 at 14.26.57.png
Snap 2018-12-10 at 14.26.57.png (43.47 КБ) 4672 просмотра
Snap 2018-12-10 at 14.25.02.png
Snap 2018-12-10 at 14.25.02.png (27.93 КБ) 4673 просмотра
Snap 2018-12-10 at 14.26.08.png
Snap 2018-12-10 at 14.26.08.png (98.51 КБ) 4673 просмотра
Snap 2018-12-10 at 14.20.49.png
Snap 2018-12-10 at 14.20.49.png (69.5 КБ) 4676 просмотров
MDM живет на 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 GNU/Linux
Yashalta
Сообщения: 318
Зарегистрирован: Вс май 20, 2018 9:27 am

Re: Модуль API.AI

Сообщение Yashalta »

fandaymon писал(а): Ср фев 14, 2018 3:53 am ...сделал intent Add_Event, который возвращает Event_Date @sys.date, Event_Desc @sys.any и [email protected]. Потренировал на нескольких фразах, так чтобы бралась обязательная дата, необязательное время, а всё что после - в само напоминание
Ну и сделал в модуле api.ai для Add_Event такой скриптик
SPOILERSPOILER_SHOW

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

// $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 = '[email protected]';  // Тут надо поставить свой адрес 

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' => '[email protected]'),
  ),
  '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' => '[email protected]'),
  ),
  'reminders' => array(
    'useDefault' => FALSE,
    'overrides' => array(
      array('method' => 'email', 'minutes' => 24 * 60),
      array('method' => 'popup', 'minutes' => 10),
    ),
  ),
));
}
$event = $service->events->insert($calendarId, $event);
Как-то так...

Проверка о мероприятиях на сегодня примерно так
SPOILERSPOILER_SHOW

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

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#[email protected]';
$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 = '[email protected]';
$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
Сообщения: 1576
Зарегистрирован: Сб янв 13, 2018 5:00 pm

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

Сообщение fandaymon »

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

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

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

Сообщение Yashalta »

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
Такое ощущение что просит какой то модуль?!?!
Ответить