多消息¶
multi
是一个特殊的工具模板,可以包含多个消息的数组,每个消息都有自己的触发器和目标,完全独立于其他消息。这与具有多个屏幕的单个消息不同,尽管多消息可以包含具有多个屏幕的消息。
interface MultiMessage {
template: "multi";
messages: Array<{
id: string;
template: string;
content: object;
}>;
}
当消息系统遇到具有 template: "multi"
的消息时,它会展平消息的 messages
数组,并将每个子消息作为独立的消息添加到消息系统中。“包装器”与 template: "multi"
然后被丢弃。包含的消息数量没有限制。每个单独的消息可以是任何其他模板,并且它们不需要共享相同的模板。但是,multi
消息不能嵌套在其他 multi
消息内部。
此模式具有专门的用途。通常,在将消息添加到 Firefox 消息系统(在源代码中)时,没有理由将多个消息包装在一个消息中,因为您可以直接将多个消息添加到其中一个本地消息提供程序。但是,当通过 Experimenter 运行需要提供多个消息的消息实验时,此模式就会发挥作用。
例如,对于需要多个入门消息、提示、提醒等的大型功能的实验,需要这样做。Nimbus 实验具有 分支 结构,其中每个用户一次只能注册一个分支,并且每个分支的值必须是一个对象。此模板提供了一种方法,可以在单个分支上的单个功能值中包含多个消息。
由于最常用的消息模板支持多屏幕,因此多消息实验包含具有多个屏幕的消息的情况比较常见。在这种情况下,每个分支包含多个消息,每个消息包含多个屏幕。可以将其视为文件夹结构
示例¶
{
"template": "multi",
"messages": [
{
"id": "EXAMPLE_WHATS_NEW_PAGE",
"template": "update_action",
"content": {
"action": {
"id": "moments-wnp",
"data": {
"url": "https://www.mozilla.org/%LOCALE%/etc/firefox/retention/thank-you-a/",
"expire": 1730162684253
}
}
},
"trigger": { "id": "momentsUpdate" }
},
{
"id": "EXAMPLE_SPOTLIGHT",
"template": "spotlight",
"content": {
"template": "multistage",
"backdrop": "transparent",
"screens": [
{
"id": "EXAMPLE_SPOTLIGHT",
"content": {
"title": { "raw": "Hello, Firefox!" },
"primary_button": {
"label": { "string_id": "some-fluent-id" },
"action": { "navigate": true }
}
}
}
]
}
}
]
}