GoogleCloudPlatform / GoogleCloudPlatform/php-docs-samples

DialogFlow - Suggested update to detect_intent_stream.php sample script. Avoiding Exception when using OutputAudioConfig()

Open
#911 1 comment 0 reactions 0 assignees View on GitHub
samples type: feature request
Dominant language
PHP
Stars
1k
Forks
1k
PR merge metrics
No merged PRs in 30d

Description

Hello, Please can I suggest a change?

In this example script:

[https://github.com/GoogleCloudPlatform/php-docs-samples/blob/master/dialogflow/src/detect_intent_stream.php](url)

we have the following extract:

```php

foreach ($stream->closeWriteAndReadAll() as $response) {
$recognitionResult = $response->getRecognitionResult();
if ($recognitionResult) {
$transcript = $recognitionResult->getTranscript();
printf('Intermediate transcript: %s' . PHP_EOL, $transcript);
}
}

// get final response and relevant info
if ($response) {
print(str_repeat("=", 20) . PHP_EOL);
$queryResult = $response->getQueryResult();
$queryText = $queryResult->getQueryText();
$intent = $queryResult->getIntent();
$displayName = $intent->getDisplayName();
$confidence = $queryResult->getIntentDetectionConfidence();
$fulfilmentText = $queryResult->getFulfillmentText();
// output relevant info
printf('Query text: %s' . PHP_EOL, $queryText);
printf('Detected intent: %s (confidence: %f)' . PHP_EOL, $displayName,
$confidence);
print(PHP_EOL);
printf('Fulfilment text: %s' . PHP_EOL, $fulfilmentText);
}

```

Which relies on using ```$response``` that is set from the last iteration of the loop and might not always be available.

Suggestion:

```php

$queryResult = null;
foreach ($stream->closeWriteAndReadAll() as $response) {
$recognitionResult = $response->getRecognitionResult();
if ($recognitionResult) {
$transcript = $recognitionResult->getTranscript();
printf('Intermediate transcript: %s' . PHP_EOL, $transcript);
}

$queryResult = !$queryResult && $response->getQueryResult()
? $response->getQueryResult()
: $queryResult;
}

// get final response and relevant info
if ($queryResult) {
print(str_repeat("=", 20) . PHP_EOL);
$queryText = $queryResult->getQueryText();
$intent = $queryResult->getIntent();
$displayName = $intent->getDisplayName();
$confidence = $queryResult->getIntentDetectionConfidence();
$fulfilmentText = $queryResult->getFulfillmentText();
// output relevant info
printf('Query text: %s' . PHP_EOL, $queryText);
printf('Detected intent: %s (confidence: %f)' . PHP_EOL, $displayName,
$confidence);
print(PHP_EOL);
printf('Fulfilment text: %s' . PHP_EOL, $fulfilmentText);
}

```

In this example setting ```$queryResult``` has been moved into the ```foreach ($stream->closeWriteAndReadAll() as $response)``` loop because ```getQueryResult()``` isn't always available on the final iteration of the loop.

For example when utilising ```OutputAudioConfig()``` it is set on the penultimate iteration. Which would throw an exception in the current example and result in the loss of results.

Related issue:
https://github.com/googleapis/google-cloud-php/issues/2026

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.