|
|
|
# Copyright 2016 OpenMarket Ltd
|
|
|
|
# Copyright 2018 New Vector Ltd
|
|
|
|
#
|
|
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
# you may not use this file except in compliance with the License.
|
|
|
|
# You may obtain a copy of the License at
|
|
|
|
#
|
|
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
#
|
|
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
# See the License for the specific language governing permissions and
|
|
|
|
# limitations under the License.
|
|
|
|
openapi: 3.1.0
|
|
|
|
info:
|
|
|
|
title: Matrix Push Notification API
|
|
|
|
version: 1.0.0
|
|
|
|
paths:
|
|
|
|
/notify:
|
|
|
|
post:
|
|
|
|
summary: Notify a push gateway about an event.
|
|
|
|
description: |-
|
|
|
|
This endpoint is invoked by HTTP pushers to notify a push gateway about
|
|
|
|
an event or update the number of unread notifications a user has.
|
|
|
|
In the former case it will contain selected information about the event.
|
|
|
|
In either case it may contain numeric counts of the number of unread
|
|
|
|
events of different types the user has. The counts may be sent along
|
|
|
|
with a notification about an event or by themselves.
|
|
|
|
|
|
|
|
Notifications about a particular event will normally cause the user to be
|
|
|
|
alerted in some way. It is therefore necessary to perform duplicate
|
|
|
|
suppression for such notifications using the `event_id` field to avoid
|
|
|
|
retries of this HTTP API causing duplicate alerts. The operation of
|
|
|
|
updating counts of unread notifications should be idempotent and
|
|
|
|
therefore do not require duplicate suppression.
|
|
|
|
|
|
|
|
Notifications are sent to the URL configured when the pusher is created.
|
|
|
|
This means that the HTTP path may be different depending on the push
|
|
|
|
gateway.
|
|
|
|
operationId: notify
|
|
|
|
requestBody:
|
|
|
|
content:
|
|
|
|
application/json:
|
|
|
|
schema:
|
|
|
|
type: object
|
|
|
|
example: {
|
|
|
|
"notification": {
|
|
|
|
"event_id": "$3957tyerfgewrf384",
|
|
|
|
"room_id": "!slw48wfj34rtnrf:example.com",
|
|
|
|
"type": "m.room.message",
|
|
|
|
"sender": "@exampleuser:matrix.org",
|
|
|
|
"sender_display_name": "Major Tom",
|
|
|
|
"room_name": "Mission Control",
|
|
|
|
"room_alias": "#exampleroom:matrix.org",
|
|
|
|
"prio": "high",
|
|
|
|
"content": {
|
|
|
|
"msgtype": "m.text",
|
|
|
|
"body": "I'm floating in a most peculiar way."
|
|
|
|
},
|
|
|
|
"counts": {
|
|
|
|
"unread": 2,
|
|
|
|
"missed_calls": 1
|
|
|
|
},
|
|
|
|
"devices": [
|
|
|
|
{
|
|
|
|
"app_id": "org.matrix.matrixConsole.ios",
|
|
|
|
"pushkey": "V2h5IG9uIGVhcnRoIGRpZCB5b3UgZGVjb2RlIHRoaXM/",
|
|
|
|
"pushkey_ts": 12345678,
|
|
|
|
"data": {},
|
|
|
|
"tweaks": {
|
|
|
|
"sound": "bing"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
required:
|
|
|
|
- notification
|
|
|
|
properties:
|
|
|
|
notification:
|
|
|
|
type: object
|
|
|
|
title: Notification
|
|
|
|
description: Information about the push notification
|
|
|
|
required:
|
|
|
|
- devices
|
|
|
|
properties:
|
|
|
|
event_id:
|
|
|
|
type: string
|
|
|
|
description: |-
|
|
|
|
The Matrix event ID of the event being notified about.
|
|
|
|
This is required if the notification is about a
|
|
|
|
particular Matrix event. It may be omitted for notifications
|
|
|
|
that only contain updated badge counts. This ID can and
|
|
|
|
should be used to detect duplicate notification requests.
|
|
|
|
room_id:
|
|
|
|
type: string
|
|
|
|
description: |-
|
|
|
|
The ID of the room in which this event occurred.
|
|
|
|
Required if the notification relates to a specific
|
|
|
|
Matrix event.
|
|
|
|
type:
|
|
|
|
type: string
|
|
|
|
description: The type of the event as in the event's `type` field.
|
|
|
|
sender:
|
|
|
|
type: string
|
|
|
|
description: The sender of the event as in the corresponding event field.
|
|
|
|
sender_display_name:
|
|
|
|
type: string
|
|
|
|
description: |-
|
|
|
|
The current display name of the sender in the room in which
|
|
|
|
the event occurred.
|
|
|
|
room_name:
|
|
|
|
type: string
|
|
|
|
description: The name of the room in which the event occurred.
|
|
|
|
room_alias:
|
|
|
|
type: string
|
|
|
|
description: An alias to display for the room in which the event occurred.
|
|
|
|
user_is_target:
|
|
|
|
type: boolean
|
|
|
|
description: |-
|
|
|
|
This is true if the user receiving the notification is the
|
|
|
|
subject of a member event (i.e. the `state_key` of the
|
|
|
|
member event is equal to the user's Matrix ID).
|
|
|
|
prio:
|
|
|
|
type: string
|
|
|
|
enum:
|
|
|
|
- high
|
|
|
|
- low
|
|
|
|
description: |-
|
|
|
|
The priority of the notification. If omitted, `high` is
|
|
|
|
assumed. This may be used by push gateways to deliver less
|
|
|
|
time-sensitive notifications in a way that will preserve
|
|
|
|
battery power on mobile devices.
|
|
|
|
content:
|
|
|
|
type: object
|
|
|
|
title: EventContent
|
|
|
|
description: |-
|
|
|
|
The `content` field from the event, if present. The pusher
|
|
|
|
may omit this if the event had no content or for any other
|
|
|
|
reason.
|
|
|
|
counts:
|
|
|
|
type: object
|
|
|
|
title: Counts
|
|
|
|
description: |-
|
|
|
|
This is a dictionary of the current number of unacknowledged
|
|
|
|
communications for the recipient user. Counts whose value is
|
|
|
|
zero should be omitted.
|
|
|
|
properties:
|
|
|
|
unread:
|
|
|
|
type: integer
|
|
|
|
description: |-
|
|
|
|
The number of unread messages a user has across all of the
|
|
|
|
rooms they are a member of.
|
|
|
|
missed_calls:
|
|
|
|
type: integer
|
|
|
|
description: |-
|
|
|
|
The number of unacknowledged missed calls a user has
|
|
|
|
across all rooms of which they are a member.
|
|
|
|
devices:
|
|
|
|
type: array
|
|
|
|
title: Devices
|
|
|
|
description: This is an array of devices that the notification should be sent
|
|
|
|
to.
|
|
|
|
items:
|
|
|
|
type: object
|
|
|
|
title: Device
|
|
|
|
properties:
|
|
|
|
app_id:
|
|
|
|
type: string
|
|
|
|
description: The `app_id` given when the pusher was created.
|
|
|
|
pushkey:
|
|
|
|
type: string
|
|
|
|
description: The `pushkey` given when the pusher was created.
|
|
|
|
pushkey_ts:
|
|
|
|
type: integer
|
|
|
|
format: int64
|
|
|
|
description: |-
|
|
|
|
The unix timestamp (in seconds) when the
|
|
|
|
pushkey was last updated.
|
|
|
|
data:
|
|
|
|
type: object
|
|
|
|
title: PusherData
|
|
|
|
description: |-
|
|
|
|
A dictionary of additional pusher-specific data. For
|
|
|
|
'http' pushers, this is the data dictionary passed in at
|
|
|
|
pusher creation minus the `url` key.
|
|
|
|
tweaks:
|
|
|
|
type: object
|
|
|
|
title: Tweaks
|
|
|
|
description: |-
|
|
|
|
A dictionary of customisations made to the way this
|
|
|
|
notification is to be presented. These are added by push rules.
|
|
|
|
required:
|
|
|
|
- app_id
|
|
|
|
- pushkey
|
|
|
|
description: Information about the push notification.
|
|
|
|
required: true
|
|
|
|
responses:
|
|
|
|
"200":
|
|
|
|
description: A list of rejected push keys.
|
|
|
|
content:
|
|
|
|
application/json:
|
|
|
|
schema:
|
|
|
|
type: object # empty json object
|
|
|
|
properties:
|
|
|
|
rejected:
|
|
|
|
type: array
|
|
|
|
description: |-
|
|
|
|
A list of all pushkeys given in the notification request that
|
|
|
|
are not valid. These could have been rejected by an upstream
|
|
|
|
gateway because they have expired or have never been valid.
|
|
|
|
Homeservers must cease sending notification requests for these
|
|
|
|
pushkeys and remove the associated pushers. It may not
|
|
|
|
necessarily be the notification in the request that failed:
|
|
|
|
it could be that a previous notification to the same pushkey
|
|
|
|
failed. May be empty.
|
|
|
|
items:
|
|
|
|
type: string
|
|
|
|
description: A pushkey that has been rejected.
|
|
|
|
required:
|
|
|
|
- rejected
|
|
|
|
examples:
|
|
|
|
response:
|
|
|
|
value: {
|
|
|
|
"rejected": [
|
|
|
|
"V2h5IG9uIGVhcnRoIGRpZCB5b3UgZGVjb2RlIHRoaXM/"
|
|
|
|
]
|
|
|
|
}
|
|
|
|
servers:
|
|
|
|
- url: "{protocol}://{hostname}{basePath}"
|
|
|
|
variables:
|
|
|
|
protocol:
|
|
|
|
enum:
|
|
|
|
- http
|
|
|
|
- https
|
|
|
|
default: https
|
|
|
|
hostname:
|
|
|
|
default: localhost:8008
|
|
|
|
basePath:
|
|
|
|
default: /_matrix/push/v1
|