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

# Discord Entitlement

> Berikan pelanggan Anda sebuah peran di server Discord Anda saat mereka membeli, dan cabut secara otomatis saat berlangganan mereka berakhir.

<Info>
  Pemberian hak Discord menambahkan pelanggan yang membayar ke server Anda (dan opsional memberikan mereka sebuah peran) saat langganan mereka aktif atau pembelian satu kali mereka selesai. Pembatalan, pengembalian dana, dan perubahan rencana akan secara otomatis mencabut peran tersebut.
</Info>

## Apa yang akan dikirimkan

* Pelanggan menghubungkan akun Discord mereka melalui tautan OAuth di email pengiriman atau portal pelanggan mereka.
* Setelah mereka mengotorisasi, Dodo Payments menambahkan mereka ke server Anda (atau menemukan keanggotaan yang ada) dan memberikan peran yang Anda atur.
* Jika Anda tidak memilih peran tertentu, hanya keanggotaan server yang diberikan.

Integrasi ini ideal untuk komunitas berbayar, keuntungan pendukung, dan saluran akses bertingkat.

## Hubungkan Discord

<Steps>
  <Step title="Open Entitlements">
    Di dashboard Dodo Payments Anda, pergi ke **Entitlements** dan klik **+** untuk memulai hak baru.
  </Step>

  <Step title="Pick Discord">
    Pilih **Discord Access** sebagai integrasi. Jika Anda belum menghubungkan Discord untuk bisnis Anda, Anda akan diminta untuk **Connect Discord**.

    <Frame caption="Connect Discord prompt before the OAuth handoff.">
      <img src="https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/discord/connect-prompt.png?fit=max&auto=format&n=do-W-dMDGVB_xzr_&q=85&s=8a34c436dd7510942db2a9221f623938" alt="Panel hak baru yang meminta pedagang untuk menghubungkan Discord" style={{ maxHeight: '500px', width: 'auto' }} width="2844" height="1622" data-path="images/entitlements/discord/connect-prompt.png" />
    </Frame>

    Mengklik akan membuka Discord di tab baru. Masuk, pilih server yang ingin Anda atur, dan konfirmasi izin bot (Manage Roles, Kick Members, Create Invite) di server tersebut.

    <Frame caption="Discord OAuth: pick the server, then confirm the bot's permissions on it.">
      <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '12px', alignItems: 'center', justifyItems: 'center' }}>
        <img src="https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/discord/oauth-add-bot.png?fit=max&auto=format&n=do-W-dMDGVB_xzr_&q=85&s=b57bf306fa15aa3f49b528f803cc625e" alt="Layar OAuth Discord yang menanyakan server mana yang akan ditambahkan bot Dodo Payments" style={{ width: '100%', maxHeight: '420px', objectFit: 'contain' }} width="1026" height="1362" data-path="images/entitlements/discord/oauth-add-bot.png" />

        <img src="https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/discord/oauth-permissions.png?fit=max&auto=format&n=do-W-dMDGVB_xzr_&q=85&s=438c0b04177e3a4863fb90986f5b95e0" alt="Layar konfirmasi izin bot Discord" style={{ width: '100%', maxHeight: '420px', objectFit: 'contain' }} width="1038" height="1472" data-path="images/entitlements/discord/oauth-permissions.png" />
      </div>
    </Frame>

    Saat Discord mengarahkan kembali, Anda akan melihat konfirmasi bahwa server telah terhubung.

    <Frame caption="Server connected — return to the Dodo Payments dashboard to continue.">
      <img src="https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/discord/connected.png?fit=max&auto=format&n=do-W-dMDGVB_xzr_&q=85&s=bd1cbb3f9960e4eb1881d7a818dc6f16" alt="Halaman konfirmasi berhasil terhubung dengan Discord Access" style={{ maxHeight: '500px', width: 'auto' }} width="2000" height="1140" data-path="images/entitlements/discord/connected.png" />
    </Frame>
  </Step>

  <Step title="Pick a server and role">
    Kembali ke dashboard, pilih **server** (guild) yang baru saja Anda hubungkan. Pilih sebuah **peran** untuk diberikan saat pengiriman, atau biarkan kosong untuk hanya memberikan keanggotaan server. Beri hak tersebut sebuah **nama** dan klik **Create Entitlement**.

    <Frame>
      <img src="https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/discord/create.png?fit=max&auto=format&n=do-W-dMDGVB_xzr_&q=85&s=79e95041881d2925e58fc752280d508e" alt="Formulir Akses Discord untuk Pemberian Hak Baru dengan server yang terhubung, pemilih server, dropdown peran, dan kolom nama" style={{ maxHeight: '500px', width: 'auto' }} width="1196" height="1564" data-path="images/entitlements/discord/create.png" />
    </Frame>
  </Step>

  <Step title="Save the entitlement">
    Simpan haknya. Sekarang tersedia untuk dilampirkan ke produk apa pun.
  </Step>
</Steps>

## Alur pelanggan

1. Pelanggan menyelesaikan pembayaran.
2. Dodo Payments membuat hak dalam status `pending` dengan `oauth_url` yang mengarah ke Discord.
3. Pelanggan menerima email dengan tombol "Bergabung dengan Discord" (tautan OAuth). Tautan ini juga dapat dilihat di portal pelanggan mereka.
4. Setelah pelanggan mengotorisasi, bot menambahkan mereka ke server dan memberikan peran yang dikonfigurasi. Hak berubah menjadi `delivered`.
5. Jika langganan dibatalkan, dijeda, atau berakhir, atau jika pedagang mencabut secara manual, bot akan menghapus peran dan hak berubah menjadi `revoked`.

<Tip>
  Pastikan peran bot Dodo Payments diposisikan **di atas** peran yang Anda berikan. Discord mencegah bot memberikan peran yang lebih tinggi dari mereka sendiri.
</Tip>

## Konfigurasi yang diperlukan

| Bidang     | Diperlukan | Deskripsi                                                                               |
| ---------- | ---------- | --------------------------------------------------------------------------------------- |
| `guild_id` | Yes        | ID server Discord. Pemilih dashboard akan mengisi ini untuk Anda.                       |
| `role_id`  | No         | Peran yang akan diberikan saat pengiriman. Lewati untuk akses hanya keanggotaan server. |

## Membuat via API

<CodeGroup>
  ```typescript TypeScript theme={null} theme={null}
  import DodoPayments from 'dodopayments';

  const client = new DodoPayments({
    bearerToken: process.env['DODO_PAYMENTS_API_KEY'],
    environment: 'test_mode',
  });

  const entitlement = await client.entitlements.create({
    name: 'Patrons Discord Role',
    integration_type: 'discord',
    integration_config: {
      guild_id: '123456789012345678',
      role_id: '987654321098765432',
    },
  });
  ```

  ```python Python theme={null} theme={null}
  client.entitlements.create(
      name="Patrons Discord Role",
      integration_type="discord",
      integration_config={
          "guild_id": "123456789012345678",
          "role_id": "987654321098765432",
      },
  )
  ```

  ```go Go theme={null} theme={null}
  client.Entitlements.New(ctx, dodopayments.EntitlementNewParams{
    Name:            dodopayments.F("Patrons Discord Role"),
    IntegrationType: dodopayments.F(dodopayments.EntitlementIntegrationTypeDiscord),
    IntegrationConfig: dodopayments.F[dodopayments.IntegrationConfigUnionParam](
      dodopayments.IntegrationConfigDiscordConfigParam{
        GuildID: dodopayments.F("123456789012345678"),
        RoleID:  dodopayments.F("987654321098765432"),
      },
    ),
  })
  ```
</CodeGroup>

## Webhooks

Berlangganan ke [`entitlement_grant.*` webhook events](/developer-resources/webhooks/intents/entitlement-grant) untuk melacak pemberian hak Discord:

* `entitlement_grant.created` terjadi dengan `status: "pending"` dan `oauth_url` bagi pelanggan untuk mengotorisasi.
* `entitlement_grant.delivered` terjadi setelah peran diberikan.
* `entitlement_grant.revoked` terjadi saat peran dihapus.

## Memecahkan Masalah

<AccordionGroup>
  <Accordion title="Customer never sees the role assigned">
    Hak berada dalam `pending` hingga pelanggan menyelesaikan alur OAuth. Periksa daftar hak dan pastikan mereka mengklik tautan OAuth. Kirim ulang email jika diperlukan.
  </Accordion>

  <Accordion title="Grant moves to failed with permission errors">
    Pastikan bot Dodo Payments tetap ada di server, memiliki izin `Manage Roles`, dan diposisikan di atas peran yang sedang diberikan. Menyimpan ulang hak akan menjalankan validasi kembali.
  </Accordion>

  <Accordion title="Customer cancelled but still has the role">
    Discord menyebarkan penghapusan peran secara langsung, tetapi klien Discord lokal pelanggan mungkin menyimpan sementara. Mereka harus menyambung ulang atau menyegarkan; status sisi server sudah benar.
  </Accordion>
</AccordionGroup>
