1// Copyright 2023 Google LLC 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15syntax = "proto3"; 16 17package google.apps.meet.v2; 18 19import "google/api/field_behavior.proto"; 20import "google/api/resource.proto"; 21import "google/protobuf/timestamp.proto"; 22 23option csharp_namespace = "Google.Apps.Meet.V2"; 24option go_package = "cloud.google.com/go/apps/meet/apiv2/meetpb;meetpb"; 25option java_multiple_files = true; 26option java_outer_classname = "ResourceProto"; 27option java_package = "com.google.apps.meet.v2"; 28option php_namespace = "Google\\Apps\\Meet\\V2"; 29option ruby_package = "Google::Apps::Meet::V2"; 30 31// Virtual place where conferences are held. Only one active conference can be 32// held in one space at any given time. 33message Space { 34 option (google.api.resource) = { 35 type: "meet.googleapis.com/Space" 36 pattern: "spaces/{space}" 37 }; 38 39 // Immutable. Resource name of the space. 40 // Format: `spaces/{space}` 41 string name = 1 [(google.api.field_behavior) = IMMUTABLE]; 42 43 // Output only. URI used to join meetings, such as 44 // `https://meet.google.com/abc-mnop-xyz`. 45 string meeting_uri = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; 46 47 // Output only. Type friendly code to join the meeting. Format: 48 // `[a-z]+-[a-z]+-[a-z]+` such as `abc-mnop-xyz`. The maximum length is 128 49 // characters. Can only be used as an alias of the space ID to get the space. 50 string meeting_code = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; 51 52 // Configuration pertaining to the meeting space. 53 SpaceConfig config = 5; 54 55 // Active conference, if it exists. 56 ActiveConference active_conference = 6; 57} 58 59// Active conference. 60message ActiveConference { 61 // Output only. Reference to 'ConferenceRecord' resource. 62 // Format: `conferenceRecords/{conference_record}` where `{conference_record}` 63 // is a unique ID for each instance of a call within a space. 64 string conference_record = 1 [ 65 (google.api.field_behavior) = OUTPUT_ONLY, 66 (google.api.resource_reference) = { 67 type: "meet.googleapis.com/ConferenceRecord" 68 } 69 ]; 70} 71 72// The configuration pertaining to a meeting space. 73message SpaceConfig { 74 // Possible access types for a meeting space. 75 enum AccessType { 76 // Default value specified by the user's organization. 77 // Note: This is never returned, as the configured access type is 78 // returned instead. 79 ACCESS_TYPE_UNSPECIFIED = 0; 80 81 // Anyone with the join information (for example, the URL or phone access 82 // information) can join without knocking. 83 OPEN = 1; 84 85 // Members of the host's organization, invited external users, and dial-in 86 // users can join without knocking. Everyone else must knock. 87 TRUSTED = 2; 88 89 // Only invitees can join without knocking. Everyone else must knock. 90 RESTRICTED = 3; 91 } 92 93 // Entry points that can be used to join a meeting. Example: 94 // `meet.google.com`, the Meet Embed SDK Web, or a mobile application. 95 enum EntryPointAccess { 96 // Unused. 97 ENTRY_POINT_ACCESS_UNSPECIFIED = 0; 98 99 // All entry points are allowed. 100 ALL = 1; 101 102 // Only entry points owned by the Google Cloud project that created the 103 // space can be used to join meetings in this space. Apps can use the Meet 104 // Embed SDK Web or mobile Meet SDKs to create owned entry points. 105 CREATOR_APP_ONLY = 2; 106 } 107 108 // Access type of the meeting space that determines who can join without 109 // knocking. Default: The user's default access settings. Controlled by the 110 // user's admin for enterprise users or RESTRICTED. 111 AccessType access_type = 1; 112 113 // Defines the entry points that can be used to join meetings hosted in this 114 // meeting space. 115 // Default: EntryPointAccess.ALL 116 EntryPointAccess entry_point_access = 2; 117} 118 119// Single instance of a meeting held in a space. 120message ConferenceRecord { 121 option (google.api.resource) = { 122 type: "meet.googleapis.com/ConferenceRecord" 123 pattern: "conferenceRecords/{conference_record}" 124 plural: "conferenceRecords" 125 singular: "conferenceRecord" 126 }; 127 128 // Identifier. Resource name of the conference record. 129 // Format: `conferenceRecords/{conference_record}` where `{conference_record}` 130 // is a unique ID for each instance of a call within a space. 131 string name = 1 [(google.api.field_behavior) = IDENTIFIER]; 132 133 // Output only. Timestamp when the conference started. Always set. 134 google.protobuf.Timestamp start_time = 2 135 [(google.api.field_behavior) = OUTPUT_ONLY]; 136 137 // Output only. Timestamp when the conference ended. 138 // Set for past conferences. Unset if the conference is ongoing. 139 google.protobuf.Timestamp end_time = 3 140 [(google.api.field_behavior) = OUTPUT_ONLY]; 141 142 // Output only. Server enforced expiration time for when this conference 143 // record resource is deleted. The resource is deleted 30 days after the 144 // conference ends. 145 google.protobuf.Timestamp expire_time = 4 146 [(google.api.field_behavior) = OUTPUT_ONLY]; 147 148 // Output only. The space where the conference was held. 149 string space = 5 [ 150 (google.api.field_behavior) = OUTPUT_ONLY, 151 (google.api.resource_reference) = { type: "meet.googleapis.com/Space" } 152 ]; 153} 154 155// User who attended or is attending a conference. 156message Participant { 157 option (google.api.resource) = { 158 type: "meet.googleapis.com/Participant" 159 pattern: "conferenceRecords/{conference_record}/participants/{participant}" 160 plural: "participants" 161 singular: "participant" 162 }; 163 164 oneof user { 165 // Signed-in user. 166 SignedinUser signedin_user = 4; 167 168 // Anonymous user. 169 AnonymousUser anonymous_user = 5; 170 171 // User calling from their phone. 172 PhoneUser phone_user = 6; 173 } 174 175 // Output only. Resource name of the participant. 176 // Format: `conferenceRecords/{conference_record}/participants/{participant}` 177 string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; 178 179 // Output only. Time when the participant first joined the meeting. 180 google.protobuf.Timestamp earliest_start_time = 7 181 [(google.api.field_behavior) = OUTPUT_ONLY]; 182 183 // Output only. Time when the participant left the meeting for the last time. 184 // This can be null if it's an active meeting. 185 google.protobuf.Timestamp latest_end_time = 8 186 [(google.api.field_behavior) = OUTPUT_ONLY]; 187} 188 189// Refers to each unique join or leave session when a user joins a conference 190// from a device. Note that any time a user joins the conference a new unique ID 191// is assigned. That means if a user joins a space multiple times from the same 192// device, they're assigned different IDs, and are also be treated as different 193// participant sessions. 194message ParticipantSession { 195 option (google.api.resource) = { 196 type: "meet.googleapis.com/ParticipantSession" 197 pattern: "conferenceRecords/{conference_record}/participants/{participant}/participantSessions/{participant_session}" 198 plural: "participantSessions" 199 singular: "participantSession" 200 }; 201 202 // Identifier. Session id. 203 string name = 1 [(google.api.field_behavior) = IDENTIFIER]; 204 205 // Output only. Timestamp when the user session starts. 206 google.protobuf.Timestamp start_time = 2 207 [(google.api.field_behavior) = OUTPUT_ONLY]; 208 209 // Output only. Timestamp when the user session ends. Unset if the user 210 // session hasn’t ended. 211 google.protobuf.Timestamp end_time = 3 212 [(google.api.field_behavior) = OUTPUT_ONLY]; 213} 214 215// A signed-in user can be: 216// a) An individual joining from a personal computer, mobile device, or through 217// companion mode. 218// b) A robot account used by conference room devices. 219message SignedinUser { 220 // Output only. Unique ID for the user. Interoperable with Admin SDK API and 221 // People API. Format: `users/{user}` 222 string user = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; 223 224 // Output only. For a personal device, it's the user's first name and last 225 // name. For a robot account, it's the administrator-specified device name. 226 // For example, "Altostrat Room". 227 string display_name = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; 228} 229 230// User who joins anonymously (meaning not signed into a Google Account). 231message AnonymousUser { 232 // Output only. User provided name when they join a conference anonymously. 233 string display_name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; 234} 235 236// User dialing in from a phone where the user's identity is unknown because 237// they haven't signed in with a Google Account. 238message PhoneUser { 239 // Output only. Partially redacted user's phone number when calling. 240 string display_name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; 241} 242 243// Metadata about a recording created during a conference. 244message Recording { 245 option (google.api.resource) = { 246 type: "meet.googleapis.com/Recording" 247 pattern: "conferenceRecords/{conference_record}/recordings/{recording}" 248 plural: "recordings" 249 singular: "recording" 250 }; 251 252 // Current state of the recording session. 253 enum State { 254 // Default, never used. 255 STATE_UNSPECIFIED = 0; 256 257 // An active recording session has started. 258 STARTED = 1; 259 260 // This recording session has ended, but the recording file hasn't been 261 // generated yet. 262 ENDED = 2; 263 264 // Recording file is generated and ready to download. 265 FILE_GENERATED = 3; 266 } 267 268 oneof destination { 269 // Output only. Recording is saved to Google Drive as an MP4 file. The 270 // `drive_destination` includes the Drive `fileId` that can be used to 271 // download the file using the `files.get` method of the Drive API. 272 DriveDestination drive_destination = 6 273 [(google.api.field_behavior) = OUTPUT_ONLY]; 274 } 275 276 // Output only. Resource name of the recording. 277 // Format: `conferenceRecords/{conference_record}/recordings/{recording}` 278 // where `{recording}` is a 1:1 mapping to each unique recording session 279 // during the conference. 280 string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; 281 282 // Output only. Current state. 283 State state = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; 284 285 // Output only. Timestamp when the recording started. 286 google.protobuf.Timestamp start_time = 4 287 [(google.api.field_behavior) = OUTPUT_ONLY]; 288 289 // Output only. Timestamp when the recording ended. 290 google.protobuf.Timestamp end_time = 5 291 [(google.api.field_behavior) = OUTPUT_ONLY]; 292} 293 294// Export location where a recording file is saved in Google Drive. 295message DriveDestination { 296 // Output only. The `fileId` for the underlying MP4 file. For example, 297 // "1kuceFZohVoCh6FulBHxwy6I15Ogpc4hP". Use `$ GET 298 // https://www.googleapis.com/drive/v3/files/{$fileId}?alt=media` to download 299 // the blob. For more information, see 300 // https://developers.google.com/drive/api/v3/reference/files/get. 301 string file = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; 302 303 // Output only. Link used to play back the recording file in the browser. For 304 // example, `https://drive.google.com/file/d/{$fileId}/view`. 305 string export_uri = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; 306} 307 308// Metadata for a transcript generated from a conference. It refers to the ASR 309// (Automatic Speech Recognition) result of user's speech during the conference. 310message Transcript { 311 option (google.api.resource) = { 312 type: "meet.googleapis.com/Transcript" 313 pattern: "conferenceRecords/{conference_record}/transcripts/{transcript}" 314 plural: "transcripts" 315 singular: "transcript" 316 }; 317 318 // Current state of the transcript session. 319 enum State { 320 // Default, never used. 321 STATE_UNSPECIFIED = 0; 322 323 // An active transcript session has started. 324 STARTED = 1; 325 326 // This transcript session has ended, but the transcript file hasn't been 327 // generated yet. 328 ENDED = 2; 329 330 // Transcript file is generated and ready to download. 331 FILE_GENERATED = 3; 332 } 333 334 oneof destination { 335 // Output only. Where the Google Docs transcript is saved. 336 DocsDestination docs_destination = 6 337 [(google.api.field_behavior) = OUTPUT_ONLY]; 338 } 339 340 // Output only. Resource name of the transcript. 341 // Format: `conferenceRecords/{conference_record}/transcripts/{transcript}`, 342 // where `{transcript}` is a 1:1 mapping to each unique transcription session 343 // of the conference. 344 string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; 345 346 // Output only. Current state. 347 State state = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; 348 349 // Output only. Timestamp when the transcript started. 350 google.protobuf.Timestamp start_time = 4 351 [(google.api.field_behavior) = OUTPUT_ONLY]; 352 353 // Output only. Timestamp when the transcript stopped. 354 google.protobuf.Timestamp end_time = 5 355 [(google.api.field_behavior) = OUTPUT_ONLY]; 356} 357 358// Google Docs location where the transcript file is saved. 359message DocsDestination { 360 // Output only. The document ID for the underlying Google Docs transcript 361 // file. For example, "1kuceFZohVoCh6FulBHxwy6I15Ogpc4hP". Use the 362 // `documents.get` method of the Google Docs API 363 // (https://developers.google.com/docs/api/reference/rest/v1/documents/get) to 364 // fetch the content. 365 string document = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; 366 367 // Output only. URI for the Google Docs transcript file. Use 368 // `https://docs.google.com/document/d/{$DocumentId}/view` to browse the 369 // transcript in the browser. 370 string export_uri = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; 371} 372 373// Single entry for one user’s speech during a transcript session. 374message TranscriptEntry { 375 option (google.api.resource) = { 376 type: "meet.googleapis.com/TranscriptEntry" 377 pattern: "conferenceRecords/{conference_record}/transcripts/{transcript}/entries/{entry}" 378 plural: "transcriptEntries" 379 singular: "transcriptEntry" 380 }; 381 382 // Output only. Resource name of the entry. Format: 383 // "conferenceRecords/{conference_record}/transcripts/{transcript}/entries/{entry}" 384 string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; 385 386 // Output only. Refers to the participant who speaks. 387 string participant = 2 [ 388 (google.api.field_behavior) = OUTPUT_ONLY, 389 (google.api.resource_reference) = { 390 type: "meet.googleapis.com/Participant" 391 } 392 ]; 393 394 // Output only. The transcribed text of the participant's voice, at maximum 395 // 10K words. Note that the limit is subject to change. 396 string text = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; 397 398 // Output only. Language of spoken text, such as "en-US". 399 // IETF BCP 47 syntax (https://tools.ietf.org/html/bcp47) 400 string language_code = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; 401 402 // Output only. Timestamp when the transcript entry started. 403 google.protobuf.Timestamp start_time = 5 404 [(google.api.field_behavior) = OUTPUT_ONLY]; 405 406 // Output only. Timestamp when the transcript entry ended. 407 google.protobuf.Timestamp end_time = 6 408 [(google.api.field_behavior) = OUTPUT_ONLY]; 409} 410