# Assegna Badge quando l'utente visita un link

**URL:** https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700
**Category:** Data & reporting
**Tags:** sql-triggered-badge
**Created:** [25 Agosto 2023, 10:55pm UTC](https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700 "2023-08-25T22:55:08Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![Sami\_Syed](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sami_syed/32/93193_2.png) [@Sami\_Syed](https://meta.discourse.org/u/Sami_Syed)
#### Post date: [25 Agosto 2023, 10:55pm UTC](https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/1 "2023-08-25T22:55:08Z")

</div>

Come posso concedere automaticamente un badge quando l’utente visita un link all’interno del forum Discourse?

es: [https://myforum.example.com?special\_access=true](https://myforum.example.com?special_access=true)

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [26 Agosto 2023, 4:58am UTC](https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/3 "2023-08-26T04:58:42Z")

</div>

Che ne dici di usare la tabella `topic_link_clicks`?

Penso di avere un badge manuale che potrebbe trarne beneficio. 🤔 Ci penserò.

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [26 Agosto 2023, 10:01am UTC](https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/4 "2023-08-26T10:01:22Z")

</div>

Se si tratta di un link specifico condiviso in un post specifico, penso che questo sarebbe sufficiente:

```sql
SELECT DISTINCT tlc.user_id, MIN(tlc.created_at) granted_at
FROM badge_posts p
  LEFT JOIN topic_links tl ON tl.post_id = p.id
  LEFT JOIN topic_link_clicks tlc ON tlc.topic_link_id = tl.id
WHERE tl.post_id = 1246
  AND tl.url = 'https://meta.discourse.org/'
  AND tlc.user_id IS NOT NULL
GROUP BY tlc.user_id

```

Dovresti recuperare il `post_id` del tuo post specifico dal suo JSON (o eseguire una ricerca tramite il [data explorer](https://meta.discourse.org/t/32566?silent=true))

 ![clicky clicky](https://global.discourse-cdn.com/meta/original/4X/7/6/9/769ae8ff0a51f65f075d38689cefffddd309316b.png)

---

<div class="post-metadata">

### Author: ![Sami\_Syed](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sami_syed/32/93193_2.png) [@Sami\_Syed](https://meta.discourse.org/u/Sami_Syed)
#### Post date: [26 Agosto 2023, 6:01pm UTC](https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/5 "2023-08-26T18:01:38Z")

</div>

Penso che questo potrebbe funzionare.

Voglio concedere questo badge solo ai membri del nostro corso.  
C’è un modo per nascondere un argomento al pubblico generale e renderlo disponibile solo a coloro che ci cliccano sopra tramite un link?

In secondo luogo, come si può fare usando il plugin Dfata explorer?

> [@JammyDodger](#):
>
> Dovresti recuperare il post\_id del tuo post specifico dal suo json (o eseguire una ricerca tramite il [data explorer](https://meta.discourse.org/t/32566))

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [26 Agosto 2023, 6:34pm UTC](https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/6 "2023-08-26T18:34:45Z")

</div>

> [@Sami\_Syed](#):
>
> Voglio concedere questo badge solo ai membri del nostro corso.  
> C’è un modo per nascondere un argomento al pubblico generale e renderlo disponibile solo a coloro che ci cliccano tramite un link?

Non sono sicuro al 100% di seguire il metodo che stai usando per questo? Potresti voler verificare di non complicare eccessivamente l’impostazione.

> [@Sami\_Syed](#):
>
> In secondo luogo, come si può fare usando il plugin Dfata explorer?

Se controllare il json non fa per te, una query di ricerca post\_id sarebbe qualcosa del genere:

```sql
-- [params]
-- topic_id :topic_id
-- int :post_number

SELECT id
FROM posts
WHERE topic_id = :topic_id
  AND post_number = :post_number

```

Quindi puoi usare l’URL del post per estrarre l’ID dell’argomento e il numero del post da inserire nelle caselle dei parametri. ad esempio: `https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/4` (vale la pena notare che l’OP è sempre il post\_number 1, anche se non è nel link dell’argomento)

* * *

In realtà, c’è un parametro magico che potrebbe rendere la ricerca di un post\_id usando il [data explorer](https://meta.discourse.org/t/32566?silent=true) ancora più facile…

```sql
-- [params]
-- post_id :url

SELECT id
FROM posts
WHERE id = :url

```

Incolla l’URL pertinente per il post nella casella del parametro, _et voila_ - estrae il post\_id 🙂

 ![post_id](https://global.discourse-cdn.com/meta/original/4X/5/5/b/55baf4e95d82dc82639a14b740dde85cbe6fb76d.png)

---

<div class="post-metadata">

### Author: ![Sami\_Syed](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sami_syed/32/93193_2.png) [@Sami\_Syed](https://meta.discourse.org/u/Sami_Syed)
#### Post date: [28 Agosto 2023, 4:19pm UTC](https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/7 "2023-08-28T16:19:56Z")

</div>

> [@JammyDodger](#):
>
> ```plaintext
> -- [params]
> -- post_id :url
> 
> SELECT id 
> FROM posts
> WHERE id = :url
> 
> ```

Ho appena provato questo ma non restituisce alcun ID. È vuoto:

 ![Screenshot 2023-08-28 121948](https://global.discourse-cdn.com/meta/original/4X/5/c/3/5c3a1a559cd5f00cb6f27c750861b17f9cc19f54.jpeg)

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [28 Agosto 2023, 4:21pm UTC](https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/8 "2023-08-28T16:21:17Z")

</div>

Lo sfondo rosso mi fa pensare che non sia un URL di post completo. Se si tratta di un URL di argomento, è necessario aggiungere `/1` alla fine:

`https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/1`

---

<div class="post-metadata">

### Author: ![Sami\_Syed](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sami_syed/32/93193_2.png) [@Sami\_Syed](https://meta.discourse.org/u/Sami_Syed)
#### Post date: [29 Agosto 2023, 2:07pm UTC](https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/9 "2023-08-29T14:07:26Z")

</div>

Ha funzionato!

---

<div class="post-metadata">

### Author: ![Sami\_Syed](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sami_syed/32/93193_2.png) [@Sami\_Syed](https://meta.discourse.org/u/Sami_Syed)
#### Post date: [29 Agosto 2023, 2:08pm UTC](https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/10 "2023-08-29T14:08:50Z")

</div>

> [@JammyDodger](#):
>
> ` AND tl.url = 'https://meta.discourse.org/'`

Presumo che questo debba essere sostituito con l’URL del post che include ‘/1’?

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [29 Agosto 2023, 2:10pm UTC](https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/11 "2023-08-29T14:10:02Z")

</div>

Quel pezzo deve essere sostituito con il link su cui stanno cliccando all’interno del post.

E il post\_id è il post in cui il link viene incollato/condiviso.

---

<div class="post-metadata">

### Author: ![Sami\_Syed](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sami_syed/32/93193_2.png) [@Sami\_Syed](https://meta.discourse.org/u/Sami_Syed)
#### Post date: [29 Agosto 2023, 2:11pm UTC](https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/12 "2023-08-29T14:11:34Z")

</div>

Capisco, quindi non c’è modo di assegnare semplicemente il badge facendogli visitare il link del post?

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [29 Agosto 2023, 2:19pm UTC](https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/13 "2023-08-29T14:19:12Z")

</div>

Penso che dovrebbe esserci, ma sarebbe una query diversa. 🙂 Questa assegna un badge per aver cliccato su un link specifico in un post di un forum specifico.

Se vuoi assegnare un badge per la visita di un utente a un particolare argomento, penso che sarebbe:

```sql
SELECT DISTINCT tv.user_id, MIN(tv.viewed_at) granted_at
FROM topic_views tv
WHERE tv.topic_id = 728
GROUP BY tv.user_id

```

(Sostituendo ‘728’ con il topic\_id pertinente)

---

<div class="post-metadata">

### Author: ![Sami\_Syed](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sami_syed/32/93193_2.png) [@Sami\_Syed](https://meta.discourse.org/u/Sami_Syed)
#### Post date: [30 Agosto 2023, 2:03pm UTC](https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/14 "2023-08-30T14:03:12Z")

</div>

Ok, ecco come l’ho configurato:

 ![Screenshot 2023-08-30 100233](https://global.discourse-cdn.com/meta/original/4X/9/3/2/9325ba34dd7a75ecba62047c35beb6d11222c644.jpeg)

Ma quando visito il post in questione (come amministratore), non ricevo il badge. Sto facendo qualcosa di sbagliato?

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [30 Agosto 2023, 2:07pm UTC](https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/15 "2023-08-30T14:07:09Z")

</div>

Poiché necessita del trigger giornaliero di aggiornamento, gli verrà concesso la prossima volta che verrà eseguita l’attività di assegnazione badge giornaliera. È possibile attivare manualmente `Jobs::BadgeGrant` dalla pagina `/sidekiq/scheduler` se si desidera velocizzare il controllo.

---

<div class="post-metadata">

### Author: ![Sami\_Syed](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sami_syed/32/93193_2.png) [@Sami\_Syed](https://meta.discourse.org/u/Sami_Syed)
#### Post date: [30 Agosto 2023, 2:13pm UTC](https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/16 "2023-08-30T14:13:56Z")

</div>

> [@JammyDodger](#):
>
> /sidekiq/scheduler

Come posso farlo aggiornare istantaneamente?

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [30 Agosto 2023, 2:17pm UTC](https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/17 "2023-08-30T14:17:47Z")

</div>

Gli unici trigger disponibili sono:

- Aggiorna giornalmente
- Quando un utente modifica o crea un post
- Quando un utente viene modificato o creato
- Quando un utente agisce su un post
- Quando un utente viene modificato o creato
- Quando un utente cambia il livello di fiducia

 ![image](https://global.discourse-cdn.com/meta/original/4X/2/6/8/268320889a60983cffccbd4b731855b38b006c56.png)

Per ottenere un badge più istantaneo, dovresti lavorare all’interno di quelle azioni. Puoi leggere di più in questo argomento - [Creating triggered custom badge queries](https://meta.discourse.org/t/create-triggered-custom-badge-queries/19336)

---

<div class="post-metadata">

### Author: ![Sami\_Syed](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sami_syed/32/93193_2.png) [@Sami\_Syed](https://meta.discourse.org/u/Sami_Syed)
#### Post date: [30 Agosto 2023, 2:18pm UTC](https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/18 "2023-08-30T14:18:53Z")

</div>

> [@JammyDodger](#):
>
> attiva manualmente `Jobs::BadgeGrant`

Ho fatto questo ma non mi è ancora stato concesso.

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [30 Agosto 2023, 2:25pm UTC](https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/19 "2023-08-30T14:25:50Z")

</div>

Per quanto mi riguarda, funziona.

L’hai abilitato? E ti sei assicurato di aver impostato il numero di argomento corretto?

 ![enable badge](https://global.discourse-cdn.com/meta/original/4X/9/7/3/973dd1a77610ad1ba561d9fbdac2756c0625924e.png)

---

<div class="post-metadata">

### Author: ![Sami\_Syed](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sami_syed/32/93193_2.png) [@Sami\_Syed](https://meta.discourse.org/u/Sami_Syed)
#### Post date: [30 Agosto 2023, 2:37pm UTC](https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/20 "2023-08-30T14:37:21Z")

</div>

Sì, è abilitato. Provo su un altro profilo. Forse è perché sono l’amministratore.

In secondo luogo, stai semplicemente incollando il link dell’argomento nel tuo browser?

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [30 Agosto 2023, 2:41pm UTC](https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/21 "2023-08-30T14:41:33Z")

</div>

Essere admin non fa differenza per questo.

Dovresti visitare l’argomento affinché venga registrato nella tabella `topic_views` su cui si basa questo badge.

[Pagina seguente](https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700.md?page=2)
