# 基于触发器的入口

当用户执行特定事件（例如，采取特定操作）时，**基于触发器的入口** (Trigger-based entry) 会启动 Journey。
<Aside type="tip">
您可以添加多个基于触发器的入口点。在这种情况下，任何一个入口点都将启动 Journey。

<img src="/journey-elements-README-6.webp" alt="单个 Journey 画布上的多个基于触发器的入口点"/>
</Aside>

要设置基于触发器的入口，请在画布上找到入口元素，并选择将用作触发器的事件 (Event)。

> 有关如何配置事件的更多信息，请参阅[事件](/zh/product/audience-data-and-segmentation/events/)文档。

如果所选事件具有属性，您可以使用这些属性来缩小入口条件。在编辑元素时点击 **添加条件** (Add condition)，然后从下拉列表中选择一个属性，并定义其运算符和值。

> 有关可用的运算符，请参阅[按类型划分的标签运算符](/zh/product/audience-data-and-segmentation/segmentation/create-segments/by-tags/#tag-operators-by-type)。

<img src="/journey-elements-trigger-based-entry-1.webp" alt="选择将用作触发器的事件"/>

<Aside type="caution" title="重要提示">
- 在您的 **启动事件** (Start Event) 的 [`/postEvent`](/zh/developer/api-reference/user-centric-api#postevent) API 请求中，请**包含 HWID (硬件 ID) 或 User ID**。如果您只发送 User ID，Pushwoosh 会自动解析用户的设备。
- 入口要求用户至少有一个已注册的设备。没有关联设备的 User ID 无法进入 Journey。
</Aside>

## 定义谁进入营销活动

定义当特定事件发生时，哪个（些）用户应进入 Journey。

使用 **谁进入营销活动？** (Who enters the campaign?) 下拉菜单在两种可用模式之间进行选择：

### 执行事件的用户（默认）

触发事件的用户即是进入 Journey 的用户。

![选择执行事件的用户](/journey-elements-trigger-based-entry-7.webp)

**示例**  
用户完成购买（`CheckoutSuccess` 事件）。该用户（例如，`User ID: 123`）将进入一个购买后 Journey，其中可能包含感谢信息、产品推荐或满意度调查。

### 来自事件属性的用户

您可以不让触发事件的用户进入，而是在自定义事件属性中传递一个或多个 [`User ID`](/zh/product/pushwoosh-knowledge-hub/users-userids/)。该属性中列出的用户将进入 Journey。

为此，请选择 **来自事件属性的用户** (Users from an event attribute)，并选择一个属性键（例如，`recipient_ids`、`target_user_id`）。此键应与您的事件负载结构相匹配。

![从事件属性中选择用户](/journey-elements-trigger-based-entry-8.webp)

<Aside type="caution" title="需要开发者协助">
要正确使用 **来自事件属性的用户** 模式，您的应用程序或后端必须发送正确的负载结构。请与您的开发团队分享以下示例。
</Aside> 

##### 示例负载（单个用户）

```json
{
  "application": "XXXXX-XXXXX",
  "event": "invitation",         
  "attributes": {
      "targetId": 321
  },
  "userId": 123
}

```

用户 `321`（来自 `targetId`）进入 Journey。

##### 示例负载（多个用户）

如果您提供多个用户 ID，请使用一个 JSON 字符串数组。

```javascript
{
    "application": "XXXXX-XXXXX",
    "event": "invitation",         
    "attributes": {
        "targetIds": [1,2,3,4]
    },
    "userId": 123
}

```

用户 `1`、`2`、`3` 和 `4` 将进入 Journey。

#### 用例

**评论通知** 

当有人评论用户的帖子时，帖子所有者会收到通知。

**示例：** 评论事件在 `target_user_id` 属性中包含帖子所有者的 ID。该用户进入一个 Journey 以接收通知。

**推荐计划** 

当被推荐的用户注册或进行购买时，推荐人将被添加到 Journey 中。

**示例：** 用户 `123` 触发事件，推荐人 `456`（来自 `referrer_id` 属性）进入一个奖励活动。

**礼物购买** 

当用户购买礼物时，收礼人将通过事件负载中的 `recipient_user_id` 被添加到一个 Journey 中。

**示例** 用户 `123` 为用户 `456` 购买了一份礼物，然后用户 `456` 会收到通知、入门流程或感谢信息。

## 设置入口可用性

控制用户何时可以通过基于触发器的入口进入 Journey。您有两个选项：

*   **允许随时进入**：用户可以在触发事件发生时随时进入 Journey。
*   **将入口限制在特定时期**：用户只有在选定的日期范围内触发事件才能进入 Journey。
  
  当限制入口时，请选择**开始日期**、**结束日期**和**时区**。入口窗口将在开始日期的 **00:00** 开始，并在结束日期的 **23:59** 结束，以所选时区为准。

![设置入口可用性](/journey-elements-trigger-based-entry-2.webp)

## 控制用户可同时拥有的会话数量

决定每个用户是只能同时加入一个 Journey，还是可以并行参与多个 Journey。

从下拉菜单中选择以下选项之一：

*   每个用户一个活动会话
*   每个用户多个活动会话

#### 每个用户一个活动会话

每个用户在营销活动中只能有一个活动会话。他们必须完成或退出当前会话才能开始新的会话。

![选择每个用户一个活动会话](/journey-elements-trigger-based-entry-3.webp)
##### 用例

*   **入门流程**，用户在完成当前 Journey 之前不应重新开始
*   **订阅续订提醒**，用户不应收到重叠的通知
*   **限时优惠或试用**，每个用户只允许运行一个活动
*   **反馈收集活动**，确保每个用户在重新进入前只提供一次反馈

#### 每个用户多个活动会话

用户可以在一个营销活动中拥有多个活动会话。每个会话必须由一个唯一的事件属性（例如，`order_id`、`product_id`）来标识。

要进行此设置：

1.  在下拉菜单中选择 **每个用户多个活动会话** (Multiple active sessions per user)。
     
2.  选择一个会话标识符属性（例如，`order_id`、`product_id`）。此属性将用于区分不同的会话。

![选择每个用户多个活动会话](/journey-elements-trigger-based-entry-4.webp)

<Aside type="caution" title="重要提示">
此属性必须包含在所有相关的 Journey 事件中（例如，在 **等待触发器** 或 **转化目标** 中）。如果缺少会话标识符属性，系统将无法将事件链接到特定会话。相反，该事件将应用于该用户的所有活动会话。
</Aside>

**示例**

*   `OrderPlaced` 附带 `order_id = "1001"` → 启动 **会话 1**

*   `OrderPlaced` 附带 `order_id = "1002"` → 启动 **会话 2**

如果发送的 `OrderReady` 事件没有 `order_id`，那么会话 1 和会话 2 都将被标记为“准备就绪”，即使实际上只有一个订单准备好了。

##### 用例

*   **电子商务购买**：每个订单启动自己的 Journey，因此可以独立跟踪来自同一用户的多个订单。（属性：`order_id`）
*   **推荐计划**：每次推荐都会创建一个新会话，允许一个用户推荐多个朋友。（属性：`referral_id`）
*   **忠诚度计划**：跟踪并行运行的不同交易中的积分或奖励。（属性：`transaction_id`）
*   **票务预订**：每次预订都会启动自己的 Journey，因此用户可以同时管理多张票。（属性：`booking_id`）
*   **预约安排**：每次预约都作为单独的会话处理。（属性：`appointment_id`）

## 控制用户是否可以重新进入营销活动

决定当一个已经在 Journey 中的用户再次触发入口事件时会发生什么。

从下拉菜单中选择以下选项之一：

*   不允许重新进入（默认）
*   允许重新进入

#### 不允许重新进入

已经在 Journey 中的用户将不会重新进入。如果用户处于活动会话中并再次触发入口事件，新的触发将被忽略，用户将继续其当前会话。

**用例**

*   **欢迎和入门系列**，新用户从头到尾只经历一次 Journey，如果他们再次触发事件，他们会保持在当前位置，而不是被送回起点
*   **一次性优惠**，每个客户只应收到一次促销或折扣，即使他们多次触发事件
*   **教育和培养流程**，订阅者会继续浏览内容，而不会重新开始并再次收到相同的电子邮件

#### 允许重新进入

已经在 Journey 中的用户将从其当前会话中移除，并以新会话重新进入。每次用户触发入口事件时，其当前会话结束，新会话开始。

**用例**

*   **降价提醒**，重新启动必须获取新价格，而不是继续通知有关先前会话的过时价格
*   **赢回活动**，返回的不活跃用户应始终从序列中的第一条消息开始

<Aside type="note">
重新进入控制的是已经在 Journey 中的用户会发生什么。它不影响用户可以并行运行多少个会话。该设置在[控制用户可同时拥有的会话数量](#control-how-many-sessions-a-user-can-have-at-the-same-time)下配置。
</Aside>

配置完入口元素后，点击 **应用** (Apply) 以保存更改。

## 示例场景：具有多个会话的电子商务订单 Journey

假设您想为用户下的每个订单发送通知。每个订单都应该有自己的 Journey 会话。为此，您将使用 `OrderPlaced` 事件作为触发器，并使用属性 `order_id` 作为会话标识符。

1. 创建事件 `OrderPlaced` 并确保它包含属性 `order_id`。[了解更多关于创建事件的信息](/zh/product/audience-data-and-segmentation/events/#implementation)

![创建 OrderPlaced 事件](/journey-elements-trigger-based-entry-5.webp)
2. 将此事件设置为您的 Journey 的触发器。

![将此事件设置为您的 Journey 的触发器](/journey-elements-trigger-based-entry-6.webp)

3. 在会话设置中，选择 **每个用户多个活动会话** (Multiple active sessions per user) 并选择 `order_id` 作为会话标识符。

![选择每个用户多个活动会话](/journey-elements-trigger-based-entry-9.webp)

在此设置中，每个新订单都会启动一个单独的 Journey 会话。

*   `OrderPlaced` 附带 `order_id = 1001` 启动 **会话 1**
*   `OrderPlaced` 附带 `order_id = 1002` 启动 **会话 2**

4. 接下来，添加一个[等待触发器元素](/zh/product/customer-journey/journey-elements/flow-controls/wait-for-trigger/)来跟踪订单何时准备好取货或配送。使用事件 `OrderReady`，该事件也必须包含相同的 `order_id`。
   这确保每个订单都在正确的会话中更新：
*   `OrderReady` 附带 `order_id = 1001` 仅适用于 **会话 1**
*   `OrderReady` 附带 `order_id = 1002` 仅适用于 **会话 2**
<Aside type="caution" title="重要提示">
如果事件**不**包含 `order_id`，系统将无法判断它属于哪个会话，该事件将应用于该用户的所有活动会话。
</Aside>

![在等待触发器元素中使用事件 OrderReady](/journey-elements-trigger-based-entry-10.webp)

5. 最后，添加一个[转化目标](/zh/product/customer-journey/journey-settings/#conversion-goals)，例如 `OrderDelivered` 事件。此事件也必须包含相同的 `order_id`，以便可以匹配到正确的会话。
*   如果 `OrderDelivered` 包含 `order_id = "1001"`，它会为**会话 1**记录一次转化。

*   如果 `OrderDelivered` 包含 `order_id = "1002"`，它会为**会话 2**记录一次转化。
<Aside type="caution" title="重要提示">
如果缺少 `order_id`，转化将应用于该用户的所有活动会话，而不仅仅是预期的那一个。
</Aside>

![选择每个用户多个活动会话](/journey-elements-trigger-based-entry-11.webp)