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

> Thêm khách hàng trả phí vào máy chủ Discord của bạn với một vai trò tùy chọn và tự động xóa họ khi quyền truy cập kết thúc.

> [!NOTE]
>
> Discord entitlement thêm khách hàng trả phí vào máy chủ Discord của bạn và có thể gán cho họ một vai trò. Khách hàng kết nối tài khoản Discord sau khi subscription của họ trở nên active hoặc khoản thanh toán một lần thành công. Khi grant bị thu hồi, chẳng hạn do hủy hoặc hoàn tiền, Dodo Payments sẽ xóa vai trò và xóa khách hàng khỏi máy chủ.

## Nội dung được cung cấp

* Khách hàng kết nối tài khoản Discord từ Customer Portal. Email xác nhận thanh toán đánh dấu entitlement là **Action Required** và liên kết đến portal.
* Sau khi họ cấp quyền, bot Dodo Payments sẽ thêm họ vào máy chủ của bạn hoặc tìm membership hiện có của họ, rồi gán vai trò bạn đã cấu hình.
* Nếu bạn không chọn vai trò, khách hàng chỉ có membership trong máy chủ.

Sử dụng tính năng này cho các cộng đồng trả phí, quyền lợi dành cho người ủng hộ và các kênh có quyền truy cập theo cấp độ.

## Kết nối Discord

**1. Open Entitlements**

Trong dashboard Dodo Payments, đi đến **Entitlements** và nhấp vào **+** để bắt đầu tạo entitlement mới.

**2. Pick Discord**

Chọn **Discord Access** làm integration. Nếu Discord chưa được kết nối cho doanh nghiệp của bạn, hãy nhấp vào **Connect Discord**.

![Panel quyền lợi mới nhắc thương nhân kết nối Discord](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)

Discord sẽ mở trong tab mới. Đăng nhập, chọn máy chủ bạn muốn kiểm soát quyền truy cập và phê duyệt các quyền của bot trên máy chủ đó: **Manage Roles**, **Kick Members** và **Create Invite**.

![Màn hình Discord OAuth hỏi bạn muốn thêm bot Dodo Payments vào máy chủ nào](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)

![Màn hình xác nhận quyền của bot Discord](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)

Khi Discord chuyển hướng trở lại, một trang xác nhận sẽ cho biết máy chủ đã được kết nối.

![Trang xác nhận Discord Access đã được kết nối thành công](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)

**3. Pick a Server and Role**

Quay lại dashboard, chọn **Server** bạn đã kết nối. Để gán vai trò khi cung cấp, hãy chọn vai trò đó trong **Role**. Để chỉ cấp membership trong máy chủ, giữ **Role** ở **No specific role**. Nhập **Name** cho entitlement và nhấp vào **Create Entitlement**.

![Biểu mẫu New Entitlement - Discord Access với máy chủ đã kết nối, bộ chọn máy chủ, menu thả xuống vai trò và trường tên](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)

**4. Attach It to a Product**

Entitlement đã được lưu và có thể đính kèm vào bất kỳ sản phẩm nào. Xem [Đính kèm Entitlements vào sản phẩm](/features/entitlements/introduction#attach-entitlements-to-products).

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

1. Khách hàng hoàn tất quy trình thanh toán.
2. Dodo Payments tạo một grant ở trạng thái `Pending`. Dodo Payments ngay lập tức cố gắng tạo URL ủy quyền Discord và lưu URL đó vào `oauth_url`. Nếu không thành công, `oauth_url` vẫn giữ giá trị `null` cho đến khi khách hàng bắt đầu quy trình chấp nhận.
3. Email xác nhận thanh toán liệt kê entitlement là **Yêu cầu thao tác** và liên kết đến Customer Portal. Trong portal, khách hàng nhấp vào **Connect** trên entitlement.
4. Khách hàng ủy quyền cho Dodo Payments trên Discord. Bot thêm khách hàng vào server và gán role đã cấu hình, đồng thời grant chuyển sang `Delivered`.
5. Khi grant bị thu hồi (subscription bị hủy, tạm dừng, đặt ở trạng thái chờ hoặc hết hạn, khoản thanh toán một lần được hoàn tiền, hoặc bạn thu hồi grant), bot xóa role và xóa khách hàng khỏi server. Grant chuyển sang `Revoked`.

Liên kết ủy quyền hết hạn 30 phút sau khi được tạo. Nếu khách hàng quay lại Customer Portal sau thời điểm đó, Dodo Payments sẽ tạo một liên kết mới. Nếu khách hàng tự rời khỏi máy chủ của bạn, Dodo Payments sẽ thu hồi grant của họ với `revocation_reason: platform_external`.

> [!TIP]
>
> Đặt vai trò của bot Dodo Payments **above** vai trò bạn gán. Discord không cho phép bot gán một vai trò ngang bằng hoặc cao hơn vai trò cao nhất của chính bot. Không thể gán các vai trò được quản lý, chẳng hạn như vai trò của bot và integration.

## Cấu hình bắt buộc

| Field | Required | Description |
| - | - | - |
| `guild_id` | Yes | ID của máy chủ Discord (guild). Bộ chọn máy chủ trong dashboard sẽ tự điền giá trị này cho bạn. |
| `role_id` | No | Vai trò cần gán khi cung cấp. Bỏ qua trường này hoặc truyền `null` để chỉ cấp quyền membership trong máy chủ. |

## Tạo qua API

```typescript TypeScript expandable 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 expandable theme={null}
import os
from dodopayments import DodoPayments

client = DodoPayments(
    bearer_token=os.environ.get("DODO_PAYMENTS_API_KEY"),
    environment="test_mode",
)

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

```go Go expandable theme={null}
// client is a *dodopayments.Client, for example from
// dodopayments.NewClient(option.WithEnvironmentTestMode()); ctx is a context.Context.
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"),
    },
  ),
})
```

## Webhooks

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

* `entitlement_grant.created` được kích hoạt với `status: "Pending"`. `oauth_url` có thể đã chứa URL ủy quyền. Nếu có giá trị `null`, URL sẽ được điền khi khách hàng bắt đầu quy trình chấp nhận từ Customer Portal.
* `entitlement_grant.delivered` được kích hoạt sau khi khách hàng tham gia server và role được gán.
* `entitlement_grant.revoked` được kích hoạt khi role bị xóa và khách hàng bị xóa khỏi server.

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

> **Customer never sees the role assigned**
>
> Grant vẫn ở trạng thái `Pending` cho đến khi khách hàng hoàn tất việc ủy quyền Discord. Mở entitlement trong dashboard và kiểm tra grant của khách hàng. Nếu grant vẫn ở trạng thái `Pending`, hãy yêu cầu khách hàng mở Customer Portal và nhấp vào **Connect** trên Discord entitlement.

> **Grant moves to failed with permission errors**
>
> Hãy đảm bảo bot Dodo Payments vẫn ở trong server, có quyền **Manage Roles** và nằm phía trên role đang được gán. Nếu bot bị xóa khỏi server, Dodo Payments sẽ thu hồi các grant đang chờ xử lý và đã phân phối của server. Việc lưu lại entitlement chỉ kiểm tra các cài đặt của entitlement, không kiểm tra quyền của bot. Sau khi khắc phục quyền, hãy yêu cầu khách hàng mở Customer Portal và nhấp vào **Connect** trên entitlement Discord để thử lại việc cấp grant.

> **Customer cancelled but still has the role**
>
> Việc thu hồi sẽ xóa vai trò và xóa khách hàng khỏi máy chủ. Nếu grant hiển thị `Revoked` nhưng khách hàng vẫn ở trong máy chủ, hãy xác nhận bot vẫn có quyền **Manage Roles** và **Kick Members**, đồng thời nằm phía trên vai trò đó. Nếu ứng dụng Discord của khách hàng vẫn hiển thị vai trò, hãy yêu cầu họ làm mới ứng dụng. Trạng thái phía máy chủ là nguồn dữ liệu chính xác.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.