一封传话 · 站长接入文档

用 push-sdk.js 给你的网站加消息推送

不用自建推送服务,不用逐家对接钉钉、飞书、邮件。用户用邮箱换一个通道码,之后你的网站上发生任何值得提醒的事,都能直接推到他常用的聊天工具里。

1什么场景值得给用户推送

邮件打开率越来越低,站内信要用户回站才看得到,短信成本高还容易进垃圾箱。把「值得让用户马上知道的事」推到他已经在用的钉钉、飞书、Telegram 里,是最省事的做法。

内容更新提醒

新文章、新视频、新版本发布,订阅过的用户第一时间收到标题和链接。

订阅关注的内容

用户订阅作者、栏目、标签或话题,只对真正关注的东西推送,不打扰。

商品到货 / 补货

缺货商品登记「到货提醒」,入库后自动通知排队等待的用户。

价格变动

关注的商品降价、会员涨价、限时折扣开始,价格一变就提醒。

公告与维护通知

停机维护、服务恢复、规则调整,一次推送覆盖所有订阅用户。

订单与物流状态

已支付、已发货、派送中、已签收,关键节点送到用户手机上。

评论、回复与 @ 提醒

有人回复了用户的帖子、评论被点赞,不必守在站内刷新。

到期与续费提醒

会员到期、证书到期、域名续费、试用结束,提前几天提醒。

活动开始 / 开售提醒

预约过的直播、课程、限量商品开售时准时通知。

安全提醒

异地登录、密码变更、绑定信息修改,第一时间告知账号主人。

审批与工单状态

提交的工单有回复、审批通过或被驳回,直接推给发起人。

网盘内容更新

订阅的文件夹或分享链接有新文件、新版本时,自动推送到用户的聊天工具。

2一封传话解决什么问题

你自己只需要维护「什么时候推、推给谁、推什么」,剩下的投递工作交给一封传话。

  • 支持多种推送通道:企业微信群机器人、钉钉群机器人、飞书群机器人、企业微信应用消息、Bark(iOS)、Telegram、Discord、自定义 Webhook、浏览器通知,以及 QQ / 163 / 126 / 搜狐 / 139 / 189 / 新浪 / 阿里云邮箱和官方邮件。用户用哪个工具,就配哪条通道。
  • 多通道聚合:一个组合通道背后可以挂多条子通道,一次调用同时送到值班手机、团队群和邮箱,调用方只存一个通道码。
  • 不用重复开发:不用逐家申请机器人、研究各自的签名与模板、处理令牌过期。你只调一个接口,各家平台的差异由一封传话消化。
  • 一个 SDK 统一集成:push-sdk.js 同时支持浏览器 <script>、CommonJS 和 ES Module,前端后台都能用。
  • 用户自己管理接收端:用户想加一条通道、换绑接收工具,在页面里自己操作即可,你的网站不用改代码。
  • 推送记录可查:每次推送都有记录,方便你确认某条通知到底有没有送达。
一句话总结:你只管业务事件,用户只管选接收渠道,中间的投递、重试、多端适配都交给一封传话。

3五分钟接入

整个过程只有四步:引入 SDK、给用户开通道码、把通道码存进用户资料、事件发生时调一次推送。

  1. 引入 SDK在页面底部加一行 script,官方 CDN 直接可用。
  2. 创建 SDK 实例填一个属于你网站的 mcpSource,方便在后台区分来源。
  3. 给用户开通道码用用户邮箱发起授权,用户在官网页输入验证码后,SDK 会把通道码交回来。
  4. 推送业务事件触发时请求 /services/push/trigger/通道码 网址,消息送到用户配置的通道。

3.1 引入并初始化

<script src="https://push.phprm.com/static/js/push-sdk.js"></script>
<script>
var pushSdk = YfPush.create({
  apiBase: 'https://www.phprm.com',  // 默认就是这个地址,可以省略
  mcpSource: 'my-website'            // 你的站点标识,便于在后台区分调用来源
});
</script>

用构建工具的项目也可以直接 import YfPush from './push-sdk.js',或在 Node 里 require('./push-sdk.js')。

4用用户邮箱换通道码

你不需要让用户在你的网站注册账号,也不需要用户先来官网注册。只要拿到用户的邮箱,就能给他开一条专属推送通道。

4.1 用户会经历什么

  1. 你发起授权会话调用 pushSdk.createEmailSession(email),得到一个 10 分钟内有效的授权链接。
  2. 用户打开链接页面会显示收件邮箱,一封验证码邮件随之发出。
  3. 用户填写验证码登录在官网页输入邮件里的验证码,完成登录。
  4. SDK 取回通道码你轮询 pushSdk.pollSession(sessionId),状态变成 success 时拿到该用户的通道码。
一封传话新用户和老用户的区别:邮箱属于新用户时,登录的同时会自动开通一条属于他的通道;邮箱已经注册过一封传话时,登录后返回的是他账号下已有的通道码,直接复用,不会重复开通。

4.2 最省事的方式:直接挂一张授权卡片

SDK 自带一张完整的「一键开通」卡片,包含登录方式下拉、邮箱输入、验证码引导和轮询。你只需要给一个容器:

<div id="auth-slot"></div>

<script src="https://push.phprm.com/static/js/push-sdk.js"></script>
<script>
YfPush.create({ mcpSource: 'my-website' }).mountAuthCard('#auth-slot', {
  title: '订阅更新通知',
  desc: '用邮箱接收验证码,开通后新内容会推送到你常用的聊天工具。',
  onSuccess: function (result) {
    // result.channelCode 就是这位用户的推送通道码
    fetch('/api/save-channel', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ channelCode: result.channelCode })
    });
  }
});
</script>

卡片会自己从服务端读取当前支持的登录方式(飞书、钉钉、Gitee、GitHub、邮箱验证码),官方新增登录方式时你不用改代码。

4.3 想自己画界面:手动两步

var pushSdk = YfPush.create({ mcpSource: 'my-website' });

// 1. 用邮箱创建授权会话
pushSdk.createEmailSession('user@example.com').then(function (session) {
  // session.sessionId / session.authUrl / session.pollInterval / session.expiresIn
  window.open(session.authUrl, '_blank');   // 用户在这里输入邮件验证码

  // 2. 按 pollInterval 轮询,直到 success
  var timer = setInterval(function () {
    pushSdk.pollSession(session.sessionId).then(function (r) {
      if (r.status === 'pending') { return; }

      clearInterval(timer);
      if (r.status === 'success') {
        saveChannelCode(r.channelCode);     // 存到你自己的用户资料里
      } else {
        // expired / consumed / failed:提示用户重新发起授权
      }
    });
  }, (session.pollInterval || 5) * 1000);
});
轮询状态含义你要做什么
pending用户还没完成登录按 pollInterval 继续等
success通道码已就绪,只返回一次立刻保存 channelCode 到用户资料
expired / consumed / failed会话过期或已被使用停止轮询,提示用户重新发起

落地建议:在用户表里加一个 push_channel_code 字段。每个用户一条自己的通道码,后续停用、重置、查推送记录互不干扰。

5通道管理 API 与页面功能对照

后面这套接口,和你在 一封传话分享页 上看到的按钮一一对应。就算你不写代码,也可以先在那页面上点一遍,理解每条通道在管什么。

页面上的功能对应方法说明
刷新 / 通道列表pushSdk.listChannels(code)返回当前父通道和它下面的子通道列表(名称、类型、通道码、状态、二维码地址)。
新增推送通道pushSdk.addChannel(code, params)选推送类型 + 填通道名。群机器人要填 Webhook 和加签密钥,企业微信应用要填企业 ID、应用 ID、应用 Secret,邮箱类型要填发信人昵称、邮箱地址、授权码。
修改pushSdk.editChannel(code, params)改名、改 Webhook 等配置、启用或停用(status 0/1)。
删除pushSdk.deleteChannel(code, targetCode)删除指定子通道。当前页面绑定的那条通道,服务端会拒绝删除。
重置通道码pushSdk.resetChannel(code, targetCode)换一个新通道码并返回。旧码立即失效,适合怀疑泄露时使用。
测试pushSdk.sendPushMessage(code, message)向指定通道发一条测试消息,确认用户那边能收到。
推送记录pushSdk.recordsUrl(qrCodeUrl)把通道的二维码地址换成该通道的推送记录页。
登录方式下拉pushSdk.listProviders()返回服务端当前支持的登录方式,用于自己画授权表单。
一键开通卡片pushSdk.createAuthSession() + pushSdk.pollSession()也可以直接用 mountAuthCard 挂现成卡片。
令牌(后台自动)pushSdk.accessToken(code)用通道码换短期访问令牌,默认 2 小时;遇到 401/403 会自动重取一次,你不用手动管。
通道码是什么:一串 32 位十六进制字符,就是一封传话里「往哪个通道发」的凭证。父通道码能推给组内所有子通道,子通道码只推到那一个接收端。

6发送推送消息

拿到通道码后,发一条推送只需要请求一个网址:把 head、body、url、avatar 带上即可。

6.1 最简单的方式:一个网址就是一次推送

https://www.phprm.com/services/push/trigger/你的通道码?head=你订阅的栏目更新了&body=《如何选择推送通道》已发布&url=https://your-site.com/post/123&avatar=https://your-site.com/logo.png

直接在浏览器打开这个网址,或用 fetch / $.getJSON 请求它,消息就会推送到通道对应的接收端。参数值里带中文、空格或 & 时,记得先做 URL 编码。

6.2 服务端定时任务 / 后台事件:用 POST

「关注的商品到货」「公告更新」这类不是你点一下才发生的事件,放在服务端请求更方便;正文较长时也用 POST。

curl -X POST "https://www.phprm.com/services/push/trigger/你的通道码" \
  -H "Content-Type: application/json" \
  -d '{"head":"补货提醒","body":"你关注的商品已经到货,库存有限。","url":"https://your-site.com/item/123","avatar":"https://your-site.com/logo.png"}'

POST 只接受 application/json。已经在用 SDK 的项目,也可以继续调用 pushSdk.sendPushMessage(通道码, { head, body, url, avatar }),参数含义与上面一致。

参数必填说明
head是标题,一条消息一个结论,简短最好。
body否正文,支持 Markdown;太长时改用 POST。
url否点击消息后跳转的链接,需为合法网址。
avatar否图标地址(部分通道支持)。

6.3 安全提醒

  • 通道码等同于推送凭证,不要展示给无关的人,也不要写进公开的仓库。
  • 组合通道码能触达所有子通道,只放在服务端;前端只使用当前用户自己的子通道码。
  • 怀疑泄露时调用 resetChannel 换码,旧码立即失效。
  • 给每个用户单独开子通道,停用、重置、查记录都互不影响。

7常见问题

用户没收到验证码邮件?

先让用户看垃圾邮件和推广邮件目录,确认邮箱拼写无误。授权会话只有 10 分钟,过期就重新调一次 createEmailSession。

轮询返回 expired / consumed / failed?

说明这次会话已经不能用了:停止轮询,让用户重新发起一次授权即可。不要复用旧的 sessionId。

调用接口提示令牌失效?

SDK 内部会自动重新换一次令牌。如果还是失败,通常是页面停留太久或通道码已被重置,刷新页面或重新获取通道码。

通道码格式是什么?

32 位十六进制字符串,不区分大小写。二维码只是它的另一种展示形式。

用户想换接收方式怎么办?

让用户在一封传话的通道管理页里新增或修改通道即可,你的网站代码不需要动,他的通道码保持不变。

需要自己的服务器做中转吗?

不需要。trigger 网址从任何地方请求都能用,SDK 也从浏览器直连官方服务。定时轮询任务、后台事件在服务端直接请求 trigger 接口即可。

8相关开源项目:AI 弹幕组件

同一作者开源的 teakong/danmu,把实时弹幕接进任意网站。它复用的就是本页介绍的推送通道:一条弹幕就是一条推送消息,页面通过 WebSocket 实时收到并渲染。

  • 一行代码接入:一个 script 标签自动加载依赖、连接通道、渲染弹幕,纯前端即可运行。
  • 实时 WebSocket 推送:基于 Socket.IO,订阅同一通道的所有页面同时看到弹幕。
  • AI 自动弹幕:按设定间隔识别当前页面内容,调用大模型生成弹幕并推送。
  • 交互与插件:弹幕支持点赞、关闭;plugins=control 打开左下角设置面板,plugins=input 打开底部发送框。
  • 后端可过滤:danMuFilter 回调里异步校验内容、查询点赞数,适合需要审核的场景。
  • 兼容性好:严格 ES5,兼容 IE 与 GBK 页面;localStorage 不可用时自动回退 cookie。

一句话集成

<script src="https://ws.phprm.com/static/customer/js/danmu.js?appName=我的网站&channelCode=你的通道码&danMu=1&plugins=control,input"></script>

发出一条弹幕同样是一句话,所有订阅该通道的页面都会实时看到:

$.getJSON('https://www.phprm.com/services/push/trigger/你的通道码?head=这是第一条弹幕');

更多参数、插件与后端过滤示例见仓库说明:github.com/teakong/danmu(国内可用 Gitee 镜像)。

9SKILL 集成:让 AI 助手会推送

官方开源的 Agent Skill teakong/push-server,把「任务完成后推一条通知」变成 AI 助手的默认动作。纯 MCP 调用,不需要脚本或任何运行时依赖,Trae、Claude、Cursor、WorkBuddy 等客户端都适用。

  • 一条命令安装:npx skills add teakong/push-server,装到全局加 -g。
  • 纯 MCP,无依赖:推送走 push-server 远程 MCP 服务器,不生成脚本、不装运行时。
  • 推送规范内置:标题结论先行、正文 Markdown 排版、单条与多条(批量采集)的判定、发送前链接清洗,都写在 Skill 里。
  • 结果可回查:内置令牌换取与消息分页 / 详情接口,AI 能替你查已经推过的消息、管理通道。
  • 结构化入库:body 直接传 JSON,经 Webhook 通道原样转发到你的业务服务端。

安装与配置

安装 skill 不等于配好通道,还需要在 AI 客户端里添加远程 MCP 服务器(Streamable HTTP),并把通道码填进 Header:

# 安装到当前项目(全局加 -g)
npx skills add teakong/push-server
npx skills add teakong/push-server -g
{
  "mcpServers": {
    "push-server": {
      "url": "https://www.phprm.com/services/push/mcp",
      "headers": {
        "X-Push-Channel-Code": "你的32位通道码",
        "X-Mcp-Source": "trae"
      }
    }
  }
}

传输类型选 Streamable HTTP(不是 SSE);部分客户端需要 "type": "streamable-http",不认该字段就删掉这一行。通道码只填在 Header 里,不要提交进仓库。更多说明见 github.com/teakong/push-server 与 MCP 配置页。

先在一封传话官网体验通道管理

用邮箱开通一条通道,新增、修改、测试推送都能直接在页面上完成,理解清楚之后再把接口接进你的网站。

https://push.phprm.com/message/share.html

以上页面样式仅供参考,可以由网站开发人员自定义样式。

push-sdk.js 接入说明 · 一封传话 · 本文示例均支持 SKILL 接入任意 agent。

push-sdk.js 站长接入教程

本页讲解如何用一封传话的浏览器 SDK(push-sdk.js)给自己的网站用户做消息推送:引入一个脚本,用用户邮箱经验证码授权换一个 32 位通道码,把通道码存进用户资料,之后请求 trigger 网址或调用 SDK 即可推送。投递到钉钉、飞书、企业微信、Bark、Telegram、Discord、邮件和自定义 Webhook 的工作由一封传话完成。

快速开始

  • 引入 https://push.phprm.com/static/js/push-sdk.js,用属于你网站的 mcpSource 创建实例。
  • 挂载自带授权卡片,或调用 createEmailSession 后轮询 pollSession 直到状态为 success。
  • 保存返回的通道码,之后用 /services/push/trigger/通道码 或 pushSdk.sendPushMessage 推送。

本页可以做的事

  • 挑适用场景:十二种值得推送的网站事件,从内容更新、补货到安全提醒。
  • 走四步接入:引入 SDK、创建实例的代码可直接复制。
  • 用邮箱开通道:自带授权卡片、手动两步流程,以及 pending / success / expired 状态对照表。
  • 对照通道 API:列全通道管理方法,并标出对应分享页上的哪个按钮。
  • 发送消息:GET 网址、curl 的 JSON POST、head/body/url/avatar 参数表与安全红线。
  • 接入相关产品:开源 AI 弹幕组件与 push-server SKILL,两者复用同一条通道码。

说明:文档本身公开可看,但每个示例都要一个真实通道码。通道码是凭证,不要提交到公开仓库。