0

我正在为环聊聊天构建一个机器人。我的机器人将显示来自免费图像 api 的随机图像。api 的URL在每次调用时都是相同的 URL,但会得到一个新图像。不幸的是,我的机器人不会更新图像。它只是在每次通话时重新发布相同的图像。我正在使用 Google 的 App Script 来部署机器人。我的图像代码如下:

function buildImageCard(url) {
    return {
        cards: [
            {
                sections: [
                    {
                        widgets: [
                            {
                                image: {
                                    imageUrl: url

                                }
                            }
                        ]
                    }
                ]
            }
        ]
    };
}

随机图像会按原样显示。唯一的问题是当我再次调用它时,它显示相同的图像。我似乎找不到刷新卡的方法。我见过这种方法:

actionResponse: {type: shouldUpdate ? 'UPDATE_MESSAGE' : 'NEW_MESSAGE'},

然后shouldUpdate传给buildImageCard. shouldUpdate虽然,如果是真的,什么都不会发生。我错过了什么?

4

1 回答 1

1

似乎问题与缓存有关。Hangouts Chat 正在缓存图像,因此无需每次都下载它们。您可以通过清除浏览器缓存并使用聊天机器人更新卡片来尝试。您应该会看到新图像。

您可以做的一件事是在 url 的末尾包含一个 cachebreaker:

widgets: [
             {
                image: {
                   imageUrl: url + new Date().getTime()

                }
             }
         ]

正如这里所建议的那样

此外,在同一篇文章中,有人评论说这不是一个好习惯“因为它会淹没缓存(本地和上游) ”。他们推荐了一个更好的解决方案,但在这种情况下我们无法控制Cache-Control标题。

我不知道 Hangouts Chat 是如何管理缓存的,但我猜他们正在处理它,以防机器人上传大量不同的图像。例如,在您的情况下,如果您每次想要在卡片中更新它时都生成一个新 URL,那将是相同的,所以我相信 cachebreaker 可以为您工作。

我希望它有帮助!

于 2018-12-19T09:54:00.173 回答