Сеансовые объекты не распознаются в учебных фразах Dialogflow - PullRequest
1 голос
/ 14 мая 2019

Я настроил диалоговый проект Google Actions с намерениями диалогового потока и веб-крючка, которые мой сервер обслуживает в PHP.

При запуске диалога нового диалога, например, незадолго до ответа на приветственное намерение код php отправляет некоторые объекты сеанса в механизм диалогового потока.

Механизм диалогового потока правильно распознавал слова сущности сеанса до двух недель назад, когда он неожиданно перестал работать (я ничего не изменил в коде), и сейчас он все еще не работает.

Сеансовые объекты создаются без ошибок (я добавил код для запроса api диалогового потока и список разрешений сеанса после создания, а Google отвечает всеми отправленными мной словами).

Однако Намерение не распознает и не заполняет параметры сущности.

Вот код, который я использую для проталкивания сущностей (используя библиотеку google dialogflow v2):

$names = [....array of strings....];
$parent = 'projects/inim-prova/agent/sessions/' . $sessionId;
$client = new SessionEntityTypesClient(['credentials' => $keyfile]]);
$entities = array_map(function($item) { return new Entity(['value' => $item, 'synonyms' => [$item]]); }, array_unique($names));
$entityType = new SessionEntityType([
    'name' => $parent . "/entityTypes/$displayName",
    'entity_override_mode' => EntityOverrideMode::ENTITY_OVERRIDE_MODE_SUPPLEMENT,
    'entities' => $entities
]);
$client->createSessionEntityType($parent, $entityType);

этот код выполняется без исключения.

После нескольких строк я запрашиваю сервер, чтобы убедиться, что все в порядке:

$req = $client->listSessionEntityTypes($this->webhookRequest->getSession());
foreach ($req as $element) {
    Logger::log(Logger::DEV, __METHOD__, "SessionEntityType: " . $element->getName());
    $entities = $element->getEntities();
    foreach ($entities as $entity) {
        $synonyms = [];
        foreach ($entity->getSynonyms() as $synonym) $synonyms[] = $synonym;
        Logger::log(Logger::DEV, __METHOD__, ">> " . $entity->getValue() . ": " . implode(', ', $synonyms));
    }
}

и это выписка из журнала отладки:

SessionEntityType: projects/inim-prova/agent/sessions/ABwppHHhgwxi5OGznpUtUq2D7BQrOKWB5Y5UYr20HRKI14iASKugPw2dL2VKMwfvZ193Mq_DUb2emQ/entityTypes/NomiLuoghiUscite
>> sala: sala
>> cucina: cucina
>> giardino: giardino
SessionEntityType: projects/inim-prova/agent/sessions/ABwppHHhgwxi5OGznpUtUq2D7BQrOKWB5Y5UYr20HRKI14iASKugPw2dL2VKMwfvZ193Mq_DUb2emQ/entityTypes/NomiUscite
>> luci: luci
>> irrigazione: irrigazione
>> cappa: cappa

поэтому все сущности кажутся в правильном месте.

Это тренировочная фраза:

Intent

(обратите внимание, что ArticoliDeterminativi и Preposizioni являются статическими объектами, которые я игнорирую).

и это параметры, которые я получаю по запросу webhook, когда говорю Accendi le luci in cucina:

'parameters' => array (
    'NomiUscite.original' => '',
    'Preposizioni.original' => '',
    'NomiLuoghiUscite' => '',
    'NomiUscite' => '',
    'Preposizioni' => '',
    'ArticoliDeterminativi.original' => 'le',
    'NomiLuoghiUscite.original' => '',
    'ArticoliDeterminativi' => 'il',
)

Как видите, NomiUscite и NomiLuoghiUscite пусты. Я ожидаю, что они будут luci и cucina.

Я действительно невежественен.

Ответы [ 2 ]

0 голосов
/ 05 июня 2019

Похоже, что это действительно ошибка диалога, а не недостаток в моем коде.Через пару недель ребята из службы поддержки Google ответили мне, что проблема устранена.

Я снова провел тесты без каких-либо изменений в коде, и теперь он работает.

0 голосов
/ 15 мая 2019

Вы должны добавить слова «uscita» и «luogo» в Сессионные сущности. Я могу узнать, как параметры могут быть пустыми, если вы аннотируете слова, которые не являются частью сущности.

Вы также можете попробовать добавить «Accendi le luci in cucina» в качестве обучающей фразы.

...