Я пытаюсь получить ответ от своего агента DialogFlow (v2!) Через PHP curl ... Поэтому я скопировал обычную команду curl из DialogFlow:
curl -H "Content-Type: application/json; charset=utf-8" -H "Authorization: Bearer ya29.xxxxhWdzg3rA" -d "{\"queryInput\":{\"text\":{\"text\":\"Gib mir Informationen über meine Dienstreise von Hamburg\",\"languageCode\":\"de\"}},\"queryParams\":{\"timeZone\":\"Europe/Berlin\"}}" "https://dialogflow.googleapis.com/v2/projects/xxxx/agent/sessions/edd016e1-9xxxxxf3787f:detectIntent"
и "преобразовал" его в PHP:
$query = "Gib mir Informationen über meine Dienstreise nach Hamburg";
$postData = array(
'queryInput' => array(
'text' => array(
'text' => $query,
'languageCode' => 'de'
)),
'queryParams' => array(
'timeZone' => 'Europe/Berlin'
)
);
$jsonData = json_encode($postData);
$ch = curl_init('https://dialogflow.googleapis.com/v2/projects/xxxx/agent/sessions/edd016e1xxxxx7f:detectIntent');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf-8', 'Authorization: Bearer 6cXXXXfe'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
echo $result;
curl_close($ch);
«6cXXXXfe» - это мой «токен клиентского доступа» от DialogFlow. URL-адрес в curl_init () взят из предыдущей команды curl - я почти уверен, что это ошибка, но я просто не могу понять, какой URL-адрес должен быть там ...
Я получаю сообщение об ошибке:
{
"error":
{
"code": 401,
"message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
"status": "UNAUTHENTICATED"
}
}
Надеюсь, кто-нибудь сможет мне с этим помочь. Спасибо!






Метод токена клиентского доступа больше не используется с API версии 2.
Вместо этого вы должны использовать OAuth 2 для сервер-серверных приложений. В этой схеме вы создадите Учетная запись службы и загрузите ключи для этой учетной записи. Если вы делать это вручную (что было бы, если бы вы использовали curl), перед вашим запросом вы бы
Используя закрытый ключ, создайте запрос JWT и отправьте его на сервер аутентификации Google, чтобы получить токен аутентификации с ограниченным временем действия.
Включите этот токен в заголовок Authentication: Bearer в HTTPS-запрос к Dialogflow.
Вы также можете сделать это используя команду gcloud после того, как загрузите ключи.
Возможно, вам будет лучше изучить клиентская библиотека для Dialogflow, который также позаботится об этом. Вам все равно нужно будет получить учетную запись Google Cloud Service и загрузить файл ключа, но об остальном он позаботится.
Ниже определения функции detect_intent_text я вызвал функцию с необходимыми параметрами. Но тут появляется ошибка Fatal error: Uncaught DomainException: Could not load the default credentials. Browse to https://developers.google.com/accounts/docs/application-default-credentials - но ссылка мне не особо помогает…
Мы должны написать чат-бота с диалоговым потоком как проект в университете. Все работало нормально, мое намерение вызывает веб-перехватчик на моем сервере, чтобы он мог вернуть данные из моей базы данных в качестве ответа от чат-бота. Но теперь я хочу, чтобы запросы от пользователя и ответы чат-бота находились в собственном «интерфейсе чата» на моем сайте, и это просто ужасно….
Я понял! Мне просто нужно было отправить параметр с путем к моему json-keyfile ... теперь все работает. Спасибо, что направили меня по правильному пути! : D $test = array('credentials' => 'my-weather.json'); $sessionsClient = new SessionsClient($test);
Не могли бы вы поделиться полным рабочим кодом? Я не могу бежать.
Большое вам спасибо за ваш ответ. Я просто следил за «учебником» по cloud.google.com/dialogflow-enterprise/docs/reference/… для PHP, но у меня возникли некоторые проблемы. Я не знаю, правильно ли это, но я попытался записать
export GOOGLE_APPLICATION_CREDENTIALS=„pathtomyprivatekeyfile“на моей консоли в каталоге моего проекта, но ничего не вышло ... Я использовал пример на сайте для использования клиентской библиотеки, назвал его «test.php» и поместил его в корневой каталог моего каталога проекта. (Я не уверен, что это подходящее место для файла?)