Skip to content

Commit

Permalink
Allow sending ephemeral data to application services (#2018)
Browse files Browse the repository at this point in the history
As per MSC2409.

Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr>
  • Loading branch information
zecakeh authored Dec 11, 2024
1 parent 846cc49 commit 96b32f6
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 0 deletions.
1 change: 1 addition & 0 deletions changelogs/application_service/newsfragments/2018.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Allow sending ephemeral data to application services, as per [MSC2409](https://github.com/matrix-org/matrix-spec-proposals/pull/2409).
33 changes: 33 additions & 0 deletions content/application-service-api.md
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,39 @@ processed the events.
{{% http-api spec="application-service" api="transactions" %}}
##### Pushing ephemeral data
{{% added-in v="1.13" %}}
If the `receive_ephemeral` settings is enabled in the [registration](#registration)
file, homeservers MUST send ephemeral data that is relevant to the application
service via the transaction API, using the `ephemeral` property of the request's
body. This property is an array that is effectively a combination of the
`presence` and `ephemeral` sections of the client-server [`/sync`](/client-server-api/#get_matrixclientv3sync)
API.
There are currently three event types that can be delivered to an application
service:
- **[`m.presence`](/client-server-api/#mpresence)**: MUST be sent to the
application service if the data would apply contextually. For example, a
presence update for a user an application service shares a room with, or
matching one of the application service's namespaces.
- **[`m.typing`](/client-server-api/#mtyping)**: MUST be sent to the application
service under the same rules as regular events, meaning that the application
service must have registered interest in the room itself, or in a user that is
in the room. The data MUST use the same format as the client-server API, with
the addition of a `room_id` property at the top level to identify the room that
they were sent in.
- **[`m.receipt`](/client-server-api/#mreceipt)**: MUST be sent to the
application service under the same rules as regular events, meaning that the
application service must have registered interest in the room itself, or in a
user that is in the room. The data MUST use the same format as the client-server
API, with the addition of a `room_id` property at the top level to identify the
room that they were sent in. [Private read receipts](/client-server-api/#private-read-receipts)
MUST only be sent for users matching one of the application service's
namespaces. Normal read receipts and threaded read receipts are always sent.
#### Pinging
{{% added-in v="1.7" %}}
Expand Down
7 changes: 7 additions & 0 deletions data/api/application-service/definitions/registration.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,13 @@ properties:
description: |-
The localpart of the user associated with the application service. Events will be sent to the AS if this user is the target of the event, or
is a joined member of the room where the event occurred.
receive_ephemeral:
type: boolean
x-addedInMatrixVersion: "1.13"
description: |-
Whether the application service wants to [receive ephemeral data](/application-service-api/#pushing-ephemeral-data).
Defaults to `false` if not present.
namespaces:
type: object
title: Namespaces
Expand Down
24 changes: 24 additions & 0 deletions data/api/application-service/transactions.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,15 @@ paths:
schema:
type: object
example: {
"ephemeral": [
{
"$ref": "../../event-schemas/examples/m.receipt.yaml",
"room_id": "!jEsUZKDJdhlrceRyVU:example.org"
},
{
"$ref": "../../event-schemas/examples/m.presence.yaml"
},
],
"events": [
{
"$ref": "../../event-schemas/examples/m.room.member.yaml"
Expand All @@ -61,6 +70,21 @@ paths:
description: A list of events, formatted as per the Client-Server API.
items:
$ref: ../client-server/definitions/client_event.yaml
ephemeral:
type: array
x-addedInMatrixVersion: "1.13"
description: |-
A list of ephemeral data, if the `receive_ephemeral` setting was enabled in the
[registration](/application-service-api/#registration) file.
There are only three event types that can currently occur in this list: `m.presence`,
`m.typing`, and `m.receipt`. Room-scoped ephemeral data (`m.typing` and
`m.receipt`) MUST include a `room_id` property to identify the room that they
were sent in.
This property can be omitted if it would be empty.
items:
$ref: ../../event-schemas/schema/core-event-schema/event.yaml
required:
- events
description: Transaction information
Expand Down

0 comments on commit 96b32f6

Please sign in to comment.