5

我想在通信中实现一个简单的计时器。

我的场景是一个小型数学教练,你训练 5 分钟,在 5 分钟的正常交互之后,我想通知用户时间到了。我不想等到用户完成他的下一个输入/答案(如果当前没有输入,则可选)。

有没有办法“推动”基于回答时间?

4

3 回答 3

2

对话 API 不支持推送模型。当您获得用户响应时,您可以检查计时器并做出适当的响应。

于 2016-12-10T21:38:20.620 回答
0

可悲的是,他们似乎对添加任何类型的延迟功能不感兴趣: 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);
        }
    });
}

于 2017-04-16T07:11:11.810 回答
0

到目前为止,这可能与您无关,但我正在为可能访问这里的人写一个答案。

您可以events在 Dialogflow(以前称为 API.ai)中实现这一点。有关文档,请参见此处。您根据名为 的事件定义意图time-is-up,并在您端有一个计时器,该计时器会在五分钟后触发此事件。

于 2018-05-16T08:34:11.357 回答