【问题标题】:Delete filled in details after restart重启后删除填写的详细信息
【发布时间】:2017-12-20 20:48:07
【问题描述】:

我试图让一个人填写一些详细信息并返回详细信息的概述。有一个重新启动对话的选项(查看代码),但是当重新启动对话并且该人填写一些新的详细信息时,它将显示第一个填写的详细信息的旧详细信息。

我该如何解决这个问题?

bot.dialog('overview', function (session, options) {
if (session.message && session.message.value) {
    if(session.message.value.actions == "Accept"){

    }
    return;
}
var overview_msg = require('./cards/overview.json');
var date = new Date();
overview_msg.attachments[0].content.body[0].items[1].columns[1].items[0].text = overview_msg.attachments[0].content.body[0].items[1].columns[1].items[0].text.replace(/{{name}}/,nameGuest)
overview_msg.attachments[0].content.body[0].items[1].columns[1].items[1].text = overview_msg.attachments[0].content.body[0].items[1].columns[1].items[1].text.replace(/{{date}}/,date.toDateString() +' ' + date.toLocaleTimeString());
overview_msg.attachments[0].content.body[1].items[1].facts[0].value = overview_msg.attachments[0].content.body[1].items[1].facts[0].value.replace(/{{email}}/, mailGuest);
overview_msg.attachments[0].content.body[1].items[1].facts[1].value = overview_msg.attachments[0].content.body[1].items[1].facts[1].value.replace(/{{phone}}/, phoneGuest);
overview_msg.attachments[0].content.body[1].items[1].facts[2].value = overview_msg.attachments[0].content.body[1].items[1].facts[2].value.replace(/{{extra}}/, numberPeople);

overview_msg.attachments[0].content.body[1].items[1].facts[3].value = overview_msg.attachments[0].content.body[1].items[1].facts[3].value.replace(/{{lunch}}/, lunchGuest);
overview_msg.attachments[0].content.body[1].items[1].facts[3].value = overview_msg.attachments[0].content.body[1].items[1].facts[3].value.replace(/{{allergy}}/, lunchAllergyGuest);
overview_msg.attachments[0].content.body[1].items[1].facts[3].value = overview_msg.attachments[0].content.body[1].items[1].facts[3].value.replace(/{{vegan}}/, lunchVegan);
session.send(overview_msg);

bot.dialog('restart', function (session) {
    session.beginDialog('overview');
}).triggerAction({matches: /restart|quit/i});

【问题讨论】:

  • nameGuest、mailGuest、phoneGuest 等如何填充?
  • 这些是包含空字符串的局部变量。因为我需要重复使用这些。

标签: node.js botframework adaptive-cards


【解决方案1】:

我认为这可能与您定义变量nameGuest, mailGuest, phoneGuest, etc 的方式有关,这些变量未在您的代码 sn-p 中显示。

要从Input.Textadaptive-card 中获取值,可以试试下面的代码sn-p:

bot.dialog('form', [
    (session, args, next) => {
        let card = require('./card.json');
        if (session.message && session.message.value) {
            next(session.message.value)
        } else {
            var msg = new builder.Message(session)
                .addAttachment(card);
            session.send(msg);
        }

    },
    (session, results) => {
        // Get the User input data here
        session.send(JSON.stringify(results));

    }
]).triggerAction({
    matches: ['form', 'Action.Submit']
})

【讨论】:

  • 这些是包含空字符串的局部变量。因为我还需要代码中的变量。但为什么自适应卡会显示旧值?我重复使用所需的卡,所以正常这个是空的?不是吗?
  • 我怀疑像overview_msg.attachments[0].content.body[1].items[1].facts[0].value = overview_msg.attachments[0].content.body[1].items[1].facts[0].value.replace(/{{email}}/, mailGuest); 这样的句子会影响卡片json字符串,像mailGuest这样的变量会在某个地方被赋值。我建议你可以在session.send(msg)之前设置一个断点来检查cord的确切值。
【解决方案2】:

是的,我设法完成了。 我没有替换 json 中的值,而是引用了变量。

示例:

overview_msg.attachments[0].content.body[1].items[1].facts[0‌​].value = VARIABLE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多