DialogFlow PHP cURL

Я пытаюсь получить ответ от своего агента 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"
    }
}

Надеюсь, кто-нибудь сможет мне с этим помочь. Спасибо!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
2 868
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Метод токена клиентского доступа больше не используется с API версии 2.

Вместо этого вы должны использовать OAuth 2 для сервер-серверных приложений. В этой схеме вы создадите Учетная запись службы и загрузите ключи для этой учетной записи. Если вы делать это вручную (что было бы, если бы вы использовали curl), перед вашим запросом вы бы

  • Используя закрытый ключ, создайте запрос JWT и отправьте его на сервер аутентификации Google, чтобы получить токен аутентификации с ограниченным временем действия.

  • Включите этот токен в заголовок Authentication: Bearer в HTTPS-запрос к Dialogflow.

Вы также можете сделать это используя команду gcloud после того, как загрузите ключи.

Возможно, вам будет лучше изучить клиентская библиотека для Dialogflow, который также позаботится об этом. Вам все равно нужно будет получить учетную запись Google Cloud Service и загрузить файл ключа, но об остальном он позаботится.

Большое вам спасибо за ваш ответ. Я просто следил за «учебником» по cloud.google.com/dialogflow-enterprise/docs/reference/… для PHP, но у меня возникли некоторые проблемы. Я не знаю, правильно ли это, но я попытался записать export GOOGLE_APPLICATION_CREDENTIALS=„pathtomyprivatekeyfile“ на моей консоли в каталоге моего проекта, но ничего не вышло ... Я использовал пример на сайте для использования клиентской библиотеки, назвал его «test.php» и поместил его в корневой каталог моего каталога проекта. (Я не уверен, что это подходящее место для файла?)

Jessix 31.05.2018 19:34

Ниже определения функции detect_intent_text я вызвал функцию с необходимыми параметрами. Но тут появляется ошибка Fatal error: Uncaught DomainException: Could not load the default credentials. Browse to https://developers.google.com/accounts/docs/application-defa‌​ult-credentials - но ссылка мне не особо помогает…

Jessix 31.05.2018 19:34

Мы должны написать чат-бота с диалоговым потоком как проект в университете. Все работало нормально, мое намерение вызывает веб-перехватчик на моем сервере, чтобы он мог вернуть данные из моей базы данных в качестве ответа от чат-бота. Но теперь я хочу, чтобы запросы от пользователя и ответы чат-бота находились в собственном «интерфейсе чата» на моем сайте, и это просто ужасно….

Jessix 31.05.2018 19:34

Я понял! Мне просто нужно было отправить параметр с путем к моему json-keyfile ... теперь все работает. Спасибо, что направили меня по правильному пути! : D $test = array('credentials' => 'my-weather.json'); $sessionsClient = new SessionsClient($test);

Jessix 02.06.2018 12:00

Не могли бы вы поделиться полным рабочим кодом? Я не могу бежать.

Ahmad Syed 20.04.2019 21:15

Другие вопросы по теме