Customer card¶
Con il termine customer card si indica un insieme di informazioni che il server fornisce ai client NethCTI ogni volta che si riceve una chiamata o che si fa click su un elemento della rubrica.
Una customer card è costituita da due parti fondamentali:
- una query su un database locale o remoto
- un template per il rendering dei risultati della query
La configurazione di default fornisce già le seguenti customer card:
- dettagli anagrafici dalla rubrica centralizzata
- ultime 10 chiamate associate al cliente
Altri esempi comuni di customer card sono:
- ticket di assistenza associati al cliente
- insoluti e stato pagamenti
- dettagli anagrafici da gestionale
- trattative, contratti e altre informazioni estratte da crm
Le customer cards possono essere configurate attraverso l’interfaccia tradizionale di NethVoice accedendo alla sezione «CTI». Una volta create è possibile abilitarne i permessi relativi tramite la configurazione dei profili utente.
Query¶
Attualmente sono supportati tre tipi di database:
- MySQL
- PostgreSQL
- Microsoft SQL Server
Ogni query è composta dai seguenti campi:
- Nome: è il nome della customer card, deve essere diverso da quello di altre customer card salvate. identity e calls sono nomi riservati alle customer card di default. Il nome della customer card NON può contenere il carattere «_».
- Tipo di database: è il tipo di database dove verrà effettuata la query
- Porta Database: è la porta usata per raggiungere il database. Nel caso di database locale su NethService è possibile utilizzare il socket unix /var/lib/mysql/mysql.sock
- Host: è l’host che ospita il database
- Query: è la query da eseguire. La parola chiave $EXTEN verrà sostituita con il numero telefonico su cui effettuare la ricerca.
Nota
Se si utilizza il carattere «", ad esempio nel nome del database, è necessario farlo precedere dal carattere di escape «". Esempio: se il nome del database è «TEST\SQLEXPRESS» allora il nome corretto da inserire è «TEST\SQLEXPRESS». La medesima considerazione vale se è necessario racchiudere la parola chiave $EXTEN (presente nella query) tra doppi apici; in alternativa usare l’apice singolo come indicato nell’esempio sottostante.
Esempio query
L’esempio seguente crea una customer card «ticket» che, all’arrivo di una chiamata, mostra nel cti i risultati di una query effettuata sul database di otrs:
Nome | ticket |
Nome Visualizzato: | ticket |
Tipo di database | mysql |
Porta Database | /var/lib/mysql/mysql.sock |
Nome Database | otrs |
Database Username | otrs |
Database Password | *** |
Query | SELECT T.title AS Titolo, date_format(T.create_time,”%d/%m/%Y %H:%i”) AS c_time,date_format(T.change_time,”%d/%m/%Y %H:%i”) AS m_time, CONCAT(U.first_name,” “,U.last_name) AS gestore, “Cliente”, TS.name AS stato FROM ticket T INNER JOIN customer_user CU ON T.customer_user_id=CU.login INNER JOIN ticket_state TS ON T.ticket_state_id=TS.id INNER JOIN users U ON T.change_by=U.id WHERE (CU.phone LIKE “%$EXTEN%”) LIMIT 10 |
Template¶
Dopo aver configurato la query, è necessario creare un template per effettuare il rendering del risultato. Tutti i template devono essere salvati nella directory /var/lib/nethserver/nethcti/templates/customer_card.
Il nome del file di ciascun template deve essere nella forma:
decorator_cc_
<numero_ordinale>
_
<nome_customer_card>
.ejs
Il numero_ordinale serve per decidere l’ordine di visualizzazione del template e deve essere diverso da «00» e «20» che sono riservati per le due customer cards di default: «anagrafica» e «ultime chiamate» rispettivamente. Il nome_customer_card deve coincidere con il nome deciso durante la configurazione della query.
Esempi di nomi di file:
decorator_cc_25_insoluti.ejs
decorator_cc_35_trattative.ejs
I template utilizzano la sintassi ejs che, in modo del tutto simile a quello che avviene in PHP, permettono di «immergere» codice javascript all’interno di una pagina html e di generare in output un documento (o un frammento) html interpretabile dai browser.
NethCTI fornisce già una lista di esempi pronti all’uso nella directory /usr/lib/node/nethcti-server/docs/custcard_examples:
- beautiful_table_<COLOR>.ejs: un insieme di customer cards di diverso colore (blu, verde, arancione, viole e giallo), es. beautiful_table_blue.ejs, curate esteticamente e con funzionalità di chiusura con un click del mouse
- base_table.ejs: visualizza una tabella molto semplice contenente tutte le colonne e le righe del risultato della query
- manual_table.ejs: visualizza una tabella contenente tutte le le righe del risultato della query, ma le colonne visualizzate devono essere specificate manualmente
- one_result.ejs: visualizza le prime due colonne del primo risultato della query
Se ad esempio si vuole creare una tabella di visualizzazione per la query sui ticket vista nel paragrafo precedente, eseguire:
cp /usr/lib/node/nethcti-server/docs/custcard_examples/beautiful_table.ejs /var/lib/nethserver/nethcti/templates/customer_card/decorator_cc_30_ticket.ejs
signal-event nethcti-server-update
Risultati¶
All’interno di ogni template è automaticamente disponibile la variabile results, un array che contiene tutti i risultati della query. Per inserire delle immagini all’interno del template è sufficiente usare il path:
/webrest/static/img/<FILENAME>
e inserire il file nel path relativo:
/var/lib/nethserver/nethcti/static/img/<FILENAME>
Si consiglia di creare una sottodirectory per la specifica customer card, ad esempio:
/var/lib/nethserver/nethcti/static/img/ticket/<FILENAME>
Ogni riga dell’array results è nel formato:
( colonna1 => valore1, colonna2 => valore2 ... colonnaX => valoreX )
Ad esempio, data una query del tipo:
SELECT nome, cognome, tipo FROM rubrica
Con risultato:
mario,rossi,azienda
giuseppe,bianchi,privato
L’array avrà il formato:
[0] => { nome: "mario", cognome: "rossi", tipo: 'azienda' }
[1] => { nome: "giuseppe", cognome: "bianchi", tipo: 'privato' }
Quindi, per accedere ad esempio al cognome del secondo risultato:
results[1].cognome // ritornerà "bianchi"
All’interno della variabile results.length è contenuto il numero dei risultati ottenuti.
Sintassi¶
I template ejs utilizzano la sintassi standard di javascript.
Per inserire codice all’interno di un frammento html, si usano i tag:
<% ...codice... %>
Se si desidera stampare direttamente il valore di una variabile, si può usare il formato:
<%= nome_variabile %>
Riportiamo un paio di esempi riprendendo la query vista nel paragrafo precedente.
Stampa il primo risultato:
Nome: <%= results[0].nome %>
Cognome: <%= results[0].cognome %>
Tipo: <img src='/webrest/static/img/web.png' />
Output:
Nome: mario
Cognome: rossi
Tipo: <img src='/webrest/static/img/web.png' />
Stampa tutti i risultati:
<% for (var i = 0; i < results.length; i++) { %>
Nome: <%= results[i].nome %>
Cognome: <%= results[i].cognome %>
<% } %>
Per ulteriori dettagli sulla sintassi di ejs, consultare: