Миграция из 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. Обязательно ли их заполнять?
Кроме того, мне неясно, какой аккаунт в службе Google и OAuth. Прямо сейчас, настройка для ключа OAuth, который я сделал для Dialogflow. Однако рекомендуется использовать служебную учетную запись, но я не уверен, как использовать описанные выше процедуры для входа в систему с этими учетными данными.