> 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 escena de Decentraland o a un servidor externo para conceder wearables y emotes automáticamente.

Después de crear y configurar una campaña y asegurarte de que tenga stock suficiente para entregar recompensas, el siguiente paso es conectar la campaña 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.

## Otorgar recompensas desde una escena

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

Ten en cuenta que los usuarios determinados con suficientes conocimientos técnicos podrían eludir medidas de seguridad como los captchas, cambiar sus direcciones IP y mintear todos los ítems disponibles, que luego podrían vender en el Marketplace. La principal protección contra esto es asegurar un suministro suficiente de ítems, de modo que todo el mundo tenga una oportunidad justa de recibir una recompensa.

### Flags recomendadas del dispenser

Las siguientes configuraciones del dispenser se recomiendan para reducir el riesgo de exploits en este escenario:

* \[Limitar 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 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 mostrárselo 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 la 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 del catalyst
      captcha_id: captcha.data.id, // "9e6b2d07-b47b-4204-ae87-9c4dea48f9b7"
      captcha_value: '[CAPTCHA_VALUE]', // "123456"
    }),
  })

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

## Otorgar recompensas desde Decentraland Quests

Puedes integrar fácilmente Rewards con [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.

### Flags recomendadas del dispenser

Las siguientes configuraciones del dispenser se recomiendan para reducir el riesgo de exploits en este escenario:

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

Cualquiera 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 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}"
            }
        },
        // ...
    }
}
```

## Otorgar recompensas desde un servidor personalizado

Puedes integrar Rewards directamente desde tu servidor, lo cual es ideal para realizar comprobaciones adicionales antes de mintear ítems. Una ventaja adicional es que, a diferencia del código de una scene, el código de tu servidor podría no ser público, lo que hace más difícil que los usuarios descubran y exploten vulnerabilidades.

### Flags recomendadas del dispenser

Las siguientes configuraciones del dispenser se recomiendan para reducir el riesgo de exploits en este escenario:

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

Habilitar cualquiera de las demás flags podría complicar tu integración o, según tu caso de uso, incluso hacer que falle. Por lo tanto, no se recomienda usarlas a menos que exista una necesidad específica. Sin embargo, quizá 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
