Hoe kan ik de gespreksduur van een Asterisk-oproep in mijn eigen database invoegen?

Ik heb mijn eigen database om de gesprekken in een astreisk te registreren. Ik moet de gespreksduur van elk gesprek in een tabel invoegen. Hoe kan ik dit doen? Kan ik dit in mijn dialplan doen?

2

1 antwoord

U geeft niet veel informatie over welke db-backend u zou willen gebruiken, en ook als u vraagt ​​hoe u de gespreksduur kunt schrijven of hoe u een asterisk kunt configureren om de cdr in kwestie te schrijven.

Dus, over het algemeen spreken, je hebt 3 mogelijke opties hiervoor (zie hieronder). Voor de opties 2 en 3 zou je de verbinding met de database zelf moeten openen, de benodigde zoekopdrachten moeten schrijven om elke gewenste rij (s) in te voegen/bij te werken, fouten afhandelen, enz. . Terwijl u voor optie 1 alleen de asterisk hoeft te configureren om de klus te klaren.

1) Asterisk kan dit standaard alleen doen door de CDR (Call Detail Record) van elke oproep naar een backend te schrijven. Deze backend kan csv zijn, MySQL , pgsql , sqlite en andere databases via de cdr_odbc module. U moet uw cdr.conf configureren (en afhankelijk van de backend die u hebt gekozen, cdr_mysql.conf , cdr_odbc.conf , cdr_pgsql .conf met uw back-endinformatie, zoals inloggegevens, tabelnamen, enz.).

De CDR wordt standaard geschreven met wat inhoud, wat de CDR-variabelen zijn (overgenomen van de vooraf gedefinieerde asterisk-variabelenlijst )

Als het kanaal een cdr heeft, heeft die cdr-record zijn eigen set   variabelen die toegankelijk zijn net als kanaalvariabelen. De   volgende ingebouwde variabelen zijn beschikbaar en, tenzij anders vermeld,   alleen-lezen.

Degenen die interessant voor je zijn op dit moment zouden zijn:

${CDR(duration)}     Duration of the call.
${CDR(billsec)}  Duration of the call once it was answered.
${CDR(disposition)}  ANSWERED, NO ANSWER, BUSY

Wanneer dispositie ANSWER is, bevat billsec het aantal seconden dat moet worden gefactureerd (de totale 'beantwoorde tijd' van de oproep) en de duur houdt de totale duur van de oproep in inclusief de niet-gefactureerde tijd.

2) Als u daarentegen niet naar de cdr vraagt, maar de gespreksduur zelf wilt schrijven, kunt u een AGI -script dat na het uitgeven van een dial() , leest de CDR (billsec) variabele of de ANSWEREDTIME (ingesteld door de Dial() opdracht :

${DIALEDTIME} * Time for the call (seconds)
${ANSWEREDTIME} * Time from dial to answer (seconds)

3) U kunt hetzelfde resultaat ook behalen door een AMI te hebben client die luistert naar de gebeurtenis VarSet voor de variabele ANSWEREDTIME . Het evenement in kwestie bevat het kanaal waarvoor deze variabele is ingesteld.

Dus opties 2 en 3 zijn duidelijk nuttiger als je al een AGI-script of een AMI-client hebt van je eigen controlling/afhandelingsgesprekken, en optie 1 is meer generiek maar misschien iets minder flexibel.

Hoop dat het helpt!

7
toegevoegd
Het spijt me dat ik niet genoeg informatie heb gegeven. De opties 2 en 3 is wat ik nodig heb. Maar ik heb een vraag: Is het mogelijk om toegang te krijgen tot ANTWOORDENTIME in dialplan?
toegevoegd de auteur Karadous, de bron
Zeer goed antwoord. Voor de volledigheid, voor optie (1), wil je misschien cdr_adaptive_odbc noemen in plaats van cdr_odbc, dat flexibeler is voor door de gebruiker gedefinieerde gegevens.
toegevoegd de auteur Matt Jordan, de bron
@Karadous Zeker. Zie: voip-info.org/wiki/view/Asterisk+variables. Dus gebruik gewoon $ {ANSWEREDTIME} en (mogelijk) gebruik de optie g van de dial-opdracht.
toegevoegd de auteur marcelog, de bron
@marcelog, maar hoe haal je de gespreksduur van B-leg (uitgaande oproep van Dialplan)?
toegevoegd de auteur duccom, de bron