> ## 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.

# Quyền lợi trên Discord

> Cấp cho khách hàng của bạn một vai trò trong máy chủ Discord của bạn khi họ mua và tự động thu hồi khi đăng ký của họ kết thúc.

<Info>
  Quyền lợi Discord thêm khách hàng trả tiền vào máy chủ của bạn (và tùy chọn gán cho họ một vai trò) ngay khi đăng ký của họ trở nên có hiệu lực hoặc thanh toán một lần của họ được xác nhận. Hủy bỏ, hoàn tiền và thay đổi gói sẽ tự động thu hồi vai trò.
</Info>

## Những gì được cung cấp

* Khách hàng kết nối tài khoản Discord của họ thông qua một liên kết OAuth trong email giao hàng hoặc cổng thông tin khách hàng của họ.
* Khi họ ủy quyền, Dodo Payments thêm họ vào máy chủ của bạn (hoặc tìm kiếm thành viên đã có) và gán vai trò bạn đã cấu hình.
* Nếu bạn không chọn một vai trò cụ thể, chỉ thành viên máy chủ được cấp.

Tích hợp này lý tưởng cho cộng đồng trả phí, ưu đãi cho người ủng hộ, và các kênh truy cập phân cấp.

## Kết nối Discord

<Steps>
  <Step title="Open Entitlements">
    Trong bảng điều khiển Dodo Payments của bạn, đi đến **Entitlements** và nhấp vào **+** để bắt đầu một quyền lợi mới.
  </Step>

  <Step title="Pick Discord">
    Chọn **Discord Access** làm tích hợp. Nếu bạn chưa kết nối Discord cho doanh nghiệp của mình, bạn sẽ được yêu cầu **Kết nối 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 quyền lợi mới nhắc thương nhân kết nối Discord" style={{ maxHeight: '500px', width: 'auto' }} width="2844" height="1622" data-path="images/entitlements/discord/connect-prompt.png" />
    </Frame>

    Nhấn vào sẽ mở Discord trong một tab mới. Đăng nhập, chọn máy chủ bạn muốn kiểm soát truy cập, và xác nhận quyền của bot (Quản lý Vai trò, Kick Members, Create Invite) trên máy chủ đó.

    <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="Màn hình Discord OAuth hỏi máy chủ nào để thêm bot Dodo Payments vào" 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="Màn hình xác nhận quyền của bot Discord" style={{ width: '100%', maxHeight: '420px', objectFit: 'contain' }} width="1038" height="1472" data-path="images/entitlements/discord/oauth-permissions.png" />
      </div>
    </Frame>

    Khi Discord chuyển hướng lại, bạn sẽ thấy xác nhận rằng máy chủ đã được kết nối.

    <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="Trang xác nhận kết nối thành công 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">
    Trở lại bảng điều khiển, chọn **máy chủ** (guild) bạn vừa kết nối. Tùy chọn chọn một **vai trò** để gán khi giao hàng, hoặc để trống để chỉ cấp thành viên máy chủ. Đặt tên cho quyền lợi và nhấp vào **Tạo Quyền lợi**.

    <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="Quyền lợi mới - Biểu mẫu truy cập Discord với máy chủ đã kết nối, chọn máy chủ, danh sách thả xuống vai trò, và trường tên" style={{ maxHeight: '500px', width: 'auto' }} width="1196" height="1564" data-path="images/entitlements/discord/create.png" />
    </Frame>
  </Step>

  <Step title="Save the entitlement">
    Lưu quyền lợi. Nó hiện có sẵn để đính kèm vào bất kỳ sản phẩm nào.
  </Step>
</Steps>

## Quy trình của khách hàng

1. Khách hàng hoàn tất thanh toán.
2. Dodo Payments tạo một quyền cấp ở trạng thái `pending` với một `oauth_url` chỉ vào Discord.
3. Khách hàng nhận được email với nút "Tham gia Discord" (liên kết OAuth). Liên kết cũng hiển thị trong cổng thông tin khách hàng của họ.
4. Sau khi khách hàng ủy quyền, bot thêm họ vào máy chủ và gán vai trò đã cấu hình. Quyền cấp chuyển sang `delivered`.
5. Nếu đăng ký bị hủy, tạm ngưng, hoặc hết hạn, hoặc nếu thương nhân thu hồi bằng tay, bot sẽ xóa vai trò và quyền cấp chuyển sang `revoked`.

<Tip>
  Đảm bảo vai trò của bot Dodo Payments được đặt **cao hơn** vai trò bạn cấp. Discord ngăn cản bot gán vai trò xếp hạng cao hơn vai trò của chúng.
</Tip>

## Cấu hình yêu cầu

| Trường     | Bắt buộc | Mô tả                                                                             |
| ---------- | -------- | --------------------------------------------------------------------------------- |
| `guild_id` | Có       | ID máy chủ Discord. Bộ chọn bảng điều khiển sẽ điền thông tin này cho bạn.        |
| `role_id`  | Không    | Vai trò để gán khi giao hàng. Bỏ qua để chỉ có quyền truy cập thành viên máy chủ. |

## Tạo qua 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

Đăng ký [sự kiện webhook `entitlement_grant.*`](/developer-resources/webhooks/intents/entitlement-grant) để theo dõi các quyền cấp trên Discord:

* `entitlement_grant.created` kích hoạt với `status: "pending"` và một `oauth_url` cho khách hàng ủy quyền.
* `entitlement_grant.delivered` kích hoạt khi vai trò được gán.
* `entitlement_grant.revoked` kích hoạt khi vai trò bị xóa.

## Khắc phục sự cố

<AccordionGroup>
  <Accordion title="Customer never sees the role assigned">
    Quyền cấp đang ở `pending` cho đến khi khách hàng hoàn tất luồng OAuth. Kiểm tra danh sách quyền cấp của quyền lợi và xác nhận liệu họ đã nhấp vào liên kết OAuth chưa. Gửi lại email giao hàng nếu cần.
  </Accordion>

  <Accordion title="Grant moves to failed with permission errors">
    Đảm bảo bot Dodo Payments vẫn ở trong máy chủ, có quyền `Manage Roles`, và được đặt cao hơn vai trò đang được gán. Lưu lại quyền lợi sẽ chạy lại xác minh.
  </Accordion>

  <Accordion title="Customer cancelled but still has the role">
    Discord truyền tải việc loại bỏ vai trò ngay lập tức, nhưng ứng dụng Discord cục bộ của khách hàng có thể lưu bộ nhớ cache. Họ nên kết nối lại hoặc làm mới; trạng thái phía máy chủ là chính xác.
  </Accordion>
</AccordionGroup>
