如何在 DialogFlow Response Table 卡中进行 For 循环?

How to do For-loop in DialogFlow Response Table card?

我正在开发 DialogFlow 并且能够同时使用 SimpleResponseTableCard 响应。

这是我的 SimpleResponse 工作代码,我返回了一个非常大的(200 多个字符)text 消息,其中很多是静态文本。所以我想利用Table卡..

app.intent(TEST, (conv) => {

    /* logic for getting 
            the JSON data */

    var appName, status, podIP, version;
    var itemIds = [];
    for (var i = 0; i < data.length; i++) {
        appName = data[i].metadata.labels.app;
        version = data[i].metadata.labels.version;
        status = data[i].status.phase;
        itemIds.push(data[i].metadata.labels.app + ........);
    }
    console.log("Final Response " + itemIds);
    conv.ask(new SimpleResponse({
        speech: 'Here is the requested data',
        text: `${itemIds}`
    }));

});

这是我的 Table 卡片代码,我将从 for-loop 中获取 5 到 7 个元素,但我不知道如何在 table 中使用这些值行以及如何根据 for-loop.

中的元素数量获取动态行
app.intent(TEST, (conv) => {

    /* logic for getting 
            the JSON data */

    var appName, status, podIP, version;
    var itemIds = [];
    for (var i = 0; i < data.length; i++) {
        appName = data[i].metadata.labels.app;
        version = data[i].metadata.labels.version;
        status = data[i].status.phase;
        itemIds.push(data[i].metadata.labels.app + ........);
    }
    console.log("Final Response " + itemIds);
    conv.ask(new SimpleResponse({
        speech: 'Here is the requested data',
        text: `${itemIds}`
    }));

    conv.ask(new Table({
        dividers: true,
        columns: ['appName', 'version', 'status'],
        rows: [
            ['row 1 item 1', 'row 1 item 2', 'row 1 item 3']
        ],
    }))

});

我尝试在 for 循环中使用 con.ask(Table),但我想这是个坏主意。此外,我们不能有多个 conv.ask tables.

这可能吗?我看到一些带有大 tables 的 Dialogflow 应用程序,这些 tables 是硬编码的还是动态插入的数据?

是的,可以动态生成表格。 这是实现此目标的示例代码。

let appName, status, podIP, version;
let rows = [];
for (var i = 0; i < data.length; i++) {
    appName = data[i].appName;
    version = data[i].version;
    status = data[i].status;
    rows.push([appName, version, status]);
}

conv.ask('Here is your table');

conv.ask(new Table({
    dividers: true,
    columns: ['appName', 'version', 'status'],
    rows: rows,
}));