在给定的延迟后回复

Reply after a given delay

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

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

有什么方法可以"push"基于回答时间吗?

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

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

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

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