> ## Documentation Index
> Fetch the complete documentation index at: https://help.dingtalk.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Menambah, mengambil, dan menghapus peserta acara

> Panduan mengelola peserta acara melalui Calendar API di DingTalk — mulai dari mendapatkan kredensial aplikasi, menambah izin, membuat acara, hingga menambah, mengambil, menghapus, dan merespons peserta.

Dokumen ini menjelaskan cara memanggil API terkait acara untuk mengelola peserta acara. Pertama, buat aplikasi internal. Kemudian, gunakan API yang disediakan untuk acara guna membuat acara, menambah peserta acara, mengambil peserta acara, menetapkan status respons undangan, dan menghapus peserta acara.

## Hasil yang diharapkan

* Setelah acara berhasil dibuat, hasilnya tampil seperti berikut.

* Antarmuka untuk menambah peserta acara tampil seperti berikut.

* Status respons acara tampil seperti berikut.

## Ikhtisar alur integrasi

Dokumen ini menunjukkan cara membuat aplikasi internal lalu menggunakan API yang disediakan untuk acara guna mengelola peserta acara.

Prasyarat: Selesaikan alur [Pembuatan dan konfigurasi aplikasi](/id/open/dingstart/create-application).

Langkah 1: Ambil kredensial aplikasi, termasuk client ID dan Client Secret.

Langkah 2: Ajukan izin API untuk API terkait acara.

Langkah 3: Dapatkan Kredensial akses aplikasi dengan mengikuti [Mendapatkan access token aplikasi internal](/id/open/development/obtain-the-access-token-of-an-internal-app). Access token digunakan untuk mengautentikasi identitas pemanggil saat memanggil API.

Langkah 4: Panggil Server API terkait acara di sisi server.

1. Panggil Server API [Acara Baru](/id/open/development/create-schedule) untuk membuat acara dan mengambil `id` acara.
2. Berdasarkan `id` acara, panggil Server API [Tambah peserta acara](/id/open/development/add-schedule-participant) untuk menambah peserta acara.
3. Berdasarkan `id` acara, panggil Server API [Dapatkan peserta acara](/id/open/development/get-the-participants-of-a-schedule) untuk mengambil informasi peserta.
4. Berdasarkan `id` acara, panggil Server API [Tetapkan status respons undangan acara](/id/open/development/configure-response-status) untuk menetapkan status respons undangan peserta.
5. Berdasarkan `id` acara, panggil Server API [Hapus peserta acara](/id/open/development/delete-schedule-participant) untuk menghapus peserta acara.

## Prasyarat

Selesaikan alur [Pembuatan dan konfigurasi aplikasi](/id/open/dingstart/create-application).

## Langkah 1: Ambil kredensial aplikasi

1. Pilih aplikasi target untuk membuka halaman detailnya, lalu klik **Informasi dasar** > **Kredensial dan informasi dasar**.
2. Ambil client ID dan Client Secret.

## Langkah 2: Tambah izin API

Klik **Konfigurasi pengembangan** > **Kelola izin**. Pada kotak pencarian izin, masukkan `Calendar.Event.Write` dan `Calendar.Event.Read` masing-masing, lalu ajukan setiap izin.

## Langkah 3: Dapatkan access token

<Warning>
  Untuk perbedaan antar-Server API, lihat API lama vs. API baru. API berikut semuanya menggunakan Server API. Untuk unduhan SDK, lihat unduhan SDK sisi server.
</Warning>

Gunakan client ID dan Client Secret dari Langkah 1 untuk mendapatkan [access\_token aplikasi internal](/id/open/development/obtain-orgapp-token).

```java theme={"theme":{"light":"github-light","dark":"github-dark"}}
 public void getAccessToken() throws Exception {
        Config config = new Config();
        config.protocol = "https";
        config.regionId = "central";
        com.aliyun.dingtalkoauth2_1_0.Client client = new com.aliyun.dingtalkoauth2_1_0.Client(config);
        GetAccessTokenRequest accessTokenRequest = new GetAccessTokenRequest()
                .setAppKey("ding*********hgn")
                .setAppSecret("9G_O**********xamBkhgGIO");
        GetAccessTokenResponse accessToken = client.getAccessToken(accessTokenRequest);
        System.out.println(JSON.toJSONString(accessToken.getBody()));
    }
```

## Langkah 4: Panggil Server API terkait acara di sisi server

1. Panggil Server API [Acara Baru](/id/open/development/create-schedule) untuk membuat acara dan mengambil `id` acara.

   ```java lines theme={"theme":{"light":"github-light","dark":"github-dark"}}
   public void createCalendar() throws Exception {
           Config config = new Config();
           config.protocol = "https";
           config.regionId = "central";
           com.aliyun.dingtalkcalendar_1_0.Client client = new com.aliyun.dingtalkcalendar_1_0.Client(config);
           CreateEventHeaders createEventHeaders = new CreateEventHeaders();
           createEventHeaders.xAcsDingtalkAccessToken = "accessToken";
           java.util.Map<String, String> extra = TeaConverter.buildMap(
                   new TeaPair("noChatNotification", "false"),
                   new TeaPair("noPushNotification","false")
           );
           CreateEventRequest.CreateEventRequestOnlineMeetingInfo onlineMeetingInfo = new CreateEventRequest.CreateEventRequestOnlineMeetingInfo()
                   .setType("dingtalk");
           CreateEventRequest.CreateEventRequestReminders reminders0 = new CreateEventRequest.CreateEventRequestReminders()
                   .setMethod("dingtalk")
                   .setMinutes(15);
           CreateEventRequest.CreateEventRequestLocation location = new CreateEventRequest.CreateEventRequestLocation()
                   .setDisplayName("Menara A, Lantai 9");
           CreateEventRequest.CreateEventRequestAttendees attendees0 = new CreateEventRequest.CreateEventRequestAttendees()
                   .setId("event attendee unionId")
                   .setIsOptional(false);
           CreateEventRequest.CreateEventRequestRecurrenceRange recurrenceRange = new CreateEventRequest.CreateEventRequestRecurrenceRange()
                   .setType("numbered")
                   .setNumberOfOccurrences(1);
           CreateEventRequest.CreateEventRequestRecurrencePattern recurrencePattern = new CreateEventRequest.CreateEventRequestRecurrencePattern()
                   .setType("daily")
                   .setInterval(1);
           CreateEventRequest.CreateEventRequestRecurrence recurrence = new CreateEventRequest.CreateEventRequestRecurrence()
                   .setPattern(recurrencePattern)
                   .setRange(recurrenceRange);
           CreateEventRequest.CreateEventRequestEnd end = new CreateEventRequest.CreateEventRequestEnd()
                   .setDate("2022-09-07");
   //                .setDateTime("2021-09-20T10:15:30+08:00")
   //                .setTimeZone("Asia/Shanghai");
           CreateEventRequest.CreateEventRequestStart start = new CreateEventRequest.CreateEventRequestStart()
                   .setDate("2022-09-07");
   //                .setDateTime("2021-09-20T10:15:30+08:00")
   //                .setTimeZone("Asia/Shanghai");
           CreateEventRequest createEventRequest = new CreateEventRequest()
                   .setSummary("Acara Baru")
                   .setDescription("Ini adalah acara yang baru dibuat")
                   .setStart(start)
                   .setEnd(end)
                   .setIsAllDay(true)
                   .setRecurrence(recurrence)
                   .setAttendees(java.util.Arrays.asList(
                           attendees0
                   ))
                   .setLocation(location)
                   .setReminders(java.util.Arrays.asList(
                           reminders0
                   ))
                   .setOnlineMeetingInfo(onlineMeetingInfo)
                   .setExtra(extra);
           try {
               CreateEventResponse eventWithOptions = client.createEventWithOptions("event organizer unionId", "primary", createEventRequest, createEventHeaders, new RuntimeOptions());
               System.out.println(JSON.toJSONString(eventWithOptions.getBody()));
           } catch (TeaException err) {
               if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
                   // Objek err berisi atribut code dan message, yang membantu Anda mendiagnosis masalah.
                   System.out.println(err.code);
                   System.out.println(err.message);
               }
           } catch (Exception _err) {
               TeaException err = new TeaException(_err.getMessage(), _err);
               if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
                   // Objek err berisi atribut code dan message, yang membantu Anda mendiagnosis masalah.
                   System.out.println(err.code);
                   System.out.println(err.message);
               }
           }
       }
   ```
2. Berdasarkan `id` acara, panggil Server API [Tambah peserta acara](/id/open/development/add-schedule-participant) untuk menambah peserta acara.

   ```java lines theme={"theme":{"light":"github-light","dark":"github-dark"}}
   public void addCalendarParticipants() throws Exception {
           Config config = new Config();
           config.protocol = "https";
           config.regionId = "central";
           com.aliyun.dingtalkcalendar_1_0.Client client  = new com.aliyun.dingtalkcalendar_1_0.Client(config);
           AddAttendeeHeaders addAttendeeHeaders = new AddAttendeeHeaders();
           addAttendeeHeaders.xAcsDingtalkAccessToken = "accessToken";
           AddAttendeeRequest.AddAttendeeRequestAttendeesToAdd attendeesToAdd0 = new AddAttendeeRequest.AddAttendeeRequestAttendeesToAdd()
                   .setId("event attendee unionId")
                   .setIsOptional(false);
           AddAttendeeRequest.AddAttendeeRequestAttendeesToAdd attendeesToAdd1 = new AddAttendeeRequest.AddAttendeeRequestAttendeesToAdd()
                   .setId("event attendee unionId")
                   .setIsOptional(false);
           AddAttendeeRequest addAttendeeRequest = new AddAttendeeRequest()
                   .setAttendeesToAdd(java.util.Arrays.asList(
                           attendeesToAdd0,
                           attendeesToAdd1
                   ));
           try {
               client.addAttendeeWithOptions("event organizer unionId", "primary", "event id", addAttendeeRequest, addAttendeeHeaders, new RuntimeOptions());
           } catch (TeaException err) {
               if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
                   // Objek err berisi atribut code dan message, yang membantu Anda mendiagnosis masalah.
                   System.out.println(err.code);
                   System.out.println(err.message);
               }

           } catch (Exception _err) {
               TeaException err = new TeaException(_err.getMessage(), _err);
               if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
                   // Objek err berisi atribut code dan message, yang membantu Anda mendiagnosis masalah.
                   System.out.println(err.code);
                   System.out.println(err.message);
               }
           }
       }
   ```
3. Berdasarkan `id` acara, panggil Server API [Dapatkan peserta acara](/id/open/development/get-the-participants-of-a-schedule) untuk mengambil informasi peserta.

   ```java lines theme={"theme":{"light":"github-light","dark":"github-dark"}}
   public void getCalendarParticipants() throws Exception {
           Config config = new Config();
           config.protocol = "https";
           config.regionId = "central";
           com.aliyun.dingtalkcalendar_1_0.Client client  = new com.aliyun.dingtalkcalendar_1_0.Client(config);
           ListAttendeesHeaders listAttendeesHeaders = new ListAttendeesHeaders();
           listAttendeesHeaders.xAcsDingtalkAccessToken = "accessToken";
           ListAttendeesRequest listAttendeesRequest = new ListAttendeesRequest()
                   .setMaxResults(100);
           try {
               ListAttendeesResponse listAttendeesResponse = client.listAttendeesWithOptions("event organizer unionId", "primary", "event id", listAttendeesRequest, listAttendeesHeaders, new RuntimeOptions());
               System.out.println(JSON.toJSONString(listAttendeesResponse.getBody()));
           } catch (TeaException err) {
               if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
                   // Objek err berisi atribut code dan message, yang membantu Anda mendiagnosis masalah.
                   System.out.println(err.code);
                   System.out.println(err.message);
               }
           } catch (Exception _err) {
               TeaException err = new TeaException(_err.getMessage(), _err);
               if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
                   // Objek err berisi atribut code dan message, yang membantu Anda mendiagnosis masalah.
                   System.out.println(err.code);
                   System.out.println(err.message);
               }
           }
       }
   ```
4. Berdasarkan `id` acara, panggil Server API [Tetapkan status respons undangan acara](/id/open/development/configure-response-status) untuk menetapkan status respons undangan peserta.

   ```java lines theme={"theme":{"light":"github-light","dark":"github-dark"}}
   public void setCalendarResponseStatus() throws Exception {
           Config config = new Config();
           config.protocol = "https";
           config.regionId = "central";
           com.aliyun.dingtalkcalendar_1_0.Client client  = new com.aliyun.dingtalkcalendar_1_0.Client(config);
           RespondEventHeaders respondEventHeaders = new RespondEventHeaders();
           respondEventHeaders.xAcsDingtalkAccessToken = "accessToken";
           RespondEventRequest respondEventRequest = new RespondEventRequest()
                   .setResponseStatus("accepted");
           try {
               client.respondEventWithOptions("event attendee unionId", "primary", "event id", respondEventRequest, respondEventHeaders, new RuntimeOptions());
           } catch (TeaException err) {
               if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
                   // Objek err berisi atribut code dan message, yang membantu Anda mendiagnosis masalah.
                   System.out.println(err.code);
                   System.out.println(err.message);
               }
           } catch (Exception _err) {
               TeaException err = new TeaException(_err.getMessage(), _err);
               if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
                   // Objek err berisi atribut code dan message, yang membantu Anda mendiagnosis masalah.
                   System.out.println(err.code);
                   System.out.println(err.message);
               }
           }
       }
   ```
5. Berdasarkan `id` acara, panggil Server API [Hapus peserta acara](/id/open/development/delete-schedule-participant) untuk menghapus peserta acara.

   ```java lines theme={"theme":{"light":"github-light","dark":"github-dark"}}
   public void deleteCalendarParticipants() throws Exception {
           Config config = new Config();
           config.protocol = "https";
           config.regionId = "central";
           com.aliyun.dingtalkcalendar_1_0.Client client  = new com.aliyun.dingtalkcalendar_1_0.Client(config);
           RemoveAttendeeHeaders removeAttendeeHeaders = new RemoveAttendeeHeaders();
           removeAttendeeHeaders.xAcsDingtalkAccessToken = "accessToken";
           RemoveAttendeeRequest.RemoveAttendeeRequestAttendeesToRemove attendeesToRemove0 = new RemoveAttendeeRequest.RemoveAttendeeRequestAttendeesToRemove()
                   .setId("event attendee unionId");
           RemoveAttendeeRequest removeAttendeeRequest = new RemoveAttendeeRequest()
                   .setAttendeesToRemove(java.util.Arrays.asList(
                           attendeesToRemove0
                   ));
           try {
               client.removeAttendeeWithOptions("event organizer unionId", "primary", "event id", removeAttendeeRequest, removeAttendeeHeaders, new RuntimeOptions());
           } catch (TeaException err) {
               if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
                   // Objek err berisi atribut code dan message, yang membantu Anda mendiagnosis masalah.
                   System.out.println(err.code);
                   System.out.println(err.message);
               }

           } catch (Exception _err) {
               TeaException err = new TeaException(_err.getMessage(), _err);
               if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
                   // Objek err berisi atribut code dan message, yang membantu Anda mendiagnosis masalah.
                   System.out.println(err.code);
                   System.out.println(err.message);
               }
           }
       }
   ```
