小编Pri*_*ner的帖子

DialogFlow Webhook API V2 - 如何获取授权用户的accessToken?

在我的DialogFlow V1 Webhook中,我曾经获得过这样的用户访问令牌(node.js):

exports.voxGoogleHomeWebhook = functions.https.onRequest((req, res) => {    
  const app = new WebhookClient({request: req, response: res});    
var accessToken = app.getUser().accessToken   
Run Code Online (Sandbox Code Playgroud)

这在DialogFlow V2中不起作用. getUser()在WebhookClient实例上不可用.

我在他们的文档中找不到如何获取登录用户的accessToken:https://dialogflow.com/docs/fulfillment

我尝试了app.session,但这只是用户会话的唯一会话字符串标识符.这不是他们的访问令牌.

如何在V2中获取accessToken?

actions-on-google google-home dialogflow-es

6
推荐指数
1
解决办法
1588
查看次数

在Dialogflow Fulfillment中使用第三方API

我有一个Dialogflow代理,我正在使用内联编辑器(由Firebase的Cloud Functions提供支持).当我尝试在Intent处理程序中嵌入HTTPS GET处理程序时,它会与日志条目"忽略已完成的函数中的异常"崩溃.也许有更好的方法来实现承诺,但我是新手.我可以看到它确实在升级到Blaze计划后执行外部查询,因此它不是计费帐户的限制.无论如何,这是代码:

'use strict';

const functions = require('firebase-functions');
//const rp = require('request-promise');
const {WebhookClient} = require('dialogflow-fulfillment');
const {Card, Suggestion} = require('dialogflow-fulfillment');

process.env.DEBUG = 'dialogflow:debug'; // enables lib debugging statements

exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
  const agent = new WebhookClient({ request, response });
  console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
  console.log('Dialogflow Request body: ' + JSON.stringify(request.body));

  function welcome(agent) {
    agent.add(`Welcome to my agent!`);
  }

  function fallback(agent) {
    agent.add(`I didn't understand`);
    agent.add(`I'm sorry, can you try again?`);
  }

  function findWidget(agent) { …
Run Code Online (Sandbox Code Playgroud)

node.js firebase google-cloud-functions actions-on-google dialogflow-es

6
推荐指数
1
解决办法
5997
查看次数

如何对 Assistant SDK 的 gRPC 调用进行身份验证?

我正在使用 Swift gRPC 库(奇怪的是没有在 gRPC 的网站上列出,但有一个GitHub 存储库)来构建适用于 macOS 的 Google Assistant SDK 的实现。我已经获得了我的 OAuth2 凭据和令牌,并且正在尝试发出开始对话的初始请求,但是它没有这样做。

我总是得到错误Google_Assistant_Embedded_V1Alpha1_EmbeddedAssistantClientError error 1.)gRPC.CallError error 1.

我运行 Wireshark 来尝试调试问题,我看到我的计算机正在尝试建立连接,但最终以中止连接告终。我认为这可能是由于 TLS 问题,但我不确定是否确实如此或如何解决它。

我注意到服务初始化函数有一个重载,您可以在其中指定证书,但我不知道该放什么(或者是否需要使用该函数)

typealias AssistantService = Google_Assistant_Embedded_V1Alpha1_EmbeddedAssistantService
typealias AssistantCall = Google_Assistant_Embedded_V1Alpha1_EmbeddedAssistantConverseCall
typealias AudioInConfig = Google_Assistant_Embedded_V1alpha1_AudioInConfig
typealias AudioOutConfig = Google_Assistant_Embedded_V1alpha1_AudioOutConfig
typealias ConverseRequest = Google_Assistant_Embedded_V1alpha1_ConverseRequest
typealias ConverseConfig = Google_Assistant_Embedded_V1alpha1_ConverseConfig    

var service: AssistantService?
var currentCall: AssistantCall?

public init() {
    service = AssistantService(address: Constants.ASSISTANT_API_ENDPOINT)
    let token = "Bearer \(UserDefaults.standard.string(forKey: Constants.AUTH_TOKEN_KEY)!)"
    service?.metadata = Metadata(["authorization" : …
Run Code Online (Sandbox Code Playgroud)

macos ssl swift grpc google-assistant-sdk

5
推荐指数
1
解决办法
766
查看次数

Firebase Cloud Function配置以访问其他项目数据库

我需要创建一个Cloud Function来访问另一个项目中运行的Firebase DB。如果它正在访问当前项目中的数据库,则可以使用如下代码

const functions = require('firebase-functions');

const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
Run Code Online (Sandbox Code Playgroud)

但是,我要functions.config().firebase返回的是其他项目的信息(最重要的是凭据)。有没有简单的方法可以做到这一点?

firebase google-cloud-functions

5
推荐指数
1
解决办法
770
查看次数

在适用于助理应用程序的Firebase功能中获取Node.js中的Google用户ID

我正在开始使用Google Cloud Platform.

我正在开发一个Android应用程序,它将收集信息并将其存储在Firebase应用程序中.我们的想法是,Google智能助理功能可以查询此信息并将其读回 - 例如

好的谷歌,与西蒙斯应用交谈,告诉我XYZ最后一次完成

然而,我遇到的问题是让它成为多用户.

我有Android应用程序收集数据并将其放入云端.我在Android应用程序中使用FirebaseUser和使用getUid()获取一个28字符串的唯一ID uVHkia8RRgWD8GGPVvW4AUDUK2.

我在Google上设置了Actions,通过Web Fulfillment将它连接到API.AI,并让Node.js在firebase函数中工作.

不幸的是,UserID我回来看起来更像是:HTge48H0CF2FC5jJQCigFBc-UCQ

问题是这UserIDUserUID我从Filebase User获得的不一样.

我正在使用

let ApiAiApp = require('actions-on-google').ApiAiApp;
const app = new ApiAiApp({request: request, response: response});
Run Code Online (Sandbox Code Playgroud)

const userId = app.getUser().userId;
Run Code Online (Sandbox Code Playgroud)

我错过了什么?我看到对OAuth2,帐户链接等的引用.我不完全确定此时该做什么.我现在需要做的就是得到User UIDFirebaseUser.getUID()想要的内容,以便在Firebase数据库中查看数据.

我认为其余的应该是直截了当的.

有大量关于从智能助理链接到Firebase的文档,但实际身份验证却很少.到目前为止,我还没有设置流程,如授权代码流,隐式流,或者针对API.AI和Fulfillment选项设置用户名/密码.坦白说,我不确定在这一点上需要去哪里.

node.js google-cloud-platform firebase-authentication actions-on-google dialogflow-es

5
推荐指数
1
解决办法
859
查看次数

有没有办法在DialogFlow(Api.ai)的对话中改变女性对男性的声音

我们正在使用Api.ai(现在的Dialogflow)为Google Home构建一个聊天机器人应用程序,该应用程序包含男性和女性历史人物.我们在谷歌上使用动作.Google可让您在部署应用时默认使用男声或女声.有没有办法动态切换男性和女性的声音,例如,使用webhook中的代码?

voice actions-on-google dialogflow-es

5
推荐指数
1
解决办法
2220
查看次数

如何在Google上的操作中添加来自firebase存储的音频?

为了清楚起见,我想知道如何在Google上的操作中添加来自firebase存储的音频?几周以来我一直坚持这个问题.我已将我的音频上传到firebase存储中,并从中复制了Firebase提供的链接,并以语音输出粘贴了给定格式的音频URL.检查我是怎么做的: -

<speak>
<audio src="https://firebasestorage.googleapis.com/v0/b/enrich-58fdf.appspot.com/o/xxx.mp3?alt=media&token=aabcd430-9d46-45f6-ad21-fdca0895123f">
</audio>
</speak>
Run Code Online (Sandbox Code Playgroud)

但这没效果.但几个月前,在Google+社区中,我发现一个人问这个类似的问题,艾伦·菲尔斯滕贝格回答说他说要在&令牌之间添加*amp;*标记.所以在此之后,新的代码生成ie

<speak>
<audio src="https://firebasestorage.googleapis.com/v0/b/enrich-58fdf.appspot.com/o/xxx.mp3?alt=media&amp;token=aabcd430-9d46-45f6-ad21-fdca0895123f">
</audio>
</speak>
Run Code Online (Sandbox Code Playgroud)

但这也行不通.我认为经过SSML的一些调整后,这段代码可能已经改变,或者格式不同,我不知道.那么任何人都可以帮助我吗?

actions-on-google dialogflow-es

5
推荐指数
1
解决办法
558
查看次数

在DialogFlow WebHook中使用异步函数

参考此处发布的解决方案(DialogFlow V2 Webhook-立即获得语音响应,而不是在异步请求之后
我想要实现的是Web钩子应该等待,直到我从api调用获得响应为止。PS:API正在起作用,只是机器人不等待响应到来。任何帮助将不胜感激。谢谢

const rp = require('request-promise');

    function convert(params){
    return rp('https://data.fixer.io/api/convert?access_key=[my key]&from='+
            params['currency-from']+'&to='+params['currency-to']+'&amount='+params.amount) 
    .then((data) => {
       let responseData = JSON.parse(data);
       let message = responseData.result;
       console.log('Success');
       return Promise.resolve(message);
    }).catch((err)=> {
        return Promise.reject(err);
    });
}

  function currencyConversion(agent) {
        let params = request.body.result.parameters;
        return convert(params)
        .then((message)=> {
             agent.add(`${params.amount} ${params['currency-from']} is ${message} ${params['currency-to']}`);
                return Promise.resolve()
        })
       .catch((err) => {
                console.log(err);
                agent.add("Uh oh, something happened.");
                return Promise.resolve();
            })
  }

let intentMap = new Map();
intentMap.set('Default Welcome Intent', welcome);
intentMap.set('Default Fallback Intent', fallback); …
Run Code Online (Sandbox Code Playgroud)

node.js actions-on-google dialogflow-es

5
推荐指数
1
解决办法
2185
查看次数

哪个是调用函数,Intent Name或Action的更好的做法?

在DialogFlow中,我们可以根据Intent Name或Actions触发函数并执行任务.

我们应该用哪一个来决定?什么是更好的做法?

chatbot dialogflow-es

5
推荐指数
1
解决办法
110
查看次数

如何在 Python 中使用 Refresh Token Google API?

此功能用于从 Google 获取经过身份验证的服务。后

        API_SERVICE_NAME = 'youtubereporting'
        API_VERSION = 'v1'
        CLIENT_SECRETS_FILE = "client_secret_929791903032-hpdm8djidqd8o5nqg2gk66efau34ea6q.apps.googleusercontent.com.json"
        SCOPES = ['https://www.googleapis.com/auth/yt-analytics-monetary.readonly']
        def get_authenticated_service():
            flow = InstalledAppFlow.from_client_secrets_file(CLIENT_SECRETS_FILE, SCOPES)
            credentials = flow.run_local_server()
            return build(API_SERVICE_NAME, API_VERSION, credentials=credentials)
Run Code Online (Sandbox Code Playgroud)

但我想使用 Refresh Token 自动进行身份验证,而无需打开浏览器。因此在上面的函数中添加一些代码来保存Refresh Token:

def get_authenticated_service():
    flow = InstalledAppFlow.from_client_secrets_file(CLIENT_SECRETS_FILE, SCOPES)
    credentials = flow.run_local_server()
    with open('refresh.token', 'w+') as f:
        f.write(credentials._refresh_token)
    print('Refresh Token:', credentials._refresh_token)
    print('Saved Refresh Token to file: refresh.token')
    return build(API_SERVICE_NAME, API_VERSION, credentials=credentials)
Run Code Online (Sandbox Code Playgroud)

好的,那么在拥有刷新令牌后,如何使用它?我试图替换刷新令牌="ABCDEF456"但它不起作用

def get_authenticated_service():
    return build(API_SERVICE_NAME, API_VERSION, credentials="ABCDEF456")
Run Code Online (Sandbox Code Playgroud)

python oauth google-api youtube-api google-oauth

5
推荐指数
1
解决办法
8724
查看次数