You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于通过多种服务端方法集成MoEngage Web推送通知的技术咨询

MoEngage Web推送多服务端集成指南

1. 不依赖特定服务端技术的集成方法

  • 直接调用MoEngage REST API:所有服务端技术都支持HTTP请求,直接用MoEngage的推送、用户管理API完成集成,无需依赖语言专属SDK
  • 通用HTTP请求封装:基于MoEngage的API规范,封装一套通用的请求逻辑(比如处理身份验证、payload构造),跨语言复用
  • Webhook触发推送:将服务端事件(如用户行为、系统通知)通过Webhook推送给MoEngage,触发预设的推送自动化流程

2. 跨服务端的通用集成原则

  • 身份验证必合规:所有请求必须携带Authorization头,格式为Basic <Base64编码的APP_ID:API_KEY>,确保请求被MoEngage合法接收
  • 用户ID统一绑定:将自有网站的用户ID与MoEngage的customer_id字段一一对应,避免用户数据分散或重复
  • Payload结构标准化:严格按照MoEngage官方定义的JSON结构构造请求,必填字段(如platform、title)不能缺失,可选字段按需添加
  • 错误处理与重试:捕获API返回的状态码(401权限错误、400参数错误等),针对临时故障(如5xx错误)实现指数退避重试机制
  • 合规性管控:服务端需记录用户订阅状态变更,确保仅向已授权用户推送,符合数据隐私法规要求

3. 不同服务端下的订阅处理与推送实现

订阅状态同步

核心是将前端获取的Web Push订阅信息(endpoint、加密密钥)同步到MoEngage,以下是主流语言的极简实现:

Python(使用requests库)
import requests
import base64

APP_ID = "你的MoEngage应用ID"
API_KEY = "你的MoEngage API密钥"
AUTH_HEADER = f"Basic {base64.b64encode(f'{APP_ID}:{API_KEY}'.encode()).decode()}"

def sync_web_push_subscription(user_id, endpoint, p256dh_key, auth_key):
    api_url = f"https://api-01.moengage.com/v1/{APP_ID}/users/web/subscribe"
    payload = {
        "customer_id": user_id,
        "subscription": {
            "endpoint": endpoint,
            "keys": {
                "p256dh": p256dh_key,
                "auth": auth_key
            }
        }
    }
    headers = {"Authorization": AUTH_HEADER, "Content-Type": "application/json"}
    response = requests.post(api_url, json=payload, headers=headers)
    return response.status_code == 200
Node.js(使用axios库)
const axios = require('axios');
const { Buffer } = require('node:buffer');

const APP_ID = "你的MoEngage应用ID";
const API_KEY = "你的MoEngage API密钥";
const AUTH_HEADER = `Basic ${Buffer.from(`${APP_ID}:${API_KEY}`).toString('base64')}`;

async function syncWebPushSubscription(userId, endpoint, p256dhKey, authKey) {
    const apiUrl = `https://api-01.moengage.com/v1/${APP_ID}/users/web/subscribe`;
    const payload = {
        customer_id: userId,
        subscription: {
            endpoint,
            keys: { p256dh: p256dhKey, auth: authKey }
        }
    };
    const response = await axios.post(apiUrl, payload, {
        headers: { Authorization: AUTH_HEADER, 'Content-Type': 'application/json' }
    });
    return response.status === 200;
}

发送Web推送通知

通过MoEngage API触发推送,以下是Java的实现示例:

Java(使用OkHttp库)
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import java.util.Base64;

public class MoEngageWebPush {
    private static final String APP_ID = "你的MoEngage应用ID";
    private static final String API_KEY = "你的MoEngage API密钥";
    private static final String AUTH_HEADER = "Basic " + Base64.getEncoder().encodeToString((APP_ID + ":" + API_KEY).getBytes());

    public static boolean sendWebPush(String userId, String title, String message) throws Exception {
        OkHttpClient client = new OkHttpClient();
        String apiUrl = "https://api-01.moengage.com/v1/" + APP_ID + "/campaigns/trigger";
        
        String payload = String.format("""
            {
                "campaign_type": "push",
                "audience": {"customer_id": "%s"},
                "payload": {
                    "title": "%s",
                    "message": "%s",
                    "platform": "web"
                }
            }""", userId, title, message);

        RequestBody body = RequestBody.create(payload, MediaType.parse("application/json"));
        Request request = new Request.Builder()
                .url(apiUrl)
                .addHeader("Authorization", AUTH_HEADER)
                .post(body)
                .build();

        try (Response response = client.newCall(request).execute()) {
            return response.isSuccessful();
        }
    }
}

内容的提问来源于stack exchange,提问作者Vishesh Kumar Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 13:24:53