# Integraciones

Después de crear y configurar una campaña y asegurarte de que tenga stock suficiente para proporcionar 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 hacer diferentes integraciones con Rewards.

## Otorgar recompensas desde una scene

Rewards se puede integrar 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 minting de 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 potencialmente medidas de seguridad como captchas, cambiar sus direcciones IP y minting de todos los items disponibles, que luego podrían vender en el marketplace. La principal protección contra esto es garantizar un suministro suficiente de items, para que todos tengan una oportunidad justa de recibir una recompensa.

### Flags recomendadas para el dispenser

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

* \[Limit Assignments]\([Ver documentación](/creator/content-creator-es/readme.md)#limit-assignments)
* \[Beneficiary Signature]\([Ver documentación](/creator/content-creator-es/readme.md)#beneficiary-signature)
* \[Captcha Protection]\([Ver documentación](/creator/content-creator-es/readme.md)#captcha-protection)
* \[Connected to Decentraland]\([Ver documentación](/creator/content-creator-es/readme.md)#connected-to-decentraland)
* \[Position inside 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 un 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 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 una Decentraland Quest

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

### Flags recomendadas para el dispenser

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

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

Cualquiera de las otras 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/blob/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 minting 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 hace más difícil que los usuarios descubran y exploten vulnerabilidades.

### Flags recomendadas para el dispenser

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

* \[Limit Assignments]\([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, potencialmente 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: 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:

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

The question should be specific, self-contained, and written in natural language.
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.
