全部文章

Telegram 职位订阅提醒 MVP 产品需求文档

个人项目Read in English

Telegram 职位订阅提醒 MVP 产品需求文档

版本:v0.1,待审阅。日期:2026-11-04。

本文整理已确认的产品选择,并为常规流程给出默认方案。标注“默认”的细节是供审阅的产品建议,不代表用户已逐项确认。MVP 按完整可用的任务链路验收,不按开发工时裁剪。

1. 目标与边界

为英文远程求职者提供 Telegram 内的职位查询、条件订阅和每日新岗位汇总。用户能找到岗位、理解匹配原因、打开来源了解详情并申请,且能随时修改、暂停或删除订阅。

首发候选数据源为 Jobicy,具体实施前核对当时有效的 API 与使用规则。界面和岗位提示使用英文。当前来源中的国家和职业都开放,不因岗位少而关闭;地域分类中的 Europe、APAC、Anywhere 等需转换为用户可理解的匹配范围。结果代表当前来源收录范围,不代表所有市场机会。

MVP 免费;未来商业化偏向广告。当前不建设支付、会员或广告功能。多来源接入是可能性,第二、第三个来源实际接入时再决定接口抽象、分类归一和跨源去重,不以“跨来源聚合”作为当前产品承诺。

2. 已确认的决策

项目决定
受众英文远程求职者,按居住国家匹配
范围开放来源中的所有职业与国家,少量结果和零结果正常呈现
入口Telegram 机器人内按钮,关键词通过消息输入
查询及订阅共用一套条件,先查看结果,再开启订阅
国家、职业均支持多选,各自提供“不限”
匹配同组内 OR,国家、职业、关键词组之间 AND
关键词可选;匹配标题及正文,不区分大小写;展示命中文字片段
地域国家匹配包含明确适用的宽泛地域;正文中的明确限制优先;保留原始标签
订阅支持多个,共用用户每日汇总时间
发送每日汇总;没有新匹配不发送
合并同一岗位命中多个订阅仅出现一次,标明命中的订阅
展示摘要加机器人内分页;完整描述、申请在原站完成
排序按来源发布时间从新到旧
人才库暂不设计专门的筛选与排除机制,保留来源信息
商业化免费;MVP 不建设商业化功能

3. 核心用户流程

3.1 首次进入与查询

用户启动机器人,看到用途、当前来源、覆盖边界和 Find jobs、My subscriptions、Settings 入口。

点击 Find jobs 后依次选择国家、职业分类、可选关键词,随后查看条件摘要并执行查询。选择列表需支持翻页、显示当前选中项、返回修改和确认。国家和职业默认均为“不限”;选择“不限”清除该组其他选项,选择具体项则取消“不限”。这是默认交互。

多选列表翻页不应丢失选择;长列表提供列表内名称查找入口作为默认方案。该查找只帮助选择国家或职业,不改变职位关键词条件。

查询结果展示匹配总数、条件摘要、岗位列表及 Subscribe、Edit filters、Next/Previous 按钮。默认每页 5 条,作为可调整的展示参数。

零结果显示“No jobs found in our current listings”,可修改条件或照常订阅。不显示“这个国家没有岗位”等超出覆盖证据的结论。

3.2 开启订阅

用户在结果页点击 Subscribe,确认条件并保存。首个订阅需设置当地时间与时区;后续订阅共用该设置。

默认使用可搜索的城市/时区选择列表和时间按钮选择器,并用当地时间、时区名称、下一次发送时间确认。Telegram 不提供可靠的用户时区,不能默认为服务器时区。夏令时按所选时区变化,维持当地接收时间。

保存后显示订阅摘要,提供修改、暂停、删除入口。默认按条件生成订阅名称,避免新增必填步骤。完全相同条件的活动订阅提示“已订阅”并打开现有订阅;不同条件允许并存。MVP 不人为设置产品层面的订阅数量上限,服务端仍需基本请求限流。

初次查询已展示现有岗位;订阅后的提醒针对新发现的匹配岗位,不在次日重新推送整批现有存量。

3.3 每日汇总

在用户设置的当地时间,汇总各活动订阅自上次处理后新发现的匹配岗位。

  • 按来源稳定岗位 ID 合并,同一岗位仅出现一次,标明命中订阅。
  • 按来源发布时间从新到旧;相同时间以稳定 ID 排序。来源时间缺失时使用发现时间,并标明时间类型,避免伪装为发布时间。
  • 消息显示新增总数和前 3 条岗位,提供 View all,在机器人内每页 5 条查看。
  • 全部结果必须可访问,不因摘要条数限制丢弃;历史汇总列表按生成时的结果集合分页,避免翻页时顺序跳动。
  • 无新匹配不发送消息。
  • 汇总中的岗位若已关闭,查看时标记已关闭,避免继续展示为已确认开放的岗位。

“三条摘要、五条分页”为默认展示参数;实际消息必须遵守 Telegram 长度和按钮限制。

3.4 订阅管理与设置

My subscriptions 列出各订阅的条件、活动/暂停状态,并支持编辑、暂停、恢复、删除。删除前显示一次具体对象确认,防止误触。

Settings 支持更改每日接收时间、时区,以及暂停/恢复全部提醒;恢复全部不应恢复用户此前单独暂停的订阅。提供停止提醒及清除个人订阅数据的入口,便于用户退出。

默认规则:编辑条件后立即提供新结果;新增条件当前已有岗位不自动作为新岗位发送。恢复暂停时同样不补发暂停期间的全部存量,界面提供“查看当前匹配”。失败重试造成的漏发与用户主动暂停分开处理。

4. 匹配规则

4.1 条件逻辑

例如:国家选择 UK、Germany;职业选择 Marketing、Sales;关键词输入 SaaS。

条件为:(UK 或 Germany 适用) 且 (Marketing 或 Sales) 且 (标题或正文含 SaaS)。

国家与职业选择“不限”时,该组不施加限制。不限国家可展示地域未说明记录,并如实标明;选择具体国家时,地域不明确记录不自动认定适用。

4.2 地域

匹配来源明确标注的国家及明确覆盖它的范围,如 UK、Europe、Anywhere。保留原始地域标签,结果注明“地域匹配不等于已确认工作权或签证资格”。正文中明确的排除条件优先。

实现时需定义当前来源实际出现的区域映射,不能只按文字包含关系判断。对于 APAC、EMEA 等边界不明确或有争议的标签,依据来源定义;无法确认时保守标注,不扩大推断。

正文限制优先是产品目标,但不承诺机器可识别所有自由文本。MVP 使用明确字段、可解释规则和已识别限制;难以确定的限制保持未知,展示相关原文供判断。不能将国家筛选描述为资格审核。

4.3 职业和关键词

职业使用当前来源提供的分类,一个岗位属于任意选中分类即匹配。缺分类记录允许出现在“不限职业”结果中,显示“未分类”。不提前设计跨源职业体系。

默认关键词是一个可选文字短语:去除两端空白,正文清除 HTML 后进行不区分大小写的连续文字匹配;空值等同未设置。首发不提供复杂搜索语法、语义扩展或自动同义词。显示一段命中文字上下文,并安全处理 HTML。后续依据实际搜索反馈再调整分词和相关性。

4.4 编辑、重复和重新发布

来源稳定 ID 是首发岗位身份。字段编辑、源发布时间变化或同 ID 重新发布,默认不作为新岗位反复提醒。来源生成新 ID 的重复记录可能仍出现,保留为已知质量限制;不在 MVP 承诺解决所有语义重复。

5. 岗位信息与原站跳转

列表/摘要的核心字段为职位名、公司、原始地域、来源发布时间和薪资(有则展示,无则“未说明”,不推算)。薪资需带币种和周期,不能将时薪与年薪混为一个值。

订阅匹配结果标明命中的订阅;填写关键词时显示命中文字片段。提供来源署名及原始链接,点击进入来源页面查看全文和申请。免费 Jobicy API 链接先到 Jobicy 页面,不将其宣传为直达雇主申请页。

保留来源已提供的人才库等信息,不额外增加专门分类功能。机器人提供的摘要不能替代原文完整要求。

6. 数据更新和可用性

Jobicy 当前文档描述:近 7 天 feed、有约 3 小时延迟、每轮同步最多每小时启动一次、轮内按游标顺序翻页;历史 ID 支持批量状态检查。开发接入时再次核对。默认采用每小时一次同步和按规则批量状态检查,不承诺实时或固定最长延迟。

首次导入作为初始存量;记录来源发布时间和本产品首次发现时间。feed 超过 7 天后消失不代表关闭;已保存岗位依靠状态检查管理,不能一律删除。明确 closed 的岗位退出活动搜索和新汇总;unknown 记录标为状态未确认,暂不作为已确认开放岗位推送。

每轮同步需保存进度,失败不得将已有岗位批量标关闭;恢复后继续处理,不能因失败推进游标或发送水位而永久丢失新记录。接口响应可以出现状态变化或缺字段,需降级展示及记录错误。

用户可查看最近成功同步时间。超过预定同步周期仍未成功时,状态显示“更新延迟”,不能声称当前没有新岗位。每日发送时如来源异常但仍有已收集新岗位,可附上数据更新时间发送;无可用新岗位时不群发空消息,异常通过状态入口和内部告警体现。

7. 提醒可靠性

订阅和发送状态需要持久化。汇总任务重跑不应重复生成同一日同一用户的正常汇总;网络失败按状态重试,不能先将未成功发送标记为已送达。

Telegram 返回 429 时按要求延后;用户屏蔽机器人时停止无效重试并记录不可达状态。服务恢复后默认补送尚未成功发送的岗位,合并积压并排除已关闭记录,不逐天补发大量消息。

Telegram 网络超时可能出现“服务器已发送但客户端没收到成功响应”的情况,无法绝对保证一次送达;保留任务状态、谨慎重试和异常记录,降低重复概率。

内部需要最低限度的同步失败、汇总失败、队列积压可见性,无需为 MVP 建设复杂运营后台。

8. 埋点与判断指标

事件主要字段/用途
start入口标识(若有),衡量来源
search_completed国家、职业、是否有关键词、结果数量;识别需求与供应缺口
zero_results与 search_completed 对应,避免重复计数
subscription_created/edited/paused/deleted条件与状态,观察持续关注方向
digest_generated/sent/failed用户、汇总 ID、匹配数、去重后数量、发送状态
result_page_viewed查询/汇总场景、页码,观察实际使用
job_open_clicked岗位 ID、来源、订阅/查询场景,观察申请意向
delivery_unreachable屏蔽等明确不可达,区别于静默不用

点击统计不得破坏原站链接和署名要求。默认采用与岗位关联的 Telegram 回调入口记录点击,再提供明确的原站 URL 按钮;直接 URL 按钮的点击不能从 Bot API 凭空获得,不虚报为已观测。开发需核实可否用一次回调直接打开链接;不支持时明确多一次按钮操作的交互,不搭建隐形跳转追踪域名。

默认分析关键词需求时只保留必要、脱敏后的统计,避免收集聊天全文;不要求额外联系方式。提供清除个人订阅和可关联事件数据的能力。

首发观察:启动→查询→订阅转化,零结果率,各国家/职业的搜索需求与岗位供给,收到有内容汇总的用户占比,岗位点击,7/14 日主动使用,以及暂停/删除/不可达情况。Bot API 无法直接提供私聊消息阅读率,不以发送成功代替阅读。用户找到工作后停止使用可能是成功,不将所有离开视为产品失败。

不预设必达增长数值。低供给细分仍保留入口,其数据用于指导后续来源调查。后续扩展由实际需求与成本决定。

9. MVP 验收场景

  1. 新用户可全程用英文按钮完成多国家、多职业选择,关键词可跳过,分页选择不丢状态。
  2. 同组 OR、组间 AND 生效;“不限”不与具体项同时生效;零结果可调整或订阅。
  3. 搜索和订阅使用一致规则;标题及正文关键词可命中,并显示片段。
  4. 对已定义区域映射正确匹配国家;已识别明确排除生效;未知信息不伪装为已确认资格。
  5. 可以建立多个不同订阅,并修改、暂停、恢复、删除;时区和时间能被确认和修改。
  6. 查询能看到初始存量,首日汇总不重新推送订阅时已经存在的全部岗位。
  7. 同岗位匹配多个订阅只显示一次并附订阅名称;结果按发布时间排序。
  8. 汇总总数与完整分页一致,全部岗位可访问;没有新岗位不发送。
  9. 任务重启后订阅和待发送状态保留;失败可重试,来源异常不清空数据,限流不丢消息。
  10. feed 窗口滚出不当作关闭;状态关闭退出活动结果;过时汇总查看时不误称仍开放。
  11. 退出、暂停和删除数据能实际生效;所有申请入口回到来源并保留署名。
  12. 埋点可区分无供给、有供给未点击、发送失败;不伪造阅读量或原站申请完成量。

10. 当前待实施核实事项

这些是实现调查事项,无需重新把已确认产品范围拆成选择题:

  • 接入时有效的 Jobicy 许可、频率、字段、状态语义,以及近 7 天数据的连续新增和故障情况。
  • 实际国家/区域标签与职业分类,尤其含糊区域的映射规则和正文限制识别范围。
  • Telegram 长消息、按钮、多选状态、时区选择及点击记录路径的实际交互验证。
  • 部署、机器人身份、数据保留期限和内部故障通知渠道,在进入实施阶段按真实环境确定。

参考资料:Jobicy API 文档、Telegram Bot FAQ。数据源调研采样于 2026-11-04(北京时间),接口及使用规则在实施时需要再次核对。