Snippets

Furhat Robotics Adding vocabulary for open recognizer in flow

Created by Ludvig Linse last modified Subramanian Alagappan
<param name="agent" type="iristk.situated.SystemAgentFlow"/>
<var name="system" type="iristk.situated.SystemAgent" value="agent.getSystemAgent()"/> 

<state id="Init">
    <var name="language" type="iristk.util.Language" value="new iristk.util.Language('en-US')"/>
    <var name="phrases" type="List" value="asList('Singtel', 'Air b n b')" />

    <onentry>
        <agent:say>Say something</agent:say>
        <!-- Setting the VocabularyContext -->
        <send event="action.context.load" p:context="new iristk.speech.OpenVocabularyContext('singtel_context', language, phrases)" />
        <send event="action.context.default" p:context="'singtel_context'" />
        <agent:listen />
    </onentry>

    <onevent name="sense.user.speak">
        <if cond="!matches(event.get('text'), 'NO_MATCH')">
            <agent:say>you said <expr>event:text</expr>. Say something new</agent:say>
            <else/>
            <agent:say>Sorry, I didn't get that. Try again!</agent:say>
        </if>
        <agent:listen />
    </onevent>

    <onevent name="sense.user.silence">
        <agent:say>I didn't hear anything. Try again!</agent:say>
        <agent:listen />
    </onevent>
</state>

Comments (1)

  1. Gabriel Skantze

    You can simplify line 9: <var name="phrases" type="List" value="asList('Singtel', 'Air b n b')" /> then you can also get rid of the imports

    Line 20 can be a little more elegant: <if cond="!matches(event.get('text'),'NOMATCH')">

    The matches(text,regexp) method (defined in Flow.java) looks for a regular expression in the text.

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.