> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nemu.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# Framer

> Como conectar a Framer ao Dashboard da Nemu

## Script de passagem de UTMs

### Quando usar

Caso você tenha uma página de vendas dedicada, é necessário instalar o script de passagem de UTMs na página de checkout da Framer.

### Por que é importante

O script de passagem de UTMs desempenha um papel crucial ao transferir as informações das UTMs de uma página para outra dentro do seu funil de vendas, garantindo que esses dados sejam rastreados até o momento do checkout.

```js Script de passagem de UTMs theme={null}
<script>
   var timer = setInterval(function () {
      const location =
         window.trackingNemu?.nemuUtms ||
         new URL(document.location.href)?.searchParams;
      const fields = [
         "src",
         "sck",
         "utm_source",
         "utm_medium",
         "utm_campaign",
         "utm_content",
         "utm_term",
         "nemu_source",
         "nemu_medium",
         "nemu_campaign",
         "nemu_content",
         "nemu_adset",
         "nemu_term"
      ];
      var links = document.getElementsByTagName("a");

      for (var i = 0, n = links.length; i < n; i++) {
         if (links[i].href.includes("#")) continue;
         if (links[i].href) {
            let link = new URL(links[i].href);
            fields.forEach((field) => {
               if (location.get(field))
                  link.searchParams.set(field, location.get(field));
            });
            let href = link.href;
            links[i].href = href;
         }
      }
   }, 500);
</script>
```

### Como instalar

1. Acesse as configurações da sua página na Framer

2. Na seção **Custom Code**, adicione o [script de passagem de UTMs](#script-de-passagem-de-utms) e o [Pixel da Nemu](/pages/onboarding/configurando-pixel) (gerado no
   [passo 4 do onboarding](/pages/onboarding/configurando-pixel#4-clique-no-bot%C3%A3o-para-copiar-o-script-gerado))

<img src="https://mintcdn.com/nemu/w_LOeVHkZxi-c4ax/assets/pages/integracoes/framer/1.png?fit=max&auto=format&n=w_LOeVHkZxi-c4ax&q=85&s=ddcd2bf35fe087bd78286d9058ef6ea7" alt="" width="3024" height="1672" data-path="assets/pages/integracoes/framer/1.png" />

3. Clique em **Save** para salvar as alterações.

<Info>
  Se a sua página conter formulários antes de ir para o checkout, é necessário instalar o script de passagem de UTMs no formulário para que as UTMs sejam capturadas.
</Info>

## Código de passagem de UTMs no formulário da Framer

1. Na menu lateral, em **Code** clique no botão **+** e escolha **New Code File**

<img src="https://mintcdn.com/nemu/w_LOeVHkZxi-c4ax/assets/pages/integracoes/framer/2.png?fit=max&auto=format&n=w_LOeVHkZxi-c4ax&q=85&s=2b190faef20efac098593827efea5005" alt="" width="654" height="1520" data-path="assets/pages/integracoes/framer/2.png" />

2. No campo **Name**, digite **NemuHotmartForm**, escolha a opção **Override** e clique em **Create**

<img src="https://mintcdn.com/nemu/w_LOeVHkZxi-c4ax/assets/pages/integracoes/framer/3.png?fit=max&auto=format&n=w_LOeVHkZxi-c4ax&q=85&s=fb61fedbd01461e68772b013c947fba4" alt="" width="456" height="370" data-path="assets/pages/integracoes/framer/3.png" />

3. Cole o código abaixo no arquivo criado:

<Warning>
  Substitua a URL do checkout pela URL do checkout da sua oferta e os campos do formulário pelos campos do seu formulário.
</Warning>

<img src="https://mintcdn.com/nemu/w_LOeVHkZxi-c4ax/assets/pages/integracoes/framer/4.png?fit=max&auto=format&n=w_LOeVHkZxi-c4ax&q=85&s=56a5ecb2dba0896f4e8ce10c5d55a65b" alt="" width="2068" height="1708" data-path="assets/pages/integracoes/framer/4.png" />

<Tip>
  Para verificar os nomes dos campos do formulário, acesse o popup do seu projeto e clique em cima do campo que deseja verificar o nome.

  <img src="https://mintcdn.com/nemu/w_LOeVHkZxi-c4ax/assets/pages/integracoes/framer/5.png?fit=max&auto=format&n=w_LOeVHkZxi-c4ax&q=85&s=3158cb509b412cfe733286949e9ff50a" alt="" width="2394" height="1274" data-path="assets/pages/integracoes/framer/5.png" />
</Tip>

```jsx theme={null}
import { Override } from "framer"

export function NemuHotmartForm(): Override {
    return {
        onClick: async () => {
            const waitForForm = () =>
                new Promise<HTMLFormElement | null>((resolve) => {
                    const start = Date.now()
                    const interval = setInterval(() => {
                        const form = document.querySelector("form")
                        if (form) {
                            clearInterval(interval)
                            resolve(form)
                        } else if (Date.now() - start > 2000) {
                            clearInterval(interval)
                            resolve(null)
                        }
                    }, 50)
                })
            const form = await waitForForm()
            if (!form) return

            const params =
                window.trackingNemu?.nemuUtms ||
                new URLSearchParams(window.location.search)
            const fields = [
                "src",
                "sck",
                "utm_source",
                "utm_medium",
                "utm_campaign",
                "utm_content",
                "utm_term",
                "nemu_source",
                "nemu_medium",
                "nemu_campaign",
                "nemu_content",
                "nemu_adset",
                "nemu_term",

                // Adicionar os campos do formulário
                "name",
                "email",
                "phone",
            ]

            fields.forEach((field) => {
                let input = form.querySelector<HTMLInputElement>(
                    `input[name='${field}']`
                )
                if (!input) {
                    input = document.createElement("input")
                    input.type = "hidden"
                    input.name = field
                    form.appendChild(input)
                }
                const val = params.get(field)
                if (val) input.value = val
            })

            const getValue = (name: string) =>
                form.querySelector<HTMLInputElement>(`input[name='${name}']`)
                    ?.value || ""

            // Substituir pela URL do checkout da sua oferta
            const checkoutURL = "https://pay.hotmart.com/999999999?off=999999999&checkoutMode=10"

            const url = `${checkoutURL}&name=${encodeURIComponent(getValue("name"))}&email=${encodeURIComponent(getValue("email"))}&phoneac=${encodeURIComponent(getValue("phoneac"))}&src=${encodeURIComponent(getValue("src"))}&sck=${encodeURIComponent(getValue("sck"))}&utm_source=${encodeURIComponent(getValue("utm_source"))}&utm_medium=${encodeURIComponent(getValue("utm_medium"))}&utm_campaign=${encodeURIComponent(getValue("utm_campaign"))}&utm_content=${encodeURIComponent(getValue("utm_content"))}&utm_term=${encodeURIComponent(getValue("utm_term"))}`

            window.location.href = url
        },
    }
}
```

4. No botão do seu formulário, selecione o componente em **CodeOverride** e escolha **NemuHotmartForm**

<img src="https://mintcdn.com/nemu/w_LOeVHkZxi-c4ax/assets/pages/integracoes/framer/6.png?fit=max&auto=format&n=w_LOeVHkZxi-c4ax&q=85&s=0d1aeeed78d095c6f202d2a9704e4fb2" alt="" width="2496" height="1528" data-path="assets/pages/integracoes/framer/6.png" />

5. Clique em **Publish** e depois **Update** para visualizar as alterações.

<img src="https://mintcdn.com/nemu/w_LOeVHkZxi-c4ax/assets/pages/integracoes/framer/7.png?fit=max&auto=format&n=w_LOeVHkZxi-c4ax&q=85&s=8c02a83269f294aecf8c757b4d3873ee" alt="" width="694" height="516" data-path="assets/pages/integracoes/framer/7.png" />
