Страница 11 из 38

Re: Модуль API.AI

Добавлено: Вт фев 13, 2018 2:35 pm
vitt76
Значит, вечером правим код.

Re: Модуль API.AI

Добавлено: Вт фев 13, 2018 10:32 pm
vitt76
А Google assistant не работает пока?

Re: Модуль API.AI

Добавлено: Вт фев 13, 2018 11:26 pm
fandaymon
vitt76 писал(а):А Google assistant не работает пока?
С русским - нет. И в ближайшее время не обещают. К тому же ключевая фраза OK Google как-то не очень подходит для общения с умным домом

Re: Модуль API.AI

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

Говоришь, например Добавь напоминание в среду в 17:00 встреча или Добавь напоминание Завтра День рождения или Добавь напоминание на 30 марта в десять Отправить показания, а модуль возвращает тебе дату,время и текст напоминания, остаётся только добавить в календарь. Да, конечно, всё это можно сделать и шаблонами, но придётся помучиться...
делись кодом )

Re: Модуль API.AI

Добавлено: Ср фев 14, 2018 2:01 am
Gelezako
ребят, на счёт приоритетов, ну вот лично я уже давно отказался от шаблонов и использую только API.AI, но я понимаю что другим удобнее шаблоны. Что думаете если добавить в настройки возможность через интерфейс выставлять приоритет для шаблонов, ПУ и API.AI ?

Re: Модуль API.AI

Добавлено: Ср фев 14, 2018 3:53 am
fandaymon
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 до Мажордомо не писал, но вроде работает

Re: Модуль API.AI

Добавлено: Ср фев 14, 2018 6:57 am
vitt76
fandaymon писал(а):
vitt76 писал(а):А Google assistant не работает пока?
С русским - нет. И в ближайшее время не обещают. К тому же ключевая фраза OK Google как-то не очень подходит для общения с умным домом
Я встроенной интеграции в api.ai, с ходу не разобрался что там надо сделать.

Re: Модуль API.AI

Добавлено: Вт фев 20, 2018 9:49 am
Denis_k
Камрады, а кто нибудь может подсказать как в обсуждаемом сервисе переключаются контексты? если уж пользоваться, то построение нелинейный диалогов кажется наиболее правильным вариантом.
С простым получением параметров из той или иной фразы проблем не возникло. Отдельное спасибо Игорю (Gelezako).
т.е. "расскажи о погоде", где "погода" является сущностью/параметром
или "расскажи анекдот", где последнее параметр, с подобным все ок, а вот так, чтобы
"расскажи" - как контекст с исходящими контекстами: "о погоде", "анекдот", "новости", ..... с этим затык
PS. про построение нелинейных диалогов читал в документации сервиса
https://dialogflow.com/docs/dialogs
но на строчке
...
Set the Action to question.location
...
возникает устойчивое непонимание происходящего

Re: Модуль API.AI

Добавлено: Вт фев 20, 2018 10:55 am
lanket
Denis_k писал(а):Камрады, а кто нибудь может подсказать как в обсуждаемом сервисе переключаются контексты?...
Тут объясняется доходчиво и по русски, есть и про контексты.
Оно?

Отправлено с моего Redmi Note 4 через Tapatalk

Re: Модуль API.AI

Добавлено: Вт фев 20, 2018 10:57 am
lanket
Правда, помоему модуль Мажордомо не отрабатывает контексты. Вроде как обсуждалось ранее.

Отправлено с моего Redmi Note 4 через Tapatalk