UPSTREAM BASELINE: nextcloud/spreed v22.0.12 (без изменений)
Type checking / changes (push) Has been cancelled
Type checking / test (push) Has been cancelled
Type checking / typescript-summary (push) Has been cancelled
Node tests / changes (push) Has been cancelled
Node tests / test (push) Has been cancelled
Node tests / test-summary (push) Has been cancelled

Источник: https://github.com/nextcloud/spreed/archive/refs/tags/v22.0.12.tar.gz
С этого коммита ветка официального Nextcloud Talk отрезана (решение владельца 2026-07-06).
Все дальнейшие изменения — только наши; версии релизов: 22.0.12-f7.N.
This commit is contained in:
2026-07-06 14:07:50 +00:00
commit 01acfa3b40
1716 changed files with 613013 additions and 0 deletions
+197
View File
@@ -0,0 +1,197 @@
# Call recording API
* API v1: Base endpoint `/ocs/v2.php/apps/spreed/api/v1`: since Nextcloud 26
## Start call recording
* Required capability: `recording-v1`
* Method: `POST`
* Endpoint: `/recording/{token}`
* Data:
| Field | Type | Description |
| ------ | ---- | ---------------------------------------------------------------------------------------------------- |
| status | int | Type of call recording (see [Constants - Call recording status](constants.md#call-recording-status)) |
* Response:
- Status code:
+ `200 OK`
+ `400 Bad Request` Message: `status`. When the status to start is invalid.
+ `400 Bad Request` Message: `config`. Need to enable the config `recording`.
+ `400 Bad Request` Message: `recording`. Already have a recording in progress.
+ `400 Bad Request` Message: `call`. Call is not activated.
+ `401 Unauthorized` When the participant is a guest.
+ `403 Forbidden` When the user is not a moderator/owner.
+ `412 Precondition Failed` When the lobby is active and the user is not a moderator.
## Stop call recording
* Required capability: `recording-v1`
* Method: `DELETE`
* Endpoint: `/recording/{token}`
* Response:
- Status code:
+ `200 OK`
+ `400 Bad Request` Message: `config`. Need to enable the config `recording`.
+ `400 Bad Request` Message: `call`. Call is not activated.
+ `401 Unauthorized` When the participant is a guest.
+ `403 Forbidden` When the user is not a moderator/owner.
+ `412 Precondition Failed` When the lobby is active and the user is not a moderator.
## Store call recording
* Required capability: `recording-v1`
* Method: `POST`
* Endpoint: `/recording/{token}/store`
* Header:
| field | type | Description |
| ------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------- |
| `TALK_RECORDING_RANDOM` | string | Random string that needs to be concatenated with room token to generate the checksum using the `recording_servers['secret']`. |
| `TALK_RECORDING_CHECKSUM` | string | The checksum generated with `TALK_RECORDING_RANDOM`. |
* Data:
| field | type | Description |
| ------- | ------ | --------------------------------------------------------- |
| `file` | string | File with the recording in a multipart/form-data request. |
| `owner` | string | The person that started the recording. |
* Response:
- Status code:
+ `200 OK`
+ `400 Bad Request` Error: `invalid_file`: File in block list or invalid
+ `400 Bad Request` Error: `empty_file`: Invalid file extension
+ `400 Bad Request` Error: `file_mimetype`: Invalid mimetype
+ `400 Bad Request` Error: `file_name`. :nvalid file name
+ `400 Bad Request` Error: `file_extension`: Invalid file extension
+ `400 Bad Request` Error: `owner_participant`: Owner is not to be a participant of room
+ `400 Bad Request` Error: `owner_invalid`: Owner invalid
+ `400 Bad Request` Error: `owner_permission`: Owner have not permission to store record file
+ `401 Unauthorized` When the validation as recording server failed
+ `404 Not Found` Room not found
+ `429 Too Many Request` Brute force protection
## Dismiss store call recording notification
* Required capability: `recording-v1`
* Method: `DELETE`
* Endpoint: `/recording/{token}/notification`
* Data:
| field | type | Description |
| ----------- | ------ | --------------------------------------------------------------------- |
| `timestamp` | string | Timestamp in seconds and UTC time zone that notification was created. |
* Response:
- Status code:
+ `200 OK`
+ `403 Forbidden` When the user is not a moderator/owner.
+ `404 Not Found` Room not found
## Share store call recording
* Required capability: `recording-v1`
* Method: `POST`
* Endpoint: `/recording/{token}/share-chat`
* Data:
| field | type | Description |
| ----------- | ------- | --------------------------------------------------------------------- |
| `timestamp` | string | Timestamp in seconds and UTC time zone that notification was created. |
| `fileId` | integer | File id of recording to share at the room. |
* Response:
- Status code:
+ `200 OK`
+ `400 Bad Request` Error: `file`: Shared file is invalid
+ `400 Bad Request` Error: `system`: Internal system error
+ `403 Forbidden` When the user is not a moderator/owne
+ `404 Not Found` Room not found
## Recording server requests
* Required capability: `recording-v1`
* Method: `POST`
* Endpoint: `/recording/backend`
* Header:
| field | type | Description |
| ------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------- |
| `TALK_RECORDING_RANDOM` | string | Random string that needs to be concatenated with request body to generate the checksum using the secret configured for the backend. |
| `TALK_RECORDING_CHECKSUM` | string | The checksum generated with `TALK_RECORDING_RANDOM`. |
* Data:
- Body as a JSON encoded string; format depends on the request type, see below.
* Response:
- Status code:
+ `200 OK`
+ `400 Bad Request`: When the body data does not match the expected format.
+ `403 Forbidden`: When the request validation failed.
### Started call recording
* Data format:
```json
{
"type": "started",
"started": {
"token": "the-token-of-the-room",
"status": "the-type-of-recording (see [Constants - Call recording status](constants.md#call-recording-status))",
"actor": {
"type": "the-type-of-the-actor",
"id": "the-id-of-the-actor",
},
},
}
```
* Response:
- (Additional) Status code:
+ `404 Not Found`: When the room is not found.
### Stopped call recording
* Data format:
```json
{
"type": "stopped",
"stopped": {
"token": "the-token-of-the-room",
"actor": {
"type": "the-type-of-the-actor",
"id": "the-id-of-the-actor",
},
},
}
```
- `actor` is optional
* Response:
- (Additional) Status code:
+ `404 Not Found`: When the room is not found.
### Failed call recording
* Data format:
```json
{
"type": "failed",
"failed": {
"token": "the-token-of-the-room",
},
}
```
* Response:
- (Additional) Status code:
+ `404 Not Found`: When the room is not found.