API Dialogflow: получение извлеченных параметров из ответа «Определить намерение»

Я использую Dialogflow PHP библиотека работать с Dialogflow API. Запрос 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}"}

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

0

Решение

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

1

Другие решения

Я попытался 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

По вопросам рекламы [email protected]