INDICE


Verifiche preliminari


Innanzitutto il file csv di partenza deve avere una specifica configurazione, deve utilizzare la virgola (",") come separatore ed i campi devono coincidere come nome e come ordine con quelli della tabella della rubrica del CTI:


mysql> describe cti_phonebook;
+----------------+--------------+------+-----+---------+----------------+
| Field          | Type         | Null | Key | Default | Extra          |
+----------------+--------------+------+-----+---------+----------------+
| id             | int(11)      | NO   | PRI | NULL    | auto_increment | 
| owner_id       | varchar(255) | NO   | MUL |         |                | 
| type           | varchar(255) | NO   |     |         |                | 
| homeemail      | varchar(255) | YES  | MUL | NULL    |                | 
| workemail      | varchar(255) | YES  | MUL | NULL    |                | 
| homephone      | varchar(25)  | YES  | MUL | NULL    |                | 
| workphone      | varchar(25)  | YES  | MUL | NULL    |                | 
| cellphone      | varchar(25)  | YES  | MUL | NULL    |                | 
| fax            | varchar(25)  | YES  | MUL | NULL    |                | 
| title          | varchar(255) | YES  |     | NULL    |                | 
| company        | varchar(255) | YES  |     | NULL    |                | 
| notes          | text         | YES  |     | NULL    |                | 
| name           | varchar(255) | YES  | MUL | NULL    |                | 
| homestreet     | varchar(255) | YES  |     | NULL    |                | 
| homepob        | varchar(10)  | YES  |     | NULL    |                | 
| homecity       | varchar(255) | YES  |     | NULL    |                | 
| homeprovince   | varchar(255) | YES  |     | NULL    |                | 
| homepostalcode | varchar(255) | YES  |     | NULL    |                | 
| homecountry    | varchar(255) | YES  |     | NULL    |                | 
| workstreet     | varchar(255) | YES  |     | NULL    |                | 
| workpob        | varchar(10)  | YES  |     | NULL    |                | 
| workcity       | varchar(255) | YES  |     | NULL    |                | 
| workprovince   | varchar(255) | YES  |     | NULL    |                | 
| workpostalcode | varchar(255) | YES  |     | NULL    |                | 
| workcountry    | varchar(255) | YES  |     | NULL    |                | 
| url            | varchar(255) | YES  |     | NULL    |                | 
| extension      | varchar(255) | YES  | MUL | NULL    |                | 
| speeddial_num  | varchar(255) | YES  |     | NULL    |                | 
+----------------+--------------+------+-----+---------+----------------+


Inoltre:


mentre gli altri campi sono facilmente intellegibili.


Alcuni suggerimenti prima di procedere con l'importazione

Per evitare qualsiasi problema è bene convertire alcuni caratteri prima di procedere all'importazione.
  • Modificare le lettere accentate con le corrispondenti "lettera + apostrofo"
  • Verificare la presenza di eventuali caratteri non ASCII e sostituirli o rimuoverli
  • Evitare l'utilizzo di caratteri particolari come carrier return, virgole e doppi apici, nel caso sostituirli con altri 
  • Se si desidera essere avvisati di eventuali warning durante il processo è possibile abilitarli nella CLI di mysql dando il comando: 
SHOW WARNINGS; 
NOTA: Una volta preparato il file csv "test.csv" bisogna importarlo con scp nella /tmp di rocky linux.


Controllo del contenuto del CSV


IMPORTANTE: se si importa un file generato con una macchina Windows, è probabile che il file contenga dei caratteri particolari, che servono al controllo dei "ritorno a capo" e degli "avanzamenti di riga" (spesso questi caratteri speciali sono normalmente codificati come "^M").


La presenza di questi caratteri potrebbe far fallire l'importazione o introdurre problemi di visualizzazione della rubrica del CTI nel browser o nell'app.

 

Prima di procedere all'importazione è perciò fondamentale verificare se il file contenga questi caratteri, per farlo è sufficiente utilizzare il comando `file` da terminale:

Generic
~]# file test.csv 
test.csv: ASCII text, with CRLF line terminators

Se l'output dovesse essere come quello qui sopra, il file andrà "bonificato".

Con questo comando si possono eliminare i caratteri "sporchi", generando un nuovo file:

tr -d '\015' < test.csv > outfile.csv

Generi
Modificare l' owner del file con utente corrispondente a quello dell'istanza nethvoice in cui faremo import:
chown nethvoiceX:nethvoiceX /tmp/outfile.csv
poi entrare nell'utente Nethvoice (sostituire sempre X con il numero dell'istanza nethvoice:
runagent -m nethvoiceX

Lanciare il comando podman per copiare nel container corrispondente il csv:

podman cp /tmp/outfile.csv mariadb:/tmp/


A questo punto si potrà procedere con l'importazione usando il nuovo file, outfile.csv


Importazione dei contatti


effettuare accesso al container mysql:


podman exec -it mariadb bash


Entrare in mysql nethcti3


mysql -u root -h 127.0.0.1 -P $NETHVOICE_MARIADB_PORT -p$MARIADB_ROOT_PASSWORD

MariaDB [(none)]> use nethcti3

MariaDB [nethcti3]>

eseguire l'importazione: 

LOAD data local infile "/tmp/NOME_FILE.csv" INTO TABLE cti_phonebook fields terminated by ",";

NOTA: sul database deve essere presente almeno 1 contatto pena il fallimento dell'importazione

  

Se la rubrica è vuota è possibile fare le tutte prove che si vogliono fino ad ottenere il risultato voluto, basta eseguire il comando (sempre da mysql): 

delete from cti_phonebook;

 per cancellarne il contenuto e ricominciare.



ATTENZIONE: Una volta ottenuto il risultato desiderato SARA' NECESSARIO ripulire l'importazione dai valori rimasti NULL, altrimenti non sarà possibile editare i contatti successivamente!


Per eliminare le ricorrenze dei NULL è sufficiente eseguire il comando:

 

UPDATE cti_phonebook SET owner_id=IfNull(owner_id,''),type=IfNull(type,''),homeemail=IfNull(homeemail,''),workemail=IfNull(workemail,''),homephone=IfNull(homephone,''),workphone=IfNull(workphone,''),cellphone=IfNull(cellphone,''),fax=IfNull(fax,''),title=IfNull(title,''),company=IfNull(company,''),notes=IfNull(notes,''),name=IfNull(name,''),homestreet=IfNull(homestreet,''),homepob=IfNull(homepob,''),homecity=IfNull(homecity,''),homeprovince=IfNull(homeprovince,''),homepostalcode=IfNull(homepostalcode,''),homecountry=IfNull(homecountry,''),workstreet=IfNull(workstreet,''),workpob=IfNull(workpob,''),workcity=IfNull(workcity,''),workprovince=IfNull(workprovince,''),workpostalcode=IfNull(workpostalcode,''),workcountry=IfNull(workcountry,''),url=IfNull(url,''),extension=IfNull(extension,''),speeddial_num=IfNull(speeddial_num,''); 



Esempio di importazione con file parzialmente valorizzato


Si potrebbe avere a che fare con un file rubrica.csv redatto in questo modo:

 

angelo,public,076151111,339999942518,AGUZZI Simone
angelo,public,3384311192,,AIRALDO Alessandro
angelo,public,34824444475,,ALBERGO DAMIANO


 

In questo caso avremmo a disposizione unicamente i valori per le colonne:


col1, col2, col3, col4 col5


della rubrica sul CTI, che in realtà ne richiede molti di più.

Le colonne disponibili nella rubrica CTI sono queste:


| id | owner_id         | type    | homeemail | workemail | homephone | workphone  | cellphone | fax  | title | company  | notes | name     | homestreet | homepob | homecity | homeprovince | homepostalcode | homecountry | workstreet | workpob | workcity | workprovince | workpostalcode | workcountry | url  | extension | speeddial_num |

 

Sarà comunque possibile importare il file, facendo il mapping corretto delle colonne disponibili nel csv originario con i campi della rubrica CTI:

    

LOAD data local infile "/tmp/nome_csv.csv" INTO TABLE cti_phonebook fields terminated by "," (@col1,@col2,@col3,@col4,@col5) set owner_id=nullif(@col1,''),type=nullif(@col2,''),workphone=nullif(@col3,''),cellphone=nullif(@col4,''),name=nullif(@col5,'');

   

Terminata l'importazione si dovranno eliminare le ricorrenze dei valori NULL:

 

UPDATE cti_phonebook SET owner_id=IfNull(owner_id,''),type=IfNull(type,''),homeemail=IfNull(homeemail,''),workemail=IfNull(workemail,''),homephone=IfNull(homephone,''),workphone=IfNull(workphone,''),cellphone=IfNull(cellphone,''),fax=IfNull(fax,''),title=IfNull(title,''),company=IfNull(company,''),notes=IfNull(notes,''),name=IfNull(name,''),homestreet=IfNull(homestreet,''),homepob=IfNull(homepob,''),homecity=IfNull(homecity,''),homeprovince=IfNull(homeprovince,''),homepostalcode=IfNull(homepostalcode,''),homecountry=IfNull(homecountry,''),workstreet=IfNull(workstreet,''),workpob=IfNull(workpob,''),workcity=IfNull(workcity,''),workprovince=IfNull(workprovince,''),workpostalcode=IfNull(workpostalcode,''),workcountry=IfNull(workcountry,''),url=IfNull(url,''),extension=IfNull(extension,''),speeddial_num=IfNull(speeddial_num,'');