xref: /aosp_15_r20/external/googleapis/google/apps/meet/v2/resource.proto (revision d5c09012810ac0c9f33fe448fb6da8260d444cc9)
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