# log_action 的默认行为

> 省略字段时，log_action 会怎样处理阶段和下次跟进时间，精确到每种情况。

URL: https://mcp-docs.opennomos.com/zh/docs/growth-loop/log-action

[`log_action`](https://mcp-docs.opennomos.com/zh/docs/tools/growth/log_action.md) 记录一件做过或观察到的事。只有 `action.summary` 是必填的。本页把其余字段的行为讲清楚。

## 对应哪个机会

- `opportunity_id`：就是那个机会（必须属于该项目）。
- `url`：对应规范化后 URL 相同的机会；**未知的 URL 会自动登记**（用 `title` 给它起名）。
- 两者都没有：这次行动单独记录，不关联任何机会。

## 阶段

| 你传了 | 结果 |
| --- | --- |
| 省略 `stage` | 阶段不变。服务端**绝不会**根据行动去推断阶段。 |
| `stage` 与当前相同 | 阶段没有变化。 |
| `stage` 不同 | 阶段改变，并记录一条 `stage_changed` 事件。 |

## 下次跟进时间

| 情形 | 结果 |
| --- | --- |
| 给了 `next_followup`（`{"in_days": 3}`、`{"at": "…"}` 或 ISO 时间） | 设为该值。 |
| `next_followup: null` | 清除。 |
| 省略，**且阶段变了** | 按新阶段设置：`contacted` +3 天，`replied` +2 天，`willing_to_talk` +2 天；`converted` 和 `dropped` 清除。`discovered` 没有默认值，时间保持原样。 |
| 省略，**且阶段没变** | **保持原样。** |

最后一行很关键。对一个已经过了跟进时间的机会再记一次行动，不会把时间往后推，所以它会继续以 `followup_due` 留在简报的 `today` 里，直到你设置新的 `next_followup`、传 `null`，或改变阶段。响应会返回 `opportunity.next_followup_at`，不用再调一次就能确认这个值。

对已有机会调用 `track`,`next_followup` 的行为一样：省略就是不变。

## 其他字段

| 字段 | 行为 |
| --- | --- |
| `experiment_id` | 把这次行动挂到该实验上；如果机会还没有实验，也把机会挂上去。响应里带 `experiment_progress`。 |
| `link_code` | 这次行动用到的短链接，用于点击归因。 |
| `outcome` | 记录一个结果。与机会或短链接关联时算已归因（`direct`），否则是 `unknown`。如果 `outcome.type` 是 `willing_to_talk` 而阶段不是，`hints` 会提醒你把阶段也传上。 |
| `note` | 额外说明；存在阶段变更或笔记事件里。 |
| `occurred_at` | 事情发生的时间；默认现在。 |
| `idempotency_key` | 用同一个 key 重复调用，会返回第一次的结果并带 `duplicate: true`，不再记录新内容。只要可能重试，就应该传。 |

## 不要记录

私信的原文和个人数据。像“发了私信，约一次通话”这样一句话的 `summary` 就够了。
