2016-03-17 80 views
1

我想構建一個簡單的對話框,用戶將寫:「我的名字是喬」, ,我希望對話框將userName變量設置爲「Joe」。 我發現這個例子,但響應總是空的字符串。Watson對話框動態數據變量輸入/輸出

<folder label="Main"> 

     <output> 
      <prompt selectionType="RANDOM"> 
       <item>Hello, What's your name? 
       </item> 
      </prompt> 
     </output> 
     <input id="input_2530402"> 
      <grammar> 
       <item>My name is</item> 
       <item>my name is (DYNAMIC_DATA)={userName}</item> 
       <item>mine is (DYNAMIC_DATA)={userName}</item> 
       <item>(DYNAMIC_DATA)={userName} </item> 
       <item>(DYNAMIC_DATA)={userName} GiveName</item> 
      </grammar> 
      <action varName="userName" operator="SET_TO">{userName.source}</action> 
      <action varName="Defaulted_Previous" operator="SET_TO_NO"/> 
      <output> 
       <prompt> 
        <item>Hi {userName}!</item> 
       </prompt> 
      </output> 
     </input> 
    </folder> 

變量定義:

<variables> 
    <var_folder name="Home"> 
     <var name="agentName" type="TEXT" initValue="Alice" 
      description="The virtual agent's name." /> 
     <var name="userName" type="TEXT" initValue="SomeName" description="The user's name" /> 
    </var_folder> 
</variables> 

我不希望用戶名輸入從句子被分隔... 有什麼建議?

謝謝!

回答

2

您需要如

<entity name="DYNAMIC_DATA" entityType="GENERIC"> 
    <value name="DataCapture" value="DataCapture"> 
     <grammar> 
      <item>*</item> 
     </grammar> 
    </value> 
    <entityRules/> 
</entity> 
1

我發現最好的辦法就是用這種實體代替:

<entity name="ANYTHING"> 
    <value> 
    <grammar> 
     <item>!.*</item> 
    </grammar> 
    </value> 
</entity> 

來自IBM的所有示例包含DYNAMIC_DATA的事情,但它是一個非常糟糕的方式捕獲數據,因爲它默默地丟失了許多字符。

刪除的字符的示例是/ \ " ! ? () ° . , ; : _ – — > < = @。嘗試捕獲電子郵件地址,例如。

然後你用這個以完全相同的方式設置一個變量。

<grammar> 
    <item>my name is (ANYTHING)={userName}</item> 
</grammar> 

<action varName="userName" operator="SET_TO">{userName.source}</action> 

上面的實體做的是使用正則表達式來捕獲任何東西。開始時的!意味着它後面的所有內容都是正則表達式。