项目
项目的诞生地,也是凭证的家:每个项目带有 Live 和 Test 两个环境,各有自己的摄取密钥与签名密钥。轮换带有宽限窗口,让部署来得及跟上;任何密钥只在创建那一刻展示一次。


The grid
Each row is one project: its name, its identifier chip, which environments it carries, a masked glimpse of its ingest key and when it was made. The Active and Archived tabs split the population, the search narrows by name, and New project opens a dialog that creates the project and reveals both credentials for Live and Test in the dialog itself: the ingest keys, which stay readable on the Messenger Install tab, and the signing secret, which is shown only there.
Renaming and archiving live on the row. Archiving asks for the project identifier to be typed back, because an archived project stops accepting traffic; the Archived tab restores.
Opening a project


Selecting a row opens the project: a card for the environment the console is in, carrying both credentials labelled. Deliberately not both cards at once: showing the Test key while working in Live is a mix-up waiting to happen, so the other environment's card appears by switching environment. The ingest key is what SDKs send events with; rotating it offers a grace window (immediately, one hour, a day or a week) during which the old key still ingests, so a fleet mid-deploy does not drop events. The signing secret is what the Messenger's identity verification signs with; its action reads Create until one exists and Rotate after. Either mint prints the new value exactly once, and a replaced secret says it replaced one, so an accidental rotation is visible before it bites.
把访客并入这个人
项目卡片上每个环境有一个开关:保留登录前的活动。开启后,一个人在登录前的活动会保留在其名下,而不会被算作另一个独立访客。它默认关闭,并且读取它的是状态工作进程而不是浏览器,所以无论 SDK 发送什么,对一个尚未选择它的项目都绝不会发生合并。关掉它会停止下一次合并,但不会拆开已经合并的任何东西。没有项目写入权限的成员看到开关处于当前状态,但无法拨动它。
复制配置
你在一个环境中配置的一切,都可以复制到本工作区中任意项目的任意其他环境,一次操作可面向多个目标。项目页上的复制配置会打开一个空的对话框;而在群组、开关、实验、看板、工作流或连接上的复制到…,会在打开时已勾选该对象。先从树中选择要复制的内容(选中一个种类即包含其下全部,筛选框可缩小范围),再选择复制到哪里,然后逐个目标审阅:每个对象都会说明它将被创建、被覆盖、保持不变、需要目标缺少的东西(添加它或舍弃该对象),还是被拒绝;覆盖会在写入前显示每一个将要改变的字段。开关(开关的投放开关、工作流的开与关、消息助手的启用、实验的运行状态、群组的活动开关)只有在审阅中的同时复制开关打开时才会一并带过去。要求审核的目标会把它的开关变成变更请求。每个目标各自应用,因此一次拒绝绝不会拖住其他目标。
Where this meets the API
What the keys are for is the Keys guide. On the wire: the listing is the projectGroups query, creation and lifecycle are createProject, renameProject and archiveProject, the credentials rotate through rotateProjectKey and rotateSigningSecret, and the Identity switch reads identityLinkEnabled and writes setIdentityLinkEnabled (GraphQL reference). The ingest key authenticates event ingestion; the signing secret backs Messenger identity verification (Messaging pillar).