Script Gratis per WHMCS • Action Hook • Moduli • Report

Indietro   Pubblicato 27 april 2020 / Aggiornato 14 november 2022
Tempo di lettura 28 minuti

WHMCS in breve

È molto più semplice comprendere cosa sia WHMCS facendo un parallelo WordPress. Tra i tanti CMS gratuiti WordPress è la soluzione migliore e più popolare per creare un blog. WHMCS è la stessa cosa nel suo mercato di riferimento. È la soluzione da scegliere per creare un'attività hosting per provider, web agency e professionisti IT.

Entrambi i sistemi sono i leader indiscussi nei loro rispettivi settori. WordPress raggiunge il 60% di penetrazione nel mercato. WHMCS attrae circa 50.000 clienti da tutto il mondo. Sono entrambi flessibili e possono soddisfare diverse esigenze aziendali. In essi c'è più di un pannello di controllo ed una piattaforma di blogging.

Le similitudini tuttavia finiscono. WordPress che è gratuito, open source ed ottimo in tante cose. WHMCS ha un costo che parte da 15.95 $ al mese. Il codice è offuscato ed anche se è una piattaforma molto solida, WHMCS non è perfetto.

Per maggiori informazioni continua a leggere la nostra guida a WHMCS per principianti e gli errori comuni da evitare in WHMCS.

Cosa sono gli Action Hook

Gli Action Hook permettono di eseguire il tuo codice quando in WHMCS si verificano determinati eventi. Con loro puoi raggiungere risultati considerevoli.

Ad esempio noi siamo riusciti a trasformare WHMCS in un CMS come WordPress con pieno supporto Search Engine Optimization. Abbiamo anche introdotto nuovi concetti di fatturazione (fatturazione mensile, fatturazione elettronica, note di credito) e l'Affiliate Marketing.

Come puoi osservare non ci sono limiti all'immaginazione. Se sei nuovo di WHMCS e degli action hook, fai riferimento alla documentazione:

Perfezioniamo WHMCS

Nel corso degli anni abbiamo realizzato migliaia di action hook molti dei quali sono parte dei nostri moduli WHMCS.

In questo post che è consultabile anche su Github condividiamo una raccolta di action hook che puoi utilizzare nel tuo WHMCS. Puoi anche adattarli alle tue specifiche esigenze o utilizzarli come ispirazione per i tuoi progetti.

Lo scopo di questo progetto è aiutare gli sviluppatori, gli hosting provider, le web agency ed i professionisti IT a migliorare WHMCS. Aggiungiamo continuamente nuovi hook migliorando quelli esistenti. Sarebbe fantastico se potessi unirti a noi su Github!

Raccolta gratuita di Hook

Questo post contiene istruzioni dettagliate ed anteprime ed è disponibile anche in inglese. Siamo sempre disposti a realizzare nuovi hook in base ai feedback ricevuti pertanto sentiti libero di commentare per richiederne di nuovi.

Gli script sono forniti gratuitamente "così come sono" senza garanzie di alcun tipo. Non è consentito rimuovere il copyright. Iniziamo!

Statistiche Admin per WHMCS v8

Come probabilmente saprai WHMCS v8 non indica più in cima alla pagina le statistiche relative agli ordini in attesa, le fatture scadute e i ticket in attesa di risposta. Come puoi osservare dalle immagini in basso, questo action hook li riporta nell'interfaccia.

Quello che puoi personalizzare è la variabile $showZero. Concentriamoci sul 0 Ticket(s) Awaiting Reply visibile nelle immagini in precedenti. Se $showZero è false, il widget eviterà di mostrare questo specifico badge.

Il widget è responsivo e compare solo se c'è almeno un ordine piuttosto che una fattura scaduta o un ticket in attesa di risposta. Se non c'è niente da visualizzare viene nascosto. Per evitare ogni possibile confusione, l'hook si attiva solo esegui effettivamente la v8.

Get the Code

Colore gruppo cliente vista Ticket WHMCS v8

Il colore di sfondo per i clienti appartenenti ad un gruppo è stato rimosso nella vista dei ticket. Nessuno sa perché WHMCS abbia deciso di rimuoverlo in WHMCS v8. Utilizza questo l'hook per ripristinare la funzionalità.

Get the Code

Simulare / Eseguire il cron giornaliero di WHMCS a richiesta

Come suggerisce il nome, il Daily Cron di WHMCS viene eseguito una volta al giorno. Non c'è un modo semplice per eseguirlo più volte. Questo può essere frustrante se stai programmando o testando nuove funzioni ed ecco che l'hook viene in soccorso.

L'hook aggiunge il pulsante Run Daily Cronjob (quello arancione) in cima all'amministrazione di WHMCS. Al click viene eseguito il cron giornaliero di WHMCS ogni volta che vuoi. Basta un click. Ignora i pulsanti Reinstall e Manage Demo. Li utilizziamo dare ai clienti la possibilità di provare i nostri moduli prima dell'acquisto con le Live Demo.

Get the Code

Accettare preventivo senza bisogno di login

Quando invii un preventivo WHMCS obbliga il cliente ad effettuare l'accesso al fine di accettarlo. L'hook permette l'accettazione del preventivo senza bisogno di login. Ogni volta che l'email Quote Delivery with PDF viene inviata, l'hook sovrascrive {$quote_link} con un nuovo indirizzo contenente un hash che garantisce l'autenticità della richiesta. Così facendo solo il destinatario può accettare il preventivo.

Quando il visitatore fa click sul link il preventivo viene automaticamente accettato e viene mostrato il seguente modale a schermo.

Get the Code

Auto-ricalcolo massivo su domini e prodotti/servizi cliente

Si, WHMCS integra il Bulk Pricing Updater ma funziona su tutti i clienti globalmente. Alcune volte hai semplicemente bisogno di ricalcolare selettivamente i prezzi dei domini e dei prodotti/servizi per clienti specifici. Questo hook permette di farlo in un click. Prima di tutto viene aggiunto il seguente pulsante nel Summary.

In seconda analisi viene mostrato il seguente modale dal quale puoi liberamente scegliere di ricalcolare i prezzi dei domini o dei prodotti/servizi.

Ecco il codice.

Get the Code

Pulsante login cPanel & Plesk ne I miei servizi

Gestire account multipli può rivelarsi frustrante per i clienti. Il seguente hook rende le cose più semplici permettendo di accedere a qualsiasi pannello di controllo direttamente dalla sezione I miei servizi. Ecco un'anteprima.

L'hook funziona con qualsiasi pannello di controllo (cPanel, Plesk, DirectAdmin, Centova Cast, Cloudmin...) fermo restando che i server ed i prodotti/servizi siano stati integrati correttamente. Prima di prelevare il codice tieni presente che l'hook richiede alcune modifiche ad un file del template.

Apri templates/{YOUR_TEMPLATE}/clientareaproducts.tpl ed aggiungi la nuova colonna Manage nel thead come segue.

{$LANG.orderproduct}{$LANG.clientareaaddonpricing}{$LANG.clientareahostingnextduedate}{$LANG.clientareastatus}{$LANG.manage}

Il tuo thead potrebbe essere leggermente diverso (es. nella prima colonna potrsti avere il checker del certificato SSL) pertanto applica la modifica di conseguenza. Successivamente spostati nel tbody ed aggiungi la cella proprio all'interno del ciclo {foreach}.


	{if $kt_autologin[$service.id]}

	{/if}

Consigliamo di sostituire il testo Click to Login con una variabile $LANG per il supporto multi-lingua. Ora non ci resta che disattivare l'ordinamento per la colonna appena aggiunta. In cima al file trovi la seguente stringa.

{include file="$template/includes/tablelist.tpl" tableName="ServicesList" noSortColumns="4" filterColumn="3"}

Concentrati su noSortColumns="4". 4 significa che la quinta colonna non può essere ordinata (il conteggio delle colonne parte da zero). Modificalo di conseguenza. Ad esempio se nel tuo template nella prima colonna hai il checker del certificato SSL, andrai a scrivere noSortColumns="0, 5".

Get the Code

Servizio correlato nella sidebar dei ticket

I clienti possono indicare il servizio/dominio correlato in fase di apertura ticket ma una volta che questo è stato aperto tale informazione non è più visibile. Questo hook fa in modo che il servizio correlato, ove specificato, sia sempre riportato nella sidebar del ticket.

Get the Code

Forza metodo di pagamento a seconda dell'importo della fattura

Non importa quale metodo di pagamento utilizzi. Può trattarsi di PayPal, Stripe, Skrill o carta di credito. Il classico gateway applica delle tariffe incredibilmente alte per la gestione delle transazioni. Billing Extension aiuta nel farti risparmiare fino al 18% in spese di incasso ma tali costi possono essere ulteriormente abbassati.

Ammettiamolo. In un mondo ideale vorremmo ricevere soldi solo con bonifico bancario in quanto non prevede alcun costo. Il seguente hook può essere utilizzato per forzare il metodo di pagamento per te più vantaggioso a seconda dell'importo della fattura. Ad esempio se l'importo è >= a 1000 euro forza il bonifico. Facciamo un po' di conti.

  • PayPal addebita il 3.4% + 0.35 € per ogni transazione il che significa che ricevere 1000 euro ti costa 35.35 €
  • Supponiamo di ricevere su base annua 10 di questi pagamenti da 1000 €
  • Alla fine dell'anno avrai versato a PayPal 353.5 €

Con l'hook puoi tenerti questi soldi. Inoltre l'hook può essere personalizzato per forzare il metodo di pagamento dipendentemente dal paese di provenienza del cliente. Ad esempio puoi attivare l'hook solo per paesi specifici (es. IT, FR, DE) e/o per l'Unione Europea. Non preoccuparti se utilizzi più valute di pagamento. Lo script si occupa automaticamente di effettuare il cambio ove necessario.

Get the Code

Auto-Termina prove gratuite dopo X minuti

Offrire prove gratuite per un per un periodo limitato di tempo è una buona strategia di marketing che permette di capitalizzare sulle registrazioni. Il problema con le prove è che la più piccola unità di tempo per WHMCS è il giorno il che significa ad esempio che non puoi offrire una VPS in prova per un paio di ore. WHMCS non riesce a "pensare" per un periodo inferiore ad un giorno completo.

Il seguente action hook permette di terminare o sospendere automaticamente i prodotti/servizi indicati dopo un certo numero di minuti. Si esegue con l'hook point AfterCronJob che in genere viene lanciato ogni 5 minuti. Visita Setup > Automation Settings ed assicurati che cron.php si esegua, come raccomandato da WHMCS, ogni 5 minuti. L'hook penserà al resto. Nell'Activity Log vengono anche registrate le azioni eseguite. Di seguito le variabili da configurare:

  • $productIDs array di ID prodotti che desideri sospendere o terminare
  • $terminateAfter termina o sospendi i prodotti trascorso un numero di minuti (1440 = giorno intero - 0 per disattivare) da esprimere in integer
  • $performAction` puoi scegliere tra Terminate e Suspend

Get the Code

Password sicure per l'auto-setup

Ti diamo non uno, non due ma ben tre action hook per sovrascrivere le password predefinite generate da WHMCS per la creazione dei servizi pannelli di controllo come Plesk, cPanel, DirectedAdmin nonché quelli personalizzati.

  • v1 seleziona casualmente 10 caratteri tra a-zA-Z0-9 e !@#$%^&*()-=+?
  • v2 come sopra ma viene fatto in modo che la password abbia almeno un carattere speciale
  • v3 per password estremamente sicure. Stabilisci singolarmente il numero di maiuscole, minuscole, numeri e caratteri speciali da utilizzare. La password risultante non utilizzerà mai lo stesso carattere più di una volta

Prodotti/Servizi unici e domini acquistabili solo con Prodotti/Servizi

Se hai un minimo di esperienza con WHMCS sai bene che offrire le promozioni con i codici sconto non è molto flessibile.

Molti preferiscono creare prodotti/servizi appositamente per le offerte speciali. Allo stesso modo altri vogliono subordinare la possibilità di acquistare domini all'acquisto di almeno un prodotto/servizio. L'hook soddisfa entrambe le esigenze. Non devi fare altro che configurare le seguenti variabili:

  • kt_onetimeProducts array di ID prodotto da considerare come "unici" (i clienti non possono ordinare lo stesso prodotto più di una volta)
  • kt_onetimeProductGroups come sopra ma per gli ID di gruppi prodotto. Tutti i prodotti all'interno di tali gruppi vengono considerati come unici
  • kt_firstTimerTollerance le restrizioni all'acquisto dei prodotti sono disattivate per i clienti che effettuano il loro primo ordine con te
  • kt_notRepeatable se un cliente ha già acquistato un prodotto unico non può acquistarne di altri (kt_firstTimerTollerance viene ignorato)
  • kt_domainRequiresProduct l'acquisto dei domini è consentito solo se una delle seguenti condizioni è vera:
    • Il clinte ha un prodotto/servizio (quelli Pending e Terminated non contano)
    • Il cliente sta acquistando un prodotto contestualmente al dominio
  • kt_onClientRegister l'ordine di prodotti unici è consentito solo ai clienti che si sono registrati da X giorni (int). Lascia false per disabilitare
  • kt_promptRemoval modalità di notifica al cliente riguardo la presenza di restrizioni (anteprime in basso):
    • bootstrap-alert subito sotto Review & Checkout
    • modal a schermo
    • js-alert a schermo
  • kt_textDisallowed avviso per restrizioni prodotti/servizi
  • kt_textRequireProduct avviso per restrizioni dominio

Quando l'hook rileva che il cliente non può acquistare specifici prodotti/servizi e/o domini, li rimuove dal carrello mostrando messaggi del genere.

Lo script evidenzia in verde i prodotti/servizi ed aggiunge un label "promo".

Get the Code

Nuovi clienti come Affiliati

Imposta automaticamente i nuovi clienti come affiliati in WHMCS senza bisogno che lo facciano manualmente.

Ciò detto, come probabilmente saprai il sistema di affiliazione di WHMCS è molto basilare. Se hai bisogno di qualcosa di più completo e sofisticato dai uno sguardo a Commission Manager.

Get the Code

Invia email & aggiungi risposta al cambio status del Ticket

Quando lo status di un ticket cambia, WHMCS non invia alcuna notifica. Possiamo migliorare questo aspetto inviando la notifica e facoltativamente possiamo anche aggiungere in automatico una risposta al ticket. In questo modo si possono guidare i clienti attraverso il processo di elaborazione dei ticket.

Get the Code

Feedback Ticket alla chiusura con Escalation Rule

L'invio di una richiesta di feedback alla chiusura del ticket è un ottimo modo per misurare il grado di soddisfazione del cliente tuttavia a questa funzione manca un pezzo. Un ticket in WHMCS può diventare Closed in tre modi diversi:

  • Quando è un amministratore a chiuderlo
  • Per inattività Setup > Automation Settings > Support Ticket Settings > Close Inactive Tickets
  • Tramite escalation rules

WHMCS non invia alcuna notifica per richiedere il feedback quando il ticket è stato chiuso mediante un'escalation rule. L'hook in questione risolve il problema. Gli unici requisiti sono i seguenti:

  • $cronFrequency deve essere uguale al tuo System Cron Frequency
  • I nomi delle escalation rule devono essere univoci

Get the Code

Disattiva Feedback per Ticket non gestiti

WHMCS invia sempre una richiesta di feedback in seguito alla chiusura di un ticket. Ciò include il caso in cui i clienti chiudono i ticket prima ancora che tu abbia avuto la possibilità di rispondere. Ad esempio un cliente apre un ticket per segnalare un problema con il sito. Dopo poco si rende conto che era dovuto ad un suo errore e chiude il ticket. WHMCS invia comunque la richiesta di feedback.

Questo stona molto in quanto stai chiedendo ai clienti di valutare la «Qualità dell'esperienza» con il tuo team di assistenza quando nessuno ha nemmeno risposto al ticket. Alcuni potrebbero anche assegnarti un giudizio negativo perché credono che ti li stia prendendo in giro. Con questo hook puoi metterci una pezza sopra.

Get the Code

Clienti in gruppi in base agli acquisiti effettuati

Assegna automaticamente i clienti ai gruppi cliente in base ai prodotti/servizi acquistati. Lo script ha effetto sui soli clienti che non sono già stati assegnati ad un gruppo. In basso mostriamo come si definiscono le coppie gruppo/prodotto. Prendiamo questa configurazione come esempio.

$groups['products']['1'] = array('1', '2', '3');
$groups['products']['2'] = array('4');
$groups['productaddons']['1'] = array('2');
$groups['configurableoption']['3'] = array('5' => true, '6' => array('7', '8', '10')); 

La chiave del primo livello dell'array $groups (es. ['products']) puà assumere uno dei seguenti valori:

  • products per coppie gruppo/prodotto
  • productaddons per coppie gruppo/addon prodotti
  • configurableoption per coppie gruppo/configurable options

La chiave del secondo livello dell'array $groups (['1'], ['2']) rappresenta l'ID del gruppo. array() memorizza gli ID dei prodotti, dei product addon e delle configurable option. Passiamo alla pratica spiegando a cosa porta la configurazione di cui sopra:

  • Il cliente A acquista il prodotto 1. Assegnato al gruppo 1
  • Il cliente B acquista il prodotto 2. Assegnato sempre al gruppo 1
  • Il cliente C acquista il prodotto 4. Assegnato al gruppo 2
  • Il cliente D acquista il prodotto 5. Nessuna modifica
  • Il cliente E acquista il prodotto 1 ed è già assegnato ad un gruppo. Nessuna modifica
  • Il cliente F acquista il product addon 2. Assegnato al gruppo 1
  • Il cliente G acquista un prodotto selezionando un qualsasi valore della configurable option con ID 5. Assegnato al gruppo 3
  • Il cliente H purchases a product selecting specifically 7, 8 or 10 options of configurable option ID 6. He goes to client group ID 3

Lo script è disponibile in due versioni. La configurazione è la stessa. Quello che cambia è il punto di aggancio:

  • La versione AcceptOrder assegna il gruppo quando l'ordine viene accettato sia manualmentethe che automaticamente
  • La versione EmailPreSend assegna il gruppo un istante prima che WHMCS invii la Welcome Email - qualsiasi tipo (eg. Hosting, VPS, CodeGuard, Marketgoo...). In questo modo il gruppo appena assegnato è da subito utilizzabile negli email template

Clienti in gruppi in base alla data di registrazione

L'hook è simile a quello che assegna i clienti ai gruppi dipendentmente dagli acqusiti. In questo caso però assegnamo i clienti ai gruppi in base alla data di registrazione e più precisamente all'anzianità dell'utente. Prendiamo questo codice come esempio:

$groups['1'] = '90';
$groups['2'] = '180';
$groups['3'] = '365';

La chiave dell'array $groups (es. ['1']) corrisponde all'ID del gruppo mentre il relativo valore all'anzianità dell'utente (giorni trascorsi dalla registrazione). Secondo la configurazione di cui sopra, ecco cosa accade:

  • Il cliente A si è registrato 34 giorni fa. Nessuna modifca
  • Il cliente B si è registrato 90 giorni fa. Assegnato al gruppo 2
  • Il cliente C si è registrato 364 giorni fa. Rimane nel gruppo 2
  • Il cliente D si è registrato 500 giorni fa. Assegnato al gruppo 3

L'hook si esegue con il cron giornaliero di WHMCS il che significa domani il cliente C precedentemente riportato si sposterà dal gruppo 2 al 3. Facoltativamente è possibile attivare le seguenti funzioni per affinare le regole:

  • Con $activeCustomers le regole si applicano solo sui clienti Active (booleano true o false)
  • Con $oldestPurchase le regole si applicano solo se il cliente ha almeno un servizio o un dominio attivo da più di X giorni (integear)

Get the Code

Clienti in gruppi in base al numero di domini registrati

L'hook assegna i clienti ai gruppi in base al numero di domini attivi nei loro account (Active, Grace e Redemption). Questo è particolarmente utile per sfruttare i Domain Pricing slabs. Prendiamo questo codice come esempio.

$groups['1'] = '10';
$groups['2'] = '25';
$groups['3'] = '100';

La chiave dell'array $groups (es. ['1']) corrisponde all'ID del gruppo mentre il relativo valore al numero di domini attivi. Secondo la configurazione di cui sopra, ecco cosa accade:

  • Il cliente A ha 10 domini. Assegnato al gruppo 2. Il giorno dopo i domini diventano 9. Il cliente viene rimosso dal gruppo
  • Il cliente B ha 99 domini. Assegnato al gruppo 2 ma finirà nel 3 nel caso in cui riusciesse a raggiungere i 100 domini
  • Il cliente C ha 250 domini. Gruppo 3

L'hook si esegue con il cron giornaliero di WHMCS il che significa che i clienti vengono spostati (o rimossi) dai gruppi su base giornaliera. Facoltativamente è possibile utilizzare questa funzione per applicare delle restrizioni:

  • Con $activeCustomers le regole si applicano solo sui clienti Active (booleano true o false)
  • $placeholderGroup è utilizzabile per limitare le assegnazioni ad uno specifico gruppo (ID gruppo o false per disattivare). L'opzione richiede ulteriori spiegazioni di seguito fonrite

Supponiamo di utilizzare la seguente configurazione.

$groups['1'] = '10';
$groups['2'] = '25';
$groups['3'] = '100';

$placeholderGroup = '5';

L'hook si occuperà dei soli clienti assegnati al gruppo 5 (il placeholder) nonché 1, 2 e 3. Vediamo alcuni esempi:

  • Il cliente A ha 250 domini ed è assegnato al gruppo 5. Dopo il cron finisce nel gruppo 3
  • Il cliente B ha 10 domini. È assegnato al gruppo 1 e trasferisce un dominio. Dopo il cron viene spostato nel gruppo 5 dal momento che ora possiede solo 9 domini

Si può utilizzare come placeholder anche uno dei gruppi esistenti come nel seguente esempio:

$groups['1'] = '10';
$groups['2'] = '25';
$groups['3'] = '100';

$placeholderGroup = '1';

In questo caso il requisito dei 10 per l'appartenenza al gruppo 1 viene ignorato. L'hook tiene traccia di tutte le modifiche al gruppo dei clienti direttamente nell'Activity Log.

Get the Code

Non assegnare provvigioni per i clienti già registrati

Se un visitatore effettua un ordine ed ha un affiliation cookie, l'affiliato guadagna una provvigione. Il problema è che per WHMCS i visitatori ed i clienti sono la stessa cosa il che significa che vengono assegnate provvigioni anche per i clienti già registrati da lungo tempo.

L'hook impedisce a WHMCS di assegnare la provvigione su clienti registrati da un certo numero di giorni. Ad esempio se imposti $numberOfDays = '30', WHMCS non assegnerà più provvigioni per i nuovi ordini effettuati da clienti registrati da più di 30 giorni.

Get the Code

Blocco modifica Client Custom Field

WHMCS integra una funzione che blocca i campi del profilo per impedire che i clienti possano modificarli dall'area clienti (es. nome azienda, indirizzo). Questa funzione tuttavia non è disponibile per i client custom fields. Se anche si andassero a rendere "disabled" con HTML o jQuery, sarebbe comunque possibile inviare modifiche.

Il seguente hook assicura che nessun cliente possa apportare cambiamenti. Se necessario la protezione si può attivare anche per gli amministratori.

Cogliamo l'occasione per renderti noto che Billing Extension può portare il tuo WHMCS a fare un importante passo avanti avendo funzioni come la fatturazione mensile, la fatturazione elettronica, customer retention, Facebook Pixel e molto altro.

Get the Code

Conversione preventivo in fattura senza redirect

Quando un preventivo viene convertito in fattura, WHMCS ti redindirizza automaticamente alla fattura appena creata. Questo hook fa in modo che WHMCS non esegua il redirect lasciandoti nella pagina del preventivo.

Get the Code

Rimuovi/Nascondi Breadcrumb

WHMCS antepone alla breadcrumb la voce Portal Home. Non c'è nulla di sbagliato in questo ma ad alcune persone non piace. L'hook si occupa di rimuoverlo da tutte l pagine di WHMCS.

Bonus: se non vuoi usare un action hook, puoi utilizzare il seguente CSS. Il risultato è lo stesso.

.breadcrumb li:first-child {
    display:none;
}
.breadcrumb li:nth-child(2):before {
    content:" ";
}

Get the Code

Knowledgebase Autore

WHMCS non memorizza alcuna informazione riguardo gli autori (l'amministratore che ha pubblicato un articolo della KB). Questo hook aggiunge automaticamente la colonna kt_author nella tablla tblknowledgebase (il prefisso kt_ è importante al fine di evitare il naming collision). Quando un amministratore aggiunge l'articolo alla KB lo stesso hook memorizza le informazioni sull'autore mostrandole a schermo.

Get the Code

Data aggiornamento Knowledgebase

WHMCS non gestisce la data Last Updated quando modifichi un articolo della Knowledgebase ma è possibile ricavarlo dall'Activity Log. Non è una soluzione elegante ma funziona. L'hook aggiunge l'elemento lastupdated all'esistente array Smary $kbarticle in modo che tu possa riportarlo nel template della KB.

Se hai bisogno di qualcosa di più completo e aggiornato, scopri come migliorare il posizionamento con il SEO in WHMCS utilizzando WHMCS come CMS.

Get the Code

Lingua del Login as Client

Ogni volta che un amministratore usa la funzione Login as Client WHMCS sovrascrive la lingua predefinita del cliente selezionato sostituendola con quella in uso dall'amministratore nel backend di WHMCS. Questo non va bene in quanto a tua insaputa stai cambiando la lingua predefinita del cliente. Ciò si applica anche alle lingue non impostabili dall'area clienti.

Supponiamo che l'area clienti sia impostata in italiano e che utilizzi il backed di WHMCS in inglese. Al Login as Client WHMCS cambia la lingua del cliente dall'italiano all'inglese e non c'è modo per tornare indietro. Il cliente in questione resta bloccato su una lingua che non può cambiare. Il seguente hook impedisce che ciò accada.

Get the Code

Non inviare email in base al gruppo cliente

L'hook impedisce a WHMCS di inviare email General Messages a specifici gruppi clienti in base ad una sorta di blacklist.

Get the Code

Annulla setup automatico con nota nell'ordine

Un cliente ordina una VPS ed aggiunge una nota dove chiede una configurazione particolare che necessita del tuo intervento manuale. Se stai utilizzano l'auto-provisioning, non c'è modo di impedire a WHMCS di creare la VPS per permetterti di intervenire manualmente. Questo hook interrompe il setup laddove sia presente una nota nell'ordine.

Get the Code

Rinominare Addon Module

Supponiamo che non ti piacciano i nomi degli addon module Mercury, Commission Manager, Billing Extension e che tu voglia cambiarli in CMS, Affiliates e Accounting. Ti basta modificare l'hook di conseguenza. Funziona con qualsiasi modulo WHMCS.

Get the Code

Aggiungere pulsante al fianco delle funzioni modulo

Ecco come aggiungere un pulsante al fianco delle funzioni Create, Suspend, Unsuspend (...) nella vista prodotti/servizi.

Get the Code

Meta Description per Announcement

Prima di pensare «Fantastico! Finalmente posso aggiungere i meta description alle news di WHMCS» aspetta un momento e comprendi quanto segue:

  • WHMCS è pessimo nel SEO. Avrai bisogno di molto più che questo hook per riscontrare dei benefici
  • Meta description non è un fattore di ranking. Non ha effetto sul posizionamento ma sul CTR

Puoi utilizzare lo stesso approccio per implementare altri meta tag ma stai alla larga dal meta keywords. È inutile ed è stato deprecato da più di un decennio da tutti i motori di ricerca.

Get the Code

Impedire indicizzazione sui motori di ricerca

Con questo hook puoi impedire ai motori di ricerca di indicizzare il tuo WHMCS. Ciò è particolarmente utile per installazioni di test e per siti che devono ancora essere pubblicati. L'hook aggiunge il meta tag noindex nell' di WHMCS che "dice" ai crawler dei motori di ricerca di non indicizzare le pagine.

Get the Code

Codice Coupon in Email Template

Invoice Payment Confirmation è un Email Template che WHMCS invia ai clienti al saldo delle fatture. Normalmente il messaggio non riporta alcuna informazione riguardo le promozioni. Il seguente hook include i codici promozionali eventualmente applicati nella fattura.

Per completare l'operazione visita Setup > Email Templates > Invoice Payment Confirmation ed aggiungi il seguente codice:

{if $assigned_promos}
Promo below:
{foreach from=$assigned_promos item=promo}
{$promo}
{/foreach}
{/if}

Ecco il risultato:

Get the Code

Array Codici Coupon per Email Template

Questo hook può aggiungere informazioni riguardo le promozioni (i codici coupon) esistenti in qualsaisi notifica email inviata da WHMCS. Aggiunge l'array Smarty{$promotions} negli email template specificati. Non ti resta altro che eseguire un {foreach} Smarty come di seguito indicato.

{if $promotions}
Active Promotions:
    {foreach from=$promotions item=promo}
  • {$promo.code} ({if $promo.type == 'Percentage'}{$promo.value}% discount{elseif $promo.type == 'Fixed Amount'}{$promo.value} € discount{elseif $promo.type == 'Price Override'}Price override {$promo.value} €{elseif $promo.type == 'Free Setup'}Free Seutp{/if})
  • {/foreach}

{/if}

Ecco un'anteprima del codice. Tieni presente che l'hook rimuove automaticamente dall'array le promozioni scadute.

Get the Code

Accetta ordine automaticamente al pagamento della fattura

WHMCS richiede che gli amministratori accettino manualmente gli ordini anche se tutte le operazioni automatiche sono già avvenute. L'hook accetta gli ordini in automatico via API quando la fattura correlata viene pagata.

  • Vincola l'accettazione automatica dell'ordine in base all'$invoiceTotal. Lo script si occupa automaticamente della conversione tra valute diverse. Lascia false per accettare tutto
  • Usa <= come $operator per accettare ordini con importo minore o uguale a $invoiceTotal. Usa >= per lo scenario opposto

Get the Code

Cancella ordine alla cancellazione della fattura

Quando su una fattura esegui il Mark Cancelled l'ordine correlato (se esiste) viene contrassegnato automaticamente come Cancelled.

Get the Code

Scadenza ban su ordini

Gli amministratori di WHMCS possono bannare un IP al volo direttamente dalla vista dell'ordine. Il problema di questa funzionalità è che WHMCS imposta automaticamente il ban affinché duri fino alla fine dell'anno corrente. Come si può immaginare ricevere il ban a gennaio piuttosto che a dicembre è radicalmente diverso. Questo hook fa in modo che il ban duri sempre un anno intero.

Get the Code

Nascondere badge di Google Invisible reCAPTCHA

Per nascondere il badge di Google Invisible reCAPTCHA Badge (angolo in basso a destra) non serve altro che una regola CSS. Se non vuoi modificare il CSS e/o vuoi mantenere la modifica con anche con gli aggiornamenti del template, utilizza questo hook. Prima che tu te lo chieda, si, il modo corretto per nascondere il badge è opacity. L'uso di cose come display: none e visibility: hidden romperebbe reCAPTCHA.

Get the Code

Chatstack disattivata per utenti registrati e amministratori

Nel caso in cui tu non sappia cosa è Chatstack, ti diamo un'infarinata generale. È un modulo ufficiale di WHMCS che permette di chattare con i visitatori e tracciare le loro attività. Noi stessi lo utilizziamo nel nostro sito. È il piccolo badge nell'angolo in basso a destra. I visitatori possono cliccarci per chattare con te. Nel caso in cui tu non fossi online, il badge reindirizza alla pagina contact us.

Vale la pena sottolineare che in passato il nome di Chatstack era LiveHelp. Puoi acquistarlo direttamente da Chatstack o dal Marketplace di WHMCS. Lascia perdere tutte l recensioni negative. La maggior parte di esse sono di persone che non hanno capito come installare e configurare il software.

Ora torniamo all'hook. Quando Chatstack è installato nel tuo WHMCS inizia a tracciare tutti, inclusi gli amministratori e gli utenti registrati. Ciò dà luogo alle seguenti problematiche:

  • Ricevi notifiche riguardo l'attività degli amministratori
  • Chatstack non distingue i visitatori e gli amministratori
  • La chat dovrebbe essere riservata alla prevendita ma i clienti possono utilizzarla per richiedere assistenza tecnica

Il nostro hook ha due opzioni che permettono di:

  • Impedire tracciamento e notifiche riguardo l'attività degli amministratori
  • Impedire agli utenti loggati (i già clienti) di utilizzare la chat

L'unico requisito è che devi rimuovere ogni altra integrazione in essere tra WHMCS e Chatstack. L'hook gestisce tutto automaticamente e supporta anche il multi-dominio e multi-brand in WHMCS.

Get the Code

Notifica ordini fraudolenti

Quando un ordine viene impostato come Fraud, prima che la modifica dello status abbia luogo l'hook invia una notifica a tutti gli amministratori di WHMCS (gli amministratori disattivati sono ignoriati).

Get the Code

Dipartimenti di supporto condizionali

Limita l'accesso ai dipartimenti di supporto in base ai prodotti acquistati dai clienti. Imposta le regole di accesso come segue.

$department['1'] = array('45', '46', '10');
$department['2'] = array('85', '86', '10');
// Aggiungi regole aggiuntive su una nuova linea

La chiave dell'array $department (l'[1] e il [2] tra partentesi quadre) corrisponde all'ID del dipartimento per il quale stiamo creando una regola. Il valore è un array() contenente gli ID dei prodotti necessari per l'accesso. In parole povere, la configurazione di cui sopra permette l'accesso al dipartimento #1 agli utenti che hanno i prodotti con ID 45, 46 o 10. Il dipartimento #2 si sblocca con i prodotti 85, 86 e 10.

Alcune considerazioni finali:

  • I dipartimenti il cui accesso è inibito al cliente, non vengono mostrati nella pagina submitticket.php
  • L'accesso con link diretto submitticket.php?step=2&deptid=2 attiva un redirect a submitticket.php
  • Nella select dei dipartimenti vengono mostrati solo quelli consentiti
  • Uno stesso prodotto può essere utilizzato in più regole
  • I prodotti Pending, Suspended, Terminated, Cancelled e Fraud vengono ignorati

Get the Code

Impedisci invio email in base a ID utente e/o gruppo cliente

Prendiamo come esempio questa configurazione:

$disallowedEmailTemplates = array('Invoice Created'); // The name of the email template being sent
$disallowedClientGroups = array('3'); // Client Group ID
$disallowedUserIDs = array('1'); // User ID

Stiamo impedendo l'invio dell'email Invoice Created sia al cliente con ID 1 che ai clienti assegnati al gruppo 3. Ovviamente è possibile indicare più email template, gruppi cliente e ID utenti - i parametri sono tutti array(). $removePDFAttachments può essere utilizzato nel caso in cui tu voglia solo rimuovere il PDF della fattura come allegato all'email.

  • $disallowedEmailTemplates indicare il nome di sistema degli email template che si trovano in Setup > Email Templates. Quando modifichi un template, il nome di sistema è indicato subito sotto il titolo Email Templates
  • $disallowedClientGroups array di ID di gruppi cliente che possono essere reperiti in Setup > Client Groups
  • $disallowedUserIDs array di ID clienti
  • $removePDFAttachments imposta true se vuoi semplicemente rimuovere il PDF della fattura come allegato nell'email per gli utenti selezionati

Get the Code

Generate Missing UUID in tblclients

Quando importi i clienti nella tabella tblclients via query o da phpMyAdmin, i valori uuid non vengono creati automaticamente. Questo script genera gli uuid per i clienti che ne sono sprovvisti. Si attiva non appena apri una qualsiasi pagina del frontend. Non dimenticare di rimuoverlo quando hai finito.

Get the Code

Generate Missing UUID in tblclients

È sempre strano quando visiti Billing > Invoices e WHMCS ordina i record per Due Date. Un modo più corretto di ordinare le fatture è per Invoice Date. Mi ci è voluto un sacco di tempo per capire come modificare l'ordinamento predefinito per le tabelle nel backend.

WHMCS memorizza l'ordinamento di ogni pagina nel misterioso array $_COOKIE['WHMCSSD']. Perché dico mistrioso? Perché per ragioni che non comprendo lo staff di WHMCS ha deciso di usare json_encode e base64_encode per il suo contenuto. Ecco perché nessuno prima di me lo aveva scoperto.

Get the Code

Raccolta gratuita di Report

Si! Non ci siamo fermati agli action hook. In basso trovi un elenco di report WHMCS personalizzati che forniscono maggiori informazioni e dati su come sta andando la tua attività. Iniziamo!

Churn Rate

Tasso di abbandono dei clienti. Il report include dati e un grafico che aiuta nell'interpretazione dei dati. Per ciascun mese puoi osservare:

  • Numero di prodotti/servizi all'inizio del mese
  • Numero di prodotti/servizi alla fine del mese
  • Variazione mensile nel numero di prodotti/servizi
  • Numero di prodotti/servizi acquisiti nel corso del mese
  • Numero di prodotti/servizi perso nel corso del mese
  • Churn rate - Tasso di abbandono (percentuale)

Il report mostra anche statistiche cumulative (prodotti & domini). Il Churn rate è in genere collegato al customer retention. L'articolo linkato descrive come evitare che i clienti ti abbandonino. Per completezza di informazioni di seguito riportiamo la formula per il calcolo del churn rate.

 

(Prodotti/domini persi alla fine del periodo di riferimento / Prodotti/domini acquisiti alla fine del periodo di riferimento ) * 100

Il report non tiene conto dei prodotti/servizi con i seguenti cicli di fatturazione: One Time, Completed, Free Account. La ragione è semplice. Tali prodotti non supportano il rinnovo pertanto il churn rate non si applica.

Get the Code

Raccolta gratuita di Moduli

Già, ti diamo anche alcuni moduli che possono tornare utili per svolgere alcune delle azioni più comuni di WHMCS.

Plesk Checker

Error code: 1013. Error message: Customer with external id 'whmcs_plesk_XX' is not found in panel.

Se usi Plesk scommetto che hai visto questo errore almeno una volta. Se provi a cercare informazioni su Google troverai questa pagina dalla documentazione di Plesk dove si afferma che questo bug (cito testualmente) «è stato già risolto per tutte le versioni». Ok, è una cavolata.

Probabilmente impiegherei una settimana pr spiegare le ragioni di questo errore. Saltiamo questa parte noiosa. La risoluzione del problema richiede un tuo intervento manuale nel database psa (quello di Plesk) e più in particolare nella colonna  clients.external_id così come descritto nell'articolo precedentemente linkato.

Abbiamo creato un modulo che rende questo processo di "trova e sostituisci" meno frustrante e più rapido. Non solo vengono rilevati i piani hosting che riportano l'errore Error code: 1013 ma anche altri aggiuntivi. Ecco un'anteprima.

Get the Code

Commenti (0)

Dì ciò che pensi Cancella Risposta