Как уже говорили здесь другие, токен доступа имеет продолжительность один час, после этого он становится бесполезным.Поэтому необходимо сделать вызов (http-вызов в моем случае) в API, чтобы запросить токен доступа, один раз в час, и использовать его, как объяснил Сатиш после этого.Инструкции о том, как сгенерировать подпись для совершения вызова и использовать ее позже, приведены в https://developers.google.com/identity/protocols/OAuth2ServiceAccount.
После получения файла json из учетной записи службы с закрытым ключом и адресом электронной почты, который необходимо использовать (несвою электронную почту, но созданную учетной записью службы), вы можете использовать библиотеку jsrsasign (в чистом javascript), которую вы можете найти в https://github.com/kjur/jsrsasign,, чтобы сгенерировать JSON Web Signature (JWS) и, следовательно, JSON WebТокен (JWT), который понадобится для выполнения http-вызова для получения токена доступа.
Затем вы используете его, как описано выше Satheesh, для выполнения вызова Dialogflow V2 через jQuery.
Код, который я использовал для достижения этой цели, следующий:
Чтобы сгенерировать JWT (используя соответствующую библиотеку):
function _genJWS() {
var header = '{"alg":"RS256","typ":"JWT"}';
var claimSet = jwtClaimSet();
var privateKey = jwtPrivateKey();
var sHead = newline_toDos(header);
var head = KJUR.jws.JWS.readSafeJSONString(sHead);
var sPayload = newline_toDos(claimSet);
var sPemPrvKey = privateKey;
var jws = new KJUR.jws.JWS();
var sResult = null;
try {
prv = KEYUTIL.getKey(sPemPrvKey);
sResult = KJUR.jws.JWS.sign(head.alg, sHead, sPayload, prv);
} catch (ex) {
alert("Error: " + ex);
}
return sResult;
}
Чтобы запросить токен доступа:
function _requestAccessToken() {
var access_token = accessToken;
var assertion = _genJWS();
console.log('Assertion: ' + assertion);
jQuery.ajax({
type: "POST",
url: "https://www.googleapis.com/oauth2/v4/token",
contentType: "application/x-www-form-urlencoded",
dataType: "json",
data: "grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=" + assertion,
success: function(response) {
console.log("success");
console.log(response);
access_token = response.access_token;
console.log(access_token);
},
error: function() {
console.log("Error");
}
});
return access_token;
}
Затем используйте этот токен доступа для выполнения HTTP-вызова Dialogflow.
Надеюсь, это поможет.