首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wit.ai +基于插槽的机器人+在客户端保存实体值

wit.ai +基于插槽的机器人+在客户端保存实体值
EN

Stack Overflow用户
提问于 2016-09-12 17:00:02
回答 1查看 839关注 0票数 3

我正在试用wit.ai中的一个示例,链接如下:https://wit.ai/Nayana-Manchi/CreditCardApp/stories

第一个故事“BalanceEnquiry”是一个基于插槽的故事。快乐的场景运行得很好。要测试“cardnumbermissing”分支,我会键入“我希望我的信用卡余额在卡上,我的名字是娜雅娜”。这里的卡号最后4位数字丢失。它要求卡的最后4位数字,然后我将输入卡的最后4位数字。但在这里它没有得到之前发送的消息中的名称实体。

如何保存上一步发送的实体值name?它应该保留实体值名称,并且应该从当前对话中获取输入的最后4位数字,然后显示硬编码的余额。

代码和附加的图像。

如果您共享构建基于插槽的机器人的方法的客户端代码(javascript),这将是很有帮助的。

代码语言:javascript
复制
'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

EN

回答 1

Stack Overflow用户

发布于 2016-09-22 05:52:08

我遇到了类似的问题,发生的情况是firstEntityValue只从最初的对话中提取数据,所以每次调用它来设置变量时,我实际上都会删除之前的变量。我必须让函数知道上下文,并且如果已经有上下文,就不要使用firstEntityValue来设置这些变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39446666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档