dialogflow — ответ о выполнении PHP webhook не отображается в Действиях в Google

Ответ выполнения виден в диагностической информации в среде Dialogflow. Но он не появляется, когда я тестирую его в Действиях в Google. Кто-нибудь, кто знает, как это работает? Вот мой код webhook:

<?php

$method = $_SERVER['REQUEST_METHOD'];

if($method == 'POST'){
$requestBody = file_get_contents('php://input');
$json = json_decode($requestBody);

$text = $json->queryResult->queryText;

$date = (!empty($json->queryResult->parameters->date)) ? $json->queryResult->parameters->date : '';
$environment  = (!empty($json->queryResult->parameters->environment)) ? $json->queryResult->parameters->environment : '';
$intent   = (!empty($json->queryResult->intent->displayName)) ? $json->queryResult->intent->displayName : '';

$responseText = prepareResponse($intent, $text, $date, $environment);

$response = new \stdClass();
$response->speech = $responseText;
$response->displayText = $responseText;
$response->source = "webhook";
header("Content-type:application/json");
echo json_encode($response);
}
else
{
echo "Method not allowed";
}

function prepareResponse($intent, $text, $date, $environment)
{
return "You said: " . $text . " | I found Intent: " . $intent . " | with parameters: date=" . $date . " environment=" . $environment;
}
?>

1

Решение

Ответ выполнения виден в диагностической информации в среде Dialogflow. Но он не появляется, когда я тестирую его в Действиях в Google. Кто-нибудь, кто знает, как это работает? Вот мой код webhook:

<?php

$method = $_SERVER['REQUEST_METHOD'];

if($method == 'POST'){
$requestBody = file_get_contents('php://input');
$json = json_decode($requestBody);

$text = $json->queryResult->queryText;

$date = (!empty($json->queryResult->parameters->date)) ? $json->queryResult->parameters->date : '';
$environment  = (!empty($json->queryResult->parameters->environment)) ? $json->queryResult->parameters->environment : '';
$intent   = (!empty($json->queryResult->intent->displayName)) ? $json->queryResult->intent->displayName : '';

$responseText = prepareResponse($intent, $text, $date, $environment);

$response = new \stdClass();
$response->speech = $responseText;
$response->displayText = $responseText;
$response->source = "webhook";
header("Content-type:application/json");
echo json_encode($response);
}
else
{
echo "Method not allowed";
}

function prepareResponse($intent, $text, $date, $environment)
{
return "You said: " . $text . " | I found Intent: " . $intent . " | with parameters: date=" . $date . " environment=" . $environment;
}
?>
самый старый «data-shortcut =» O

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

Ответы на действия в Google должны быть в объекте под payload атрибут, который содержит один атрибут google с Формат ответа AoG.

Я не проверял это, и, возможно, это не лучший способ его построить, но что-то вроде следующего должно работать:

$response->payload = array(
"google" => array(
"expectUserResponse" => TRUE,
"richResponse" => array(
"items" => array(
array(
"simpleResponse" => array(
"textToSpeech" => $responseText
)
)
)
)
)
);
голосует «data-shortcut =» V

1