2016-09-12 1 views
3

ich versuche eine Probe in wit.ai aus, hier ist der Link:. https://wit.ai/Nayana-Manchi/CreditCardApp/storieswit.ai + Slot basierend bot + speichern Einheiten Werte in Client

Die erste Geschichte „BalanceEnquiry“ ist ein Slot basiert Geschichte der Happy Szenario funktioniert gut.Um den Zweig "cardnumbermissing" zu testen, würde ich tippen "Ich möchte mein Kreditkartenkonto auf der Karte und mein Name ist Nayana." Hier fehlen die Kartennummer letzten 4 Ziffern. Es fragt nach den letzten 4 Ziffern der Karte und dann würde ich die letzten 4 Ziffern der Karte eingeben, aber hier bekommt es keine Namensentität, die in einer früheren Nachricht gesendet wurde

Wie speichere ich den Entitätswert "name", der in der gesendet wurde Vorheriger Schritt? Es sollte die Entität beibehalten Wert Name und es sollte die letzten 4 Ziffern aus der aktuellen Konversation erhalten und dann die Waage, die hart codiert ist.

Code und die Bilder beigefügt.

Es wird hilfreich sein, wenn Sie den Client-Code (Javascript) für das Rezept teilen - Erstellen Sie einen Slot-basierten Bot.

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

Antwort

0

hatte ich ein ähnliches Problem und was geschah war firstEntityValue nur aus dem ersten Gespräch zieht, so war ich eigentlich vorherigen Variablen jedes Mal das Löschen ich es genannt zu setzen eine Variable. Ich musste die Funktion auf den Kontext aufmerksam machen und diese Variablen nicht mit firstEntityValue setzen, wenn bereits ein Kontext vorhanden war.

+0

Danke Melissa. Ich verstehe was du meinst. Es konnte jedoch kein Beispiel zum Abrufen von Variablen aus dem Kontext gefunden werden. Könnten Sie bitte zwei Zeilen Code teilen, wie Sie es erreichen können? –

+0

sonst if (context.cuisine) { console.log ('bereits in vorherigen convo' cuisine erhalten); var Nachbarschaft = firstEntityValue (Einheiten, 'Nachbarschaft'); context.neigborhood = Nachbarschaft; var cuisine = context.cuisine; } – Melissa

+0

Vielen Dank. Es hat mir geholfen. –

Verwandte Themen