<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>TeamUp 博客</title>
    <link>https://teamup-live.com/zh-hans/blog</link>
    <atom:link href="https://teamup-live.com/zh-hans/blog/feed.xml" rel="self" type="application/rss+xml"/>
    <description>在群聊里组织业余比赛：产品用法、比赛日和开发日志。</description>
    <language>zh-Hans</language>
    <lastBuildDate>Sun, 06 Sep 2026 09:00:00 GMT</lastBuildDate>
    <item>
      <title>场上踢球的人，用自己的 Apple Watch 记比分</title>
      <link>https://teamup-live.com/zh-hans/blog/score-on-apple-watch</link>
      <guid isPermaLink="true">https://teamup-live.com/zh-hans/blog/score-on-apple-watch</guid>
      <pubDate>Sun, 06 Sep 2026 09:00:00 GMT</pubDate>
      <description>记进球的人通常上不了场。记忆、场边的手机和中场休息时的备忘录会在哪里失效，以及用手腕记录一场比赛究竟是什么样子：死球时点几下，比赛进行中用语音。</description>
      <content:encoded><![CDATA[<p>业余比赛里记比分的，是那个答应不上场的人。通常是场边拿着手机的一位：他数进球，记住助攻，然后在下半场某个时候发现，最近二十分钟没人记过。或者干脆没人记，一小时后群里以「不是 4 比 3 吗」开场。</p>
<p>两条路都不好。第一条里，你付了场地费却没上场。第二条里，这场球没有结果，一个月后也没有历史。</p>
<p><img id="fig-1" src="https://teamup-live.com/blog/score-on-apple-watch/lead.zh-hans.jpg" alt="用 Apple Watch 记比分：一名穿红色号坎的球员在比赛继续、队友回撤本方半场时，对着手表说出这粒进球"></p>
<p>手表解决的正是这个岔路：记分的人可以就是踢球的人。手机留在包里，双手空着，手腕本来就带在身上。</p>
<h2>比分实际上是怎么记的</h2>
<p>四种办法，四种都会在可预见的地方失效。</p>
<p><strong>靠记忆。</strong> 前二十分钟管用。之后比分谁都记得，第三个球是谁进的谁都不记得，而为此争论的时间比那次进攻本身还长。助攻则从来没有人记得住。</p>
<p><strong>一个人拿着手机。</strong> 最准确也最贵的办法：他站在边线上，而不是踢球。上场的从十个人变成九个人，并且刚好维持到他厌烦的那一周。</p>
<p><strong>中场休息时在手机上记。</strong> 手机在包里，包在铁丝网边。等你走过去，一半细节已经蒸发。到第三场，备忘录写的是「4 比 3，都进了」。</p>
<p><strong>边打边往群里发消息。</strong> 场上没法打字，于是都在事后打。结果是一串「2 比 1」「现在 3 比 1」「不对，3 比 2」，没有人能从中整理出一张表。</p>
<p>四种办法有一个共同点：<strong>要记录，就得从比赛里退出来。</strong> 要么踢球不记分，要么记分不踢球。</p>
<h2>手表上的应用做什么</h2>
<p>TeamUp Live 把手表变成比赛记录本。屏幕上显示比分和计时。它会像任何手表一样熄屏，但比分和计时也住在表盘的小组件里，从那里点一下就能打开新事件。</p>
<p>一次事件按步骤记录：<strong>Add</strong>、事件类型、球队、球员、<strong>Confirm</strong>。一粒进球是五次点击，这才是诚实的数字，而不是「一次点击」：应用必须知道是谁、为哪一方打进的，否则统计里既没有射手也没有助攻。这件事在死球重新开球时做，趁大家往本方半场走，而不是在射门那一刻。</p>
<p><picture id="fig-2"><source media="(max-width: 767px)" srcset="/blog/score-on-apple-watch/watch-log.zh-hans.tall.anim.webp"><img src="https://teamup-live.com/blog/score-on-apple-watch/watch-log.zh-hans.anim.webp" alt="Apple Watch 上的 TeamUp Live 界面：一步步记录一粒进球，比分从 2 比 1 变成 3 比 1，这条记录出现在比赛记录里"></picture></p>
<p><em>在 watchOS 模拟器中录制：真实的应用，真实的界面。</em></p>
<p>记分牌上的数字立刻变化，因为比分是在手表本地根据事件记录算出来的，而不是向服务器要来的。之后这条记录再走到手机，从手机走到服务器。</p>
<p><strong>用语音更快，而且这是唯一能不停下来就完成记录的方式。</strong> 按下麦克风，说一句「李伟进球，王强助攻」，就结束了。录音发到服务器，先变成文字，再对照你真实的名单来读：李伟和王强被匹配到球员，进球和助攻变成两条记录，比分随之更新。</p>
<p>一个有用的细节：事件类型本身并不是足球专属的。它按每场活动配置，所以计时类项目、打到 N 分的局、冲向目标的比拼和有裁判打分的回合，同样能在手腕上跑起来。</p>
<h2>手机在更衣室时会怎样</h2>
<p>这才是常态：手机在包里，包在更衣室，比赛正在进行。这段时间手表独自工作。</p>
<p>手表记录可以等待手机恢复连接后同步。请查看待发送计数。语音备忘的处理时限为六小时。同步完成之前，不能认为全队已经能看到这条记录。</p>
<p>有一个例外，提前说出来更诚实：<strong>比赛必须在开场前于手机上选好。</strong> 活动列表、名单和权限都由手机送到手表，手表自己不选任何东西。</p>
<h2>应用刻意不做的事</h2>
<p><strong>没有 iPhone，手表用不了。</strong> 它是伴侣应用：没有一台配对并运行 TeamUp Live 的手机，它拿不到比赛、名单和权限。没有配对的手表没有用，但需要这台手机的只有选择用手表的人。</p>
<p><strong>不是每个事件一次点击。</strong> 进球五次，开始计时或切换节次两次。我们不会把它说成「一键搞定」，因为你第一场比赛就会自己数。</p>
<p><strong>语音不会立刻回应。</strong> 语音备忘通过配对的iPhone发送到服务器。处理时间取决于网络和识别情况，并非即时完成。如果自动解析无法解决，备忘可能转交给已关联群聊中的助手。没有合适的群聊时，处理可能失败。请核对结果中的球员和事件，语音识别仍可能出错。</p>
<p><strong>从手表记的进球不会在群里新建记分牌。</strong> 它只更新已经有人要过的那一块。群里的实时解说会滞后几分钟，而且只在部分计分模式下存在。</p>
<p><strong>这不是运动追踪应用，也不妨碍你用的那个。</strong> 这个应用记录的是比赛：它不开自己的锻炼、不读心率、不索取健康数据。手表上锻炼的位置仍然空着，所以照常用你惯用的应用开始锻炼，它会在后台继续记录，而前台是我们的比赛记录。</p>
<h2>比赛之后剩下什么</h2>
<p>来自手腕的记录不只是记分牌上的数字。它们汇成逐分钟的比赛脉络、按球员的统计，以及一支球队活在自己群聊里的历史：<a href="https://teamup-live.com/zh-hans/blog/chat-is-the-app">为什么球队的应用就是它的群聊</a>。半年之后，「我们队谁进球最多」就不再是一个靠相信的问题。</p>
<p>设置只占一屏：<a href="https://teamup-live.com/zh-hans/docs/get-started">如何开始</a>。iPhone 和 Apple Watch 上的应用在 App Store，名字叫 TeamUp Live。</p>

<p><a href="https://apps.apple.com/cn/app/teamup-live/id6762489462?pt=121910168&ct=site_watch&mt=8">App Store 上的 TeamUp Live</a></p>]]></content:encoded>
    </item>
    <item>
      <title>球队早就有应用了：就是你们的群聊</title>
      <link>https://teamup-live.com/zh-hans/blog/chat-is-the-app</link>
      <guid isPermaLink="true">https://teamup-live.com/zh-hans/blog/chat-is-the-app</guid>
      <pubDate>Sat, 05 Sep 2026 09:00:00 GMT</pubDate>
      <description>TeamUp 为什么存在，为什么它住在球队群聊里面而不是旁边：报名、分队、分摊和实时比分，用平常的话说，什么都不用装。</description>
      <content:encoded><![CDATA[<p>每支业余球队早就有自己的主应用了，就是群聊。定时间在那儿，为名单吵架在那儿，凑场地费在那儿，有人坚持第三个球是他进的也在那儿。一支球队周二踢球需要的一切，都发生在那儿。问题不在群聊。问题在群聊周围的手工活：数置顶消息下面那一列「+1」，把人分成两队，记住谁付了钱、谁只是说会付。</p>
<p>这些活是一个人在干：组织者。不是因为谁任命了他，而是因为他是唯一一个什么都看见了的人：报名、整场比赛、落到自己卡上的转账。TeamUp 存在的意义，就是把这份活从他手里拿走，同时不把群聊从球队手里拿走。</p>
<p><img id="fig-1" src="https://teamup-live.com/blog/chat-is-the-app/lead.zh-hans.jpg" alt="给业余球队组织者的应用：赛前的车里，手机上的球队群聊，不用安装任何东西"></p>
<h2>为什么不是又一个应用</h2>
<p>新应用可能很好用，但全队还得约定安装、登录，并记住去哪里报名。如果有人在应用里回复，有人仍在群聊里回复，组织者又要合并两份名单。TeamUp选择保留熟悉的聊天入口，再为它加上记录功能。</p>
<p>所以 TeamUp 不要求球队搬去任何地方。一个叫 Rocky 的助手被加进 Telegram 或 VK 的群里，读大家本来就在那儿写的东西：「+1」、「我和一个朋友」、「把我去掉」、「约翰付了」、「现在几比几」。球员什么都不装、什么都不订阅、什么都不学。他们用一年前一样的话在群里写。变的只是这些话接下来会发生什么。</p>
<p><img id="fig-2" src="https://teamup-live.com/blog/chat-is-the-app/chat-demo.zh-hans.anim.webp" alt="在群聊里带一支业余球队：「+1」、「我和一个朋友」、「把我去掉」和「谁来?」不需要单独的应用就能用"></p>
<p><em>这是演示。在真实的群里，助手的回复由模型用该群自己的语言写出，所以措辞会不一样。</em></p>
<p>先说一个限制，免得你点进去之后才发现：机器人住在 Telegram 和 VK 里。WhatsApp 里加不了。那边的球队有另一扇门，报名链接，下面会讲。</p>
<h2>真正从组织者手里拿走的是什么</h2>
<p><strong>报名。</strong> 每位球员在当前名单中都有单独一行。编号方便指明是谁，但有人取消报名或整份名单被替换后，编号可能改变。按编号操作前，先索取最新名单并核对姓名。 <a href="https://teamup-live.com/zh-hans/blog/roster-in-group-chat">人数超过十个之后，怎么在群聊里管住参赛名单</a></p>
<p><strong>分队。</strong> 「分成2队」把确认名单随机、均匀地分开；「约翰去2队」只挪一个人，不重新抽签。如果已经有队伍，机器人会先问，再用新的分法覆盖。没有「按水平分队」：不存在球员评分，我们也不会编一个。四种看起来公平的分法各自在哪里失效：<a href="https://teamup-live.com/zh-hans/blog/split-teams-fairly">分队不用吵四十分钟的办法</a>。</p>
<p><strong>分摊。</strong> 球员在同一个群里写「付了」，机器人记下一条申报。确认的是你，看过银行之后：「他说付了」和「钱到了」之间有区别，这个区别以状态显示出来。「谁没付?」回来的是跨越所有往期比赛的名单，一个月后、五场之后都一样。钱直接到你这儿，到你自己的收款信息；我们不代管也不经手，只记账。它怎么运作，以及为什么催的是机器人不是你：<a href="https://teamup-live.com/zh-hans/blog/collect-game-fees">收球局分摊，不用追着任何人要</a>。</p>
<p><strong>比分。</strong> 先请Rocky在Telegram里发布记分板，之后它才会按比赛记录更新。可以从群聊、应用或Apple Watch记录事件；手表上需要选择事件类型、队伍和球员，再确认。语音在服务器处理。群外的人可以打开无需登录的观赛链接。比分和报告只反映已经记录并同步的内容。</p>
<p><strong>记忆。</strong> 球员卡使用本组的报名、已结束比赛和比赛记录。首次出现日期指首次报名日期。它不核实实际到场，也不统计退出次数：没来但仍留在名单上的人不会被自动识别。保存的备注提供背景，不会生成用于实力分队的评分。</p>
<h2>留在你手里的东西</h2>
<p>写在这儿，比让你打完第一场才发现要诚实。</p>
<p>转账由组织者核对银行后确认。报名触发下一场比赛自动创建时，不复制上场费用。如果明确要求复制上场设置，费用也可能一并复制。开放报名前，请检查日期、人数上限和金额。</p>
<p>通过公开链接报名需要用Telegram、Apple或VK登录。手表需要配对的iPhone。 语音备忘通过配对的iPhone发送到服务器。处理时间取决于网络和识别情况，并非即时完成。如果自动解析无法解决，备忘可能转交给已关联群聊中的助手。没有合适的群聊时，处理可能失败。请核对结果中的球员和事件，语音识别仍可能出错。</p>
<p>还有一件事。助手用群里写的那种语言回答，无论是哪种。每次回答都消耗群的积分：这不是免费的后台进程，我们也不假装它是。</p>
<h2>通往同一支球队的三扇门</h2>
<p>群聊、网站和TeamUp Live使用同一份名单和费用记录。在应用里提问，回答也留在应用里，整段对话不会复制到球队群聊。但操作会改变共享数据，也可能更新比赛卡片。组织者可以另外要求发布群公告。</p>
<p>这几扇门没有一扇是必须的。在群里说话本身就是一条完整的路，其余的只是同一支球队的不同视角。在应用里建的球队，用一个码一分钟就能连上自己的群。群在 WhatsApp 里的球队，往里丢一条报名链接：人在浏览器里打开，看到比赛、时间和已经来了谁，点一下「我来」。</p>
<p>设置只有一屏：<a href="https://teamup-live.com/zh-hans/docs/get-started">从这里开始</a>。但不设置也能开始：把机器人加进群，写一句「周四19点踢」。剩下的它自己会问。</p>

<p><a href="https://t.me/rocky_agent_bot?start=bgchat-is-the-app">把机器人加进球队群聊</a></p>]]></content:encoded>
    </item>
    <item>
      <title>分队不用吵四十分钟的办法</title>
      <link>https://teamup-live.com/zh-hans/blog/split-teams-fairly</link>
      <guid isPermaLink="true">https://teamup-live.com/zh-hans/blog/split-teams-fairly</guid>
      <pubDate>Fri, 04 Sep 2026 09:00:00 GMT</pubDate>
      <description>抽签、队长挑人、报名顺序。每种看起来公平的分队方式各自会在哪里失效，以及名单定下来之后，「随机」和「手动」到底做了什么。</description>
      <content:encoded><![CDATA[<p>开赛前两分钟，群里冒出一句「6打10?」。这时候已经有两个人各自贴了一份不同的名单，第三个人在问是不是把约翰漏了。这一刻没人在聊足球，大家在争哪一份名单算数、最后一次数人头的是谁。而这一切发生在一块<a href="https://teamup-live.com/zh-hans/blog/collect-game-fees">已经按小时付过钱</a>的场地上。</p>
<p>如果你常年攒球局，这个场面不陌生。分队本身三十秒就能做完。让十二个人达成一致要四十分钟。</p>
<p><img id="fig-1" src="https://teamup-live.com/blog/split-teams-fairly/lead.zh-hans.jpg" alt="赛前如何把一群人分成两队：球员从包里往外拿红蓝两色的号坎，名单已经在群里定好了"></p>
<h2>真正被用来分队的四种办法</h2>
<p>几乎每个固定球局都已经在用其中一种，只是通常没人把它的名字说出口。四种都公平。四种也都会在一个具体且可预料的地方失效。</p>
<h3>抽签：帽子里的纸条，或者报一二一二</h3>
<p>最老的办法：每人报个数，单数对双数。快，看得见地中立，也没人能说你是在给自己攒队。失效发生在第二十分钟左右，比分5比0，输的一边只是在把时间踢完。「签就是这么抽的」完全属实，作为安慰完全没用。另一种失效更安静：在两个人退出、一个客人到场 <em>之前</em> 抽的签，已经不是大家当初认可的那一签了；而重抽看上去像作弊，哪怕它并不是。</p>
<h3>队长轮流挑人</h3>
<p>两个队长一个一个挑：「我要迈克」「那我要克里斯」，一直挑到名单见底。在不做表格的业余球局里，这是最接近按水平分队的方式，因为队长确实知道这周谁状态好。它同时也是最慢的方式，挑到一半有人进来就会彻底卡住，而当着一整个群被最后一个挑走，是那种能记一整个赛季的事。成年人一点也不比小孩迟钝。</p>
<h3>按报名顺序切</h3>
<p>先报名的八个人一边，剩下的一边。机械、瞬间完成、没什么可争的：名单本来就有，从中间切开就行。它和场上平衡的关系是零，所以差不多每三周就会撞出一边偶然过强。而且它悄悄奖励了看手机最快的人，一个赛季下来，这也成了另一种不公平。</p>
<h3>一个人拍板，直接发成品</h3>
<p>当下最快的选项。也正是本文开头那个场景。一个人在赶时间的情况下凭记忆分配，后面没人重新核一遍。而当第二个人出于好意独立做了同样的事，同一个话题里就并排躺着相隔一分半的两份名单，现在群里得先弄清哪份算数，然后才轮到谁穿哪件号坎。</p>
<h2>争的几乎从来不是分队方式</h2>
<p>看看这四种各自在哪里失效，每次都是同样三件事。</p>
<p><strong>分的时候名单还没关。</strong> 你按十四个人分，来了十二个。两个迟到的「+1」是在队伍公布之后才到的。任何方式套在过期名单上，得到的都是过期的分队。让人觉得不公平的是这个，不是抽签本身。如果漏水的是报名环节本身，那要先修的是它：<a href="https://teamup-live.com/zh-hans/blog/roster-in-group-chat">人数超过十个之后，怎么在群聊里管住参赛名单</a>。</p>
<p><strong>没人手里有当前版本。</strong> 分队先是在某个人脑子里，然后在一条消息里，然后在一条竞争的消息里。十分钟后，「我在哪队」的诚实答案是「往上翻，然后祈祷」。</p>
<p><strong>改一处就等于全部重来。</strong> 马克斯迟到了。抽签和轮流挑人都没有一个明确的加人办法，于是大家重抽一遍，这就作废了所有人已经接受的那个版本，争论从零开始。</p>
<h2>五条能把争论缩短的规则，有没有机器人都适用</h2>
<ol>
<li><strong>提前定方式，不要当天定。</strong> 不管是帽子、队长还是报名顺序，在群里宣布一次然后就照着来。真正吃掉四十分钟的是「用哪种方式」的争论，方式本身很少是问题。</li>
<li><strong>设一个截止点，之后再分。</strong> 「名单前一天20点发，之后报名的补到人少的一边。」迟报名的人就成了一次插入，而不是重抽的理由。</li>
<li><strong>分队由一个人发布。</strong> 不是两个热心人，是一个。其余的都算发给这个人的建议。</li>
<li><strong>插进去，别重来。</strong> 迟到的去人少的一边；有人退出，就一个名字挪过去。两秒钟，已经被接受的版本继续有效。</li>
<li><strong>如果是队长挑人，让他们私聊挑。</strong> 出来的队伍一样，只是少了「当着所有人被最后挑走」的那份难堪。发到群里的是成型的名单，不是挑人的顺序。</li>
</ol>
<p>这些一个机器人都不需要。它只是有经验的组织者自然走到的形态，不管你用什么记名单，都值得拿来用。</p>
<h2>当分队由群聊本身保管，是这样的</h2>
<p>TeamUp 不会发明第五种方式。它执行上面四种里的两种，然后把结果保管住，免得再靠记忆重复宣布。</p>
<p>让它把人分开，你会得到恰好两种策略。<strong>随机</strong> 就是把帽子抽签压缩成一条消息：把确认名单打乱后轮流发牌，所以两边人数是齐的；奇数时相差一人，不会相差四人。要几个队就说几个，默认两个。<strong>手动</strong> 是你或者队长口述：说出队名，按号码列出球员，完事。分配由机器人保管，判断仍然归你。</p>
<p><img id="fig-2" src="https://teamup-live.com/blog/split-teams-fairly/split-demo.zh-hans.anim.webp" alt="在 Telegram 群里怎么把人分成两队：一条「分成2队」就把两边分匀，迟到的人靠一次移动插进去，而不是重新抽签"></p>
<p><em>这是演示。在真实的群里，助手的回复由模型用该群自己的语言写出，所以措辞会不一样。</em></p>
<p>如果名单已经是按队名分好的成型文字发过来了（「黄队：亚历克斯、迈克、艾玛… 紫队：丹、克里斯、马克斯…」），原样交给它就行。它会一次性把所有人登记进去并按写明的队伍归位，包括之前从没被录入过的客人。这正是开头那个「两份互相竞争的名单」的处境，解决方式是让其中一份成为正式记录，而不是去比谁发得晚。</p>
<p>从这之后，修改就只是修改。把丹换到另一边，是按号码进行的一个独立小动作，和分队本身是分开的，所以迟到的人是被插进去，而不是触发重抽。把谁标成队长或者守门员，是加在已有名单上的角色，不是嵌在队伍怎么组起来的里面。而且随机重分是整体替换已有队伍而不是微调，所以在已经有队伍的情况下提出来，会先收到一次确认：机器人把当前两边摆出来等你说好，而不是悄悄抹掉你手动改过的地方。</p>
<p>每位球员在当前名单中都有单独一行。编号方便指明是谁，但有人取消报名或整份名单被替换后，编号可能改变。按编号操作前，先索取最新名单并核对姓名。 <a href="https://teamup-live.com/zh-hans/docs/get-started">从这里开始</a></p>
<h2>它有意不做的事</h2>
<p><strong>没有按实力自动分队。</strong> 可以随机分配或手动安排。球员卡有报名历史和个人统计，但分队算法不读取它们。如果队长按状态挑人，就把决定记录下来，再逐个调整。报名历史既不验证实际到场，也不是实力评分。</p>
<p><strong>随机不会偷偷把实力拉平。</strong> 这是帽子，不是匹配系统。人数相等，仅此而已。如果上周的5比0还在扎人，办法是这一周改用队长挑人或者手动，而不是指望洗牌帮你找补。</p>
<p><strong>重新分是替换，不是微调。</strong> 正因如此它才会在覆盖前问一句，也正因如此改一个人是单独的动作。</p>
<h2>那四十分钟从来都不是关于公平</h2>
<p>它关于六个人同时握着六个版本的事实。上面四种方式里的任何一种，对周二的球局来说都足够公平。决定你们能不能准点开球的是另外三件事：人到场之前分队定没定；当前的分队有没有一个唯一的存放处；迟到一个人是花你一次移动，还是一整轮新的抽签。把这三件修好，用哪种方式几乎就不重要了。要是你为名单纠纷当过一整个赛季的裁判，你会明白这才是真正赢下来的东西。</p>

<p><a href="https://t.me/rocky_agent_bot?start=bgsplit-teams-fairly">把机器人加进球队群聊</a></p>]]></content:encoded>
    </item>
    <item>
      <title>收球局分摊，不用追着任何人要</title>
      <link>https://teamup-live.com/zh-hans/blog/collect-game-fees</link>
      <guid isPermaLink="true">https://teamup-live.com/zh-hans/blog/collect-game-fees</guid>
      <pubDate>Sat, 29 Aug 2026 09:00:00 GMT</pubDate>
      <description>为什么在群里收场地费会变成一份额外的工作，手动记账在哪里断掉，以及当群聊自己把账记下来之后，有什么变了。</description>
      <content:encoded><![CDATA[<p>你订了场地，还先垫了钱。现在十一个人欠着你，而把这笔钱收回来是没人报名的活儿。几乎没人赖账，他们只是忘了，而提醒他们的成本比这笔钱本身还高。问一次没什么。问第二次，你就成了在一个为了踢球而存在的群里揪着钱不放的人。</p>
<p><img id="fig-1" src="https://teamup-live.com/blog/collect-game-fees/dues.zh-hans.jpg" alt="谁付了场地费：分摊名单直接显示在球队群里，不用表格也不用点名"></p>
<p>「怎么跟队里收场地钱」这个问题，诚实的答案有两半，其中只有一半和支付有关。把钱转过来很容易，人人都有银行 App。真正吃掉你一周的，是记住谁转了、替谁转的、还差多少。</p>
<h2>现在的收钱是什么样</h2>
<p>标准做法是一条置顶消息：金额、你的收款码，也许还有日期。每个付了的人回一个词。</p>
<p>而这个词在每个群里都一样：「转了」。有时候加个对勾。没有金额，没有名字，也没说这笔覆盖了谁。</p>
<p>这一个词扛的东西远超它能扛的：</p>
<ul>
<li><strong>它不说多少。</strong> 旁边就住着「转了两个人的」：有人带了朋友，替两个人付了。哪个朋友？你往上翻，然后猜。</li>
<li><strong>它不说钱到了。</strong> 只有你的银行 App 知道这件事，而把一笔转账和群里的昵称对上，占的是你的晚上，不是别人的。</li>
<li><strong>它熬不过刷屏。</strong> 关于谁上场的讨论刷一周，置顶消息就被挤出视线，然后有人发来一个光秃秃的「80？」，只是想确认一下金额。</li>
<li><strong>它扛不住真实生活。</strong> 「分两次转的」，一部分现金，一部分转账，中间隔了几天。你脑子里那本账刚刚断了，而群里没有任何东西记下它断过。</li>
</ul>
<p>于是组织者变成了账本。而这本账还要和另外两件常设的活儿并行：把名单理清楚，把队伍分好。意识到这一点的球队，通常会伸手去拿两种修补里的一种。</p>
<p><strong>第二条置顶消息</strong>，报名名单旁边再放一份欠款名单。到第三周，两份就对不上了。有人在消息串里退了，钱那份没跟着改。有人在更衣室里付了现金，这件事哪儿都没写。两个真相来源，等于没有来源。</p>
<p><strong>一张表格。</strong> 这确实管用，对拥有它的那一个人管用。那个人现在成了唯一能回答「丹付了吗」的人，而且每周都要把名单重新敲进去。表格不会失灵，它只是把工作挪了个地方，而不是取消掉，并且它住在群外面，也就是对话真正发生的地方之外。</p>
<p>这两种结局都不是自律问题。靠手把两份名单对齐本身就是一份工作，而在名单、分队和比赛之间，根本没有它的位置。</p>
<h2>群聊自己记账之后，有什么变了</h2>
<p>用词没变。球员还是在同一个群里打「转了」，没有新 App，也没有新习惯。变的是这个词发出去之后发生的事。</p>
<p><img id="fig-2" src="https://teamup-live.com/blog/collect-game-fees/dues-demo.zh-hans.anim.webp" alt="如何在群聊里跟踪分摊：球员写「转了」，机器人记上并说出还差谁"></p>
<p><strong>一笔转账被记录，而不是被相信。</strong> 「转了」把这份分摊标成 <em>已申报</em>：球员声称自己转了。在你对着银行确认之前，它一直是已申报。「他说他付了」和「钱在这儿」之间的这道缝，正是手动记账里信任悄悄漏掉的地方，而把它变成一个看得见的状态，就解决了这件事的大部分。一条消息也可以覆盖好几个人：丹写「我和马克斯的都付了」，两个人会被记进同一条申报里，两个名字都会被念回来，好让他看清对上了谁。</p>
<p><strong>确认这一步留给你，这是刻意的。</strong> 打开银行 App、把一笔转账和一个人对上，是人的工作。把结果记下来只要一行：确认到账的，把标错的退回未付，或者给这周免费上场的人免掉分摊。</p>
<p><strong>收款信息只设置一次。</strong> 账号、银行、你们队真正遵循的说明：一个自由文本框，按你写的样子原样保存，而不是每个周四重打一遍。它还带着来历，谁设的、什么时候设的，所以「等等，这还是亚历克斯的账号吗」有答案。金额和欠款都按群的货币显示，默认是卢布。如果这段文字里有一个位于白名单域名上的支付链接，比赛卡片就会多出一个付款按钮。其他链接都会被刻意保留为纯文本：一个任何成员都能把自己的网址变成看起来很官方的付款按钮的群，那不是功能，是钓鱼的入口。</p>
<p><strong>计数就在大家本来就在看的那张卡片上。</strong> 群里的活动卡片带一行钱的信息：分摊金额，以及 Y 人中已付 X 人。它不是你要专门去跑的报表，它就在所有人为了看名单而打开的那张卡片上。</p>
<p><strong>欠款活得比这场球久。</strong> 可以按球员查看已结束比赛的未结费用。申报转账在组织者核对银行前仍未确认，也仍计入未结金额。催款前，先看是不是只差你确认到账。</p>
<p><img id="fig-3" src="https://teamup-live.com/blog/collect-game-fees/reminder.zh-hans.jpg" alt="如何提醒队里还没交的分摊：在群里发消息的是机器人，不是你私聊挨个催"></p>
<p><strong>催的是机器人，不是你。</strong> 应用可以打开一段请Rocky提醒缴费的预填请求。这是草稿：检查后发送给助手，它才可以编写提醒并发布到关联群聊。仅打开请求不会向球队发送消息。</p>
<h2>这件事刻意不做什么</h2>
<p><strong>钱从不经过我们。</strong> 转账是从球员到组织者，和现在完全一样。我们管账，不管钱。这不是支付通道，TeamUp 的任何人都不是你们队这笔钱的一方。</p>
<p><strong>没有「半价」按钮。</strong> 部分付款时，组织者记录该球员为这场比赛累计支付的总额。再有转账时更新累计值，不是只填最后一笔。余额在付清或免除前仍未结清。只参加半场不会自动获得折扣。</p>
<p><strong>欠款不会自己滚到下一次。</strong> 它不会被加进下周的分摊，不会从将来的转账里扣掉，也不会悄悄过期。它被记着：留在欠款清单上，直到有人确认收款或者把它免掉；群里聊到钱的时候，它会再冒出来。是机器人点出欠款的人，而不是你去翻一个月的消息。没有人的余额会在背后没有一个人的决定的情况下变动。</p>
<p><strong>申报是一句陈述，不是证据。</strong> 任何成员都可以替任何人申报，这是刻意的：替朋友付钱，不该要求那个朋友正好在线。这同时也意味着，在你确认之前，「已申报」永远不等于「已付款」。</p>
<p>如果你喜欢表格，就留着；从来没打算把表格从你手里拿走。一个实时的 CSV 链接可以喂给 Google Sheets 或 Excel，分摊和账目也在这些数据流里，但仅限于在开启了金钱数据流的情况下创建的链接：见<a href="https://teamup-live.com/zh-hans/docs/sheets-export">导出文档</a>。请把那个链接当成密码：拿到它的人就能读到数据。</p>
<h2>真正变了的是什么</h2>
<p>你们队付钱的方式一点没变。还是同一笔转账，转给同一个人，用同一个 App。变的是三周之后，「丹付了吗」不再取决于是否碰巧有人记得。</p>
<p>这和把手工数出来的加号列换成<a href="https://teamup-live.com/zh-hans/blog/roster-in-group-chat">一份准确的名单</a>是同一种转变，只不过用在钱上而不是人数上，理由也一样：群聊本来就是球队的 App，所以记录理应待在对话所在的地方。你脑子里要装的更少，而球员要做的并没有更多。</p>
<p>如果你想在自己的群里把这套配起来，<a href="https://teamup-live.com/zh-hans/docs/get-started">上手指南</a>会讲怎么把机器人加进群、怎么跑完第一场球。</p>

<p><a href="https://t.me/rocky_agent_bot?start=bgcollect-game-fees">把机器人加进球队群聊</a></p>]]></content:encoded>
    </item>
    <item>
      <title>群里的报名名单在第十个人那里塌掉</title>
      <link>https://teamup-live.com/zh-hans/blog/roster-in-group-chat</link>
      <guid isPermaLink="true">https://teamup-live.com/zh-hans/blog/roster-in-group-chat</guid>
      <pubDate>Sun, 23 Aug 2026 09:00:00 GMT</pubDate>
      <description>为什么置顶消息下面那一列「+1」超过十个人就不管用了，以及靠什么把球队名单撑住，而不让报名变成每周的额外工作。</description>
      <content:encoded><![CDATA[<h2>真正塌掉的地方</h2>
<p>「周六谁去？」一条置顶消息，下面堆起一墙回复：「+1」「我去」「+2，我和一个朋友」「我不去了，赶不上」。到第十条左右，你就再也记不住人数了。于是从头再数一遍：往上翻，掰手指，把中途退出的人和后来补上的人对起来。十个人以内，这只是有点烦。超过十个人，它就成了固定活儿，球队踢球的每一周都会回来。</p>
<p><img id="fig-1" src="https://teamup-live.com/blog/roster-in-group-chat/thread.zh-hans.png" alt="群聊里的比赛报名：置顶消息下面那一列「+」，已经算不出到底几个人"></p>
<p>这不是假设，是算术。上场的是十六个人，群里有四十多人，一次报名会攒下几十条光秃秃的「+」和「-」。到了这个规模，加号减号的那串消息就不再是名单，而是每次都要从零重新拼出来的东西。</p>
<h2>手动维护名单的四种做法</h2>
<p>几乎每支球队最后都会落在其中一种上。六个人的时候，四种都好用。下面是它们各自撑不住的地方。</p>
<p><strong>组织者亲手编辑的置顶消息。</strong> 一份编号名单，靠手更新。最好读，也最贵：每一个「+1」、每一次退出都要改一次，而这些改动都在你上班的时候到达。漏掉两次，置顶名单就悄悄和现实对不上了。因为大家信它，这比没有名单更糟。</p>
<p><strong>加号减号的消息串。</strong> 写的人零成本，读的人全成本。谁也没法在不翻完整串、不做加减的情况下回答「咱们现在几个人」，所以实际上只有一个人在算，其余人都去问他。</p>
<p><strong>投票。</strong> 适合是与否，别的就不够用了。投票没法把「+2，我和一个朋友」当成两个有名字的人，球局满了之后撑不起候补名单，也不会告诉你两个马克斯里投票的是哪一个。</p>
<p><strong>表格。</strong> 准确、可核对，也是四种里唯一能在「谁欠谁多少」的争论中活下来的。代价是它住在群外面：得有人把报名一条条抄进去，而大多数球员不会为了给自己加一行去点开一个链接。群聊存在的意义，本来就是避开这种摩擦。</p>
<h2>坏掉的不是「+」，是重新数</h2>
<p>加号本身很好用，它是说「我去」的简单办法。撑不住规模的是它周围的清点。</p>
<ul>
<li><strong>客人需要名字。</strong> 「+2，我和一个朋友」迟早会撞上「那个朋友是谁」这个问题。没有名字，谁也不知道真正来的是谁。十人以内大家本来就都认识。超过十人就不认识了。</li>
<li><strong>退出掉在消息串中间。</strong> 有人周二写「+1」，周四改主意：「我不去了，赶不上」。靠往上翻来数的人，得把这两条按顺序对上，还不能漏掉第二条。</li>
<li><strong>人们不再数，开始问。</strong> 当消息串长到读不完，「名单现在什么样」就成了群里最常见的消息。而且同一个问题会有十二种问法：「名单？」「阵容？」「谁去？」「最后几个人？」「把比赛名单发一下」。为了自己回答而去读四十条回复，早就不现实了。</li>
<li><strong>人们不再相信这个计数，开始在里面找自己。</strong> 在手动维护的那一列下面，「等等，有我吗？」「亚历克斯，你把我加上了吗？」「克里斯在名单里吗？」「他不是退了吗？」是家常便饭。没有人算错。只是手动名单除了问维护它的人之外，根本没法验证。</li>
</ul>
<p>这些都不是针对哪个组织者的指责。任何靠手维护的名单，一旦越过一个人能用工作记忆记住的界限，都会这样，而这个界限对大多数人来说在十到十五条之间。</p>
<h2>真正的瓶颈：替别人报名</h2>
<p>这里是最容易忽略的细节：在一份活的名单上，人们不断在替 <em>别人</em> 报名。「+2，我和马克斯」不是一条报名，是两条，其中一条属于一个在群里一个字都没写过的人。第二常见的输入形式根本不是「+」：有人把整份定好的阵容当成一段文字贴进来，有时两个人同时贴，版本还对不上。</p>
<p>一个只会数「+1」和「-1」的关键词解析器，这两种情况都接不住。它没有办法知道「把马克斯也加上，他来」意味着要多登记一个在句子中间被点名的具体的人。TeamUp 的助手不是去找规律，而是去读这条消息：「+1 马克斯的」会明确登记马克斯，给他自己的一行和自己的编号；而对有固定班底的球队来说最关键的一步是，它会先在群里找有没有已经存在的马克斯，再决定要不要新建，只有在实在分不清的时候才回头问你指的是哪一个。同一份名单上出现两个同名的人，比听上去常见得多：四十人的班底里，两个马克斯就是个普通的星期二。</p>
<h2>十人以上的名单靠什么撑住</h2>
<p><img id="fig-2" src="https://teamup-live.com/blog/roster-in-group-chat/roster.zh-hans.png" alt="如何在 Telegram 群里维护比赛名单：「+1 马克斯的」返回一份编号名单，客人单独占一行"></p>
<p><em>这是演示。在真实的群里，助手的回复由模型用该群自己的语言写出，所以措辞会不一样。</em></p>
<p>机制刻意做得不起眼。大家还是照原样在群里写：「+1」「我去」「把我弟也加上」「把我去掉」。这些都不变。变的是有人写完之后发生的事。</p>
<ul>
<li>每位球员在当前名单中都有单独一行。编号方便指明是谁，但有人取消报名或整份名单被替换后，编号可能改变。按编号操作前，先索取最新名单并核对姓名。</li>
<li><strong>客人有自己的一行</strong>，和带他来的人分开，不会消失在一个日后谁也拆不开的、没有标注的「+2」里。如果他是用临时名字进来的，之后改名也会保住他的编号和位置。</li>
<li><strong>「名单现在什么样」是从当前状态回答的</strong>，不是从谁对消息串的记忆里回答的。像问人一样问就行，回来的是此刻的名单。</li>
<li>设置人数上限后，超出的报名进入候补。已确认球员取消时，下一人可以自动递补，组织者也能手动修改状态。请确认递补者仍然能来：报名状态改变并不等于本人确认了行程。</li>
<li>已经定好阵容的球队，无论是从上周复制的还是按队伍分好的，都可以整段交上去，不必一个名字一个名字地报。它会被登记成一份有顺序的名单，编号按给出的顺序排。没有人会悄悄消失：已经报名但不在这段文字里的人会先给你看，你确认之后才会被移除。</li>
</ul>
<p>从群里面看，效果就是二十人的名单表现得像六人的名单。你问，它答，结束。</p>
<h2>诚实的边界</h2>
<p>这些值得直说，因为一个在边缘处悄悄失灵的工具，比一个提前把边缘讲清楚的工具更糟。</p>
<p>报名需要先有比赛。第一场由组织者创建；如果已有上场比赛且当前没有进行中的比赛，报名可以触发新建并继承部分设置。请核对日期和条件。自动递补需要人数上限；分队是单独操作，可随机或手动进行。</p>
<p>如果你们球队的群既不在 Telegram 也不在 VK，比如是个 WhatsApp 群，名单仍然可以通过一个公开的报名链接来跑，而不是靠群里的机器人。但那个链接会要求先用 Telegram、Apple 或 VK 登录，才能报名。「不用装任何东西」是真的，「连账号都不用」不是。</p>
<h2>说到底</h2>
<p>「+」这个习惯不是问题。问题是它底下的重新清点，而正是这一部分撑不过一份长名单。过了十个人不是边缘情况，就是普通的一周。谁来维护名单并不重要：一个人、一张表格，或者一个读着同一个群的助手，都一样。检验只有一条：「名单现在什么样」是靠一个事实回答的，还是靠往上翻回答的？其他任何界面归根到底都是同一个群聊换了身衣服，而如果你们群里已经有机器人了，<a href="https://teamup-live.com/zh-hans/docs/get-started">设置大概只要一分钟</a>。</p>
<p><a href="https://teamup-live.com/zh-hans/blog/split-teams-fairly">分队不用吵四十分钟的办法</a></p>

<p><a href="https://t.me/rocky_agent_bot?start=bgroster-in-group-chat">把机器人加进球队群聊</a></p>]]></content:encoded>
    </item>
  </channel>
</rss>
