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
 ## Attachments
 You can **send images and other files to your phone** as attachments to a notification. The attachments are then downloaded
 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.
 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,
 				"message":  m.Message,
 				"encoding": m.Encoding,
 				"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 {
 			if m.Attachment != nil {
 				data["attachment_name"] = m.Attachment.Name
 				data["attachment_name"] = m.Attachment.Name
 				data["attachment_type"] = m.Attachment.Type
 				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 (!)
 	Method  string            `json:"method,omitempty"`  // used in "http" action, default is POST (!)
 	Headers map[string]string `json:"headers,omitempty"` // used in "http" action
 	Headers map[string]string `json:"headers,omitempty"` // used in "http" action
 	Body    string            `json:"body,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
 	Extras  map[string]string `json:"extras,omitempty"`  // used in "broadcast" action
 }
 }