Lo scenario che viene affrontato è quello di un NethService (con WebTop) e di un NethVoice 14 (con NethCTI) installati su macchine differenti.


In questo caso, per poter consentire l'accesso ai campi personalizzati dei contatti da parte delle schede clienti di NethVoice (da remoto) è necessario fare queste attività:


INDICE



Consentire l'accesso a Postgresql da reti remote



Modificare le policy di accesso interne a Postgresql

sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/" /var/lib/pgsql/data/postgresql.conf
mkdir -p /etc/e-smith/templates-custom/var/lib/pgsql/data/pg_hba.conf/

cp -p /etc/e-smith/templates/var/lib/pgsql/data/pg_hba.conf/20auth /etc/e-smith/templates-custom/var/lib/pgsql/data/pg_hba.conf/20auth

Se ad esempio si desidera aggiungere tutta la rete 192.168.5.0/0:

vim /etc/e-smith/templates-custom/var/lib/pgsql/data/pg_hba.conf/20auth

# IPv4 local connections:
host all all 127.0.0.1/32 md5
host all all 192.168.5.0/0 md5 <==== RETE DA AGGIUNGERE
expand-template /var/lib/pgsql/data/pg_hba.conf
systemctl restart postgresql


Creazione di un utente per l'accesso al database con accessi e permessi limitati

su - postgres -c 'psql webtop5'
  • creazione di un utente dedicato (ro-webtop) con password (XXXXXXXX):
        (inserire al posto delle XXXXXXXX una password a piacere)
CREATE ROLE "ro-webtop" WITH LOGIN PASSWORD 'XXXXXXXX' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION VALID UNTIL 'infinity';
  • creazione dei permessi limitati di accesso al database webtop5 e alle sole tabelle dei contatti e dei campi custom necessari:
GRANT CONNECT ON DATABASE webtop5 TO "ro-webtop";
GRANT USAGE ON SCHEMA contacts TO "ro-webtop";
GRANT SELECT ON ALL TABLES IN SCHEMA contacts TO "ro-webtop";
GRANT SELECT ON ALL SEQUENCES IN SCHEMA contacts TO "ro-webtop";
GRANT USAGE ON SCHEMA core TO "ro-webtop";
GRANT SELECT ON core.custom_fields TO "ro-webtop";
\q   (per uscire)

A questo punto si potrà procedere con la configurazione della scheda cliente sul NethVoice (remoto) creando la connessione al database e costruendo una query adatta a recuperare il valore dal campo personalizzato che vogliamo mostrare.


Ipotizziamo di voler mostrare sulla scheda del CTI se il cliente che ci sta chiamando ha un contratto di assistenza remota attivo.


Procediamo in questo modo:

  • configurazione sul NethVoice della connessione al database di WebTop per le schede clienti

(ad esempio)

(come password inserire quella scelta in precedenza con la creazione dell'utente ro-webtop al posto delle XXXXXXXX)
  • costruzione della query adatta a recuperare il dato dal campo personalizzato configurato


        1) ricerca del category_id della rubrica di proprietà dell'utente "pippo" da cui prelevare i dati:

    

su - postgres -c 'psql webtop5'

select name,category_id from contacts.categories where user_id='pippo';

     name      | category_id
---------------+-------------
 Privata       |           8
 WebTop        |           5   <== RUBRICA DA UTILIZZARE
 (2 rows)


        2) recupero del custom_field_id relativo al campo personalizzato di cui vogliamo mostrare il

          valore, riportato in basso a destra nella finestra del campo personalizzato.


Nel nostro caso utilizzeremo questo ID 2XcsCkTNLMIbRqJOsNunIZ relativo al campo "Assistenza_remota":



  • costruzione della query da riportare sulla scheda cliente: 
select CASE WHEN boolean_value='t' THEN 'ATTIVO' ELSE 'NON ATTIVO' END stato from contacts.contacts_custom_values where contact_id=(select contact_id from contacts.contacts where category_id='5' and revision_status!='D' and (work_mobile like '%$NUMBER' or work_telephone like '%$NUMBER')) and custom_field_id='2XcsCkTNLMIbRqJOsNunIZ';

Trattandosi di un campo di tipo "Casella di spunta" viene cercato boolean_value e come risultato verrà riportato 'ATTIVO' (campo selezionato) o 'NON ATTIVO' (campo non selezionato).


Basterà creare la scheda cliente su NethVoice ricopiando la query ricavata:


e questo sarà il risultato del test:



Esempi di query da utilizzare per le altre tipologie di campi

(sostituendo alle XXX l'ID del proprio campo custom e alle YY l'ID della rubrica da interrogare):

  • number_value (per campi numerici)

(esempio di query per recuperare il "Codice Cliente")

select number_value as "Codice Cliente" from contacts.contacts_custom_values where contact_id=(select contact_id from contacts.contacts where category_id='YY' and revision_status!='D' and (work_mobile like '$NUMBER' or work_telephone like '$NUMBER')) and custom_field_id='XXXXXXXXXXXXXXXXX';
  • text_value (per campi testo multilinea)

(esempio di query per recuperare "Appunti da Fiera")

select text_value as "Appunti da Fiera" from contacts.contacts_custom_values where contact_id=(select contact_id from contacts.contacts where category_id='YY' and revision_status!='D' and (work_mobile like '$NUMBER' or work_telephone like '$NUMBER')) and custom_field_id='XXXXXXXXXXXXXXXXX';
  • string_value (per campi testo)

(esempio di query per recuperare "Appunti da Fiera")

select string_value as "Appunti da Fiera" from contacts.contacts_custom_values where contact_id=(select contact_id from contacts.contacts where category_id='YY' and revision_status!='D' and (work_mobile like '$NUMBER' or work_telephone like '$NUMBER')) and custom_field_id='XXXXXXXXXXXXXXXXX';


  • date_value (per campi data)

(esempio di query per recuperare la data di scadenza del contratto di assistenza)

select to_char(date_value,'DD-MM-YYYY') as "Scadenza contratto" from contacts.contacts_custom_values where contact_id=(select contact_id from contacts.contacts where category_id='YY' and revision_status!='D' and (work_mobile like '%$NUMBER' or work_telephone like '%$NUMBER')) and custom_field_id='XXXXXXXXXXXXXXXXX';
  • string_value (combo box - Casella di elenco):

Attualmente per questo tipo di campo non è supportata la ricerca all'interno dei valori possibili.

(NON E' SUPPORTATA LA RICERCA ALL'INTERNO DI CAMPI JSON - SERVE POSTGRESQL => 9.3)