---
title: "评论转私信基准方法论"
description: "匹配率、送达率和首条私信时间如何在评论转私信活动上测量，以及为什么尚无结果发布。"
canonical: https://docs.afp.monster/zh-cn/research/comment-to-dm-benchmark
updated: 2026-08-19
pageType: research
---

三个数字描述评论转私信活动的效果：匹配率、送达率和首条私信时间。
三者都在下方定义，连同要构建的活动、要发布的评论，以及结果发布在其中的文件。
尚未收集任何数据，所以本页不出现任何结果——方法先发布，是有意的。

> **状态：** 方法论已发布；数据收集未开始。本文档中每个已测量字段在第一次运行完成之前为空，届时结果和原始数据集在此处发布。

## 三个指标的含义

每个指标是一个计数除以一个计数，在一次运行中对一个已连接主页进行，每个的分母排除平台从未送达给 AFP 的试验。

| 指标 | 定义 | 单位 |
|---|---|---|
| 已启动试验 | 运行期间发布的、产生了测试活动执行记录的评论 | 计数 |
| 匹配率 | 执行记录从 **Match** 离开条件节点的试验，除以已启动试验 | 百分比 |
| 送达率 | 执行记录记录了已发送私信的试验，除以执行记录到达发送私信节点的试验 | 百分比 |
| 首条私信时间 | 从观察者发布评论到私信出现在收件人会话中的秒数 | 秒，以中位数和第 90 百分位报告 |

匹配率测量条件节点，而不是触发器。
触发节点不持有任何关键词配置，所以范围内帖子上的每条评论都启动一条执行记录，条件是比较文本的唯一地方。
[关键词匹配规则](/zh-cn/reference/keyword-matching) 定义每种匹配类型执行的比较。

送达率测量 AFP 记录了什么，而不是收件人看到了什么。
一个引发错误的发送私信节点记录该错误，运行在那里停止前进，所以失败是可见的；被 Facebook 或 Instagram 接受后过滤的消息在此定义下算作已送达。

首条私信时间在两端用观察者的时钟测量——评论提交时，以及私信出现在收件人会话中时。
AFP 内部记录的时间戳来自平台，仅作为交叉检查。

## 每个数字从哪里取

```d2 title="What the benchmark measures: the clock runs from the observer's comment to the DM arriving"
direction: down
post: "Observer posts a comment\nclock starts"
reach: Comment reaches the connected page
accept: "Trigger accepts it\nexecution starts"
cond: "Condition\nkeyword list" {shape: diamond}
send: Send DM node
none: Run ends with no DM
arrive: "DM appears in the recipient's conversation\nclock stops"
post -> reach -> accept -> cond
cond -> send: Match
cond -> none: No Match
send -> arrive
```

## 测试活动如何构建

一个活动，四个节点，没有等待。
图中的任何其他东西都增加一个与三个指标无关的变量。

1. 创建一个绑定到被测主页的活动并在画布上打开它。
2. 添加一个评论触发器。将其帖子范围设置为 **specific post** 并选择为运行创建的帖子，这样其他帖子上的普通流量无法进入样本。保持 **unique per user** 关闭——开启后，重复评论者会被短路，试验永远不会开始。
3. 添加一个条件节点，匹配类型为 **Keyword list**，指向为运行创建的关键词列表。保持反转匹配关闭，保持图片、GIF 和链接过滤器关闭，保持 **wait for reply** 关闭，使运行一次通过解决。
4. 添加一个发送私信节点，带固定文本消息，连接到条件的 **Match** 输出。不连接任何东西到 **No Match**，所以不匹配的运行在条件处结束，在历史中毫不含糊。
5. 保存活动，然后启用它。启用验证图，是与保存分开的操作。
6. 停用该主页上的所有其他活动。每个触发器匹配的活跃活动都启动自己的执行记录，两个活动回答同一条评论会使送达率失去意义。

:::caution
不要为此使用测试执行。测试执行走相同的图，但不调用 Facebook 或 Instagram，所以它可以确认一条消息走哪个分支，但无法测量送达或时间。
:::

## 运行如何执行

环境优先：一个 Facebook 主页和一个 Instagram 商业账户，都已连接并订阅，在一个订阅活跃的账户下。
订阅不活跃时到达的评论记录为订阅错误，存储访问已停止工作的主页记录重新登录错误。
两者都算作环境失败，从每个比率中排除。

1. 将关键词列表固定为单个关键词，并固定私信文本。两者逐字记录在运行笔记中。
2. 为每个试验分配一个不同的评论者账户。一个人同时只有一条活动运行，所以同一账户在第一条运行仍活跃时的第二条评论会被跳过，会悄悄缩小样本。
3. 从主页本身以外的账户评论。主页发布的评论被忽略，这排除了从主页账户驱动运行。
4. 对于每个试验，发布其分桶的评论文本，并在观察者时钟上记录提交时间。
5. 观察收件人的会话，并在同一时钟上记录私信的到达时间。在固定截止时间后记录未到达，截止时间在运行开始前选择并随结果说明。
6. 阅读活动的执行记录历史，按试验记录运行是否从 Match 离开条件以及它在哪里停止。历史返回最近 20 次运行且不自我刷新，所以保持每批在此之下，并在开始下一批之前阅读它。
7. 将活动 feed 过滤到主页和运行的时间窗口，然后导出它。导出应用 feed 的过滤器并作为 JSON 下载，它是逐试验表背后的审计追踪。
8. 在第二个平台上重复，不更改活动形状、关键词或私信文本。

### 评论分桶

每个试验属于一个分桶，分桶固定发布的文本和它预期走的分支。

| 分桶 | 发布什么 | 预期分支 |
|---|---|---|
| 精确关键词 | 单独的关键词 | Match |
| 句子中的关键词 | 包含关键词作为子字符串的句子 | Match |
| 大写关键词 | 以大写字母输入的关键词 | Match  |
| 近似错过 | 与关键词共享前缀但不包含它的词 | No Match |
| 无关文本 | 不包含关键词的帖子评论 | No Match |
| 仅媒体 | 不带文本的贴纸或图片 | No Match |

仅媒体评论以占位符文本而非空字符串到达条件，这就是为什么它属于样本：它是条件比较的内容不是评论者输入内容的唯一分桶。

## 结果

无结果。数据收集尚未开始，本页没有任何内容被测量。

定义、活动形状、分桶和截止在任何数字存在之前已在公开中固定，所以最终数字可以对照无人能在看到数据后调整的协议来检查。

## 原始数据集将包含什么

每次运行一个 JSON 文件，在此页上与摘要表一起发布，每个试验一个对象。
步骤 7 中获取的活动导出不加更改地与之一起发布，所以每个试验可以追溯到 AFP 记录的行。

| 字段 | 它保存什么 |
|---|---|
| `trial_id` | 运行内的序列号 |
| `platform` | `facebook` 或 `instagram` |
| `bucket` | 上述六个分桶名称之一 |
| `comment_text` | 发布的确切文本 |
| `comment_posted_at` | 观察者时钟，评论提交时 |
| `execution_started` | 是否为该评论创建了执行记录 |
| `branch_taken` | `match`、`no_match` 或 `none` |
| `dm_recorded` | 执行记录是否记录了已发送私信 |
| `dm_observed_at` | 观察者时钟，私信出现在会话中时 |
| `time_to_first_dm_seconds` | 两个观察者时间戳之间的差值 |
| `outcome` | `delivered`、`no_match`、`no_execution`、`environment_failure` 或 `timeout` |
| `notes` | 关于试验的任何异常，纯文本 |

已测量字段在运行填入之前为 `null`。已发布骨架中的一个试验如下：

```json
[
  {
    "trial_id": 1,
    "platform": "facebook",
    "bucket": "exact_keyword",
    "comment_text": "price",
    "comment_posted_at": null,
    "execution_started": null,
    "branch_taken": null,
    "dm_recorded": null,
    "dm_observed_at": null,
    "time_to_first_dm_seconds": null,
    "outcome": null,
    "notes": ""
  }
]
```

## 局限性

- **送达不全是 AFP 的。** AFP 将消息交给 Facebook 或 Instagram；之后发生什么不在此处测量的任何内容之内，首条私信时间包含平台自己的送达时间。
- **一个账户、一个受众、一个窗口。** 一次运行在一天中的一个时间覆盖一个 Facebook 主页和一个 Instagram 商业账户。它对有不同流量、不同粉丝数或不同地区的主页什么也没说。
- **观察者时钟是手动的。** 时间测量的两端由一个观察两个界面的人记录，所以分辨率粗糙，人类反应时间在数字之内。
- **样本是合成的。** 为填充分桶写的评论不是真实粉丝写的评论，近似错过分桶特别选择位于匹配边界附近。
- **大小写处理未确认。** 大写分桶被测量，但其预期分支在工程确认比较如何处理字母大小写之前未验证。
- **没有测量竞争对手。** 这些指标仅描述 AFP。[对比页面](/zh-cn/compare) 明确说明没有测量任何竞争对手性能数字。
- **比率是记录的，不是保证的。** 这里没有任何东西是服务等级。一个发布的数字描述一天的一次运行。

## 相关

- [研究](/zh-cn/research) — 本网站每项研究所持的标准，以及迄今发布的内容。
- [将评论路由到私信](/zh-cn/guides/route-comments-to-dm) — 如何构建此方法测量的活动。
- [测试和调试活动](/zh-cn/guides/test-and-debug-campaigns) — 阅读运行所依赖的执行记录历史。
- [执行记录状态](/zh-cn/reference/execution-states) — 停止、等待或失败的运行在回读时意味着什么。
- [评论审核](/zh-cn/guides/comment-moderation) — 活动 feed 及其导出。
