API Dialogflow: получение извлеченных параметров из ответа «Определить намерение» - PullRequest
0 голосов
/ 28 октября 2018

Я использую библиотеку PHP Dialogflow для работы с API Dialogflow.Запрос API обнаружения намерения возвращает сложный объект Google\Protobuf\Struct для параметров. Есть ли простой способ извлечь извлеченные параметры, возвращенные в ответе «Определить намерение»?

Вот часть кода:

$response = $sessionsClient->detectIntent($session, $queryInput);
$queryResult = $response->getQueryResult();
$parameters = $queryResult->getParameters(); // ==> Returns Google\Protobuf\Struct object

Это параметрывозвращается, как видно на вкладке истории Dialogflow:

"parameters": {
    "integer": "",
    "number": "",
    "currency": "{amount=400000, currency=USD}"
}

Я хотел бы получить параметры в том же формате (или массив в порядке).

Ответы [ 3 ]

0 голосов
/ 12 ноября 2018

Я попытался serializeToJsonString (), но это не сработало. Я извлекаю параметры, как это:

...

$fields = $queryResult->getParameters()->getFields();

$parameters = [];
foreach($fields as $key => $field) {
    $parameters[$key] = self::get_field_value($field);
}

...

private static function get_field_value($field) 
{
    $kind = $field->getKind();
    if ($kind == "string_value")
        return $field->getStringValue();
    else if ($kind == "number_value")
        return $field->getNumberValue();
    else if ($kind == "bool_value")
        return $field->getBoolValue();
    else if ($kind == "null_value")
        return $field->getNullValue();
    else if ($kind == "list_value") {
        $list_values = $field->getListValue()->getValues();
        $values = [];
        foreach($list_values as $list_value)
            $values[] = self::get_field_value($list_value);

        return $values;    
    }
    else if ($kind == "struct_value")
        return $field->getStructValue();
}
0 голосов
/ 12 июля 2019
$queryResult = $response->getQueryResult();
$jsonString = $queryResult->serializeToJsonString();
0 голосов
/ 28 октября 2018

Вызовите serializeToJsonString() для объекта Struct или любого другого объекта protobuf.

...