PDA

Voir la version complète : Comment stocker l'historique des appels dans une base de données MySQL via ODBC ?



lordaker
25/05/2018, 11h22
Bonjour à tous et à toutes,

J'ai la base de données suivants sur mon serveur Asterisk 13.21.0 :

Database => callsUsersDB

Table => historicCalls


historicCalls


iKeys
date
numeroPoste
numeroDID
destinataire
typeAppel


1
2018/04/02 - 14:32
101
024567878
045698552
entrant


2
2018/04/15 - 20:32
103
024567878
045698552
sortant


3
2018/04/02 - 14:32
102
021181412
028992018
sortant



Voilà ce que je voudrais avoir dans ma base de données un historic de mes appels entrants et sortants.
Mais j'ignore comment procéder. Surtout du côté de mon dialplan. Quelle syntaxe utiliser pour insérer ses
informations d'appels dans la base de données ?

Bien à vous,
Lordaker

jean
25/05/2018, 21h04
la question est très, trop générique ! il suffit de configurer odbc sur ta machine, et de faire les inserts que tu veux dans le dialplan !

sans être plus précis, dur de faire une meilleure réponse

lordaker
28/05/2018, 18h39
la question est très, trop générique ! il suffit de configurer odbc sur ta machine, et de faire les inserts que tu veux dans le dialplan ! Sans être plus précis, dur de faire une meilleure réponse

J'ai dans mon CLI ceci:



Connected to Asterisk 13.21.0 currently running on asterisk (pid = 1329)
asterisk*CLI> odbc show all

ODBC DSN Settings
-----------------

Name: asterisk
DSN: asterisk-connector
Last connection attempt: 1970-01-01 00:00:00
Number of active connections: 1 (out of 1)

Name: calls-tracking
DSN: calls-tracking-connector
Last connection attempt: 1970-01-01 00:00:00
Number of active connections: 1 (out of 1)

asterisk*CLI>


Voici le code de mon fichier extensions.conf pour les appels sortant:


exten => _0X.,1,NoOp(Outgoing Call from ${CALLERID(all)} to ${EXTEN})
same => n,Set(POSTE=${CHANNEL:6:3})
same => n,NoOp(SendedCID = ${CALLERID(num)})
same => n,Set(CALLERID(num)=${DB(CID/${POSTE})})
same => n,NoOp(SendedCID = ${CALLERID(num)})
same => n,Set(NOW=${STRFTIME(${EPOCH},,%Y_%m_%d_%H_%M_%S)} )
same => n,System(echo "--appel_sortant --- callerid : ${CALLERID(num)} ---- ${STRFTIME(${EPOCH},,%Y_%m_%d_%H_%M_%S)} ----" >> /var/spool/asterisk/log/debug.txt)
same => n,Set(REC_FILE_NAME=OUT_${NOW}_${EXTEN}_${POSTE}.w av)
same => n,Set(TYPE='Out')
same => n,Set(CALLSHISTORY()=${NOW},${POSTE},${CALLERID(nu m)},${EXTEN},${TYPE})
same => n,Answer()


Le résultat dans le CLI:



== Setting global variable 'SIPDOMAIN' to '192.168.40.55'
-- Executing [042680871@from-internal:1] NoOp("PJSIP/103-00000005", "Outgoing Call from "Arnold" <103> to 042680871") in new stack
-- Executing [042680871@from-internal:2] Set("PJSIP/103-00000005", "POSTE=103") in new stack
-- Executing [042680871@from-internal:3] NoOp("PJSIP/103-00000005", "SendedCID = 103") in new stack
-- Executing [042680871@from-internal:4] Set("PJSIP/103-00000005", "CALLERID(num)=028992018") in new stack
-- Executing [042680871@from-internal:5] NoOp("PJSIP/103-00000005", "SendedCID = 028992018") in new stack
-- Executing [042680871@from-internal:6] Set("PJSIP/103-00000005", "NOW=2018_05_28_11_38_00") in new stack
-- Executing [042680871@from-internal:7] System("PJSIP/103-00000005", "echo "--appel_sortant --- callerid : 028992018 ---- 2018_05_28_11_38_00 ----" >> /var/spool/asterisk/log/debug.txt") in new stack
-- Executing [042680871@from-internal:8] Set("PJSIP/103-00000005", "REC_FILE_NAME=OUT_2018_05_28_11_38_00_042680871_10 3.wav") in new stack
-- Executing [042680871@from-internal:9] Set("PJSIP/103-00000005", "TYPE='Out'") in new stack
-- Executing [042680871@from-internal:10] Set("PJSIP/103-00000005", "CALLSHISTORY()=2018_05_28_11_38_00,103,028992018,0 42680871,'Out'") in new stack
[May 28 11:38:00] ERROR[3953][C-00000003]: pbx_functions.c:699 ast_func_write: Function CALLSHISTORY not registered


La requête dans le fichier func_odbc.conf


[CALLSHISTORY]
dsn=calls-tracking-connector
writesql=INSERT INTO callshistory(date,numeroPoste,numeroDID,destinatai re,sens) VALUES('${ARG1}','${ARG2}','${ARG3}','${ARG4}','${ ARG5}')


Bien à vous,
Lordaker

lordaker
04/07/2018, 10h09
J'ai pu voir que sur Asterisk nous avons le CDR (Call Detail Records) qui permet d'avoir des informations sur les différents appels émis via l'Asterisk. Ils disent sur le wiki d'Asterisk que c'est très utile pour les administrateurs qui veulent suivre les appels qui sont effectués sur le système Asterisk. Voir (https://wiki.asterisk.org/wiki/display/AST/Reporting)
Je voudrais utilisé le système de variable qu'il propose pour l'enregistrement de c'est données lors d'un appels dans ma base de données.

Voici la présentation de ma table historikcalls qui se trouve dans la db_callsusers
Table HistorikCalls
iKey (Primary ID)
date (datetime) --> Date et heure de l'appel reçu ou émis
numberExt (varchar 20) --> Numéro de l'extension du poste
numberCID (varchar 20) --> CID du Poste utilisé pour émettre l'appel
receiver (varchar 20) --> Numéro de la personne appelée
type (varchar 5) --> Le type de l'appel (Inbound or Outbound)

Dans le fichier func_odbc.conf j'ai ceci

[CALLSHISTORY]
prefix=ODBC
dsn=calls-tracking-connector
writesql=INSERT INTO callshistory (date,numberExt,numberCID,receiver,type) VALUES('${ARG1}','${ARG2}','${ARG3}','${ARG4}','${ ARG5}')

Au vu de ce que le Wiki d'Asterisk propose comme variable CDR (https://wiki.asterisk.org/wiki/display/AST/CDR+Variables)
Comment je fais pour introduire les variables qui m’intéressent dans la table HistorikCalls ?

lordaker
04/07/2018, 19h22
J'ai pu voir que sur Asterisk nous avons le CDR (Call Detail Records) qui permet d'avoir des informations sur les différents appels émis via l'Asterisk. Ils disent sur le wiki d'Asterisk que c'est très utile pour les administrateurs qui veulent suivre les appels qui sont effectués sur le système Asterisk. Voir (https://wiki.asterisk.org/wiki/display/AST/Reporting)
Je voudrais utilisé le système de variable qu'il propose pour l'enregistrement de c'est données lors d'un appels dans ma base de données.

Voici la présentation de ma table historikcalls qui se trouve dans la db_callsusers
Table HistorikCalls
iKey (Primary ID)
date (datetime) --> Date et heure de l'appel reçu ou émis
numberExt (varchar 20) --> Numéro de l'extension du poste
numberCID (varchar 20) --> CID du Poste utilisé pour émettre l'appel
receiver (varchar 20) --> Numéro de la personne appelée
type (varchar 5) --> Le type de l'appel (Inbound or Outbound)

Dans le fichier func_odbc.conf j'ai ceci

[CALLSHISTORY]
prefix=ODBC
dsn=calls-tracking-connector
writesql=INSERT INTO callshistory (date,numberExt,numberCID,receiver,type) VALUES('${ARG1}','${ARG2}','${ARG3}','${ARG4}','${ ARG5}')

Au vu de ce que le Wiki d'Asterisk propose comme variable CDR (https://wiki.asterisk.org/wiki/display/AST/CDR+Variables)
Comment je fais pour introduire les variables qui m’intéressent dans la table HistorikCalls ?

Je suis parvenu à enregistrer mes information d'appels dans une base de données en suivant le tutoriel suivant:

http://www.asteriskdocs.org/en/3rd_Edition/asterisk-book-html-chunk/database_storing-cdr.html

Maintenant il me faut pouvoir personnalisé l'enregistrement avec les détails qui m'intéressent.