binwiederhier 1 month ago
parent
commit
db4a4776d3
1 changed files with 86 additions and 2 deletions
  1. 86 2
      docs/publish.md

+ 86 - 2
docs/publish.md

@@ -946,7 +946,11 @@ _Supported on:_ :material-android: :material-firefox:
 You can **update, clear, or delete notifications** that have already been delivered. This is useful for scenarios
 You can **update, clear, or delete notifications** that have already been delivered. This is useful for scenarios
 like download progress updates, replacing outdated information, or dismissing notifications that are no longer relevant.
 like download progress updates, replacing outdated information, or dismissing notifications that are no longer relevant.
 
 
-The key concept is the **sequence ID** (`sequence_id` or `sid`): notifications with the same sequence ID are treated as
+The way this works is that when you publish a message with a specific **sequence ID**, clients that receive the
+notification will treat it as part of a sequence. When a new message with the same sequence ID is published, clients
+will update the existing notification instead of creating a new one. You can also
+
+The key concept is the **sequence ID**: notifications with the same sequence ID are treated as
 belonging to the same sequence, and clients will update/replace the notification accordingly.
 belonging to the same sequence, and clients will update/replace the notification accordingly.
 
 
 <div id="updating-notifications-screenshots" class="screenshots">
 <div id="updating-notifications-screenshots" class="screenshots">
@@ -963,7 +967,87 @@ You can either:
 1. **Use the message ID**: First publish without a sequence ID, then use the returned message `id` as the sequence ID for updates
 1. **Use the message ID**: First publish without a sequence ID, then use the returned message `id` as the sequence ID for updates
 2. **Use a custom sequence ID**: Publish directly to `/<topic>/<sequence_id>` with your own identifier
 2. **Use a custom sequence ID**: Publish directly to `/<topic>/<sequence_id>` with your own identifier
 
 
-Here's an example using a custom sequence ID to update a notification:
+If you don't know the sequence ID ahead of time, you can publish a message first and then use the returned 
+message `id` to update it. The message ID of the first message will then serve as the sequence ID for subsequent updates:
+
+=== "Command line (curl)"
+    ```bash
+    # First, publish a message and capture the message ID
+    curl -d "Downloading file..." ntfy.sh/mytopic
+    # Returns: {"id":"xE73Iyuabi","time":1673542291,...}
+
+    # Then use the message ID to update it
+    curl -d "Download complete!" ntfy.sh/mytopic/xE73Iyuabi
+    ```
+
+=== "ntfy CLI"
+    ```bash
+    # First, publish a message and capture the message ID
+    ntfy pub mytopic "Downloading file..."
+    # Returns: {"id":"xE73Iyuabi","time":1673542291,...}
+
+    # Then use the message ID to update it
+    ntfy pub --sequence-id=xE73Iyuabi mytopic "Download complete!"
+    ```
+
+=== "JavaScript"
+    ``` javascript
+    // First, publish and get the message ID
+    const response = await fetch('https://ntfy.sh/mytopic', {
+      method: 'POST',
+      body: 'Downloading file...'
+    });
+    const { id } = await response.json();
+
+    // Then use the message ID to update
+    await fetch(`https://ntfy.sh/mytopic/${id}`, {
+      method: 'POST',
+      body: 'Download complete!'
+    });
+    ```
+
+=== "Go"
+    ``` go
+    // Publish and parse the response to get the message ID
+    resp, _ := http.Post("https://ntfy.sh/mytopic", "text/plain",
+        strings.NewReader("Downloading file..."))
+    var msg struct { ID string `json:"id"` }
+    json.NewDecoder(resp.Body).Decode(&msg)
+    
+    // Update using the message ID
+    http.Post("https://ntfy.sh/mytopic/"+msg.ID, "text/plain",
+        strings.NewReader("Download complete!"))
+    ```
+
+=== "Python"
+    ``` python
+    import requests
+    
+    # Publish and get the message ID
+    response = requests.post("https://ntfy.sh/mytopic", data="Downloading file...")
+    message_id = response.json()["id"]
+    
+    # Update using the message ID
+    requests.post(f"https://ntfy.sh/mytopic/{message_id}", data="Download complete!")
+    ```
+
+=== "PHP"
+    ``` php-inline
+    // Publish and get the message ID
+    $response = file_get_contents('https://ntfy.sh/mytopic', false, stream_context_create([
+        'http' => ['method' => 'POST', 'content' => 'Downloading file...']
+    ]));
+    $messageId = json_decode($response)->id;
+    
+    // Update using the message ID
+    file_get_contents("https://ntfy.sh/mytopic/$messageId", false, stream_context_create([
+        'http' => ['method' => 'POST', 'content' => 'Download complete!']
+    ]));
+    ```
+
+You can also use a custom sequence ID (e.g., a download ID, job ID, etc.) when publishing the first message. This is
+less cumbersome, since you don't need to capture the message ID first. Just publish directly to
+`/<topic>/<sequence_id>`:
 
 
 === "Command line (curl)"
 === "Command line (curl)"
     ```bash
     ```bash