在给定延迟后回复

时间:2016-12-10 07:19:56

标签: nlp dialogflow actions-on-google

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

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

有没有办法“推”一个答案时间?

3 个答案:

答案 0 :(得分:2)

Conversation API不支持推送模型。当您收到用户响应时,您可以检查计时器并做出相应的响应。

答案 1 :(得分:0)

可悲的是,他们似乎对添加任何类型的延迟功能不感兴趣: Dialogflow (API.AI) Forums :- Adding a delay to responses, so it feels more real

但这就是为什么在部署集成(例如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);
        }
    });
}




答案 2 :(得分:0)

这可能与你无关,但我正在为可能访问此地的人写一个答案。

您可以使用Dialogflow中的events(以前称为API.ai)实现此功能。见here for documentation。 您可以根据名为time-is-up的事件定义一个意图,并在您的结尾设置一个计时器,在五分钟后触发此事件。