To create or get an existing Chat for a certain recipient (identified by Account ID)
you can call:
-`POST /api/v1/pleroma/chats/by-account-id/{account_id}`
-
-The account id is the normal FlakeId of the usre
+`POST /api/v1/pleroma/chats/by-account-id/:account_id`
+The account id is the normal FlakeId of the user
```
POST /api/v1/pleroma/chats/by-account-id/someflakeid
```
+If you already have the id of a chat, you can also use
+
+```
+GET /api/v1/pleroma/chats/:id
+```
+
There will only ever be ONE Chat for you and a given recipient, so this call
will return the same Chat if you already have one with that user.
...
},
"id" : "1",
- "unread" : 2
+ "unread" : 2,
+ "last_message" : {...}, // The last message in that chat
+ "updated_at": "2020-04-21T15:11:46.000Z"
}
```
### Marking a chat as read
-To set the `unread` count of a chat to 0, call
+To mark a number of messages in a chat up to a certain message as read, you can use
`POST /api/v1/pleroma/chats/:id/read`
+
+Parameters:
+- last_read_id: Given this id, all chat messages until this one will be marked as read. Required.
+
+
Returned data:
```json
...
},
"id" : "1",
- "unread" : 0
+ "unread" : 0,
+ "updated_at": "2020-04-21T15:11:46.000Z"
}
```
+### Marking a single chat message as read
+
+To set the `unread` property of a message to `false`
+
+`POST /api/v1/pleroma/chats/:id/messages/:message_id/read`
+
+Returned data:
+
+The modified chat message
### Getting a list of Chats
...
},
"id" : "1",
- "unread" : 2
+ "unread" : 2,
+ "last_message" : {...}, // The last message in that chat
+ "updated_at": "2020-04-21T15:11:46.000Z"
}
]
```
The recipient of messages that are sent to this chat is given by their AP ID.
-The usual pagination options are implemented.
+No pagination is implemented for now.
### Getting the messages for a Chat
For a given Chat id, you can get the associated messages with
-`GET /api/v1/pleroma/chats/{id}/messages`
+`GET /api/v1/pleroma/chats/:id/messages`
This will return all messages, sorted by most recent to least recent. The usual
pagination options are implemented.
"visible_in_picker": false
}
],
- "id": "13"
+ "id": "13",
+ "unread": true
},
{
"account_id": "someflakeid",
"content": "Whats' up?",
"created_at": "2020-04-21T15:06:45.000Z",
"emojis": [],
- "id": "12"
+ "id": "12",
+ "unread": false
}
]
```
Posting a chat message for given Chat id works like this:
-`POST /api/v1/pleroma/chats/{id}/messages`
+`POST /api/v1/pleroma/chats/:id/messages`
Parameters:
-- content: The text content of the message
+- content: The text content of the message. Optional if media is attached.
+- media_id: The id of an upload that will be attached to the message.
-Currently, no formatting beyond basic escaping and emoji is implemented, as well as no
-attachments. This will most probably change.
+Currently, no formatting beyond basic escaping and emoji is implemented.
Returned data:
"visible_in_picker": false
}
],
- "id": "13"
+ "id": "13",
+ "unread": false
}
```
+### Deleting a chat message
+
+Deleting a chat message for given Chat id works like this:
+
+`DELETE /api/v1/pleroma/chats/:chat_id/messages/:message_id`
+
+Returned data is the deleted message.
+
### Notifications
-There's a new `pleroma:chat_mention` notification, which has this form:
+There's a new `pleroma:chat_mention` notification, which has this form. It is not given out in the notifications endpoint by default, you need to explicitly request it with `include_types[]=pleroma:chat_mention`:
```json
{
"chat_id": "1",
"id": "10",
"content": "Hello",
- "account_id": "someflakeid"
+ "account_id": "someflakeid",
+ "unread": false
},
"created_at": "somedate"
}
```
+
+### Streaming
+
+There is an additional `user:pleroma_chat` stream. Incoming chat messages will make the current chat be sent to this `user` stream. The `event` of an incoming chat message is `pleroma:chat_update`. The payload is the updated chat with the incoming chat message in the `last_message` field.
+
+### Web Push
+
+If you want to receive push messages for this type, you'll need to add the `pleroma:chat_mention` type to your alerts in the push subscription.