【问题标题】:How to create a event with google meet link using service account in API?如何使用 API 中的服务帐户使用 Google Meet 链接创建活动?
【发布时间】:2021-06-18 06:02:31
【问题描述】:

使用服务帐户,如何通过使用 google 日历 API 创建事件来生成 google meet 链接。我的授权一切正常。但我不知道是什么。这是我的代码,成功创建事件但未生成 google meet 链接。响应显示事件创建详细信息,但没有关于 google-meet。非常感谢您的帮助。

        string calendarId = @"calendar-id";

        string[] Scopes = { CalendarService.Scope.Calendar };

        ServiceAccountCredential credential;
        string path = Server.MapPath("~/file.json");
        using (var stream =
            new FileStream(path, FileMode.Open, FileAccess.Read))
        {
            var confg = Google.Apis.Json.NewtonsoftJsonSerializer.Instance.Deserialize<JsonCredentialParameters>(stream);
            credential = new ServiceAccountCredential(
               new ServiceAccountCredential.Initializer(confg.ClientEmail)
               {
                   Scopes = Scopes
               }.FromPrivateKey(confg.PrivateKey));
        }


        var service = new CalendarService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = "Calendar API Sample",
        });

        var calendar = service.Calendars.Get(calendarId).Execute();
        string token = credential.Token.AccessToken;
        // Define parameters of request.
        EventsResource.ListRequest listRequest = service.Events.List(calendarId);
        listRequest.TimeMin = DateTime.Now;
        listRequest.ShowDeleted = false;
        listRequest.SingleEvents = true;
        listRequest.MaxResults = 10;
        listRequest.OrderBy = EventsResource.ListRequest.OrderByEnum.StartTime;

        Event newEvent = new Event();
        {
            DateTime start = Convert.ToDateTime("2021-06-18T05:00:02.000Z");
            DateTime end = Convert.ToDateTime("2021-06-18T06:00:02.000Z");
            newEvent.Summary = "summary".ToString();
            newEvent.Description = "description".ToString();
            newEvent.Status = "confirmed";
            newEvent.Creator = new Event.CreatorData
            {
                Email = " email-id",
                Self = true
            };
            newEvent.Organizer = new Event.OrganizerData
            {
                Email = "email-id",
                Self = true
            };
            newEvent.Start = new EventDateTime
            {
                DateTime = start,
                TimeZone = "Asia/Kolkata"

            };
            newEvent.End = new EventDateTime
            {
                DateTime = end,
                TimeZone = "Asia/Kolkata"
            };
            newEvent.HangoutLink = "";

            newEvent.ConferenceData = new ConferenceData()
            {
                ConferenceSolution = new ConferenceSolution
                {
                    Key = new ConferenceSolutionKey
                    {
                        Type = "hangoutsMeet"
                    }

                },
                CreateRequest = new CreateConferenceRequest()
                {

                    ConferenceSolutionKey = new ConferenceSolutionKey()
                    {
                        Type = "hangoutsMeet"
                    },
                    RequestId = "some-random-string"
                },


            };
            //newEvent.Attendees = new List<EventAttendee>()
            //{
            //    new EventAttendee() { Email = "" }
            //};
        };

        RestClient restClient = new RestClient();
        RestRequest request = new RestRequest();

        var serilaizeJson = JsonConvert.SerializeObject(newEvent, Formatting.None,
        new JsonSerializerSettings
        {
            NullValueHandling = NullValueHandling.Ignore
        });

        request.AddQueryParameter("key", "api-key");
        request.AddHeader("Authorization", "Bearer " + token);
        request.AddHeader("Accept", "application/json");
        request.AddHeader("Content-Type", "application/json");
        request.AddParameter("application/json", serilaizeJson, ParameterType.RequestBody);

        restClient.BaseUrl = new System.Uri("https://www.googleapis.com/calendar/v3/calendars/calendar-id/events?conferenceDataVersion=1");
        var response = restClient.Post(request);
        if (response.StatusCode == System.Net.HttpStatusCode.OK)
        {
            dynamic returnFile = JObject.Parse(response.Content);
            string link = returnFile["hangoutLink"];
        }

【问题讨论】:

  • 您能否确认您是否冒充了普通帐户?我在你的代码中找不到。服务帐户创建事件有一些限制,这可能是导致此问题的原因。您能否尝试创建一个包含与会者的活动并检查该活动是否已成功创建并包含这些与会者?

标签: c# google-calendar-api service-accounts google-meet


【解决方案1】:

解决方案

将以下对象添加到请求正文中

conferenceData: {
  createRequest: {
    requestId: "sample123",
    conferenceSolutionKey: { type: "hangoutsMeet" },
  },
}

【讨论】:

  • 我已经添加了这些对象,但是响应只创建了一个不生成 google meet 链接的事件。请检查上面的附加代码。
猜你喜欢
  • 2022-11-19
  • 1970-01-01
  • 2020-08-11
  • 2021-09-30
  • 1970-01-01
  • 1970-01-01
  • 2021-10-31
  • 2021-03-29
  • 1970-01-01
相关资源
最近更新 更多