Come configurare l'integrazione Salesforce

:bookmark: Questa guida illustra i passaggi di configurazione necessari per collegare Discourse a Salesforce utilizzando il plugin Discourse Salesforce.

:discourse: Discourse Salesforce è disponibile nel piano Enterprise.

:person_raising_hand: Livello utente richiesto: Amministratore

Passaggio 0: Individuare le persone giuste nella tua organizzazione

Prima di apportare modifiche in Discourse, assicurati di conoscere le persone giuste da coinvolgere nella tua organizzazione per gestire gli aspetti necessari lato Salesforce.

Amministratore Salesforce

Chi è: Nella maggior parte delle organizzazioni, questa è tipicamente la persona che il team chiama “l’amministratore di Salesforce” — colui che gestisce la configurazione dell’organizzazione Salesforce, non necessariamente l’amministratore di sistema IT.

Cosa fa: Gestisce la configurazione iniziale lato Salesforce creando l’External Client App (o Connected App) in Salesforce Setup, configurando le impostazioni OAuth e recuperando la Consumer Key e la Consumer Secret.

Di cosa ha bisogno: Accesso a Setup di Salesforce e in particolare a External Client App Manager. In Salesforce, ciò richiede l’autorizzazione di sistema Customize Application. Questa è inclusa nel profilo standard System Administrator. Se la persona che esegue la configurazione non ha un profilo System Administrator, un amministratore Salesforce dovrà concederle un set di autorizzazioni che includa “Customize Application”.

Utente di integrazione Salesforce

Chi è: Un utente Salesforce le cui credenziali dell’account vengono utilizzate dal plugin Discourse per effettuare chiamate API a Salesforce.

Cosa fa: Fornisce il nome utente da inserire nell’impostazione nome utente salesforce nelle impostazioni del plugin Discourse Salesforce per facilitare tutte le chiamate API da Discourse a Salesforce.

Di cosa ha bisogno: Questo utente deve disporre di:

Autorizzazione Perché è necessaria
API Enabled Necessaria per qualsiasi accesso API di Salesforce
Create, Read, Edit su Lead Creare e collegare Lead dagli utenti di Discourse
Create, Read, Edit su Contact Creare e collegare Contact dagli utenti di Discourse
Create, Read, Edit su Case Creare Case dagli argomenti di Discourse
Create su Case Comment Sincronizzare le risposte agli argomenti come Case Comment
Create su FeedItem (Chatter) Pubblicare l’attività degli argomenti su Chatter

Nota: L’utente di integrazione Salesforce può essere la stessa persona dell’amministratore Salesforce. Tuttavia, come buona pratica di sicurezza, consigliamo di utilizzare un account separato e con autorizzazioni più ristrette per l’utente di integrazione.

Passaggio 1: Generare un certificato e una chiave privata

Ruolo: Admin di Discourse

Discourse Salesforce utilizza il JWT Bearer Flow per autenticarsi con Salesforce. Ciò richiede una coppia di chiavi RSA: un certificato pubblico che Salesforce utilizza per verificare l’identità del plugin e una chiave privata che Discourse utilizza per firmare le sue richieste.

  1. Segui queste istruzioni per generare la coppia di chiavi:
    • server.crt - un certificato pubblico che dimostra che Discourse è l’app autorizzata
    • server.key - una chiave privata che firma le richieste API di Discourse a Salesforce
  2. Invia il file server.crt al tuo amministratore Salesforce affinché possa caricarlo nel Passaggio 3.
  3. Conserva la server.key per incollarla nelle impostazioni del plugin Discourse Salesforce nel Passaggio 5.

Passaggio 2: Creare l’External Client App in Salesforce

Ruolo: Amministratore Salesforce

  1. Accedi a Salesforce.

  2. Clicca sull’icona a ingranaggio (:gear:) in alto a destra e seleziona Setup.

  3. Nella casella Quick Find, cerca External Client App Manager e selezionalo.

  4. Clicca su New External Client App.

Nota: Questi passaggi utilizzano l’External Client App Manager, introdotto in Salesforce Spring '25. Se la tua organizzazione utilizza una versione precedente, l’interfaccia utente potrebbe riportare App Manager o Connected Apps invece — le impostazioni sottostanti sono le stesse.

Passaggio 3: Compilare le Informazioni di base e le Impostazioni OAuth

Ruolo: Amministratore Salesforce

  1. Compila la sezione Basic Information (App Name e Contact Email sono obbligatori).

  2. Espandi la sezione API (Enable OAuth Settings) e seleziona la casella di controllo Enable OAuth.

  3. Configura le seguenti impostazioni in questa sezione:

    • Callback URL: Aggiungi entrambi questi link, sostituendo <your-discourse-site> con l’URL completo del tuo sito Discourse (es. meta.discourse.org):
      https://<your-discourse-site>
      https://<your-discourse-site>/auth/salesforce/callback
      :star: Assicurati che non ci sia una barra finale / alla fine di nessuno dei due URL!
    • Available OAuth Scopes: Aggiungi tutti e tre:
      • Access the identify URL service (id, profile, email, address, phone)
      • Manage user data via APIs (api)
      • Perform requests at any time (refresh_token, offline_access)
    • Flow Enablement: Abilita entrambi:
      • Enable Client Credentials Flow
      • Enable JWT Bearer Flow — questo è necessario affinché il plugin possa creare Lead, Contact e Case
  4. Sotto Certificate Upload, clicca su Upload files e carica il file server.crt dal Passaggio 1.

  5. Clicca su Create.

Passaggio 4: Recuperare la Consumer Key e la Consumer Secret

Ruolo: Amministratore Salesforce

  1. Sulla nuova External Client App appena creata, clicca sulla scheda Settings.

  2. Scorri verso il basso ed espandi OAuth Settings.

  3. Clicca su Consumer Key and Secret.

  4. Reinserisci le tue credenziali di accesso a Salesforce quando richiesto.

  5. Copia la Consumer Key e la Consumer Secret e inviale al tuo admin di Discourse per il Passaggio 5.

Passaggio 5: Configurare le impostazioni del plugin di Discourse

Ruolo: Admin di Discourse

  1. In Discourse, vai su Admin → Plugins → Salesforce → Settings.

  2. Compila le seguenti impostazioni:

    Impostazione Valore
    salesforce enabled Seleziona la casella per abilitare l’integrazione
    salesforce client id La Consumer Key dal Passaggio 4
    salesforce client secret La Consumer Secret dal Passaggio 4
    salesforce rsa private key Incolla l’intero contenuto del file server.key dal Passaggio 1
    salesforce username Il nome utente dell’utente di integrazione Salesforce
    salesforce authorization server url Necessario solo se utilizzi un dominio Salesforce personalizzato (es. https://mycompany.my.salesforce.com)

  3. Clicca su Save changes.

Passaggio 6: Autorizzare l’app Discourse in Salesforce

Ruolo: Utente di integrazione Salesforce

  1. Vai su https://<your-discourse-site>/salesforce/admin/authorize, sostituendo <your-discourse-site> con l’URL completo del tuo sito Discourse (es. meta.discourse.org).
  2. Verrai reindirizzato a Salesforce e ti verrà richiesto di autorizzare l’app.
  3. Accedi a Salesforce e concedi l’accesso all’app.

Dopo aver completato questo passaggio, dovresti essere pronto. Puoi confermare che funziona andando su qualsiasi profilo utente in Discourse — dovrebbe apparire un’opzione Sync with Salesforce nel menu admin.

Risoluzione dei problemi

Se il plugin non funziona dopo la configurazione, controlla prima questi punti:

  • Controlli di salute della dashboard Admin: il plugin visualizza due avvisi in /admin quando le cose sono configurate male:

    • SalesforceInvalidCredentials: la Consumer Key, la Consumer Secret, la chiave privata RSA o il nome utente non sono corretti
    • SalesforceAppNotApproved: il passaggio di autorizzazione (Passaggio 6) non è stato completato, o l’connected app è stata rifiutata
  • Abilitare la registrazione dettagliata: attiva l’impostazione del sito salesforce_auth_verbose_logging per scrivere un output di autenticazione dettagliato nei /logs di Discourse. Errori e cause comuni:

Sintomo Causa probabile
“Insufficient privileges” durante la creazione di un Lead o Contact L’utente di integrazione non dispone di autorizzazioni Create/Edit sugli oggetti Lead o Contact
“Insufficient privileges” durante la creazione di una Case All’utente di integrazione mancano le autorizzazioni Case o Case Comment
“Invalid grant” nel passaggio di autorizzazione La chiave RSA non corrisponde al certificato caricato nel Passaggio 3, o il JWT Bearer Flow non è stato abilitato
Errore “DUPLICATE_VALUE” durante la creazione di Lead o Contact Comportamento previsto se l’utente esiste già in Salesforce — il plugin lo gestisce, ma consulta i documenti principali del plugin per dettagli
Post su Chatter non visualizzati L’utente di integrazione potrebbe non avere le autorizzazioni Create su FeedItem