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

# Autorización de Discord

> Otorga a tus clientes un rol en tu servidor de Discord cuando compran, y revócalo automáticamente cuando finaliza su suscripción.

<Info>
  La autorización de Discord agrega a un cliente que paga a tu servidor (y opcionalmente les asigna un rol) en el momento en que su suscripción se activa o su compra única se completa. Cancelaciones, reembolsos y cambios de plan revocan el rol automáticamente.
</Info>

## Qué se entrega

* El cliente conecta su cuenta de Discord a través de un enlace OAuth en su correo de entrega o en el portal del cliente.
* Una vez autorizados, Dodo Payments los añade a tu servidor (o encuentra su membresía existente) y asigna el rol que configuraste.
* Si no elegiste un rol específico, solo se otorga la membresía del servidor.

Esta integración es ideal para comunidades de pago, beneficios de seguidores y canales de acceso por niveles.

## Conectar Discord

<Steps>
  <Step title="Open Entitlements">
    En tu panel de Dodo Payments, ve a **Entitlements** y haz clic en **+** para comenzar una nueva autorización.
  </Step>

  <Step title="Pick Discord">
    Elige **Acceso a Discord** como la integración. Si aún no has conectado Discord para tu negocio, se te pedirá que **Conectes 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 de nueva autorización solicitando al comerciante que conecte Discord" style={{ maxHeight: '500px', width: 'auto' }} width="2844" height="1622" data-path="images/entitlements/discord/connect-prompt.png" />
    </Frame>

    Al hacer clic se abre Discord en una nueva pestaña. Inicia sesión, elige el servidor que deseas restringir y confirma los permisos del bot (Administrar Roles, Expulsar Miembros, Crear Invitación) en ese servidor.

    <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="Pantalla de OAuth de Discord preguntando a qué servidor agregar el bot de 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="Pantalla de confirmación de permisos del bot de Discord" style={{ width: '100%', maxHeight: '420px', objectFit: 'contain' }} width="1038" height="1472" data-path="images/entitlements/discord/oauth-permissions.png" />
      </div>
    </Frame>

    Cuando Discord redirija de regreso, verás una confirmación de que el servidor está conectado.

    <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="Página de confirmación de acceso a Discord conectado correctamente" 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">
    De nuevo en el panel, selecciona el **servidor** (guild) que acabas de conectar. Opcionalmente, elige un **rol** para asignar en la entrega, o déjalo en blanco para otorgar solo membresía del servidor. Dale un **nombre** a la autorización y haz clic en **Crear Autorización**.

    <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="Nuevo formulario de Autorización - Acceso a Discord con servidor conectado, selector de servidor, desplegable de rol y campo de nombre" style={{ maxHeight: '500px', width: 'auto' }} width="1196" height="1564" data-path="images/entitlements/discord/create.png" />
    </Frame>
  </Step>

  <Step title="Save the entitlement">
    Guarda la autorización. Ahora está disponible para adjuntar a cualquier producto.
  </Step>
</Steps>

## Flujo del cliente

1. El cliente completa el pago.
2. Dodo Payments crea una autorización en estado `pending` con un `oauth_url` señalando a Discord.
3. El cliente recibe un correo electrónico con un botón "Unirse a Discord" (el enlace OAuth). El enlace también es visible en su portal de cliente.
4. Después de que el cliente autoriza, el bot los agrega al servidor y asigna el rol configurado. La autorización pasa a `delivered`.
5. Si la suscripción se cancela, pausa o expira, o si el comerciante revoca manualmente, el bot elimina el rol y la autorización pasa a `revoked`.

<Tip>
  Asegúrate de que el rol del bot de Dodo Payments esté posicionado **por encima** del rol que otorgas. Discord impide que los bots asignen roles clasificados más alto que el suyo propio.
</Tip>

## Configuración requerida

| Campo      | Requerido | Descripción                                                                          |
| ---------- | --------- | ------------------------------------------------------------------------------------ |
| `guild_id` | Sí        | El ID del servidor de Discord. El selector de panel lo llena por ti.                 |
| `role_id`  | No        | El rol para asignar en la entrega. Omite para acceso solo de membresía del servidor. |

## Crear vía 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

Suscríbete a los [eventos webhook `entitlement_grant.*`](/developer-resources/webhooks/intents/entitlement-grant) para rastrear las autorizaciones de Discord:

* `entitlement_grant.created` se activa con `status: "pending"` y un `oauth_url` para que el cliente autorice.
* `entitlement_grant.delivered` se activa una vez que el rol se asigna.
* `entitlement_grant.revoked` se activa cuando el rol se elimina.

## Resolución de problemas

<AccordionGroup>
  <Accordion title="Customer never sees the role assigned">
    La autorización está en `pending` hasta que el cliente complete el flujo OAuth. Verifica la lista de autorizaciones de la autorización y confirma si hicieron clic en el enlace OAuth. Reenvía el correo de entrega si es necesario.
  </Accordion>

  <Accordion title="Grant moves to failed with permission errors">
    Asegúrate de que el bot de Dodo Payments permanezca en el servidor, tenga permiso `Manage Roles` y esté posicionado por encima del rol que se está asignando. Volver a guardar la autorización volverá a ejecutar la validación.
  </Accordion>

  <Accordion title="Customer cancelled but still has the role">
    Discord propaga las eliminaciones de roles de inmediato, pero el cliente local de Discord del cliente puede estar en caché. Deberían reconectar o refrescar; el estado del lado del servidor es correcto.
  </Accordion>
</AccordionGroup>
