> For the complete documentation index, see [llms.txt](https://docs.decentraland.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.decentraland.org/creator/content-creator-es/recompensas/integrations.md).

# Integraciones

Conecta una campaña de Rewards a una scene de Decentraland o a un servidor externo para otorgar wearables y emotes automáticamente.

Después de crear y configurar una campaign y asegurarte de que tenga suficiente stock para otorgar recompensas, el siguiente paso es conectar la campaign a un trigger de recompensas. Este trigger puede ser una Scene, una Quest o un servidor externo. Esta sección explica cómo se pueden realizar diferentes integraciones con Rewards.

## Otorga recompensas desde una scene

Las recompensas pueden integrarse directamente en las scenes de Decentraland, pero este enfoque conlleva algunos riesgos. Como la lógica está incrustada en el código de la scene al que los usuarios pueden acceder, no se recomienda para acuñar items con una rareza inferior a \[EPIC]\([Ver documentación](/creator/content-creator-es/readme.md)#rarity).

Ten en cuenta que los usuarios determinados con suficiente conocimiento técnico podrían eludir medidas de seguridad como los captchas, cambiar sus direcciones IP y acuñar todos los items disponibles, que luego podrían vender en el Marketplace. La principal medida de protección contra esto es garantizar un suministro suficiente de items, para que todos tengan una oportunidad justa de recibir una recompensa.

### Banderas recomendadas del dispenser

Se recomiendan las siguientes configuraciones del dispenser para reducir el riesgo de exploits en este escenario:

* \[Límite de asignaciones]\([Ver documentación](/creator/content-creator-es/readme.md)#limit-assignments)
* \[Firma del beneficiario]\([Ver documentación](/creator/content-creator-es/readme.md)#beneficiary-signature)
* \[Protección con captcha]\([Ver documentación](/creator/content-creator-es/readme.md)#captcha-protection)
* \[Conectado a Decentraland]\([Ver documentación](/creator/content-creator-es/readme.md)#connected-to-decentraland)
* \[Posición dentro de Decentraland]\([Ver documentación](/creator/content-creator-es/readme.md)#position-inside-decentraland) (si aplica a tu caso de uso)

### Ejemplo

```tsx
import { getPlayer } from '@dcl/sdk/src/players'
import { signedFetch } from '@decentraland/SignedFetch'
import { getRealm } from '~system/Runtime'

export function main() {
  // 1. Obtener el desafío captcha para mostrar al usuario
  const request = await fetch(`https://rewards.decentraland.org/api/captcha`, {
    method: 'POST',
  })
  const captcha = await request.json()

  // 2. Mostrar el captcha para que el jugador lo complete - Ver ejemplo en studios.decentraland.org/resources

  // 3. Obtener datos del usuario
  const user = getPlayer()

  // 4. Obtener el realm actual
  const realmInfo = await getRealm({})

  // 5. Enviar solicitud para asignar un wearable/emote
  const assignRequest = await signedFetch('https://rewards.decentraland.org/api/rewards', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      campaign_key: '[DISPENSER_KEY]', // clave del dispenser
      beneficiary: user.userId, // dirección de Ethereum
      catalyst: realmInfo.baseUrl, // dominio de Catalyst
      captcha_id: captcha.data.id, // "9e6b2d07-b47b-4204-ae87-9c4dea48f9b7"
      captcha_value: '[CAPTCHA_VALUE]', // "123456"
    }),
  })

  const reward = await assignRequest.json()
```

## Otorga recompensas desde un Decentraland Quests

Puedes integrar fácilmente Rewards con los [Decentraland Quests](https://github.com/decentraland/docs/tree/main/creator/deprecated/quests/overview.md), esto es ideal si quieres recompensar a los usuarios por completar una quest.

### Banderas recomendadas del dispenser

Se recomiendan las siguientes configuraciones del dispenser para reducir el riesgo de exploits en este escenario:

* \[Límite de asignaciones]\([Ver documentación](/creator/content-creator-es/readme.md)#limit-assignments) (si aplica a tu caso de uso)

Cualquier otra de las demás flags hará que tu integración falle; evita usarlas.

{% hint style="warning" %}
⚠️ La clave del dispenser debe mantenerse en secreto, así que nunca debes exponerla al usuario en ningún momento.
{% endhint %}

### Ejemplo

Para integrar tu Quest con el servicio de Rewards, solo necesitas una clave del dispenser y [configurar un webhook](https://github.com/decentraland/docs/tree/main/creator/deprecated/quests/rewards.md) para otorgar recompensas.

```js
{
    // ...
    "reward": {
        "hook": {
            "webhookUrl": "https://rewars.decentraland.org/api/rewards",
            "requestBody": {
                "campaign_key": "[DISPENSER_KEY]",
                "beneficiary": "{user_address}"
            }
        },
        // ...
    }
}
```

## Otorga recompensas desde un servidor personalizado

Puedes integrar Rewards directamente desde tu servidor, lo cual es ideal para realizar comprobaciones adicionales antes de acuñar items. Una ventaja adicional es que, a diferencia del código de la scene, el código de tu servidor puede no ser público, lo que dificulta más que los usuarios descubran y exploten vulnerabilidades.

### Banderas recomendadas del dispenser

Se recomiendan las siguientes configuraciones del dispenser para reducir el riesgo de exploits en este escenario:

* \[Límite de asignaciones]\([Ver documentación](/creator/content-creator-es/readme.md)#limit-assignments) (si aplica a tu caso de uso)

Habilitar cualquiera de las otras flags podría complicar tu integración o, según tu caso de uso, incluso provocar que falle. Por lo tanto, no se recomienda usarlas a menos que exista una necesidad específica. Sin embargo, quizás quieras explorar sus posibles beneficios.

{% hint style="warning" %}
⚠️ La clave del dispenser debe mantenerse en secreto, así que nunca debes exponerla al usuario en ningún momento.
{% endhint %}

### Ejemplo

```tsx
const request = await fetch('https://rewards.decentraland.org/api/rewards', {
	method: 'POST',
	headers: {
		'Content-Type': 'application/json',
	},
	body: JSON.stringify({
		campaign_key: '[DISPENSER_KEY]',
		beneficiary: '0x0f5d2fb29fb7d3cfee444a200298f468908cc942', // dirección de Ethereum
	}),
})

const response = await request.json()
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.decentraland.org/creator/content-creator-es/recompensas/integrations.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
