2017-03-23 3 views
0

Ich erhalte diesen Fehler, wenn ich meine vxml APP laufe;Wenn ich meine vxml-Anwendung ausführen, erhalte ich diesen Syntaxfehler

"ECMAScript runtime error: Compilation produced 1 syntax errors.\n\nWhile evaluating:\n\"var acc_no = [37492414, 94190610, 23228367, 39574988, 64742440];\n\t\t\t\t\tfunction checkAccount(arr, val) {\n\t\t\t\t\treturn arr.some(arrVal => val === arrVal);\n\t\t\t\t\t\t\t\t\t\t\t} \"";

Hier ist mein vxml Skript, wo der Fehler auftritt:

<?xml version="1.0" encoding="UTF-8"?> 
<vxml xmlns:voxeo="http://community.voxeo.com/xmlns/vxml" 
     version="2.1" xml:lang="en-US" 
     xml:base="http://webhosting.voxeo.net/201985/www/"> 


    <property name="inputmodes" value="dtmf"/> 
    <property name="termchar" value="#"/> 
    <property name="interdigittimeout" value="2s"/> 
    <property name="bargein" value="false"/> 
    <var name = "accountNumber"/> 
    <var name = "pinNumber"/> 


    <form id="userAuth" scope="document"> 
     <var name="iMaxTries" expr="3"/> 
     <var name="iTriesAcc" expr="0"/> 
     <var name="iTriesPin" expr="0"/> 
     <var name="fatal" expr="'We are having technical difficulties validating your credentials. Try back later.'"/> 

    <catch event="event.pinNumber.invalid"> 
    <!-- increment the attempt counter; if the count is exceeded, disconnect --> 
     <assign name="iTriesPin" expr="iTriesPin+1"/> 
     <if cond="iMaxTries == iTries"> 
      <value expr="fatal"/> 
      <disconnect/> 
     <else/> 
    <!-- clear is unnecessary on a nomatch, but we use the same code to handle a bad filled --> 
      <clear namelist="pinNumber"/> 
      <reprompt/> 
     </if> 
    </catch> 
    <catch event="event.accountNumber.invalid"> 
    <!-- increment the attempt counter; if the count is exceeded, disconnect --> 
     <assign name="iTriesAcc" expr="iTriesAcc+1"/> 
     <if cond="iMaxTries == iTries"> 
      <value expr="fatal"/> 
      <disconnect/> 
     <else/> 
    <!-- clear is unnecessary on a nomatch, but we use the same code to handle a bad filled --> 
      <clear namelist="accountNumber"/> 
      <reprompt/> 
     </if> 
    </catch> 
    <!-- exec this on the first and second noinput/nomatch --> 
    <!-- each event has its own counter --> 
    <catch event="noinput"> 
     I'm sorry. I didn't get you. 
     <reprompt /> 
    </catch> 

    <!-- exec this on the third nomatch --> 
    <catch event="nomatch"> 
     <throw event="event.password.invalid"/> 
    </catch> 

    <!-- silently disconnect on the third noinput --> 
    <catch event="noinput" count="3"> 
     <disconnect/> 
    </catch> 


    <field name="accountNumber" type="digits?length=8"> 
     <prompt> Please enter your account number followed by the pound key. </prompt> 
      <grammar mode="dtmf" version="1.0" root="pin" 
       tag-format="semantics/1.0"> 
       <rule id="digit" scope="public" > 
        <one-of> 
         <item> 0 </item> 
         <item> 1 </item> 
         <item> 2 </item> 
         <item> 3 </item> 
         <item> 4 </item> 
         <item> 5 </item> 
         <item> 6 </item> 
         <item> 7 </item> 
         <item> 8 </item> 
         <item> 9 </item> 
        </one-of> 
       </rule> 

       <rule id="pin" scope="public"> 
        <tag>out=""</tag> 
         <item repeat="8"> 
          <ruleref uri="#digit"/> 
          <tag>out += rules.latest();</tag> 
         </item> 
       </rule> 
      </grammar> 


     <filled> 
       <script> <![CDATA[ 
        var acc_no = [37492414, 94190610, 23228367, 39574988, 64742440]; 
        function checkAccount(arr, val) { 
        return arr.some(arrVal => val === arrVal); 
              } 
       ]]> </script> 

       <block> 
        <var name="chk_acc" expr="checkAccount(acc_no, accountNumber);"/> 

        <if cond="chk_acc =='true'"> 
         <goto next="#pinNumber"/> 
        <else/> 
         <prompt>Sorry, Account number not recognised. </prompt> 
         <throw event="event.accountNumber.invalid"/> 
        </if> 
       </block> 

     </filled> 
    </field> 

    <field name="pinNumber" type="digits?length=4"> 
     <prompt> please enter your four digit pin followed by the pound key. </prompt> 
     <grammar mode="dtmf" version="1.0" root="pin" 
     tag-format="semantics/1.0"> 
     <rule id="digit" scope="public" > 
      <one-of> 
       <item> 0 </item> 
       <item> 1 </item> 
       <item> 2 </item> 
       <item> 3 </item> 
       <item> 4 </item> 
       <item> 5 </item> 
       <item> 6 </item> 
       <item> 7 </item> 
       <item> 8 </item> 
       <item> 9 </item> 
      </one-of> 
     </rule> 

     <rule id="pin" scope="public"> 
      <tag>out=""</tag> 
      <item repeat="4"> 
       <ruleref uri="#digit"/> 
       <tag>out += rules.latest();</tag> 
      </item> 
     </rule> 
     </grammar> 

      <filled> 

      <script> <![CDATA[ 
        var pin_no = [2414, 0610,8367, 4988, 2440]; 
        function checkPin(arr, val) { 
        return arr.some(arrVal => val === arrVal); 
              } 
       ]]> </script> 

       <block> 
        <var name="chk_pin" expr="checkPin(pin_no, pinNumber);"/> 

        <if cond="chk_pin =='false'"> 
         <prompt>Sorry, you have entered is an invalid pin. Please try again </prompt> 
         <throw event="event.pinNumber.invalid"/>  

        </if> 
       </block> 

      </filled> 
    </field> 

    <filled mode="all" namelist="accountNumber pinNumber"> 


    <script> <![CDATA[ 
     var accDetails = [ 
     {acc_name: 'Lawrence Burkins', account: 37492414, pin: 2414, acc_type: 'checking', acc_bal: 2372351.74 , acc_br:'Montreal'}, 
     {acc_name: 'Ola Macaulay', account: 94190610, pin: 0610, acc_type: 'checking', acc_bal: 908242.49 , acc_br:'Tisdale'}, 
     {acc_name: 'Judy Cefalu', account: 23228367, pin: 8367, acc_type: 'checking', acc_bal: 15700526.57 , acc_br:'Toronto'}, 
     {acc_name: 'Mellisa Garcia', account: 39574988, pin: 4988, acc_type: 'checking', acc_bal: 568201.26 , acc_br:'Prince Albert'}, 
     {acc_name: '', account: 64742440, pin: 2440, acc_type: 'checking', acc_bal: 1952000.00 , acc_br:'Fort McMurray'}, 
         ]; 

     function accDetails(details) { 
       return details.account === accountNumber ; 
          } 
       var newDetail = accDetails.find(accDetails); 
       var myDetail = [newDetail]; 
       var myBal = myDetail.slice(0, 4); 

    ]]> </script> 

     <var name = "accountBalance" expr = "myBal.toString()"/> 

     <prompt> 
     Your Checking account balance is <prosody rate="slow"><say-as type="currency"> $ + <value class="currency" expr="accountBalance"/> </say-as></prosody> 
     </prompt> 
     <goto next="after_bal.vxml"/> 
    </filled> 
    </form> 

</vxml> 

Ich bin noch neu in vxml und ECMAScript.

+0

Es hängt vom VXML-Browser ab. Zum Beispiel verwendet das GVP MCP eine ältere Version von SpiderMonkey, so dass neue Javascript-Funktionen nicht funktionieren. Welche Version von Javascript unterstützt Ihr VXML-Browser? –

Antwort

0

Die ECMAScript in Frage scheint syntaktisch korrekt zu sein:

var acc_no = [37492414, 94190610, 23228367, 39574988, 64742440]; 
        function checkAccount(arr, val) { 
        return arr.some(arrVal => val === arrVal); 
             } 

ich dieses Stück für Stück brechen würde vorschlagen, und die Komplexität des VXML-Code reduzieren es zu debuggen. Verwenden Sie eine sehr einfache VXML-Datei mit einem einfachen Feld, fügen Sie das obige ECMAScript in den ausgefüllten Abschnitt ein und sehen Sie, ob Sie den gleichen Fehler erhalten. Wenn Sie dies tun, verschieben Sie das Skript weiter oben im Code (d. H. Nicht im ausgefüllten Abschnitt) und prüfen Sie erneut, ob derselbe Fehler auftritt.

Die Fehlermeldung ist wegen der Zeilenumbrüche usw. etwas verwirrend. Sieht die Fehlermeldung so aus, wenn Sie sie das erste Mal sehen?

Verwandte Themen