{{ iosBanner.title }}
{{ iosBanner.subtitle }}

抖音自动续火花 {{ appVersion }}

重试退出
抖音自动续火花 {{ status.version || appVersion }}
{{ credentialDisplay.label }} {{ status.stopping ? '正在停止/结果待核对,请勿重复启动' : status.running ? '任务运行中,请勿重复触发' : '正在启动补发,请勿重复启动' }}

{{ connectionError }}

登录凭证
{{ credentialDisplay.label }}

{{ sessionCheckedLabel }}

守护状态
{{ taskDisplay.label }}

{{ taskDisplay.detail }}

已生效好友
{{ savedFriendCount }} / {{ totalContactCount }} 人

{{ savedSelectionLabel }}

火花好友
{{ sparkFriendCount }} 人

{{ taskStatusAnnouncement }}

今日发送结果

业务日期 {{ todaySummary.business_date }} · 当前勾选 {{ todaySummary.selected }} 人

查看好友台账

{{ todayResultMessage }}

{{ todayResultDetail }}

上一轮发送失败

连续失败 {{ status.consecutive_failures }} 轮

{{ status.stopping ? '后台任务尚未结束,请勿重复启动;结束后先核对本轮发送结果。' : status.retry_dispatching ? '正在启动补发,请等待后台任务更新,勿重复启动。' : '请检查登录态;仍可手动点击「立即续火花」重试。' }}

正在停止/结果待核对

后台任务尚未结束,等待超时不代表消息未发送。请勿重复启动或直接补发,待任务结束后先核对本轮发送结果。

正在发送

任务进行中

当前好友 {{ progressDisplay.current }}

成功 {{ progressDisplay.ok }} 失败 {{ progressDisplay.failed }}
{{ progressDisplay.total ? '本轮进度' : '正在准备发送队列' }} {{ progressDisplay.total ? progressDisplay.done + ' / ' + progressDisplay.total + ' 位好友' : '准备中' }}
⚠️ 当前服务器未检测到登录凭证 (state.json):
前往凭证页扫描二维码,登录成功后会自动保存;也可以手动上传已有的 state.json。
扫码更新凭证 直接上传 state.json

立即触发续火花

手动启动一次自动化流程,或在下方查看最近执行记录与结果。

{{ status.stopping ? '正在停止/结果待核对' : status.running ? '任务执行中...' : status.retry_dispatching ? '正在启动补发' : '立即续火花' }} 我已核对,解除发送保护 继续未完成({{ status.pending_retry_count }}) 正在启动补发,请等待后台任务更新 等待自动补发 {{ status.pending_retry_count }} 位 模拟演练 (Dry-Run)

{{ selectionDirty ? '好友勾选有未保存变更,请先保存或放弃草稿再执行。' : '已生效名单尚未确认,请刷新好友台账后再执行。' }}

前往保存或放弃草稿 刷新已生效名单
最近一次执行时间
{{ lastRunInfo.time || '暂无运行记录' }}
执行结果简报
{{ lastRunInfo.summary || '尚无执行记录' }}
{{ resultDetailsOpen ? '收起' : '查看' }}结果与演练详情({{ lastRunDetails.length }})
  • {{ item.name }}:{{ item.detail }}

好友与消息台账

自动同步抖音好友列表,一键勾选火花好友,保存后每日定时自动发送。

{{ contactsSync.jobId && ['running','unconfirmed'].includes(contactsSync.status) ? '刷新同步状态' : '同步联系人' }} 刷新已生效名单 一键勾选火花 清空勾选 保存勾选配置 确认清空名单 放弃未保存变更 删除选中 ({{ selectedFriendCount }})

{{ selectionStatusMessage }}

正在{{ ledgerWriteLabel }},请等待本次请求完成后再保存、清空、删除或启动同步。

已生效 {{ savedFriendCount }} 人:{{ savedSelectionLabel }}

{{ contactsSync.message }}

同步错误:{{ contactsSync.error }}

联系人更新时间:{{ contactsSyncTimeLabel }}

{{ captureMessage }}

火花读数变化待确认

多次同步观察到与历史不一致的读数,历史天数暂时保留。核对后再决定是否接受新读数。

{{ item.display_name }}:历史 {{ item.streak_days }} 天 → 新读数 {{ item.streak_suspect_value }} 天

{{ streakDetail(item) }}

接受新读数 保持旧值

发送结果待核对

程序没能确认这些消息是否发出。请打开抖音看一眼聊天记录,再点对应按钮。当天未核对的不会重复发送;第二天会照常发送,不会让火花断掉。

{{ item.display_name }}:{{ item.send_review_status === 'rejected' ? '页面提示发送失败' : '结果未确认' }}({{ item.send_review_date || '日期未知' }}{{ item.send_review_blocks_today ? ',今天暂停重发' : ',已不影响今天发送' }})

在抖音看到了,记为已发 确认没发出,允许重发
显示历史记录({{ historicalContactCount }})
草稿勾选 {{ selectedFriendCount }} 位好友{{ selectionDirty ? ' · 尚未保存' : '' }}
{{ (row.nickname || '?').charAt(0) }}
{{ row.nickname }} {{ streakDisplay(row) }}
{{ contactTimeDisplay(row) }}
{{ streakDetail(row) }}
{{ identityDescription(row) }}
同名会话 发送记录保护 待核对 发送中/待核对 已拒绝 成功 失败 待发送
暂无好友数据,请点击上方「同步联系人」拉取列表
{{ (item.nickname || '?').charAt(0) }}
{{ item.nickname }}
{{ contactTimeDisplay(item) }}
{{ identityDescription(item) }}
{{ streakDetail(item) }}
{{ streakBadge(item) }} {{ item.identity_ambiguous ? '同名会话' : item.send_block_reason?.startsWith('related_') ? '发送记录保护' : item.last_status === 'unconfirmed' ? '待核对' : item.last_status === 'sending' ? '发送中/待核对' : item.last_status === 'rejected' ? '已拒绝' : item.last_status === 'success' ? '成功' : (item.last_status === 'failed' ? '失败' : '待发') }}
暂无好友数据,请点击上方「同步联系人」拉取列表

定时与拟人化风控配置

查看当前生效的时间、延迟与发送间隔;本页设置保持只读。

{{ configLockMessage }}

{{ configFeedback }}

这是后台当前生效的时间,本页不可修改;后台任务暂停时不会自动执行。
启用自动任务时,在设定时间后按当前延迟范围安排任务。
{{ (config.messages || []).join('\n') || '—' }}

开关已打开,但后台任务仍被启动参数或恢复保护暂停;请检查 .env 中 SPARKKEEPER_BACKGROUND_TASKS 是否为 0,或等待恢复暂停在次日解除。

douyin-cloud-streak.log
{{ logsRefreshing ? '正在获取最新日志…' : logsRefreshMessage }}
{{ logsContent || '暂无日志输出,点击右上角“刷新日志”获取。' }}
当前凭证状态: {{ credentialDisplay.label }}

{{ sessionCheckedLabel }}

文件已保存不代表平台会话始终有效。凭证失效时,可在下方扫码自动更新,或手动上传新的 state.json。

扫码登录,自动保存凭证

二维码会显示在下面的框内,不会打开新的登录窗口。请使用本人抖音 App 扫码并确认,成功后网站会自动更新 state.json。

  1. {{ index + 1 }}{{ step }}
{{ qrLogin.status==='starting' ? '正在准备…' : (qrLogin.status==='success'?'重新扫码更新':'开始扫码登录') }} 刷新二维码 恢复本次扫码 重试同步 重新加载图片 重试关闭后台浏览器 {{ qrLogin.status==='cancelling'?'正在取消…':'取消登录' }}
官方验证图片,请按图片要求亲自点击或拖动 抖音扫码登录二维码

{{ qrLogin.status==='starting'?'正在准备二维码,请稍候…':qrLogin.status==='expired'?'二维码已过期,请刷新':qrLogin.status==='success'?'登录成功,凭证已自动保存':qrLogin.status==='cleanup_pending'?(qrLogin.saved?'凭证已保存,正在关闭后台浏览器':'正在关闭后台浏览器'):qrLogin.status==='sync_pending'?'连接恢复中,正在确认登录状态…':qrLogin.status==='verification_required'?(qrLogin.verificationImageError?'验证图片暂未加载,请重试图片':'正在加载官方验证图片,请稍候…'):qrLogin.imageError?'二维码暂未加载,请重试图片':qrLogin.status==='blocked'?'本次登录暂不可用,请查看下方提示':['failed','timeout'].includes(qrLogin.status)?'本次未能生成二维码,请查看下方原因后重试':qrLogin.running?qrLogin.message:'点击“开始扫码登录”生成二维码' }}

{{ !qrLogin.imageUrl && qrLogin.imageError && qrLogin.status!=='verification_required' ? qrLogin.imageError : qrLogin.message }}

{{ qrLogin.error }}

{{ qrRemainingSeconds > 0 ? '本次登录剩余 ' + qrRemainingLabel : '等待确认本次登录结果…' }}。二维码过期后可刷新。

{{ qrLogin.gestureActive?'请在图片范围内完成本次操作。':qrLogin.interactionPending?'正在等待官方页面处理本次操作,请勿重复提交。':'请在图中点击或拖动完成官方验证,通过后会自动显示二维码。' }} 验证由你本人完成,本页不提供密码或短信输入。

平台暂时拦截了本次登录。请取消后稍后再试,或手动上传已有登录态。

手动上传已有 state.json

手动上传作为备用方式。扫码成功后无需再次上传;已有本机导出文件仍可在这里使用。

{{ emailConfigDirty ? '邮箱设置有未保存变更。' : '' }} {{ emailConfigStatus }}

卡死告警邮箱设置

看门狗检测到程序卡死时,自动用此邮箱发送告警邮件,内含卡死时间与线程栈。

保存邮箱配置 发送测试邮件

告警文本自定义

自定义邮件主题与正文(报错文本),支持占位符在发送时自动替换。

可用占位符:{host} 主机名 · {host_ip} 内网IP · {time} 触发时间 · {age} 卡死持锁秒数 · {threshold} 看门狗阈值 · {stack} 线程栈
保存邮箱配置