ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

如何把 listmonk 接入自建 Messenger 服务实现 SMS/FCM 消息推送

如何把 listmonk 接入自建 Messenger 服务实现 SMS/FCM 消息推送 如何把 listmonk 接入自建 Messenger 服务实现 SMS/FCM 消息推送【免费下载链接】listmonkHigh performance, self-hosted, newsletter and mailing list manager with a modern dashboard. Single binary app.项目地址: https://gitcode.com/GitHub_Trending/li/listmonklistmonk 默认通过 SMTP 邮件后端发送活动Campaign消息。如果你的目标是把同一套订阅者列表和活动流程用于短信、FCM 推送等渠道需要自建一个 HTTP 服务作为Messengerlistmonk 在活动发送时把消息以 JSON 请求 POST 给它由你的服务负责真正广播为 SMS 或 FCM 通知。接入完成后你就能在创建活动时像选择 SMTP 邮件一样选择自己的 Messenger 作为发送渠道。本文适用于已部署 listmonk、拥有管理界面权限的场景依据 messengers.md 与相关源码。Messenger 的协议约定自建服务需要接收什么Messenger 的定义很简单见 messengers.md一个 Web 服务接收 listmonk POST 过来的活动消息 JSON然后自行广播为 SMS、FCM 等消息。活动开始后listmonk 会按以下格式向所选 Messenger 的 endpoint 发起 POST 请求endpoint 在请求成功时必须返回200 OK{ subject: Welcome to listmonk, body: The message body, content_type: plain, recipients: [{ uuid: e44b4135-1e1d-40c5-8a30-0f9a886c2884, email: anonexample.com, name: Anon Doe, attribs: { phone: 123123123, fcm_id: 2e7e4b512e7e4b512e7e4b51, city: Bengaluru }, status: enabled }], campaign: { uuid: 2e7e4b51-f31b-418a-a120-e41800cb689f, name: Test campaign, tags: [test-campaign] } }以上是文档示例字段值均为文档原样。自建服务实现时需要处理的要点目标地址放在attribs里。broadcast 所需的地址例如手机号或 FCM ID预期作为订阅者属性attributes存储在订阅者记录上并随请求透传。你的服务从recipients[].attribs.phone/recipients[].attribs.fcm_id中取出目标地址调用对应的 SMS/FCM 接口发送。每次推送对应单个订阅者。从 listmonk 端实现postback.go可以看到每次 POST 的recipients数组中构造的是单个收件人对象。认证可选。支持 BasicAuthlistmonk 配置了用户名和密码时会附带Authorization: Basic ...请求头未配置则不带服务侧可不校验。请求头User-Agent固定为listmonkContent-Type默认application/json见 postback.go 中exec的实现。非 200 即失败listmonk 收到非200状态码时会返回错误non-OK response from Postback server: 状态码该条消息算发送失败。对 SMS、FCM 这类纯文本渠道文档建议活动正文使用Plain text格式即content_type: plain。在 listmonk 中注册 Messenger在管理界面Settings → Messengers中注册点击添加即可新建一条 Messenger 记录。根据设置页前端实现messengers.vue各字段含义与默认值如下字段说明默认值 / 范围nameMessenger 名称创建活动时用这个名字引用它无示例占位为mymessenger最长 200 字符root_url自建服务的接收地址必须是 http/https无最长 200 字符username / password可选用于 BasicAuth无max_conns到该服务的最大连接数25范围 1–65535max_msg_retries消息重试次数2范围 1–1000timeout请求超时5s保存时会校验名称不能与已有 Messenger含 SMTP 服务器名重复重复会报duplicateMessengerName错误不合法的名称会报invalidMessengerName见 settings.go。密码在读取设置时会被掩码返回修改时留空表示保持不变。messengers.md 还列出了一批开源的现成 Messenger 实现可供参考例如对接 AWS Pinpoint SMS 的 listmonk-messenger、对接 Google FCM 的 listmonk-push-messenger。如果你的后端恰好是这些可以直接部署它们而不必从零实现协议。把手机号或 FCM ID 存为订阅者属性concepts.md 中 Attributes 的定义属性是附加在订阅者邮箱和姓名之外的任意 JSON 属性不同订阅者不必拥有相同的属性。对 Messenger 渠道来说这一步是推送链路的前提——文档明确要求The address required to broadcast the message, for instance, a phone number or an FCM ID, is expected to be stored and relayed as subscriber attributes.即收件人的手机号、FCM token 必须提前写入订阅者的 attributes如phone、fcm_id键名自定与你的自建服务约定一致活动发送时 listmonk 才会把它们放进attribs一并推送。在活动Campaign中选择自建 Messenger注册完成、订阅者属性就位后创建活动时把messenger字段设为注册时的名称即可。以 API 方式为例见 campaigns.md示例请求格式取自文档将messenger换成你的名称curl -u api_user:token http://localhost:9000/api/campaigns -X POST \ -H Content-Type: application/json;charsetutf-8 \ --data-raw {name:SMS test,subject:Hello, world,lists:[1],from_email:listmonk noreplylistmonk.yoursite.com,content_type:plain,messenger:mymessenger,type:regular,tags:[test],body:这是一条测试短信}messenger参数接受email默认值或设置中定义的任何自定义 Messenger 名称。管理界面中创建/编辑活动时同样可以按名称选择。注意content_type这里使用plain与 Messenger 渠道的纯文本诉求对应。事务消息Transactional message同样支持按名称指定渠道POST /api/tx的messenger参数用来发送消息的 Messenger默认email见 transactional.md。验证推送链路按下面顺序确认每一环自建服务侧用一条真实订阅者的属性构造请求向你的 endpoint 发 POST确认服务能正确解析 JSON、按attribs中的地址发出短信/FCM并返回200 OK。非 200 会被 listmonk 记为发送失败。活动校验活动启动时 listmonk 会校验 Messenger 是否存在未注册的名称会直接报错unknown messenger 名称 on campaign 活动名见 pipe.go。如果启动报这个错说明活动引用的名称与 Settings → Messengers 中的注册名不一致。测试发送不必等全量发送可以先用测试接口向指定订阅者发一条验证curl -u api_user:token -X POST http://localhost:9000/api/campaigns/campaign_id/test \ -H Content-Type: application/json \ -data-raw {subscribers:[userexample.com], messenger:mymessenger}subscribers是接收测试消息的订阅者邮箱列表文档中该接口要求必填。确认目标手机/设备收到消息后再把活动状态改为scheduled/running正式发送状态变更规则见 campaigns.md 的PUT /api/campaigns/{campaign_id}/status仅draft可转scheduled仅draft和paused可启动为running。限制与说明Messenger 渠道与 SMTP 邮件是并列的独立后端注册多少条互不影响每封消息只走所选的那一个渠道。认证只有 BasicAuth 一种文档未提及其他鉴权方式如需更强隔离需在自建服务侧自行控制访问。recipients[].status会带出订阅者的订阅状态如enabled你的服务可以据此决定是否实际发送listmonk 本身不会替你拦截。发送失败非 200、超时会按max_msg_retries进行重试重试耗尽后消息记为错误这一点与 SMTP 渠道的处理一致。完成上述步骤后你的 SMS/FCM 服务就成为 listmonk 的一个普通发送渠道注册名称出现在活动创建选项中发送结果可以在活动的运行统计中查看。【免费下载链接】listmonkHigh performance, self-hosted, newsletter and mailing list manager with a modern dashboard. Single binary app.项目地址: https://gitcode.com/GitHub_Trending/li/listmonk创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表