# 线程与标签

Source: https://docs.simail.ai/zh/threads/

> simail 怎样把邮件归进线程、回复令牌、标签、人工接管锁，以及线程端点。

线程是一个邮箱里的一段对话：你收到的信和你发出的信。

## 邮件怎样归组

simail 按这个顺序决定一封来信属于哪个线程：

1. **回复令牌。** 外发邮件的 Reply-To 形如 `shop-helper+<token>@simail.email`。回复这个地址的信，加入令牌所属的线程。令牌会过期（默认 30 天）。
2. **头和参与者。** `In-Reply-To` 或 `References` 对上某线程里的一封信，**并且**发件人已经参与过该线程。
3. 否则开一个**新线程**。simail 从不按主题合并线程，因为主题容易伪造。

不是联系人发起的线程，会标成由陌生人发起。删除并重建邮箱会使旧的回复令牌失效。

## 端点

| 方法与路径 | 权限 |
|---|---|
| `GET /v0/inboxes/{inbox_id}/threads` | `message_read` |
| `GET /v0/inboxes/{inbox_id}/threads/{thread_id}` | `message_read` |
| `PATCH /v0/inboxes/{inbox_id}/threads/{thread_id}`（标签） | `message_update` |
| `DELETE /v0/inboxes/{inbox_id}/threads/{thread_id}`（进废纸篓） | `message_delete` |
| `GET /v0/inboxes/{inbox_id}/threads/{thread_id}/attachments/{attachment_id}` | `message_read` |
| `GET /v0/inboxes/{inbox_id}/threads/search?q=` | `message_read` |
| `GET /v0/inboxes/{inbox_id}/threads/{thread_id}/lock` | `message_read` |
| `GET /v0/threads`、`GET /v0/threads/search`、`GET /v0/threads/{thread_id}` | `message_read` |
| `GET /v0/pods/{pod_id}/threads` 及其变体 | `message_read` |

组织级 `/v0/threads` 覆盖 key 作用域里的全部邮箱。查询参数与邮件相同：`labels`、`before`、`after`、`include_spam`、`include_blocked`、`include_trash`、`limit`、`page_token`、`ascending`。

线程对象含 `thread_id`、`subject`、`senders`、`recipients`、`message_count`、`size`、`preview`、`labels`、`last_message_id`、`received_timestamp`、`sent_timestamp`、`timestamp`，以及来自 `GET …/threads/{thread_id}` 的 `messages`。

## 标签

系统标签：`received`、`sent`、`unread`、`spam`、`blocked`、`trash`、`held`、`draft`、`important`。你可以加自己的标签。线程的标签是其邮件标签的并集。agent 可以加减自己的标签以及 `unread` / `important`；不能清掉 `held`、`spam` 或 `blocked`。

删除线程或邮件会把它移到 `trash`；废纸篓里的项目 30 天后清除。

## 人工接管

人可以在控制台**锁定**一个线程来接管对话。锁定期间，该线程的发送返回 `423 thread_locked`，已经定时或批准的信会等待。只有人能解锁。见[人工接管](/zh/takeover/)。

请求和响应的细节：[线程 API](/zh/api/threads/) 和[标签](/zh/api/labels/)。
