in dialogflow/src/detect_intent_stream.php [32:108]
function detect_intent_stream($projectId, $path, $sessionId, $languageCode = 'en-US')
{
// need to use gRPC
if (!defined('Grpc\STATUS_OK')) {
throw new \Exception('Install the grpc extension ' .
'(pecl install grpc)');
}
// new session
$sessionsClient = new SessionsClient();
$session = $sessionsClient->sessionName($projectId, $sessionId ?: uniqid());
printf('Session path: %s' . PHP_EOL, $session);
// hard coding audio_encoding and sample_rate_hertz for simplicity
$audioConfig = new InputAudioConfig();
$audioConfig->setAudioEncoding(AudioEncoding::AUDIO_ENCODING_LINEAR_16);
$audioConfig->setLanguageCode($languageCode);
$audioConfig->setSampleRateHertz(16000);
// create query input
$queryInput = new QueryInput();
$queryInput->setAudioConfig($audioConfig);
// first request contains the configuration
$request = new StreamingDetectIntentRequest();
$request->setSession($session);
$request->setQueryInput($queryInput);
$requests = [$request];
// we are going to read small chunks of audio data from
// a local audio file. in practice, these chunks should
// come from an audio input device.
$audioStream = fopen($path, 'rb');
while (true) {
$chunk = stream_get_contents($audioStream, 4096);
if (!$chunk) {
break;
}
$request = new StreamingDetectIntentRequest();
$request->setInputAudio($chunk);
$requests[] = $request;
}
// intermediate transcript info
print(PHP_EOL . str_repeat('=', 20) . PHP_EOL);
$stream = $sessionsClient->streamingDetectIntent();
foreach ($requests as $request) {
$stream->write($request);
}
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);
}
$sessionsClient->close();
}