Merge branch 'main' into custom-messages
This commit is contained in:
commit
402b05a27b
5 changed files with 31 additions and 3 deletions
|
@ -661,7 +661,8 @@ the example.
|
||||||
To publish as JSON, you must **PUT/POST to the ntfy root URL**, not to the topic URL. Be sure to check that you're
|
To publish as JSON, you must **PUT/POST to the ntfy root URL**, not to the topic URL. Be sure to check that you're
|
||||||
POST-ing to `https://ntfy.sh/` (correct), and not to `https://ntfy.sh/mytopic` (incorrect).
|
POST-ing to `https://ntfy.sh/` (correct), and not to `https://ntfy.sh/mytopic` (incorrect).
|
||||||
|
|
||||||
Here's an example using all supported parameters. The `topic` parameter is the only required one:
|
Here's an example using most supported parameters. Check the table below for a complete list. The `topic` parameter
|
||||||
|
is the only required one:
|
||||||
|
|
||||||
=== "Command line (curl)"
|
=== "Command line (curl)"
|
||||||
```
|
```
|
||||||
|
@ -798,7 +799,8 @@ all the supported fields:
|
||||||
| `click` | - | *URL* | `https://example.com` | Website opened when notification is [clicked](#click-action) |
|
| `click` | - | *URL* | `https://example.com` | Website opened when notification is [clicked](#click-action) |
|
||||||
| `attach` | - | *URL* | `https://example.com/file.jpg` | URL of an attachment, see [attach via URL](#attach-file-from-url) |
|
| `attach` | - | *URL* | `https://example.com/file.jpg` | URL of an attachment, see [attach via URL](#attach-file-from-url) |
|
||||||
| `filename` | - | *string* | `file.jpg` | File name of the attachment |
|
| `filename` | - | *string* | `file.jpg` | File name of the attachment |
|
||||||
|
| `delay` | - | *string* | `30min`, `9am` | Timestamp or duration for delayed delivery |
|
||||||
|
| `email` | - | *e-mail address* | `phil@example.com` | E-mail address for e-mail notifications |
|
||||||
|
|
||||||
## Click action
|
## Click action
|
||||||
You can define which URL to open when a notification is clicked. This may be useful if your notification is related
|
You can define which URL to open when a notification is clicked. This may be useful if your notification is related
|
||||||
|
|
|
@ -45,6 +45,7 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release
|
||||||
* Do not allow comma in topic name in publish via GET endpoint (no ticket)
|
* Do not allow comma in topic name in publish via GET endpoint (no ticket)
|
||||||
* Add "Access-Control-Allow-Origin: *" for attachments (no ticket, thanks to @FrameXX)
|
* Add "Access-Control-Allow-Origin: *" for attachments (no ticket, thanks to @FrameXX)
|
||||||
* Make pruning run again in web app ([#186](https://github.com/binwiederhier/ntfy/issues/186))
|
* Make pruning run again in web app ([#186](https://github.com/binwiederhier/ntfy/issues/186))
|
||||||
|
* Added missing params `delay` and `email` to publish as JSON body (no ticket)
|
||||||
|
|
||||||
**Documentation:**
|
**Documentation:**
|
||||||
|
|
||||||
|
|
|
@ -1135,6 +1135,12 @@ func (s *Server) transformBodyJSON(next handleFunc) handleFunc {
|
||||||
if m.Click != "" {
|
if m.Click != "" {
|
||||||
r.Header.Set("X-Click", m.Click)
|
r.Header.Set("X-Click", m.Click)
|
||||||
}
|
}
|
||||||
|
if m.Email != "" {
|
||||||
|
r.Header.Set("X-Email", m.Email)
|
||||||
|
}
|
||||||
|
if m.Delay != "" {
|
||||||
|
r.Header.Set("X-Delay", m.Delay)
|
||||||
|
}
|
||||||
return next(w, r, v)
|
return next(w, r, v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -873,7 +873,8 @@ func TestServer_PublishUnifiedPushText(t *testing.T) {
|
||||||
func TestServer_PublishAsJSON(t *testing.T) {
|
func TestServer_PublishAsJSON(t *testing.T) {
|
||||||
s := newTestServer(t, newTestConfig(t))
|
s := newTestServer(t, newTestConfig(t))
|
||||||
body := `{"topic":"mytopic","message":"A message","title":"a title\nwith lines","tags":["tag1","tag 2"],` +
|
body := `{"topic":"mytopic","message":"A message","title":"a title\nwith lines","tags":["tag1","tag 2"],` +
|
||||||
`"not-a-thing":"ok", "attach":"http://google.com","filename":"google.pdf", "click":"http://ntfy.sh","priority":4}`
|
`"not-a-thing":"ok", "attach":"http://google.com","filename":"google.pdf", "click":"http://ntfy.sh","priority":4,` +
|
||||||
|
`"delay":"30min"}`
|
||||||
response := request(t, s, "PUT", "/", body, nil)
|
response := request(t, s, "PUT", "/", body, nil)
|
||||||
require.Equal(t, 200, response.Code)
|
require.Equal(t, 200, response.Code)
|
||||||
|
|
||||||
|
@ -886,6 +887,22 @@ func TestServer_PublishAsJSON(t *testing.T) {
|
||||||
require.Equal(t, "google.pdf", m.Attachment.Name)
|
require.Equal(t, "google.pdf", m.Attachment.Name)
|
||||||
require.Equal(t, "http://ntfy.sh", m.Click)
|
require.Equal(t, "http://ntfy.sh", m.Click)
|
||||||
require.Equal(t, 4, m.Priority)
|
require.Equal(t, 4, m.Priority)
|
||||||
|
require.True(t, m.Time > time.Now().Unix()+29*60)
|
||||||
|
require.True(t, m.Time < time.Now().Unix()+31*60)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestServer_PublishAsJSON_WithEmail(t *testing.T) {
|
||||||
|
mailer := &testMailer{}
|
||||||
|
s := newTestServer(t, newTestConfig(t))
|
||||||
|
s.mailer = mailer
|
||||||
|
body := `{"topic":"mytopic","message":"A message","email":"phil@example.com"}`
|
||||||
|
response := request(t, s, "PUT", "/", body, nil)
|
||||||
|
require.Equal(t, 200, response.Code)
|
||||||
|
|
||||||
|
m := toMessage(t, response.Body.String())
|
||||||
|
require.Equal(t, "mytopic", m.Topic)
|
||||||
|
require.Equal(t, "A message", m.Message)
|
||||||
|
require.Equal(t, 1, mailer.count)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestServer_PublishAsJSON_Invalid(t *testing.T) {
|
func TestServer_PublishAsJSON_Invalid(t *testing.T) {
|
||||||
|
|
|
@ -52,6 +52,8 @@ type publishMessage struct {
|
||||||
Click string `json:"click"`
|
Click string `json:"click"`
|
||||||
Attach string `json:"attach"`
|
Attach string `json:"attach"`
|
||||||
Filename string `json:"filename"`
|
Filename string `json:"filename"`
|
||||||
|
Email string `json:"email"`
|
||||||
|
Delay string `json:"delay"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// messageEncoder is a function that knows how to encode a message
|
// messageEncoder is a function that knows how to encode a message
|
||||||
|
|
Loading…
Reference in a new issue