Oracle APEX вызов Dialogflow V2 в PL / SQL - аутентификация с помощью OAuth2 или учетной записи службы Google - PullRequest
0 голосов
/ 16 марта 2020

Миграция из Dialogflow V1 означает, что встраивание ключа API внутри клиентской стороны javascript больше не работает. Вместо этого требуется проверка подлинности с помощью учетной записи службы Google (или OAuth тоже работает? Пока неясно).

Поскольку чат-робот находится в Blogger, нет простого способа добавить код на стороне сервера, который бы использовал Google Облачные SDK для аутентификации.

Итак, запросы должны направляться через наш Oracle сервер APEX, который должен аутентифицировать себя с помощью Dialogflow. Однако у меня возникают трудности со следующими процедурами:

https://docs.oracle.com/database/apex-5.1/AEAPI/OAUTH_AUTHENTICATE-Function.htm

https://docs.oracle.com/database/apex-18.1/AEAPI/MAKE_REST_REQUEST-Function.htm

oauth_authenticate завершается с ошибкой

s_internal_error: true
apex_error_code: APEX.REGION.UNHANDLED_ERROR
ora_sqlcode: -20001
ora_sqlerrm: ORA-20001: Authentication failed. ORA-06512

Вот общий код:

create or replace procedure "TEST_DIALOGFLOW"
is
begin
 begin DECLARE
  l_response_clob         CLOB;
  l_rest_url              VARCHAR2(1000);
  l_token_url             VARCHAR2(1000);
  l_count_posted          PLS_INTEGER;
BEGIN
  l_rest_url  := 'https://dialogflow.googleapis.com/v2/projects/<project>/agent/sessions/0:detectIntent';
  l_token_url := 'https://accounts.google.com/o/oauth2/token';

  apex_web_service.oauth_authenticate(
    p_client_id            => <client id>,
    p_client_secret        => <client secret>,
    p_token_url            => l_token_url,
    p_wallet_path          => <wallet path>,
    p_wallet_pwd           => <wallet password>
  );

  l_response_clob := apex_web_service.make_rest_request(
    p_url                  => l_rest_url,
    p_http_method          => 'POST',
    p_scheme               => 'OAUTH_CLIENT_CRED',
    p_body                 => '{"queryInput":{"text":{"text":"test","languageCode":"en"}}}',
    p_wallet_path          => <wallet path>,
    p_wallet_pwd           => <wallet password>
  );

  htp.p('HTTP Status Code: '||apex_web_service.g_status_code);
  IF apex_web_service.g_status_code = 200 THEN
    apex_json.parse(p_source => l_response_clob, p_strict => true);
  END IF;
END;
end;
end;

Я подозреваю, что URL токена неверен. Или, что есть более простой способ справиться с этим.

У меня также есть подозрения относительно настройки OAuth внутри GCloud. Обязательно ли их заполнять?

OAuth Setup

Кроме того, мне неясно, какой аккаунт в службе Google и OAuth. Прямо сейчас, настройка для ключа OAuth, который я сделал для Dialogflow. Однако рекомендуется использовать служебную учетную запись, но я не уверен, как использовать описанные выше процедуры для входа в систему с этими учетными данными.

1 Ответ

0 голосов
/ 19 марта 2020

Вам потребуется использовать OAuth, если вы хотите получить доступ к пользовательским данным приложения, таким как время просмотра пользователем на YouTube.

Читая ваш код и комментируя, если я не ошибаюсь, вы реализовать чат-бота в Google Blogger, верно? Если это так, вы можете ввести код PHP, чтобы упростить процедуру. Вы можете встроить <iframe> и создать ссылку на свой собственный сервер, ваш код на стороне сервера может быть выполнен на вашем сервере. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...