# Integrações

Depois de criar e configurar uma campanha e garantir que ela tenha stock suficiente para fornecer recompensas, o próximo passo é conectar a campanha a um trigger de recompensas. Esse trigger pode ser uma Scene, uma Quest ou um servidor externo. Esta seção explica como diferentes integrações com Rewards podem ser feitas.

## Conceder recompensas a partir de uma scene

As Rewards podem ser integradas diretamente nas scenes do Decentraland, mas essa abordagem traz alguns riscos. Como a lógica está incorporada no código da scene ao qual os usuários podem ter acesso, não é recomendada para minting de itens com raridade inferior a \[EPIC]\([Ver documentação](/creator/content-creator-pt/readme.md)#rarity).

Tenha em mente que usuários determinados com conhecimento técnico suficiente poderiam potencialmente contornar medidas de segurança como captchas, alterar seus endereços IP e mintar todos os itens disponíveis, que depois poderiam vender no marketplace. A principal proteção contra isso é garantir uma oferta suficiente de itens, para que todos tenham uma chance justa de receber uma recompensa.

### Flags recomendadas do dispenser

As configurações de dispenser a seguir são recomendadas para reduzir o risco de exploits neste cenário:

* \[Limitar Atribuições]\([Ver documentação](/creator/content-creator-pt/readme.md)#limit-assignments)
* \[Assinatura do Beneficiário]\([Ver documentação](/creator/content-creator-pt/readme.md)#beneficiary-signature)
* \[Proteção por Captcha]\([Ver documentação](/creator/content-creator-pt/readme.md)#captcha-protection)
* \[Conectado ao Decentraland]\([Ver documentação](/creator/content-creator-pt/readme.md)#connected-to-decentraland)
* \[Posição dentro do Decentraland]\([Ver documentação](/creator/content-creator-pt/readme.md)#position-inside-decentraland) (se isso se aplicar ao seu caso de uso)

### Exemplo

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

export function main() {
  // 1. Obtenha o desafio de captcha para mostrar ao usuário
  const request = await fetch(`https://rewards.decentraland.org/api/captcha`, {
    method: 'POST',
  })
  const captcha = await request.json()

  // 2. Exiba o captcha para o player completar - Veja o exemplo em studios.decentraland.org/resources

  // 3. Obtenha os dados do usuário
  const user = getPlayer()

  // 4. Obtenha o realm atual
  const realmInfo = await getRealm({})

  // 5. Envie a request para atribuir um 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]', // chave do dispenser
      beneficiary: user.userId, // endereço Ethereum
      catalyst: realmInfo.baseUrl, // domínio do catalyst
      captcha_id: captcha.data.id, // "9e6b2d07-b47b-4204-ae87-9c4dea48f9b7"
      captcha_value: '[CAPTCHA_VALUE]', // "123456"
    }),
  })

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

## Conceder recompensas a partir de uma Quest do Decentraland

Você pode integrar facilmente Rewards com as [Quests do Decentraland](https://github.com/decentraland/docs/blob/main/creator/deprecated/quests/overview.md), isso é ideal se você quiser recompensar usuários por completar uma quest.

### Flags recomendadas do dispenser

As configurações de dispenser a seguir são recomendadas para reduzir o risco de exploits neste cenário:

* \[Limitar Atribuições]\([Ver documentação](/creator/content-creator-pt/readme.md)#limit-assignments) (se isso se aplicar ao seu caso de uso)

Qualquer outra das flags fará com que sua integração falhe; evite usá-las.

{% hint style="warning" %}
⚠️ A chave do dispenser deve ser mantida em segredo, então você nunca deve expô-la ao usuário em nenhum momento.
{% endhint %}

### Exemplo

Para integrar sua Quest com o serviço Rewards, você só precisa de uma chave de dispenser e de [configurar um webhook](https://github.com/decentraland/docs/blob/main/creator/deprecated/quests/rewards.md) para conceder recompensas.

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

## Conceder recompensas a partir de um servidor personalizado

Você pode integrar Rewards diretamente a partir do seu servidor, o que é ideal para realizar verificações extras antes de mintar itens. Uma vantagem adicional é que, ao contrário do código da scene, o código do seu servidor pode não ser público, tornando mais difícil para os usuários descobrir e explorar vulnerabilidades.

### Flags recomendadas do dispenser

As configurações de dispenser a seguir são recomendadas para reduzir o risco de exploits neste cenário:

* \[Limitar Atribuições]\([Ver documentação](/creator/content-creator-pt/readme.md)#limit-assignments) (se isso se aplicar ao seu caso de uso)

Habilitar qualquer uma das outras flags pode complicar sua integração ou, dependendo do seu caso de uso, potencialmente fazer com que ela falhe. Portanto, não é recomendável usá-las, a menos que haja uma necessidade específica. No entanto, talvez você queira explorar seus possíveis benefícios.

{% hint style="warning" %}
⚠️ A chave do dispenser deve ser mantida em segredo, então você nunca deve expô-la ao usuário em nenhum momento.
{% endhint %}

### Exemplo

```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', // endereço 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-pt/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.
