Philipp Heckel 3 лет назад
Родитель
Сommit
3c3b2477af
3 измененных файлов с 104 добавлено и 0 удалено
  1. 96 0
      docs/publish.md
  2. 7 0
      server/server_firebase.go
  3. 1 0
      server/types.go

+ 96 - 0
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.

+ 7 - 0
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

+ 1 - 0
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
 }