कृती
वापरकर्त्याने सूचना लाँग-प्रेस केल्यावर (किंवा खाली ओढल्यावर) दिसणारी १० पर्यंत बटणे जोडा. प्रत्येक बटण अॅप समोर आणू शकते, प्रमाणीकरणाची मागणी करू शकते किंवा विध्वंसक म्हणून शैलीबद्ध केले जाऊ शकते.


The actions array
Each entry in the actions array is one button. Labels, icons, and URLs travel with
the push, so they can change on every notification.
| Field | Type | Required | Description | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
id | string | Yes | Stable identifier returned to the app when the user taps. Max 64 chars. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
title | string | Yes | Button label shown to the user. Max 64 chars. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
icon | string | No | SF Symbol name (iOS 15+), e.g. checkmark.circle, lock.open. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
url | string | No | URL opened or dispatched when tapped. Any URL scheme is accepted except javascript:, data:, file:, and vbscript:. Use http(s):// for webhooks (fired silently from inside the app), homeassistant://, shortcuts://, things://, tel:, mailto:, etc. for deep links into other iOS apps, or
your own app's custom scheme. Max 2048 chars. Leave it out on a silent action and PushWard
records the tap for you to read back; see Notification Answers. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
method | string | No | HTTP method for http/https actions: GET (default), POST, PUT, PATCH, DELETE, HEAD. Ignored for custom-scheme URLs. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
headers | object | No | Map of header name → value for http/https actions. Example: {"Authorization": "Bearer ..."}. Total ≤ 1 KB. Ignored for custom-scheme
URLs. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
body | string | No | Request body for http/https actions. ≤ 1 KB. If set without an
explicit Content-Type header, defaults to application/json.
Ignored for custom-scheme URLs. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
foreground | boolean | No | When false (default), tapping fires the URL silently from inside the
PushWard iOS app — the user stays on the lock screen, no browser opens. For http/https URLs this is a background URLSession request using the action's method/headers/body;
for custom schemes (e.g. homeassistant://) the target app is opened
directly. When true, PushWard is brought to the foreground and the URL is
opened from the app — only https:// URLs are honored on this path, so use foreground: false for deep links into other apps. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
destructive | boolean | No | Render the label in red. Use for "Delete", "Deny", "Ignore" style actions. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
authentication_required | boolean | No | Require Face ID / Touch ID / passcode before firing the action. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ॲप आवृत्ती 1.5.0 मध्ये येत आहे | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
text_input | boolean | No | Show an inline reply field when the action is tapped. Requires a silent
(foreground: false) action with an http/https url or no url. The typed text replaces {{input}} in body; if body has no placeholder,
the reply is sent as {"text": "..."}. Without a url,
PushWard records the reply. See Reply with text below. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
text_input_placeholder | string | No | Placeholder shown in the reply field. Requires text_input. Max 64 chars. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
text_input_button_title | string | No | Label of the send button next to the reply field. Defaults to the action title. Requires text_input. Max 64 chars. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
हा विभाग App Store पुनरावलोकनाच्या प्रतीक्षेत असलेल्या ॲप अपडेटमधील एका वैशिष्ट्याचे वर्णन करतो. अपडेट थेट होताच ते इथे आपोआप अनलॉक होईल.
Reply with text
A silent http/https action can prompt for a typed reply instead of
firing right away. Set text_input: true — only valid when foreground is false — and PushWard shows an inline text field when the action is tapped. The reply
reaches your webhook one of two ways:
- If
bodycontains{{input}}, that placeholder is replaced with the typed text. - Otherwise the reply is sent as
{"text": "..."}.
Leave out url and there is no webhook to host: PushWard records the reply and you read it
back from the API. See Notification Answers.
curl -X POST https://api.pushward.app/notifications \
-H "Authorization: Bearer hlk_YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "New message",
"body": "Alex: are we still on for tomorrow?",
"source": "chat",
"actions": [
{
"id": "reply",
"title": "Reply",
"icon": "arrowshape.turn.up.left",
"url": "https://chat.example.com/api/threads/42/reply",
"method": "POST",
"text_input": true,
"text_input_placeholder": "Write a reply",
"text_input_button_title": "Send"
}
]
}'हा विभाग App Store पुनरावलोकनाच्या प्रतीक्षेत असलेल्या ॲप अपडेटमधील एका वैशिष्ट्याचे वर्णन करतो. अपडेट थेट होताच ते इथे आपोआप अनलॉक होईल.
In the app
A notification's detail view in the PushWard app offers the same actions as its buttons, and shows what came of them:
- A
text_inputaction gets a reply field pinned to the bottom of the detail, up to 1024 characters. A draft is kept when you leave the notification and come back. - Each action shows its progress and result. One that did not go through can be tapped to try again. Once a recorded question is answered or has expired, its other choices lock and the chosen one is checked.
- The detail shows your answer or your last reply. In the notification list, a recorded question reads Needs Reply until it is answered, and any answered notification reads Answered, including answers given from the Lock Screen, a banner or Siri.
Opening links
Before the app opens a link from a notification (the link or a link in the text of the detail view, or
an action that opens its url instead of firing it silently, from the detail, the Lock
Screen, a banner or the Mac), it shows where the link goes: the host or the app it opens, whether the
connection is secure, and the full URL. You can open it, copy it, or trust the site so its links open
without asking. Settings > Links turns the confirmation off and lists your trusted
sites; both sync over iCloud. Buttons on widgets and Live Activities, and actions run from Siri or
Shortcuts, open links directly.
Example: Overseerr request approval
A new movie request lands. Three buttons: Approve (silent webhook), Deny (red, silent webhook), and View Details (opens the app).
Each id and url is unique to the request.
curl -X POST https://api.pushward.app/notifications \
-H "Authorization: Bearer hlk_YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Overseerr",
"body": "New request: Dune: Part Two (2024)",
"source": "overseerr",
"source_display_name": "Overseerr",
"actions": [
{
"id": "approve",
"title": "Approve",
"icon": "checkmark.circle",
"url": "https://overseerr.example.com/api/v1/request/123/approve"
},
{
"id": "deny",
"title": "Deny",
"icon": "xmark.circle",
"destructive": true,
"url": "https://overseerr.example.com/api/v1/request/123/decline"
},
{
"id": "view",
"title": "View Details",
"icon": "arrow.up.right.square",
"foreground": true,
"url": "https://overseerr.example.com/request/123"
}
]
}'Example: Home Assistant doorbell
A foreground unlock that requires Face ID, a foreground "view camera," and a destructive "ignore" with no URL.
curl -X POST https://api.pushward.app/notifications \
-H "Authorization: Bearer hlk_YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Front Door",
"body": "Someone is at the front door",
"level": "time-sensitive",
"actions": [
{
"id": "unlock",
"title": "Unlock",
"icon": "lock.open",
"foreground": true,
"authentication_required": true,
"url": "https://homeassistant.local/unlock"
},
{
"id": "view",
"title": "View Camera",
"icon": "video",
"foreground": true,
"url": "https://homeassistant.local/camera"
},
{
"id": "ignore",
"title": "Ignore",
"icon": "xmark",
"destructive": true
}
]
}'Example: Home Assistant deep link
Skip the browser entirely — tap Open dashboard and the Home Assistant app
opens directly to the configured view. Custom-scheme URLs ignore method, headers, and body.
curl -X POST https://api.pushward.app/notifications \
-H "Authorization: Bearer hlk_YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Living room",
"body": "Motion detected",
"actions": [
{
"id": "open-dashboard",
"title": "Open dashboard",
"icon": "house",
"url": "homeassistant://navigate/lovelace/0"
}
]
}'Example: POST to Home Assistant REST API
With method, headers, and body you can call any HTTP
endpoint directly — no webhook automation needed. This action calls Home Assistant's REST API
to open a cover, with a Bearer token in the Authorization header and a JSON body
naming the entity.
curl -X POST https://api.pushward.app/notifications \
-H "Authorization: Bearer hlk_YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Blinds",
"body": "Open the living room blinds?",
"actions": [
{
"id": "open-blinds",
"title": "Open",
"icon": "blinds.horizontal.open",
"url": "https://homeassistant.local/api/services/cover/open_cover",
"method": "POST",
"headers": {
"Authorization": "Bearer HA_LONG_LIVED_TOKEN"
},
"body": "{\"entity_id\":\"cover.blinds_living_room_left\"}"
}
]
}'