首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rivr对话框中的超时日志

Rivr对话框中的超时日志
EN

Stack Overflow用户
提问于 2015-09-22 01:08:56
回答 1查看 83关注 0票数 1

我的Rivr VoiceXML应用程序中的每个对话请求都有超时日志项。我看过com.nuecho.rivr.core.channel.Timeout在doTurn方法中,这没问题,但我一直在获取这些日志,这些日志不在我的代码中,所以不知道如何捕获并防止日志文件中充满它们:

代码语言:javascript
复制
2015-09-21T19:03:02.29+0200 [App/0]      ERR [err] [Dialogue adef5e0c-4b6d-4f9a-9246-db8c3afadda9] INFO com.nuecho.rivr.dialogue - Dialogue ended.
2015-09-21T19:03:02.29+0200 [App/0]      ERR [err] Exception in thread "Dialogue adef5e0c-4b6d-4f9a-9246-db8c3afadda9" 
2015-09-21T19:03:02.29+0200 [App/0]      ERR [err] java.lang.RuntimeException: Timeout while sending final result.
2015-09-21T19:03:02.29+0200 [App/0]      ERR [err]  at com.nuecho.rivr.core.channel.synchronous.SynchronousDialogueChannel$1.run(SynchronousDialogueChannel.java:242)
2015-09-21T19:03:02.29+0200 [App/0]      ERR [err]  at java.lang.Thread.run(Unknown Source)
2015-09-21T19:03:02.29+0200 [App/0]      ERR [err] Caused by: 
2015-09-21T19:03:02.29+0200 [App/0]      ERR [err] com.nuecho.rivr.core.channel.Timeout: Timed-out in send() after 5 seconds (5000 ms) in [dialogue to controller]
2015-09-21T19:03:02.29+0200 [App/0]      ERR [err]  at com.nuecho.rivr.core.channel.synchronous.SynchronousDialogueChannel.send(SynchronousDialogueChannel.java:405)
2015-09-21T19:03:02.29+0200 [App/0]      ERR [err]  at com.nuecho.rivr.core.channel.synchronous.SynchronousDialogueChannel.access$600(SynchronousDialogueChannel.java:97)
2015-09-21T19:03:02.29+0200 [App/0]      ERR [err]  at com.nuecho.rivr.core.channel.synchronous.SynchronousDialogueChannel$1.run(SynchronousDialogueChannel.java:239)
2015-09-21T19:03:02.30+0200 [App/0]      ERR [err]  ... 1 more

也许我必须对我在对话代码中捕获的com.nuecho.rivr.core.channel.Timeout采取任何措施来防止它们(目前我只是返回一个

代码语言:javascript
复制
return new Exit("exit");

谢谢你的帮助

EN

回答 1

Stack Overflow用户

发布于 2015-09-23 10:12:54

您可能在`DialogueUtils.doTurn()方法中传递了一个超时。因此您可以使用:

代码语言:javascript
复制
doTurn(O outputTurn, DialogueContext<I,O> context, Duration timeout)

而不是无超时版本。

代码语言:javascript
复制
doTurn(O outputTurn, DialogueContext<I,O> context)

在某些情况下,您的VoiceXML平台不会在指定的超时时间内为您的对话提供答案。这将触发Timeout异常。对话将终止,对话的最后一步(在本例中是一个例外)不能被DialogServlet使用,因为在这种情况下没有活动的HttpServletRequest (超时发生在VoiceXML平台执行文档时)。

因此,最终,您不希望发生超时,因为它会阻止您控制对话。超时就像安全网一样存在。如果由于某种原因,VoiceXML平台停止向您的对话框发送轮流,它必须终止并释放资源。

如果您想在doTurn()中设置一个超时作为安全网,请使用一个大于maximumTime属性+录制前所有提示的持续时间的值。这样,VoiceXML平台将抛出一个错误,并将其发送回您的对话框。现在,您可以控制调用流中的下一步操作。在这种情况下,您的录制结果中将包含maxTime=true

我建议您签入connection.disconnect.hangup事件的VoiceXmlInputTurn,并更干净地退出对话框(如果存在)。

类似于:

代码语言:javascript
复制
package com.nuecho.rivr.cookbook.dialogue;

import static com.nuecho.rivr.core.dialogue.DialogueUtils.*;

import com.nuecho.rivr.core.channel.*;
import com.nuecho.rivr.core.util.*;
import com.nuecho.rivr.voicexml.dialogue.*;
import com.nuecho.rivr.voicexml.turn.first.*;
import com.nuecho.rivr.voicexml.turn.input.*;
import com.nuecho.rivr.voicexml.turn.last.*;
import com.nuecho.rivr.voicexml.turn.output.*;
import com.nuecho.rivr.voicexml.turn.output.audio.*;

public class Dialogue implements VoiceXmlDialogue {

    @Override
    public VoiceXmlLastTurn run(VoiceXmlFirstTurn firstTurn, VoiceXmlDialogueContext context)
            throws Timeout, InterruptedException {

        try {
            Message message = new Message("message", new SpeechSynthesis("Hello World!"));
            VoiceXmlInputTurn inputTurn = doTurn(message, context, Duration.milliseconds(1200));
            if (VoiceXmlEvent.hasEvent(VoiceXmlEvent.CONNECTION_DISCONNECT_HANGUP, inputTurn.getEvents())) { 
                throw new CallerDisconnect(); 
            }
        } catch (CallerDisconnect callerDisconnect) {
            return new Exit("exit-error");
        }

        return new Exit("exit-normal");
    }

    public static class CallerDisconnect extends Exception {
        public CallerDisconnect() {}
    }

}

同样,根据您正在处理的转弯类型检查其他事件,如noinputnomatcherror等,并执行相应的操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32700913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档