我想在通信中实现一个简单的计时器。
我的场景是一个小型数学教练,你训练 5 分钟,在 5 分钟的正常交互之后,我想通知用户时间到了。我不想等到用户完成他的下一个输入/答案(如果当前没有输入,则可选)。
有没有办法“推动”基于回答时间?
我想在通信中实现一个简单的计时器。
我的场景是一个小型数学教练,你训练 5 分钟,在 5 分钟的正常交互之后,我想通知用户时间到了。我不想等到用户完成他的下一个输入/答案(如果当前没有输入,则可选)。
有没有办法“推动”基于回答时间?
对话 API 不支持推送模型。当您获得用户响应时,您可以检查计时器并做出适当的响应。
可悲的是,他们似乎对添加任何类型的延迟功能不感兴趣: Dialogflow(API.AI)论坛:- 为响应添加延迟,因此感觉更真实
但这就是为什么在您的部署集成(例如 Facebook messenger)和 API.ai 之间构建服务器端解决方案如此有用的原因之一 - 它让您可以自定义履行,包括发送由您自己的基于 API 构建的自定义逻辑触发的履行.ai 解决方案。
因此,以 FB messenger 为例,您可以执行以下操作,然后构建您想要调用 sendTextMessage 的任何逻辑:
function sendTextMessage(recipientId, text) {
sendTypingOff(recipientId)
var messageData = {
recipient: {
id: recipientId
},
message: {
text: text
}
}
callSendAPI(messageData);
}
//Calls FB messenger API. If successful returns a message ID in response
function callSendAPI(messageData) {
request({
uri: 'https://graph.facebook.com/v2.6/me/messages',
qs: {
access_token: config.FB_PAGE_TOKEN
},
method: 'POST',
json: messageData
}, function (error, response, body) {
if (!error && response.statusCode == 200) {
var recipientId = body.recipient_id;
var messageId = body.message_id;
if (messageId) {
console.log("Successfully sent message with id %s to recipient %s",
messageId, recipientId);
} else {
console.log("Successfully called Send API for recipient %s",
recipientId);
}
} else {
console.error("Failed calling Send API", response.statusCode, response.statusMessage, body.error);
}
});
}
到目前为止,这可能与您无关,但我正在为可能访问这里的人写一个答案。
您可以events
在 Dialogflow(以前称为 API.ai)中实现这一点。有关文档,请参见此处。您根据名为 的事件定义意图time-is-up
,并在您端有一个计时器,该计时器会在五分钟后触发此事件。