消息线程

当前状态:Beta

消息线程用于在已有达人关系或邮件任务上下文存在时,处理 NoxInfluencer 内的沟通线程。

适合什么场景

  • 你需要查看已有消息线程
  • 你需要判断哪些消息任务仍需要回复
  • 你需要按 SaaS 项目、任务创建人、团队成员、合作状态或标签筛选消息中心线程
  • 你要管理某个已知线程的标签、合作状态或草稿状态
  • 你要在发送或定时前,把已确认文件附加到线程草稿
  • 你要管理可复用消息模板上的已确认文件
  • 你要在富文本消息正文中嵌入已确认的公开图片
  • 你要对已有 thread_id 发送、定时或取消一条已确认回复

当前 beta 范围

  • 查看消息线程列表和详情
  • 返回任务级回复状态,包括 needs_replylast_message_directionpending_reason
  • 查看与 SaaS 对齐的项目筛选和任务创建人 / 团队成员筛选选项
  • 解析某个达人 / channel 的相关项目或相关线程
  • 查看、保存和应用消息模板
  • 查看、上传、下载和删除消息模板附件
  • 查看和设置标签
  • 查看和更新合作状态
  • 保存草稿正文
  • 查看、上传、下载和删除草稿附件,并下载已授权的消息历史附件
  • 上传公开图片,用于已确认的富文本 html_body
  • 对一个已有线程发送、定时或取消回复

重要路由规则

message sendmessage schedule 只适用于已有 thread_id 的回复。如果你只有邮件任务 ID,先用 message list --business_kind email_task --business_id <task_id> 找到线程。如果没有线程,应对平台达人或已确认外部邮箱地址改走 邮件任务 路径。

草稿附件属于消息线程草稿。发送或定时前先上传,NoxInfluencer 会在发送时带上这些文件。模板附件属于可复用消息模板,应使用 message templates attachments ... 管理。

富文本内联图片使用 file image upload,并把返回的公开 file_url 放入 html_body。内联图片与私有草稿、历史和模板附件相互独立。

回复状态判断

needs_replylast_message_direction 判断当前线程是否仍需要处理。不要把未读状态当成最终判断依据:打开 message get <thread_id> 可能会让上游线程变成已读,但这不代表当前任务已经处理完成。

message list --status deal 表示达人最后发来消息。它不同于 --status unread,只有返回项里的 needs_reply=true 时,才应当按待回复任务处理。

如果某个达人仍出现在 pending 或 deal 视图里,但你打开的线程已经是 needs_reply=false,先检查同一达人的兄弟任务:

noxinfluencer message get <thread_id>
noxinfluencer message projects <thread_id>

如果某个待处理任务实际不需要回复,不要用空回复或归档 channel 作为绕过方案。当前公开命令面还没有暴露任务级 mark-handled / no-reply-needed 写操作。

SaaS 对齐的列表筛选

构建消息线程筛选前,先使用筛选辅助命令:

noxinfluencer message creator-filters
noxinfluencer message project-filters --creator_uids <user_uid>
noxinfluencer message labels --page_size 20
noxinfluencer message coop-statuses

然后把返回的筛选 ID 传给 message list

noxinfluencer message list --project_ids email_task:<task_id> --creator_uids <user_uid> --coop_status 2 --label_id 12

project_ids 使用公开的 <business_kind>:<business_id> 格式,例如 email_task:1829campaign_offer:99001。不要使用上游原始 business type。

关键命令

构建草稿、发送、定时、标签或合作状态 body 前,先查看 schema:

noxinfluencer schema "message list"
noxinfluencer schema "message project-filters"
noxinfluencer schema "message creator-filters"
noxinfluencer schema "message send"
noxinfluencer schema "message attachments upload"
noxinfluencer schema "message attachments download"
noxinfluencer schema "message attachments delete"
noxinfluencer schema "message templates attachments upload"
noxinfluencer schema "file image upload"
noxinfluencer schema "message labels set"

先读取线程状态:

noxinfluencer message list --business_kind email_task --business_id <task_id>
noxinfluencer message list --project_ids email_task:<task_id> --creator_uids <user_uid> --page_size 20
noxinfluencer message list --status deal --page_size 20
noxinfluencer message get <thread_id>
noxinfluencer message projects <thread_id>

管理已知线程的元数据:

noxinfluencer message labels --page_size 20
noxinfluencer message labels set <thread_id> --body-file labels.json --force
noxinfluencer message coop-statuses
noxinfluencer message coop set <thread_id> --body-file coop.json --force

模板和草稿只用于已有线程:

noxinfluencer message templates list --language en
noxinfluencer message templates save --body-file template-save.json --force
noxinfluencer message templates use <template_id> --body-file template-use.json --force
noxinfluencer message draft save <thread_id> --body-file draft.json --force

发送或定时前,把已确认文件附加到线程草稿:

noxinfluencer message attachments list <thread_id>
noxinfluencer message attachments upload <thread_id> --file brief.pdf --force
noxinfluencer message attachments download <thread_id> <attachment_id> --output ./brief.pdf
noxinfluencer message attachments delete <thread_id> <attachment_id> --force

管理属于可复用消息模板的文件:

noxinfluencer message templates attachments list <template_id>
noxinfluencer message templates attachments upload <template_id> --file brief.pdf --force
noxinfluencer message templates attachments download <template_id> <attachment_id> --output ./template-brief.pdf
noxinfluencer message templates attachments delete <template_id> <attachment_id> --force

单独上传富文本内联图片:

noxinfluencer file image upload --file message-hero.jpg --force

内容和发件人确认后,才发送或定时:

noxinfluencer message send <thread_id> --body-file send.json --force
noxinfluencer message schedule <thread_id> --body-file schedule.json --force
noxinfluencer message cancel <thread_id> --force

安全执行规则

  • 写操作默认 dry-run,真正执行前需要确认并使用 --force
  • 发送和定时需要先确认内容、sender_auth_id 和准确目标线程
  • 发送和定时的 html_body 必须包含可见文本;<p><br></p> 这类空富文本占位会被拒绝
  • 不要用空回复来清除待处理状态
  • status=draftstatus=scheduled 需要同时提供 --business_kind--business_id;上游项目标签页已经废弃
  • --project_ids 不能和 --business_kind / --business_id 同时使用
  • --creator_uids 来自 message creator-filters,表示 SaaS 任务创建人或团队成员 ID,不是达人 channel ID
  • message schedule 需要带整点 timezone offset 的 ISO 8601 时间,例如 Z+08:00-05:00
  • 草稿附件上传使用 --file,不是 --body-file
  • 一个线程最多支持 2 个草稿附件,单个最大 10MB;危险可执行文件或脚本扩展名会被拒绝
  • 只有确认准确 thread_id 后,才上传或删除草稿附件
  • 上传或删除模板附件前,确认准确的 template_id
  • 一个消息模板最多支持 2 个私有附件,单个最大 10MB
  • 下载附件需要有权访问的 attachment_id,并写入 --output;只有明确覆盖本地文件时才使用 --overwrite
  • 富文本公开图片 URL 不是私有附件

当前边界

  • 消息线程不会从零创建外部消息渠道
  • 当没有 thread_id 时,它不会创建新的消息线程
  • 它不暴露任务级 mark-handled 或 no-reply-needed 写操作
  • 它不会代你撰写消息文案
  • 它不操作 NoxInfluencer 之外的外部消息平台
  • 部分项目标签页概念在上游已废弃,当前筛选条件以 CLI schema 为准
  • message get 内联 composer state 和 metadata;当前没有单独的 draft-get 或 metadata-get 公开命令
  • 草稿 / 历史附件与消息模板附件是两套独立的公开命令路径,不要混用其中的 ID

推荐下一步