如何在DialogFlow响应表卡中进行For循环?

时间:2019-05-09 17:49:18

标签: node.js dialogflow actions-on-google dialogflow-fulfillment

我正在研究DialogFlow,并且可以同时使用SimpleResponseTableCard响应。

这是我的SimpleResponse工作代码,好吧,我返回的消息非常大(超过200个字符)text,其中很多都是静态文本。所以我想使用桌卡。

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}`
    }));

});

这是我的表格卡片代码,我将从for-loop中获得5到7个元素,而且我不知道如何在表格行中使用这些值以及如何基于数字获取动态行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

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

1 个答案:

答案 0 :(得分:1)

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

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,
}));