2016-09-12 7 views
3

にエンティティ値を保存するには、ここにリンクがある:。https://wit.ai/Nayana-Manchi/CreditCardApp/storieswit.ai +スロットベースのボット+クライアント

最初の物語「BalanceEnquiryは」スロットベースの物語であるザ・幸せなシナリオがうまくいきます。 "cardnumbermissing"ブランチをテストするには、 "私はクレジットカードの残高をカードに入れて、私の名前はナヤナ"と入力します。ここで最後の4桁のカード番号がありません。カードの最後の4桁を入力しますが、以前のメッセージで送信された名前エンティティは取得されません。

エンティティ値 "name"はどのように保存しますか?前のステップ?エンティティを保持する必要があります現在の会話から入力された最後の4桁を取得し、ハードコーディングされた残高を表示する必要があります。

コードと画像が添付されています。

レシピのクライアントコード(javascript)を共有すると役立ちます。スロットベースのボットを作成します。

demo image

'use strict'; 
 

 
let Wit = null; 
 
let interactive = null; 
 
try { 
 
    // if running from repo 
 
    Wit = require('../').Wit; 
 
    interactive = require('../').interactive; 
 
} catch (e) { 
 
    Wit = require('node-wit').Wit; 
 
    interactive = require('node-wit').interactive; 
 
} 
 

 
const accessToken = (() => { 
 
    if (process.argv.length !== 3) { 
 
     console.log('usage: node examples/creditcardbalance.js <wit-access-token>'); 
 
     process.exit(1); 
 
    } 
 
    return process.argv[2]; 
 
})(); 
 

 
// Quickstart example 
 
// See https://wit.ai/ar7hur/quickstart 
 

 
const firstEntityValue = (entities, entity) => { 
 
    const val = entities && entities[entity] && 
 
     Array.isArray(entities[entity]) && 
 
     entities[entity].length > 0 && 
 
     entities[entity][0].value 
 
    ; 
 
    if (!val) { 
 
     return null; 
 
    } 
 
    return typeof val === 'object' ? val.value : val; 
 
}; 
 

 
const actions = { 
 
    send(request, response) { 
 
     const {sessionId, context, entities} = request; 
 
     const {text, quickreplies} = response; 
 
     return new Promise(function(resolve, reject) { 
 
      console.log('sending...', JSON.stringify(response)); 
 
      return resolve(); 
 
     }); 
 
    }, 
 
    getBalance({context, entities}) { 
 
    return new Promise(function(resolve, reject) { 
 
     var name = firstEntityValue(entities, "name"); 
 
     var last4digit = firstEntityValue(entities, "Last4digits"); 
 
     
 
     if (name && last4digit) { 
 
      context.name = name; 
 
      context.last4digit = last4digit; 
 
      context.balance = 'Rs.10000' + name + last4digit; // we should call a credit card API here 
 
      delete context.cardnumbermissing; 
 
     } 
 
     else { 
 
      context.cardnumbermissing = true; 
 
      context.name = name; 
 
      delete context.balance; 
 
     } 
 
     return resolve(context); 
 
    }); 
 
}, 
 
}; 
 

 
const client = new Wit({accessToken, actions}); 
 
interactive(client); 
 
// JavaScript source code

答えて

0

私は同様の問題を持っていたし、何が起こっていたことはfirstEntityValueは、最初の会話から引っ張ったので、私は実際には前の変数に私はそれを設定するために呼び出されるたびに消去されました変数。関数にコンテキストを認識させ、すでにコンテキストがある場合はfirstEntityValueを使ってこれらの変数を設定しなくてはなりませんでした。

+0

ありがとうございます。何が言いたいのか理解した。しかし、コンテキストから変数をフェッチする例は見つかりませんでした。それを達成する方法について2行のコードを共有してください。 –

+0

else if(context.cuisine){ console.log( '前回のconvoで既に料理を手に入れました'); var近傍= firstEntityValue(エンティティ、 '近傍')。 context.neighborhood = neighborhood; var cuisine = context.cuisine; } – Melissa

+0

ありがとうございます。それは私を助けた。 –