diff --git a/docs/publish.md b/docs/publish.md index 94a9a9f6..8e155491 100644 --- a/docs/publish.md +++ b/docs/publish.md @@ -877,6 +877,102 @@ Here's an example that will open Reddit when the notification is clicked: ])); ``` +## User actions + + +=== "`view` action" + ``` json + { + "action": "view", + "label": "Open bing.com", + "url": "https://bing.com" + } + ``` + +=== "`broadcast` action" + ``` json + { + "action": "broadcast", + "label": "Send broadcast", + "intent": "io.heckel.ntfy.USER_ACTION", + "extras": { + "param": "this is a param", + "anotherparam": "this is another one" + } + } + ``` + +=== "`http` action" + ``` json + { + "action": "http", + "label": "Take picture", + "method": "POST", + "url": "https://homecam.lan/capture", + "headers": { + "Authorization": "..." + }, + "body": "this is a message" + } + ``` + +Examples: + +=== "Open a website" + ``` json + { + "action": "view", + "label": "Open bing.com", + "url": "https://bing.com" + } + ``` + +=== "Open location in Google Maps" + ``` json + { + "action": "view", + "label": "Show map", + "url": "geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California" + } + ``` + +=== "Open a ntfy topic (deep link)" + ``` json + { + "action": "view", + "label": "Show stats", + "url": "ntfy://ntfy.sh/stats" + } + ``` + +=== "Send broadcast" + ``` json + { + "action": "broadcast", + "label": "Send broadcast", + "intent": "my.custom.intent", + "extras": { + "message": "whats up, hello" + } + } + ``` + +=== "Send a ntfy message" + ``` json + { + "action": "http", + "label": "Send message", + "method": "POST", + "url": "http://ntfy.example.com/mytopic", + "headers": { + "Title": "another message", + "Tags": "tag1, tag2" + }, + "body": "this is a message" + } + ``` + + ## Attachments You can **send images and other files to your phone** as attachments to a notification. The attachments are then downloaded onto your phone (depending on size and setting automatically), and can be used from the Downloads folder. diff --git a/server/server_firebase.go b/server/server_firebase.go index 827fec45..384e7116 100644 --- a/server/server_firebase.go +++ b/server/server_firebase.go @@ -81,6 +81,13 @@ func toFirebaseMessage(m *message, auther auth.Auther) (*messaging.Message, erro "message": m.Message, "encoding": m.Encoding, } + if len(m.Actions) > 0 { + actions, err := json.Marshal(m.Actions) + if err != nil { + return nil, err + } + data["actions"] = string(actions) + } if m.Attachment != nil { data["attachment_name"] = m.Attachment.Name data["attachment_type"] = m.Attachment.Type diff --git a/server/types.go b/server/types.go index f17e8179..af651511 100644 --- a/server/types.go +++ b/server/types.go @@ -53,6 +53,7 @@ type action struct { Method string `json:"method,omitempty"` // used in "http" action, default is POST (!) Headers map[string]string `json:"headers,omitempty"` // used in "http" action Body string `json:"body,omitempty"` // used in "http" action + Intent string `json:"intent,omitempty"` // used in "broadcast" action Extras map[string]string `json:"extras,omitempty"` // used in "broadcast" action }