跳到内容

预设 API

一个推送预设是一个可重复使用的推送通知模板——与您在 Control Panel 的推送编辑器中构建的对象相同。此 API 仅管理推送预设;SMS、WhatsApp、Kakao、LINE 和 Viber 预设各有其专用的预设服务,此处不作介绍。

使用预设的 code 通过 Notify(负载 preset)或 Customer Journey 发送推送点来发送它。

基本 URL

Anchor link to
https://rpc-api.svc-nue.pushwoosh.com

所有端点都通过 HTTPS 提供服务。除非另有说明,否则请求和响应使用 application/json

身份验证

Anchor link to

每个请求都必须包含一个 Authorization 标头,其中包含您的服务器 API 令牌

Authorization: Api YOUR_API_TOKEN
  • 字段命名: 请求体和查询/路径参数接受 lowerCamelCase(例如 sendTypelocalizedPropertiessearchByName)——服务器会解析这两种大小写。响应总是使用 proto 字段名进行编组,格式为 snake_caselocalized_propertiesplatform_propertiesper_page 等)。下面的响应示例和预设对象参考使用了这种大小写。
  • code 每个预设响应都带有自己的代码,在 Create 时生成。将此代码传递给 GetUpdateUpdatePartialDeleteClone 以及上面的消息/旅程 API。
  • 平台键: platformsopen_actions 映射以数字设备类型代码(iOS 为 1,Android 为 3 等)为键。platform_properties 则以平台的枚举名称为键(IOSANDROIDHUAWEI_ANDROIDOSX——它仅涵盖这四个平台)。
  • 未填充的字段: GetCreateClone 响应包含预设对象的每个字段,即使为空或值为零。List 返回一个简化的字段集——请参阅下面的列出UpdateUpdatePartial 完全不返回预设字段——请参阅其章节中的警告

错误响应

Anchor link to
HTTP 状态含义
400 Bad Request无效参数——缺少必填字段或格式错误,或前置条件失败(例如,克隆时没有 name)。
401 Unauthorized缺少或无效的 Authorization 标头。
403 Forbidden应用程序或预设不属于调用者的帐户。
404 Not Found未找到预设或应用程序。
500 Internal Server Error意外的服务器端故障。

在正在运行或暂停的旅程的发送推送点仍在使用预设时,Delete 操作也会返回 400 Bad Request(在线路上为 FailedPrecondition)——而不是 409。请先从旅程中移除该预设。

CreateUpdateUpdatePartial 对于无法解析的个性化令牌也会返回 400 Bad Request——见下文。

个性化令牌

Anchor link to

CreateUpdateUpdatePartial 会验证 localizedTitlelocalizedSubtitlelocalizedContent(针对请求中的每种语言)以及发送方替换的每个平台的富内容字段(标题、内容、横幅、图标、URL、深层链接参数等)中的每个个性化令牌 ({name|modifier|default})。在此集合之外的字段,如 richmediacampaignCodedeeplinkfilterCode,会完全按原样保留令牌——Pushwoosh 不会在此处解析个性化语法。

令牌需要一个 Pushwoosh 识别的修饰符,因为未经修改或拼写错误的令牌无法格式化,否则会以字面大括号的形式到达用户。缺少或未知修饰符的令牌({Tag|}{Tag|typo})会导致调用失败,并返回 InvalidArgument

{
"code": 3,
"message": "personalization token {Tag|} has no known modifier, so it would be delivered as text; expected one of [capitalizefirst capitalizeallfirst uppercase lowercase regular base64 cent dollar comma euro jpy lira M-d-y m-d-y M d y M d Y l M d H:i m-d-y H:i]"
}

接受的修饰符

Anchor link to

Control Panel 的个性化选择器已经为 INTEGER/PRICE 标签(包括日期格式)和字符串标签提供了以下所有修饰符,除了 base64——该修饰符只能通过 API 访问。gitlab.corp.pushwoosh.com/channels/sdk/pkg/dynamiccontent 是 Control Panel 和此 API 进行验证的真实来源。

修饰符标签类型注意事项
capitalizefirststring不区分大小写
capitalizeallfirststring不区分大小写
uppercasestring不区分大小写
lowercasestring不区分大小写
regularstring or integer不区分大小写,不应用格式化
base64string不区分大小写,仅限 API——CP 选择器不提供
cent / dollar / comma / euro / jpy / lirainteger不区分大小写
M-d-y, m-d-y, M d y, M d Y, l, M d, H:i, m-d-y H:iinteger日期格式修饰符,完全按书写匹配,包括大小写
方法路径描述
POST/api/presets创建一个新的推送预设
GET/api/presets列出应用程序的推送预设
GET/api/presets/{code}获取单个推送预设
PUT/api/presets/{code}更新推送预设(完全覆盖)
PUT/api/presets/{code}:partial更新推送预设(部分)
POST/api/presets/{code}:clone克隆推送预设
DELETE/api/presets/{code}删除推送预设

在应用程序中创建一个新的推送预设,并返回其生成的代码。

POST /api/presets

参数类型必填描述
applicationstring要创建预设的应用程序代码
namestring预设名称。
sendTypestring预设的渠道(例如 push)。
isV2boolean固定预设的来源标志。省略则默认为 true (v2);仅在重现旧版 v1 预设时设置为 false

所有其他字段——本地化内容、平台、深层链接、收件箱、类别等——与 Update 共享,并在下面的预设对象参考中一次性记录。

请求示例
Anchor link to
{
"application": "XXXXX-XXXXX",
"name": "20% discount",
"platforms": { "1": true, "3": true },
"localizedContent": {
"default": "Get your 20% discount right now",
"es": "Consigue tu 20% de descuento ahora mismo"
},
"localizedTitle": { "default": "Hi there" },
"openAction": { "link": { "url": "https://example.com" } },
"categories": ["promo"]
}

返回 { "preset": { ... } },即创建的预设对象

列出应用程序的推送预设——一个简化的字段集,而不是完整的对象——支持分页、排序以及按名称或类别过滤。

GET /api/presets

查询参数

Anchor link to
参数类型必填描述
applicationstring要列出预设的应用程序代码。
orderBystringNAME (默认), CREATED, 或 UPDATED
orderDirectionstringASC (默认) 或 DESC
pageinteger从零开始的页码索引。
perPageinteger页面大小。省略或为 0 时默认为 100
searchByNamestring对预设名称或代码进行不区分大小写的子字符串匹配 (ILIKE %value%)。
searchByCategoryarray of strings重复该参数可按多个类别进行过滤,例如 ?searchByCategory=promo&searchByCategory=lifecycle
showHiddenboolean包括标记为 hidden 的预设。

每个项目仅包含:namecodeplatformslocalized_content(每个区域设置的纯文本——不是 localized_properties)、localized_titlelocalized_subtitlebannericoncategoriesjourney_uuidcustom_datais_v2createdupdated预设对象的所有其他字段——localized_propertiesplatform_propertiesdeeplinkrichmediaurl 等——都会被省略,即使在预设上已设置。

字段类型描述
presetsarray of objects当前页的预设,采用上述简化形式。
pageinteger返回的页码索引。
per_pageinteger用于此响应的页面大小。
totalinteger匹配过滤器的预设总数,跨所有页面。
响应示例
Anchor link to
{
"presets": [
{ "name": "20% discount", "code": "AAAAA-BBBBB", "platforms": { "1": true, "3": true }, "categories": ["promo"] }
],
"page": 0,
"per_page": 100,
"total": 1
}

通过代码返回单个推送预设,并填充预设对象的每个字段。

GET /api/presets/{code}

路径参数

Anchor link to
参数类型描述
codestring预设的代码。

返回 { "preset": { ... } },即完整的预设对象

用提供的字段覆盖现有推送预设的代码。

PUT /api/presets/{code}

路径参数

Anchor link to
参数类型描述
codestring要覆盖的预设代码。

创建(减去 application)相同的字段,外加预设对象的其余字段。sendType 被接受但被忽略——预设的渠道在创建后无法更改。

成功时返回一个空对象:{}

部分更新

Anchor link to

仅更新现有推送预设代码的指定字段,未设置的字段保持不变。

PUT /api/presets/{code}:partial

路径参数

Anchor link to
参数类型描述
codestring要修补的预设代码。

更新相同的字段,减去 application。与 Update 不同,这里的每个字段——包括 localizedPropertiesplatformPropertiescategories 以及在更新的警告中列出的内容属性组的其余部分——在省略时都保持不变,并且只有在您发送时才会被触及(您发送的映射/数组字段仍然会完全替换该字段的现有值,只是不影响您未包含的任何内容)。sendType 同样被接受但被忽略。

请求示例
Anchor link to
{
"sendRate": 500,
"cappingCount": 3,
"cappingDays": 7
}

也是一个空对象——请参阅上面的警告

将现有推送预设复制到相同的应用程序中,并使用新名称。

POST /api/presets/{code}:clone

参数类型必填描述
codestring要复制的源预设代码。
namestring新预设的名称。
请求示例
Anchor link to
{ "code": "AAAAA-BBBBB", "name": "20% discount (copy)" }

返回 { "preset": { ... } },即新的预设对象

通过代码永久删除推送预设。

DELETE /api/presets/{code}

路径参数

Anchor link to
参数类型描述
codestring要删除的预设代码。

成功时返回一个空对象:{}

对象参考

Anchor link to

下面的字段名称与 GetCreateUpdateClone 实际返回的名称相匹配——snake_case proto 字段名(请参阅约定)。上面请求示例中使用的 lowerCamelCase 形式在输入时同样有效。

预设对象

Anchor link to
字段类型描述
codestringCreate 时生成。在 API 的其他任何地方标识此预设。
namestring预设名称。
send_typestring预设的渠道(例如 push)。
is_v2boolean对于创建或迁移到 v2 内容模型的预设为 true
systemboolean将预设标记为系统/内部预设。
hiddenbooleanList 结果中隐藏预设(发送 showHidden: true 以包含它)。
createdstring (RFC 3339)创建时间戳。
updatedstring (RFC 3339)最后更新时间戳。

目标与内容

Anchor link to
字段类型描述
platformsmap<string, boolean>预设所针对的平台,以设备类型代码为键(例如,iOS 为 "1")。
localized_propertiesmap<string, object>区域设置 → 每个平台的富内容。与 Notify 负载上的 LocalizedContent 形状相同——每个平台块(iosandroid 等)一个条目。这是设置特定平台推送内容的主要方式。
localized_title / localized_subtitle / localized_contentmap<string, string>区域设置 → 纯文本。当您不需要每个平台的覆盖时,这是 localized_properties 的一个更简单的替代方案,用于标题、副标题和正文。
platform_propertiesmap<string, object>旧版的每个平台覆盖,以平台枚举名称(IOSANDROIDHUAWEI_ANDROIDOSX)为键。请参阅下面的PlatformProperties 对象
open_actionOpenAction用户打开通知时触发的操作,适用于每个平台。与 open_actions 互斥——响应只设置其中一个。
open_actionsmap<string, OpenAction>每个平台的 open_action 覆盖,以设备类型代码为键。
deeplinkstring深层链接代码。
deeplink_paramsmap<string, string>传递给深层链接的参数。
richmediastring通知打开的富媒体代码。
urlstring通知打开的 URL,如果不使用深层链接或富媒体。
字段类型描述
inbox_imagestring显示在消息收件箱条目中的图片 URL。
inbox_iconstring显示在消息收件箱条目中的图标 URL。
inbox_daysinteger条目在消息收件箱中保留的天数。
inbox_datestring (RFC 3339)消息收件箱条目的明确到期日期,作为 inbox_days 的替代方案。

组织与元数据

Anchor link to
字段类型描述
categoriesarray of strings预设标记的类别名称。
campaign_codestring此预设归属的活动代码
filter_codestring此预设默认定位的细分/过滤器代码
geo_zonesstring地理区域定位,如果预设是地理触发的。
journey_uuidstring拥有此预设的 Customer Journey 的 UUID,如果它是从旅程的发送推送点创建的。
custom_dataobjectu 参数的形式转发到客户端 SDK 的自由格式 JSON。
bannerstring大图/附件图片 URL。
iconstring自定义通知图标 URL。

交付限制

Anchor link to
字段类型描述
send_rateinteger使用此预设的发送节流,单位为消息/秒——预设级别的等效于 NotifySendRate
capping_count / capping_daysinteger此预设的每个用户频率限制——预设级别的等效于 NotifyFrequencyCapping count / days
字段类型描述
notification_sent_urlstring当使用此预设的通知发送时请求的回调 URL。
notification_delivered_urlstring当使用此预设的通知送达时请求的回调 URL。
notification_click_urlstring当使用此预设的通知被点击时请求的回调 URL。

旧版字段

Anchor link to

这些是从 v1 预设模型继承而来的。它们的填充是为了与 Control Panel 兼容,而不是为了新的集成。

字段类型描述
remote_pagestring旧版远程页面引用。
wns_contentstring旧版 Windows toast 模板 JSON,与 v1 createPreset/getPreset 方法接受的格式相同。
original_urlstringurl 被缩短链接替换时,url 的预缩短值。
ios_silent / android_silent / huawei_android_silentboolean每个平台的静默(仅数据)推送标志。

PlatformProperties 对象

Anchor link to

在每个 platform_properties 条目(IOSANDROIDHUAWEI_ANDROIDOSX)中可用的字段:

字段类型描述
badgestring角标计数覆盖。
soundstring声音文件名。
sound_offboolean静音通知声音。
prioritystring托盘内优先级(仅限 Android/Huawei)。
delivery_prioritystringNORMALHIGH 交付优先级(仅限 Android/Huawei)。
ios_interruption_levelstringpassiveactivetime-sensitivecritical(仅限 iOS)。