【问题标题】:DialogFlow v2 Access Token cannot generateDialogFlow v2 访问令牌无法生成
【发布时间】:2018-11-10 12:27:52
【问题描述】:

在版本 1 中,这是我过去与 DialogFlow Api 通信的方式!

fetch(configs.baseUrl + "query?v=20150910", {
    body: JSON.stringify({query: text, lang: "en", sessionId: "somerandomthing"}),
    headers: {
        'content-type': 'application/json',
        "Authorization": "Bearer " + configs.accessToken,
    },
    method: 'POST',
})
    .then(response => response.json())
    .then(data => {
        console.log(data.result.fulfillment.speech);
        return data.result.fulfillment.speech;
    })
    .catch(error => console.error(error))

我只需将访问令牌传递到标头中就可以了!

我不知道如何使此代码与 DialogFlow v2 一起使用,我卡在访问令牌上,我的 V2 代理之一我无法再看到访问令牌,但我有一个项目 ID 和服务帐户。

我设法从谷歌控制台创建服务密钥并通过 gcloud 激活,但我只是不知道从哪里获取或如何生成此访问令牌,或者我是否需要 v2 的访问令牌,如果没有,我该如何处理这个?

非常感谢一个工作示例。

注意我已经下载了这个包含这些数据的文件,并在 gcloud 中使用了这个文件,它说服务激活了 smth 但是然后呢? 这就是全部?接下来我应该怎么做才能对 V2 DialogFlow 进行 http 调用。

{
  "type": "service_account",
  "project_id": "xxxx",
  "private_key_id": "xxxx",
  "private_key": "-----BEGIN PRIVATE KEY-----xxxx",
  "client_email": "xxxx",
  "client_id": "xxxx",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://accounts.google.com/o/oauth2/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/dialogflow-client%40xxxx"
}

【问题讨论】:

    标签: javascript node.js google-cloud-platform google-cloud-storage dialogflow-es


    【解决方案1】:

    您做了很多正确的事情,但您可能希望使用 Dialogflows Node.js client SDK。当您实例化客户端时,这些 SDK 会自动读取身份验证 JSON 文件(参见 Github 上的 the example,该文件由 ... = new dialogflow.SessionsClient() 读取)。

    【讨论】:

    • 我可以使用nodejs客户端代码而不做node server.js之类的事情吗?我的意思是我可以将nodejs代码集成到我的html jquery代码中吗?似乎我只需要使用 Node.js 来获得恒定的访问令牌。不使用 node js 是否有可能获得访问令牌?
    • 您是否将Dialogflow APIDialogflow Webhook 混淆了?第一个用于管理代理本身(更新意图、实体等),后者用于实际满足用户请求。 Dialogflow API 确实提供了一个端点来处理普通用户查询(V1 中的/query),但这仅用于开发和测试。您的实际履行服务必须回答来自 Dialogflow Webhook 的 POST 请求,它不需要令牌。
    【解决方案2】:

    以下是使用 Node.js 创建 DialogFlow V2 访问令牌的另一个示例。下面代码中使用的库是google-oauth-jwt

    const googleAuth = require('google-oauth-jwt');
    
    function generateAccessToken() {
     return new Promise((resolve) => {
      googleAuth.authenticate(
       {
        email: <client_email>,
        key: <private_key>,
        scopes: 'https://www.googleapis.com/auth/cloud-platform',
       },
       (err, token) => {
        resolve(token);
       },
      );
     });
    }
    

    您可以从您从 Google Cloud Platform 项目的服务帐户页面下载的 JSON 密钥文件中找到您的 client_emailprivate_key。如果您不确定如何/在哪里下载它,您可以查看我的博文here

    要了解您可能需要哪个范围,您可以查看 DialogFlow V2 REST API 文档page

    【讨论】:

      【解决方案3】:

      【讨论】:

      • 在您链接的页面上,它显示有限数量的 Google Cloud 支持 API_KEYS,并且没有将 DialogFlow 列为其中之一。
      猜你喜欢
      • 2021-04-06
      • 2019-04-28
      • 2020-08-11
      • 2023-04-04
      • 1970-01-01
      • 2022-07-17
      • 1970-01-01
      • 1970-01-01
      • 2020-11-07
      相关资源
      最近更新 更多