GoogleCloudPlatform / GoogleCloudPlatform/php-docs-samples
DialogFlow - Suggested update to detect_intent_stream.php sample script. Avoiding Exception when using OutputAudioConfig()
- 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
Assessment
This issue has not been assessed yet.