Dialogflow es 如何在dialogflow中使用内联编辑器获取外部api数据

Dialogflow es 如何在dialogflow中使用内联编辑器获取外部api数据,dialogflow-es,actions-on-google,fulfillment,Dialogflow Es,Actions On Google,Fulfillment,我有一个Dialogflow代理,我正在使用Firebase云函数支持的内联编辑器。当我尝试使用RequestPromise native获取外部api数据时,我总是忽略firebase控制台中已完成函数的异常 function video(agent) { agent.add(`You are now being handled by the productivity intent`); const url = "https://reqres.in/api/users?page

我有一个Dialogflow代理,我正在使用Firebase云函数支持的内联编辑器。当我尝试使用RequestPromise native获取外部api数据时,我总是忽略firebase控制台中已完成函数的异常

function video(agent) {
    agent.add(`You are now being handled by the productivity intent`);
    const url = "https://reqres.in/api/users?page=2";
    return request.get(url)
        .then(jsonBody => {
            var body = JSON.parse(jsonBody);
            agent.add(body.data[0].first_name)
            return Promise.resolve(agent);
        });
}

内联编辑器使用Firebase。如果您没有Firebase的付费帐户,您将无法访问外部API

内联编辑器使用Firebase。如果您没有Firebase的付费帐户,您将无法访问外部API

您的代码看起来是正确的。本例中的例外情况可能是,您没有使用付费帐户,因此Google之外的网络访问被阻止。通过添加catch块,您可能会看到确切的异常:

function video(agent) {
    agent.add(`You are now being handled by the productivity intent`);
    const url = "https://reqres.in/api/users?page=2";
    return request.get(url)
        .then(jsonBody => {
            var body = JSON.parse(jsonBody);
            agent.add(body.data[0].first_name)
            return Promise.resolve(agent);
        })
        .catch(err => {
            console.error('Problem making network call', err);
            agent.add('Unable to get result');
            return Promise.resolve(agent);
        });
}

如果您这样做,您可能希望使用日志中的确切错误更新您的问题。

您的代码看起来是正确的。本例中的例外情况可能是,您没有使用付费帐户,因此Google之外的网络访问被阻止。通过添加catch块,您可能会看到确切的异常:

function video(agent) {
    agent.add(`You are now being handled by the productivity intent`);
    const url = "https://reqres.in/api/users?page=2";
    return request.get(url)
        .then(jsonBody => {
            var body = JSON.parse(jsonBody);
            agent.add(body.data[0].first_name)
            return Promise.resolve(agent);
        })
        .catch(err => {
            console.error('Problem making network call', err);
            agent.add('Unable to get result');
            return Promise.resolve(agent);
        });
}


如果您这样做,您可能希望使用日志中的确切错误更新您的问题。

是的,我理解,您是对的,但我的意思是。。。我的代码完美吗?我的意思是,外部api可以通过这种方式调用吗?您可以使用axios,因为请求没有自己的承诺。他们表示正在使用request-promise-native,它确实返回了一个承诺。这部分看起来是正确的。我对该模块有一些问题,必须在承诺中使用常规请求模块。所以我分享了axios。是的,我理解,你是对的,但我的意思是。。。我的代码完美吗?我的意思是,外部api可以通过这种方式调用吗?您可以使用axios,因为请求没有自己的承诺。他们表示正在使用request-promise-native,它确实返回了一个承诺。这部分看起来是正确的。我对该模块有一些问题,必须在承诺中使用常规请求模块。所以我分享了axios。谢谢你,囚犯,现在我可以继续我的账单部分了。。。然后我会让你知道firebase函数的日志。。。还有一件事我想问一下,我可以使用我的sql数据库进行代理响应吗?我的意思是,这适合在内联编辑器中使用sql,还是我应该使用webhook。通常我会说,作为一个新的StackOverflow问题来提问,这样其他人就可以从问答中受益。但是这个很简单——内联编辑器是一个webhook。这只是一个简单的对话框,您可以在Dialogflow内部进行编辑。如果您对此有后续问题-请发布一个新问题。@当我使用此代码时,我在Firebase日志中遇到此错误:TypeError:无法读取WebhookClient.handleRequest/user\u code/node\u模块/dialogflow fulfillment/src/dialogflow fulfillment.js:48:9中未定义的video/user\u code/index.js:48:9的属性“then”。“可能有什么问题?”Ambigus9-很难说,但也有一些可能性。我建议您发布一个新的StackOverflow问题,显示您正在使用的代码、出现的错误、您正在使用的环境,以及可能有助于诊断问题的任何其他信息。好的,谢谢您,囚犯,现在我可以继续我的计费部分了。。。然后我会让你知道firebase函数的日志。。。还有一件事我想问一下,我可以使用我的sql数据库进行代理响应吗?我的意思是,这适合在内联编辑器中使用sql,还是我应该使用webhook。通常我会说,作为一个新的StackOverflow问题来提问,这样其他人就可以从问答中受益。但是这个很简单——内联编辑器是一个webhook。这只是一个简单的对话框,您可以在Dialogflow内部进行编辑。如果您对此有后续问题-请发布一个新问题。@当我使用此代码时,我在Firebase日志中遇到此错误:TypeError:无法读取WebhookClient.handleRequest/user\u code/node\u模块/dialogflow fulfillment/src/dialogflow fulfillment.js:48:9中未定义的video/user\u code/index.js:48:9的属性“then”。“可能有什么问题?”Ambigus9-很难说,但也有一些可能性。我建议您发布一个新的StackOverflow问题,显示您正在使用的代码、您遇到的错误、您正在使用的环境以及可能有助于诊断问题的任何其他信息。要访问外部api,您需要有一个付费帐户,您的代码看起来正常。要访问外部api,您需要有一个付费帐户,你的代码看起来不错。