- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力让 Dialogflow 工作的以下完整代码:
'use strict';
const functions = require('firebase-functions');
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 testHandler(agent){
var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
var xmlhttp = new XMLHttpRequest(); // new HttpRequest instance
const proxyurl = "https://cors-anywhere.herokuapp.com/";
var theUrl = "http://xxxxx/sum?a=5&b=11";
var url = proxyurl + theUrl;
var result = "Init";
getText = function(url, callback)
{
var request = new XMLHttpRequest();
request.onload = function()
{
if (request.readyState == 4 && request.status == 200)
{
callback(request.responseText);
}
};
request.open('GET', url);
request.send();
}
function mycallback(data) {
agent.add("DATA:" + data);
}
return getText(url, mycallback);
}
let intentMap = new Map();
intentMap.set('test', testHandler);
agent.handleRequest(intentMap);
});
行 agent.add("DATA:"+ data);
没有任何效果。在浏览器中尝试代码并将 agent.add("DATA:"+ data)
更改为 document.write("DATA:"+ data)
时,一切正常美好的。我是 Dialogflow 的新手;任何提示为什么这个回调似乎不起作用?
最佳答案
当执行异步操作时(例如进行网络 API 调用),您的 Intent Handler必须返回一个 Promise,因此 Handler Dispatcher 知道在将响应发送到用户。在您的情况下,当响应返回时,它确实会尝试将其发送给用户,但由于已经发送了响应(没有任何内容),所以没有人会看到它。
您的网络浏览器在本地处理所有事情,因此您不会看到相同的问题(即使它正在做同样的事情)。
虽然您可能可以将代码包装在 Promise 中,但更简单的方法是使用类似 request-promise-native 的东西要进行 HTTP 调用,请在 then()
block 中调用 agent.add()
,然后返回整体 promise 。可能是这样的:
function testHandlerPromise(agent){
const rp = require('request-promise-native');
const proxyurl = "https://cors-anywhere.herokuapp.com/";
var theUrl = "http://xxxxx/sum?a=5&b=11";
var url = proxyurl + theUrl;
return rp( url ).then( data => {
agent.add("DATA:" + data);
} );
}
关于javascript - 根据 Dialogflow Fulfillment 中的 API 调用结果填充意图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55256643/
这是我的错误... Thread 1: EXC_BAD_ACCESS (code=1, address=0x18) 这是我的产品请求代表... class ProductRequestDelegate
谁能解释一下这些函数是什么意思? setDate = agent.parameters.date.split('T')[0]; setTime = agent.parameters.time.spli
我正在使用 Dialogflow 开发一个聊天机器人,想验证某人的年龄。简要介绍一下背景:我正在创建一个聊天机器人来识别护理需求,例如住宅或痴呆症护理。在最初的查询中,我希望能够通过在 Dialogf
我正在使用名为 IonSound.js 的声音播放器,可以在此处找到它。 http://ionden.com/a/plugins/ion.sound/en.html 根据文档,我可以像这样监听 sou
我想在我的履行代码中获取参数的原始输入。 我尝试过: var time = agent.parameters.time.original 但结果未定义。 我已经尝试过: var query = age
我设置了一个返回 Promise 的函数.我想在 PromiseKit 的 when(fulfilled:) 中使用这个函数功能,但每当我尝试这样做时,我都会收到错误消息。这是返回 Promise 的
我正在使用 dialogflow 和 google assistant 创建一个语音机器人。我的客户提供了他的网络访问权限,这不是私有(private) URL,而是 IP。它也没有通过 SSL 认证
我是 dialogflow 实现的新手,我正在尝试根据用户问题从新闻 API 中检索新闻。我遵循了新闻 API 提供的文档,但我无法从搜索结果中捕捉到任何响应,当我在控制台中运行该函数时,它不是错误。
我们偶尔会收到“CoreData 无法完成故障”的信息。我们已阅读 Apple 文档,但不清楚允许保留哪些内容。我们非常小心地为每个线程创建一个上下文等。但是,我们的应用程序正在做的一件事是我们在 U
我一直在尝试 DialogFlow 和 Fulfillment,但直到现在我总是将 FulfillmentText 从我的 webhook 返回到我的机器人,如下所示: response = {
async function pending() { return new Promise((resolve, reject) => { resolve(1) }); } async functi
我有一个联系人应用程序,我创建了一个行动项目,最终根据用户对话决定要调用的电话号码。要调用的号码正在 后端(使用 Webhook 实现) 决定。 我想开始调用后端确定的号码(就像你在 Google 智
我在很多测试中都使用了 XCTestExpectation,有时(非常随机地)一些期望没有实现(尽管我确信它们应该是)。 在调查这个问题时,我注意到一些期望在主线程中实现,而一些在后台线程中实现。到目
这是我正在使用的导致问题的代码行: [self.managedObjectContext deleteObject:object]; 然后当它保存上下文时,它会导致崩溃: Terminating ap
(相关但不完全相同:JS Promises: Fulfill vs Resolve) 我一直在努力思考 Javascript promises,我正在努力解决 resolve 和 resolved 与
use std::any::Any; pub enum ObjectType { Error, Function, } pub trait Object { fn obj_ty
美好的一天。需要一些新鲜的眼光。不确定为什么我的 Promise 在浏览器控制台中返回“pending”: // contact.js (react) /* trim */ submitForm =
我可以运行这段代码 fn testf(host: &str) {} fn start(host: &str) { testf(host); testf(host); } 但出于某种原因
我试图在 Rust 的线程中使用方法,但我收到以下错误消息 :21:10: 21:23 error: the type [closure@:21:24: 23:14 tx:std::sync::mps
对于应用程序的最近更新,我看到许多崩溃日志都包含核心数据无法完成故障的错误。但是在应用程序(启动或其他地方)中的任何地方,我都没有删除无法实现故障的对象,也不会级联删除它们。这个错误还能怎么发生?有没
我是一名优秀的程序员,十分优秀!