# T588 — ai-followup-message-generation

> Status: `done`  
> Milestone: `M5`  
> Kind: `feat`  
> Est. change: `~140 lines`

## Goal

完成後系統應：可在 Contact 上產生 AI 追蹤訊息，計入 `ai_copy`／`source=radar.followup`，且同樣受 `forbidden[]` 過濾。

## Depends on

- T510、T587

## Inputs

- Spec：`../spec.md` §4.7.3、§5.5、§9.4（FU-02）
- 既有：T549 的 `forbidden_filter.go`

## Outputs

### 程式變更（預期路徑）

| 路徑 | 動作 | 說明 |
|------|------|------|
| `apps/backend/generate/api/crm.api` | edit | followup message 生成 req／resp |
| `apps/backend/internal/module/crm/usecase/followup_message.go` | add | 組 prompt（原商機原文＋時間軸摘要＋ServiceProfile） |
| `apps/backend/internal/logic/crm/createFollowupMessageLogic.go` | edit | 生成＋扣點＋錯誤映射 |

### 行為變更

- 復用 forbidden 過濾（命中重生一次，仍命中回明確錯誤且不輸出）。
- 生成結果寫一筆 `note` 型 touch（記錄產出內容），送出仍為人工。
- 計費：`ai_copy`／`source=radar.followup`。

## Out of scope

- 自動送出追蹤訊息（本輪不做）

## Acceptance

- [x] FU-02：產出成功且 usage 記 `ai_copy`／`radar.followup`
- [x] forbidden 命中兩次回錯誤且無內容外洩
- [x] 指令：

```bash
cd apps/backend && go test ./internal/module/crm/... ./internal/logic/crm/... -count=1
```
