镜像站点 · 本页由第三方 GitHub 只读镜像提供,非 GitHub 官方站点,不接受任何登录或凭据输入。前往 github.com
Skip to content

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

Open

Description

@00j

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

we have the following extract:

    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:

    $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:
googleapis/google-cloud-php#2026

Activity

  1. changed the title [-]DialogFlow - Suggested update to detect_intent_stream.php example to avoid Exception when using OutputAudioConfig()[/-] [+]DialogFlow - Suggested update to detect_intent_stream.php sample script. Avoiding Exception when using OutputAudioConfig()[/+] on Jun 7, 2019
  2. self-assigned this
    on Jun 13, 2019
  3. bshaffer commented on Jun 13, 2019

    @bshaffer
    Contributor

    This looks good, although shouldn't it be this instead, since we want the final iteration of it?

    $queryResult = $response->getQueryResult() ?: $queryResult
  4. added
    type: feature request‘Nice-to-have’ improvement, new feature or different behavior or design.
    and removed
    🚨This issue needs some love.
    triage meI really want to be triaged.
    on Oct 7, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    samplesIssues that are directly related to samples.type: feature request‘Nice-to-have’ improvement, new feature or different behavior or design.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions