Script Gratis per WHMCS • Action Hook • Moduli • Report
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!
- Richiedi nuovi hook nei commenti
- Linee guida per collaborare (per sviluppatori)
- Segnala un bug
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.
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à.
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.
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.
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.
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"
.
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.
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.
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 ininteger
$performAction`
puoi scegliere traTerminate
eSuspend
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:
array di ID prodotto da considerare come "unici" (i clienti non possono ordinare lo stesso prodotto più di una volta)kt_
onetimeProducts
come sopra ma per gli ID di gruppi prodotto. Tutti i prodotti all'interno di tali gruppi vengono considerati come unicikt_
onetimeProductGroups
le restrizioni all'acquisto dei prodotti sono disattivate per i clienti che effettuano il loro primo ordine con tekt_
firstTimerTollerance
se un cliente ha già acquistato un prodotto unico non può acquistarne di altri (kt_
notRepeatable
viene ignorato)kt_
firstTimerTollerance
l'acquisto dei domini è consentito solo se una delle seguenti condizioni è vera:kt_
domainRequiresProduct- Il clinte ha un prodotto/servizio (quelli
Pending
eTerminated
non contano) - Il cliente sta acquistando un prodotto contestualmente al dominio
- Il clinte ha un prodotto/servizio (quelli
kt_onClientRegister
l'ordine di prodotti unici è consentito solo ai clienti che si sono registrati da X giorni (int
). Lasciafalse
per disabilitare
modalità di notifica al cliente riguardo la presenza di restrizioni (anteprime in basso):kt_
promptRemovalbootstrap-alert
subito sotto Review & Checkoutmodal
a schermojs-alert
a schermo
avviso per restrizioni prodotti/servizikt_
textDisallowed
avviso per restrizioni dominiokt_
textRequireProduct
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".
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.
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.
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
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.
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/prodottoproductaddons
per coppie gruppo/addon prodotticonfigurableoption
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 gruppo1
- Il cliente B acquista il prodotto
2
. Assegnato sempre al gruppo1
- Il cliente C acquista il prodotto
4
. Assegnato al gruppo2
- 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 gruppo1
- Il cliente G acquista un prodotto selezionando un qualsasi valore della configurable option con ID
5
. Assegnato al gruppo3
- Il cliente H purchases a product selecting specifically
7
,8
or10
options of configurable option ID6
. He goes to client group ID3
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 gruppo2
- Il cliente C si è registrato
364
giorni fa. Rimane nel gruppo2
- Il cliente D si è registrato
500
giorni fa. Assegnato al gruppo3
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 clientiActive
(booleanotrue
ofalse
) - Con
$oldestPurchase
le regole si applicano solo se il cliente ha almeno un servizio o un dominio attivo da più di X giorni (integear
)
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 gruppo2
. Il giorno dopo i domini diventano9
. Il cliente viene rimosso dal gruppo - Il cliente B ha
99
domini. Assegnato al gruppo2
ma finirà nel3
nel caso in cui riusciesse a raggiungere i100
domini - Il cliente C ha
250
domini. Gruppo3
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 clientiActive
(booleanotrue
ofalse
) $placeholderGroup
è utilizzabile per limitare le assegnazioni ad uno specifico gruppo (ID gruppo ofalse
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 gruppo5
. Dopo il cron finisce nel gruppo3
- Il cliente B ha
10
domini. È assegnato al gruppo1
e trasferisce un dominio. Dopo il cron viene spostato nel gruppo5
dal momento che ora possiede solo9
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.
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.
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.
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.
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:" "; }
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.
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.
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.
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.
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.
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.
Aggiungere pulsante al fianco delle funzioni modulo
Ecco come aggiungere un pulsante al fianco delle funzioni Create, Suspend, Unsuspend (...) nella vista prodotti/servizi.
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.
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.
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:
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.
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. Lasciafalse
per accettare tutto - Usa
<=
come$operator
per accettare ordini con importo minore o uguale a$invoiceTotal
. Usa>=
per lo scenario opposto
Cancella ordine alla cancellazione della fattura
Quando su una fattura esegui il Mark Cancelled
l'ordine correlato (se esiste) viene contrassegnato automaticamente come Cancelled
.
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.
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.
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.
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).
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 asubmitticket.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
eFraud
vengono ignorati
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 inSetup > Email Templates
. Quando modifichi un template, il nome di sistema è indicato subito sotto il titoloEmail Templates
$disallowedClientGroups
array di ID di gruppi cliente che possono essere reperiti inSetup > Client Groups
$disallowedUserIDs
array di ID clienti$removePDFAttachments
impostatrue
se vuoi semplicemente rimuovere il PDF della fattura come allegato nell'email per gli utenti selezionati
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.
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.
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.
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.
Commenti (0)