Asterisk mysql kuanzisha Kirusi Cyrillic meza cdr. Seti ya vipengele vya msingi vya kinyota. Kuunda vipengele vya ziada

Kufanya ghiliba kwa Amri ya Ufungaji ya hifadhidata ya MySQL ni sehemu ya kifurushi cha nyongeza ambacho kinapatikana katika CVS ya Nyota. Hii ni NYONGEZA kwa nyota, Kifurushi cha Sasa haijasakinishwa kwa chaguo-msingi na lazima ipakuliwe na kusakinishwa kutoka kwa kifurushi cha programu-jalizi Maelezo MYSQL(): Tekeleza upotoshaji kwa hifadhidata ya MySQL syntax ya MYSQL(Unganisha connid dhhost dbuser dbpass dbname)

Muunganisho wa hifadhidata. Hoja zina vigezo vya kawaida vya kuunganisha kwenye hifadhidata ya MySQL, ambayo itapitishwa kwa kazi ya mysql_real_connect. Kitambulisho cha muunganisho kitarejeshwa katika tofauti ya $(connid).

MYSQL (Hoja ilitokana na $(connid) kamba ya hoja)

Hutekeleza swali la kawaida kwenye hifadhidata ya MySQL, hoja iko katika kigezo cha kamba ya hoja, kwa kutumia kitambulisho cha muunganisho kilichobainishwa katika $(connid). Matokeo ya hoja yatahifadhiwa katika kigezo cha $(resultid).

MYSQL(Leta imechukuliwa $(matokeo) var1 var2 ... varN)

Ikiwa kuna rekodi zinazopatikana za kuletwa kwa sababu ya hoja ya hifadhidata, $(fetchid) imewekwa kuwa 1 na rekodi moja italetwa kutoka kwa matokeo yaliyorejeshwa yaliyohifadhiwa katika $(resultid). Thamani za sehemu zitakazotokana zitagawiwa kwa viambajengo $(var1), $(var2) ... $(varN) kulingana na mpangilio uliobainishwa katika ombi.

Ikiwa hakuna rekodi zinazopatikana, basi $(fetchid) itawekwa upya hadi 0 na $(var1), $(var2) ... $(varN) itarejeshwa bila kubadilishwa.

MYSQL (Futa $(matokeo))

Hufuta kumbukumbu na miundo ya data inayohusishwa na matokeo ya hoja.

MYSQL (Tenganisha $(connid))

Husitisha muunganisho kwenye hifadhidata ya MySQL kwa kutumia kitambulisho kilichotolewa.

Mifano

exten => _X.,1,MYSQL(Unganisha connid localhost dbuser dbpass dbname)
kupanua =>
kupanua =>
exten => _X.,4,GotoIf($[$(AGIScript) = NULL]?5:7)
exten => _X.,5,AGI($(DefaultAGIScript),$(EXTEN))
kupanua => _X.,6,Goto(_X.,8)
exten => _X.,7,AGI($(AGIScript),$(EXTEN))
exten => _X.,8,MYSQL(Futa $(matokeo))
exten => _X.,9,MYSQL(Tenganisha $(connid))
exten => _X.,10,Hangup


Katika mfano ulio hapo juu, ikiwa mtumiaji anayepiga atakata simu wakati simu yake inaendelea, mahali fulani kati ya kipaumbele cha 5 na kipaumbele cha 7, basi vitendaji vya MYSQL(Clear...) na MYSQL(Disconnect...) havitatekelezwa. Katika kesi hii, uunganisho utabaki bila kufungwa, na kwa kila simu mpya vile idadi ya viunganisho visivyofungwa itaongezeka. Hatimaye, seva ya MySQL itafikia kikomo cha idadi ya miunganisho iliyofunguliwa kwa wakati mmoja kwenye hifadhidata. (Kulingana na kikomo kilichowekwa kwenye faili ya usanidi ya mysql). Kwa hivyo, kwa kesi hii unahitaji kubadilisha kidogo mlolongo wa vitendo kama inavyoonyeshwa hapa chini:

exten => _X.,1,MYSQL(Unganisha kinyota kinyota cha kinyota cha kinyota dbpass)
exten => _X.,2,MYSQL(Matokeo ya swali $(connid) SELECT\scriptname\ from\ mac2pin\ where\ userid=$(CALLERIDNAME))
exten => _X.,3,MYSQL(Leta imechukuliwa $(matokeo) AGIScript)
exten => _X.,4,MYSQL(Futa $(matokeo))
exten => _X.,5,MYSQL(Tenganisha $(connid))
kupanua => _X.,6,GotoIf($(imechotwa)?7:9)
exten => _X.,7,AGI($(DefaultAGIScript),$(EXTEN))
exten => _X.,8,Hangup
exten => _X.,9,AGI($(AGIScript),$(EXTEN))
exten => _X.,10,Hangup


Kumbuka kwa kesi hii. Hapa tunafuta kumbukumbu na kukatwa kutoka kwa hifadhidata mara baada ya Kuchota. Hii inahakikisha kwamba kabla ya kuendesha hati ya AGI, tuna uhakika kwamba usafishaji wa kumbukumbu na utengaji wa hifadhidata tayari umefanywa. Njia hii inaweza kutumika ikiwa unahitaji kupata kitu cha kipekee au kinachobadilika mara kwa mara kutoka kwa hifadhidata. Mambo mengine ya kuzingatia: Kukimbia nafasi kwa kutumia \ herufi wakati wa kutunga hoja. Ikiwa unatumia nukuu, zitatumwa kwa programu kama sehemu ya ombi. Vibambo vingine vinavyohitaji kutoroka ni nukuu (\" na \"), koma (\,), na kurudi nyuma (\\). (Tumia Mysqlscape- tazama mfano hapa chini) Sehemu zilizorejeshwa na hoja zitapewa vigeugeu kwa mpangilio ule ule ambao walirejeshwa na MySQL. Haipendekezi kutumia hoja kama "CHAGUA *" kwa sababu hakuna hakikisho kwamba sehemu zilizorejeshwa zitakuwa katika mpangilio unaotarajia ziwe. Huhitaji kutumia lakabu kwa sehemu zilizochaguliwa kutoka kwa hifadhidata kama vile: "CHAGUA (maneno marefu) kama short_name" kwa sababu jina la sehemu haliathiri mpangilio wa sehemu zinazoletwa na hoja hii. Maelezo ya kinyota kwa amri hii yanasema kuwa $(fetchid) imewekwa kuwa TRUE ikiwa kuna maingizo yanayopatikana. Sio sawa. Imewekwa kuwa 1 ikiwa kuna data tangu uletaji wa mwisho na imewekwa kuwa 0 ikiwa hakuna data. Mfano

exten => 888,1,MYSQL(Unganisha connid localhost ipcontact passwd ipcontact)
exten => 888,2,MYSQL(Matokeo ya swali $(connid) CHAGUA\ `nambari`\ KUTOKA\ `simu`\ WAPI\ `channel`=\"$(chan)\")
exten => 888,3,MYSQL(Fetch foundRow $(matokeo) nambari) ; chukua safu
exten => 888,4,GotoIf($["$(foundRow)" = "1"]?7:5) ; acha kitanzi ikiwa hakuna safu iliyopatikana
exten => 888.5,NoOp($(namba))
exten => 888,6,Goto(3) ; endelea kitanzi ikiwa safu imepatikana
exten => 888.7,MYSQL(Futa $(matokeo))
exten => 888,8,MYSQL(Tenganisha $(connid))

Vidokezo __Kumbuka marekebisho na MYSQL(Fetch). $(fetchid) - si lazima iwekwe 1 ikiwa kuna data. Chaguo hili la kukokotoa linaweka uga huu hadi 1 ikiwa kuna data pekee ya simu hiyo mahususi ya MYSQL(Fetch). Hii hapo awali ilielezewa vibaya, tangu kuundwa kwa maelezo ya kazi hii.
Usipofuta kumbukumbu na kutenganisha kutoka kwa MySQL, miunganisho itasalia wazi na hatimaye kufikia kikomo kilichowekwa kwa seva ya MySQL. Kisha, njia pekee ya kurekebisha hali hii ni kuanzisha upya nyota, au unaweza pia kuangalia orodha ya michakato na kuua michakato hii ya kunyongwa kwa amri ya kuua.
Mbali na hayo hapo juu, Flobi amekuja na aina fulani ya upotoshaji wa kusafisha rasilimali. Kwa vile sikupata mantiki ya matendo yake na nikaona ni upuuzi mtupu, sikuitafsiri.

Faili ya cdr.conf hutumiwa kuandika vigezo vya simu kwa faili au hifadhidata. Kuhifadhi rekodi za simu wakati mwingine ni muhimu kurekodi simu na wakati wa kupiga simu wa mteja, kuzuia ulaghai, nk. . Mipangilio katika faili ya cdr.conf inabainisha jinsi nyota inapaswa kushughulikia maelezo haya.
Orodha ya baadhi ya vigezo katika sehemu ya faili ya cdr.conf:

wezesha = ndiyo\hapana - Ikiwa CDR imeandikwa au la. Chaguo msingi ni ndiyo.

batch = ndio\no - Huruhusu data kuandikwa kwa bafa badala ya hifadhidata ili kupunguza mzigo wa mfumo.
Ikiwekwa kuwa ndiyo, data inaweza kupotea ikiwa mfumo utaacha kufanya kazi bila kutarajiwa!

size = 100 Idadi ya juu zaidi ya rekodi za CDR zilizokusanywa katika bafa kabla ya kuhamishiwa kwenye upande wa seva wa mifumo ya hifadhi ya CDR. Lazima itumike ikiwa batch = ndio. Chaguo msingi ni maingizo 100.

muda = 300 Baada ya muda gani katika sekunde bafa inafutwa na data inaingizwa kwenye hifadhidata, bila kujali idadi ya rekodi kwenye bafa (iliyoamuliwa na parameta ya ukubwa). Thamani chaguo-msingi ni 300 s.

ratiba = ndiyo/hapana. Wakati wa kuhamisha kiasi kikubwa cha rekodi za CDR kwenye hifadhidata ya mbali, unahitaji kuweka ratiba kuwa ndiyo. Mpangilio huu utaiambia Nyota kuchakata uandishi wa CDR katika uzi mpya, kimsingi ikikabidhi kipanga ratiba maalum kwa chaguo hili la kukokotoa.

safeshutdown = ndiyo/hapana. Kuiweka kuwa ndiyo kutazuia kinyota kuzima kabisa hadi bafa isafishwe kabisa na taarifa zote zimeandikwa kwenye hifadhidata. Ikiwa kigezo hiki kitawekwa kuwa hapana na kinyota kitazima wakati kuna taarifa kwenye bafa, taarifa hiyo itapotea.

endforehexten = ndiyo\no. Thamani chaguo-msingi ni hapana. Ukibainisha ndiyo, CDR itakamilika kabla ya kiendelezi cha h kutekelezwa, ili thamani za CDR kama vile end na billsec ziweze kurejeshwa katika kiendelezi hicho.

Maelezo zaidi yanaweza kupatikana katika kiolezo cha faili cdr.conf.

Mfano faili ya cdr.conf:
;
; Kinyota Maelezo ya Simu Rekodi usanidi wa injini
;
; CDR ni Rekodi ya Maelezo ya Simu, ambayo hutoa huduma za ukataji miti kupitia anuwai ya
; moduli za nyuma zinazoweza kuunganishwa. Maelezo ya kina ya simu yanaweza kurekodiwa kwa
; hifadhidata, faili, n.k. Inafaa kwa bili, kuzuia ulaghai, kufuata
; Sarbanes-Oxley aka The Enron Act, tathmini za QOS, na zaidi.
;

; Amua ikiwa utatumia au kutotumia ukataji miti wa CDR. Kuweka hii kuwa "hapana" kutabatilisha
; upakiaji wowote wa moduli za nyuma za CDR. Chaguo-msingi ni "ndiyo".
;wezesha=ndio

; Amua ikiwa utaweka au kutoingia kwenye simu ambazo hazijajibiwa. Kuweka hii kuwa "ndio" kutafanya
; ripoti kila jaribio la kupiga simu katika majaribio ya kupiga, wakati haikuwa hivyo
; akajibu. Kwa mfano, ukijaribu kupiga viendelezi 3, na chaguo hili ni "ndio",
; utapata CDR 3, moja kwa kila simu iliyopigwa. Chaguomsingi ni "hapana". Baadhi
; kupata habari hii horribly useless. Wengine wanaona kuwa ni ya thamani sana. Kumbuka, katika "ndio"
; hali, utaona CDR moja, ikiwa na moja ya shabaha za simu upande mmoja, na zile zinazotoka
; kituo kwa upande mwingine, na kisha CDR moja kwa kila chaneli ilijaribu. Hii inaweza kuonekana
; ziada, lakini haiwezi kusaidiwa.
;
; Kwa kifupi, chaguo hili linadhibiti uripoti wa simu ambazo hazijajibiwa ambazo zina A
; chama. Simu zinazotolewa kwa laini inayotoka, lakini hazijibiwi, bado
; imeingia, na hiyo ndiyo tabia iliyokusudiwa. (Pia husababisha baadhi ya CDR za upande wa B kuwa
; matokeo, kwani wana chaneli ya upande B kama chaneli yao ya chanzo, na hakuna marudio
; chaneli.)
;isiyojibiwa = hapana

; Amua ikiwa utaandika simu zilizosongamana au la. Kuweka hii kuwa "ndio" kutafanya
; ripoti kila simu ambayo inashindwa kukamilika kutokana na hali ya msongamano. Chaguomsingi
; ni "hapana".
;msongamano = hapana

; Kwa kawaida, CDR's hazifungiwi hadi baada ya viendelezi vyote kukamilika
; kutekeleza. Kwa kuwezesha chaguo hili, CDR itamalizwa kabla ya kutekelezwa
; kiendelezi cha "h" na vidhibiti vya hangup ili CDR ithamini kama "mwisho" na
; "billsec" inaweza kurejeshwa ndani ya kiendelezi hiki.
; Thamani chaguo-msingi ni "hapana".
;endbeforehexten=hapana

; Kwa kawaida, sehemu ya "billsec" iliyoingia kwenye sehemu za nyuma (faili za maandishi au hifadhidata)
; ni wakati wa mwisho (wakati wa kukatika) toa wakati wa jibu katika sekunde. Ndani
; kinyota huhifadhi wakati katika suala la microseconds na sekunde. Kwa kuweka
; iliyoanzishwa kwa sekunde hadi "ndiyo", unaweza kulazimisha nyota kuripoti sekunde zozote
; ambazo zilianzishwa (aina ya njia ya kuzunguka). Kitaalam, hii ni
; wakati sehemu ya microsecond ya muda wa mwisho ni kubwa kuliko microsecond
; sehemu ya muda wa kujibu, kisha muda wa billsec unaongezwa sekunde moja.
; Thamani chaguo-msingi ni "hapana".
;ilianzisha sekunde=hapana

; Bainisha hali ya bechi ya CDR, ambapo badala ya kuchapisha CDR mwishoni mwa
; kila simu, data itahifadhiwa kwenye bafa ili kusaidia kupunguza mzigo kwenye
; seva ya nyota. Chaguo-msingi ni "hapana".
;
; ONYO LA ONYO
; Matumizi ya modi ya bechi yanaweza kusababisha upotezaji wa data baada ya kusitishwa kwa kinyota kwa njia isiyo salama
; yaani. ajali ya programu, kushindwa kwa nguvu, kuua -9, nk.
; ONYO LA ONYO
;
;kundi=hapana

; Bainisha idadi ya juu zaidi ya CDR za kujilimbikiza kwenye bafa kabla ya kuchapisha
; wao kwa injini za nyuma. "bechi" lazima iwekwe "ndiyo". Chaguomsingi ni 100.
;ukubwa=100

; Bainisha muda wa juu zaidi wa kulimbikiza CDR kwenye bafa kabla ya kuzichapisha
; kwa injini za nyuma. Ikiwa kikomo hiki cha wakati kimefikiwa, basi itachapisha
; rekodi, bila kujali thamani iliyofafanuliwa kwa "ukubwa". "fungu" lazima iwekwe
; "ndio". Kumbuka kwamba wakati ni katika sekunde. Chaguo-msingi ni 300 (dakika 5).
;muda=300

; Injini ya CDR hutumia kipanga ratiba cha kinyota kubainisha wakati wa kuchapisha
; kumbukumbu. Kuchapisha kunaweza kutokea ndani ya uzi wa mpangilio, au mpya
; thread inaweza kuzalishwa kwa ajili ya kuwasilisha kila kundi. Kwa vikundi vidogo,
; inaweza kukubalika kutumia tu uzi wa mpangilio, kwa hivyo weka hii kuwa "ndio".
; Kwa batches kubwa, sema chochote zaidi ya ukubwa = 10, thread mpya inapendekezwa, hivyo
; weka hii kuwa "hapana". Chaguo-msingi ni "hapana".
;ratiba=hapana

; Wakati wa kuzima kinyota, unaweza kuzuia hadi CDR ziwasilishwe. Kama
; hutafanya hivyo, basi data itawezekana kupotea. Unaweza kuangalia ukubwa wa kila wakati
; bafa ya bechi ya CDR yenye amri ya "cdr status" ya CLI. Ili kuwezesha kuzuia
; uwasilishaji wa data ya CDR wakati wa kuzima kwa nyota, weka hii kuwa "ndiyo". Chaguomsingi
; ni "ndiyo".
;safeshutdown=ndiyo

;
;
; KUCHAGUA CDR "NYUMA" (ni aina gani ya pato la kutoa)
;
; Ili kuchagua backend, una kuhakikisha ama kategoria sahihi ni
; imefafanuliwa katika faili hii, au kwamba faili inayofaa ya usanidi ipo, na ina
; ufafanuzi sahihi ndani yake. Ikiwa kuna matatizo yoyote, kwa kawaida, kuingia itakuwa
; ukipuuzwa kimya kimya, na hupati matokeo.
;
; Pia, tafadhali kumbuka kuwa unaweza kutengeneza rekodi za CDR katika umbizo nyingi uwezavyo
; tamani. Ukisanidi miundo 5 tofauti ya CDR, basi kila tukio litawekwa kumbukumbu
; katika maeneo 5 tofauti! Katika faili za usanidi za mfano, fomati zote zimetolewa maoni
; nje isipokuwa kwa umbizo la cdr-csv.
;
; Hapa kuna miisho yote ya nyuma inayowezekana:
;
; csv, desturi, meneja, odbc, pgsql, radius, sqlite, tds
; (pia, mysql inapatikana kupitia viambatanisho vya nyota, kwa sababu ya leseni
; mahitaji)
; (tafadhali kumbuka, pia, kwamba viunga vingine vinaweza kuunda, kwa kuunda
; moduli mpya ya nyuma katika chanzo cdr/ saraka!)
;
; Baadhi ya moduli zinazohitajika ili kutoa viambajengo hivi hazitajengwa au kusakinishwa
; isipokuwa baadhi ya mahitaji ya utegemezi yametimizwa. Mifano ya hii ni pgsql, odbc,
; na kadhalika. Ikiwa haupati pato kama unavyotarajia, jambo la kwanza kufanya
; ni kuendesha amri "fanya menyuselect", na angalia ni moduli zipi zinapatikana,
; kwa kuangalia katika chaguo la "2. Kurekodi Maelezo ya Simu" kwenye menyu kuu. Ikiwa yako
; backend imewekwa alama ya XXX, unajua kuwa amri ya "sanidi" haikuweza kupatikana
; maktaba zinazohitajika kwa chaguo hilo.
;
; Ili kupata CDR ziingizwe kwa plain-jane /var/log/asterisk/cdr-csv/Master.csv
; faili, fafanua kategoria katika faili hii. Hakuna hifadhidata inayohitajika. Mfano
; config husanidiwa ili kutoa aina hii ya pato kwa chaguo-msingi.
;
; Ili kupata rekodi maalum za csv CDR, hakikisha faili ya cdr_custom.conf
; iko, na ina sehemu inayofaa. Faida ya
; kutumia backend hii, ni kwamba unaweza kufafanua ni sehemu zipi za kutoa, na ndani
; utaratibu gani. Kwa chaguo-msingi, usanidi wa mfano huwekwa ili kuiga cdr-csv
; pato. Ikiwa hutafanya mabadiliko yoyote kwenye ramani, kimsingi unazalisha
; kitu sawa na cdr-csv, lakini kutumia mizunguko zaidi ya CPU kufanya hivyo!
;
; Ili kupata matukio ya msimamizi kuzalishwa, hakikisha kuwa faili ya cdr_manager.conf ipo,
; na sehemu hiyo imefafanuliwa, na kutofautisha moja "enabled = ndiyo".
;
; Kwa odbc, hakikisha libs zote zinazofaa zimesakinishwa, ambazo "fanya menyu kuchagua"
; inaonyesha kuwa moduli zinapatikana, na faili ya cdr_odbc.conf ipo, na

;
; Kwa pgsql, hakikisha libs zote sahihi zimewekwa, ambazo "fanya menyuselect"
; inaonyesha kuwa moduli zinapatikana, na faili ya cdr_pgsql.conf ipo, na
; ina sehemu iliyo na vigeu sahihi vilivyofafanuliwa.
;
; Kwa kuingia kwenye hifadhidata za radius, hakikisha libs zote zinazofaa zimesakinishwa, hiyo
; "fanya menyu kuchagua" inaonyesha kuwa moduli zinapatikana, na
; kategoria imefafanuliwa katika faili hii, na katika sehemu hiyo, hakikisha "radiuscfg"
; kutofautisha kunaelekeza vyema kwenye faili iliyopo ya radiusclient.conf.
;
; Kwa kuingia kwenye hifadhidata za sqlite, hakikisha kuwa faili ya "cdr.db" ipo kwenye saraka ya kumbukumbu,
; ambayo kawaida ni /var/log/asterisk. Bila shaka, maktaba zinazofaa zinapaswa kupatikana
; wakati wa operesheni ya "kusanidi".
;
; Kwa ukataji wa tds, hakikisha maktaba zinazofaa zinapatikana wakati wa "kusanidi"
; phase, na hiyo cdr_tds.conf ipo na imewekwa ipasavyo na kategoria.
;
; Pia, kumbuka, kwamba ikiwa ungependa kuweka maelezo ya CDR kwenye hifadhidata, utalazimika kufafanua
; jedwali maalum kwenye hifadhidata hiyo ili kufanya mambo yafanye kazi! Tazama saraka ya hati kwa maelezo zaidi
; jinsi ya kuunda jedwali hili katika kila hifadhidata.

Kinyota hurekodi takwimu kiotomatiki ikiwa moduli ya cdr_csv.so imepakiwa; takwimu huhifadhiwa kwa chaguomsingi katika /var/log/asterisk/cdr-csv/Master.csv. Kimsingi, takwimu hizi ni za kutosha, lakini si rahisi kufanya kazi nayo. Ni rahisi zaidi kuchakata takwimu zilizohifadhiwa kwenye hifadhidata. Ili takwimu ziandikwe kwa MySQL, unahitaji kusakinisha kutoka kwa bandari:

kwanza kuongeza mstari kwenye Makefile:

CFLAGS+=-DMYSQL_LOGUNIQUEID

cd / usr / bandari / wavu / asterisk-addons /
fanya ufungaji kuwa safi

Mwanzoni, mazungumzo ya usanidi yatatokea na kipengee kimoja:

┌───────────────────────────────────── ──────── ──────────────────┐ │ Chaguzi za nyongeza za kinyota 1.4.6_4 │ │───────── ──────── ────────────────────────────────────── ─────┐ │ │ │ [ X] SAMPLE_CONFIG Sakinisha sampuli za faili za usanidi │ │ │ │ │ │ │ │ │ │ ├─└───────—————─ ─ ──────── [Sawa] Ghairi │ └───── ─────────────────────────────── ─────── ── ───────── ─────────────┘

Chagua kipengee hiki; hukuruhusu kuweka mifano ya faili za usanidi. Mifano itakuwa ya manufaa kwetu na tunasubiri moduli ikusanywe.
Kwa kawaida, unapaswa kuwa tayari Seva ya MySQL, wakati wa kukusanya mteja, bandari itatolewa na utegemezi.
Mara tu kila kitu kimewekwa, tunaanza kuweka.
Kwanza kabisa, tutaunda hifadhidata ya kinyota katika MySQL na mtumiaji wa kinyota aliye na neno la siri la nyota-123. Ili kufanya hivyo, unganisha kwa MySQL na utekeleze amri zifuatazo:

mysql -uroot
tengeneza nyota ya hifadhidata;
toa yote kwenye kinyota.* kwa "nyota" @ "localhost" iliyotambuliwa na "asterisk-777" ;

na sasa wacha tuunde jedwali ambalo tutahifadhi habari:


TUMIA kinyota;

TUNZA JEDWALI `cdr` (
` calldate` datetime NOT NULL default "0000-00-00 00:00:00" ,
`clid` varchar(80 ) SIYO chaguo msingi "" ,
` src` varchar(80 ) SI chaguo-msingi NULL "" ,
` dst` varchar(80 ) SI chaguo-msingi NULL "" ,
` dcontext` varchar(80 ) SIO chaguo msingi "" ,
`chaneli` varchar(80 ) SI chaguo-msingi FUTI "" ,
` dstchannel` varchar(80 ) SI chaguo-msingi NULL "" ,
` lastapp` varchar(80 ) SIO chaguo msingi "" ,
` lastdata` varchar(80 ) SI chaguo-msingi NULL "" ,
` duration` int(11 ) SIO NULL chaguo msingi "0" ,
` billsec` int(11 ) SI UFUPI chaguo msingi "0" ,
` disposition` varchar(45 ) SI chaguo-msingi NULL "" ,
` amaflags` int(11) NOT NULL chaguo msingi "0" ,
`accountcode` varchar(20 ) SIO chaguo msingi "" ,
`userfield` varchar(255 ) SIO chaguo msingi "",

` uniqueid` varchar(32 ) SIO BATILI CHAGUO ""

) ;

Kama unavyoona, jedwali hapa chini halina faharasa hata kidogo. Kwa nini? Ndiyo, kila kitu ni rahisi sana, indexes ni recalculated kila wakati rekodi mpya ni kuingizwa, hii kupunguza kasi ya kazi na database. Ikiwa sauti ya simu ni ya juu, hii inaweza kuwa na athari mbaya kwenye kazi. Ikiwa kasi ya ujenzi wa ripoti ni muhimu zaidi kwako (chagua operesheni, sampuli za takwimu), unaweza kuongeza indexes.

tengeneza index cld_idx kwenye cdr(calldate);
tengeneza index src_idx kwenye cdr(src) ;
tengeneza index dst_idx kwenye cdr(dst) ;
tengeneza index acc_idx kwenye cdr(accountcode) ;

Sasa hebu tuanzishe muunganisho kwa MySQL; ili kufanya hivyo, ongeza mipangilio kwenye akaunti yetu ya MySQL katika /usr/local/etc/asterisk/cdr_mysql.conf faili:


[kimataifa]
jina la mwenyeji=mwenyeji wa ndani
dbname=nyota
meza = cdr
nenosiri=nyota-777
mtumiaji=nyota
soksi =/ tmp/ mysql.sock
uwanja wa mtumiaji =1

Na pakia moduli kwenye nyota. Ili kufanya hivyo, unganisha kwa nyota inayoendesha na upakie moduli:
exten => _8.,1 ,MYSQL(Unganisha kinyota kinyota kinyota cha mwenyeji wa ndani-777)
exten => _8.,2 ,Piga(SIP/ prov1/ $(EXTEN) )
exten => h,1 ,MYSQL(Tenganisha $(connid) )

Laini ya mwisho MYSQL(Tenganisha $(connid)) inahitajika, imebainishwa katika kiendelezi h. h ni mshughulikiaji anayeitwa wakati wa hangup, ambayo ni, wakati njia ya mawasiliano imekatwa, au tu wakati mmoja wa wahusika hutegemea.

Kiolesura kinachojulikana zaidi ni SIP. Simu inafanywa na Dial() amri.


exten => 100,1,Piga(DAHDI/1,20,tTr)
kupanua => 100.2,Barua ya sauti( u100@chaguo-msingi)
exten => 100,102,Barua ya sauti( b100@chaguo-msingi)
;
kupanua => 105,1,Piga(SIP/105,20,tTr)
exten => 105,n,Barua ya sauti( u100@chaguo-msingi)
exten => 105,n,Barua ya sauti( b100@chaguo-msingi)

Mfano huu unaonyesha tofauti tofauti vitendo ikiwa simu haitajibiwa. Kwanza, kituo cha DAHDI/1 kinaitwa, ikiwa baada ya sekunde 20 hakuna mtu anayejibu, simu itaelekezwa kwa VoiceMail() na tangazo "msajili hajibu" (u100), ikiwa mteja ana shughuli nyingi, simu itapigwa. kwa kipaumbele N+101, kwa upande wetu ni kipaumbele 102 .

2.2.2 Kuelekeza kwa Kitambulisho cha Mpigaji katika Kinyota

Mfano wa kuelekeza kwa nambari ya simu:


exten => 100/1234567,1,Msongamano
kupanua => 100.1,Piga(DAHDI/1.20)
exten => 100,2,Barua ya sauti(u100)
exten => 100,102,Barua ya sauti(b100)

Ikiwa ugani wa 100 unaitwa, simu inaelekezwa kwa interface ya DAHDI / 1, isipokuwa simu inafanywa na mteja kutoka nambari 1234567. Katika kesi hii, simu imekataliwa. Mfano unaonyesha kuwa kitambulisho cha mpigaji simu kimebainishwa katika fomu "/1234567".

Mfano mwingine wa kuelekeza, sasa kulingana na kutokuwepo kwa CallerID:


exten => 100/,1,Zapateller
kupanua => 100,1,Subiri(1)
ongeza => 100,2,Piga(DAHDI/1)

Katika mfano huu, simu ikiingia bila Kitambulisho cha anayepiga simu, simu itazuiwa kwa kutumia programu ya Zapateller().

2.2.3 Kupigia kundi la simu katika kinyota

Mara nyingi ni muhimu kwa simu kuhamishiwa kwa simu nyingine kwa sababu ya simu ambazo hazijajibiwa. Wacha tuangalie jinsi ya kufanya hivyo kwa kutumia mfano wa "opereta".


kupanua => _X.,1,Piga(DAHDI/1,15)
kupanua => _X.,2,Piga(DAHDI/1&DAHDI/2&DAHDI/3,15)
kupanua => _X.,3,Uchezaji tena(sanduku la barua pepe la kampuni)
exten => _X.,4,Barua ya sauti(100)
exten => _X.,5,Hangup

Simu inakuja kwa DAHDI/1, ikiwa simu iko busy au haijibu ndani ya sekunde 15, simu inakwenda kwa kundi la simu, ikiwa ni pamoja na DAHDI/1. Ikiwa hakuna mtu atakayepokea wakati huu, simu itatumwa kwa barua ya sauti.

2.2.4 Miktadha iliyowekwa

Muktadha mmoja unaweza kujumuisha miktadha mingine iliyochakatwa kwa mpangilio wa kuhesabu.

ni pamoja na => [||||]

Muktadha uliojumuishwa uko wapi
kwa hiari inaweza kutumika:

  • - saa ambazo muktadha ni halali (kwa mfano, saa za kazi 9:00-17:00)
  • -siku za wiki (mon-fri)
  • - siku
  • - miezi


kupanua => _.,1,Piga(SIP/trunk1/$(EXTEN))

kupanua => _8.,1,Piga(SIP/trunk2/$(EXTEN))

ni pamoja na => ndani
ni pamoja na => ndefu

ni pamoja na => ndani

Katika mfano huu, muktadha "local_long" unajumuisha miktadha mingine miwili ya jiji na mawasiliano ya umbali mrefu, na muktadha "ndani_pekee" ni wa mijini pekee.

2.2.5 Simu zinazotoka katika kipiga kinyota

Mwelekeo wa mawasiliano unaotoka unaweza kutekelezwa kwa kufafanua msimbo mfupi wa kufikia (kwa mfano, "9"), au kwa kufafanua kabisa muundo wa nambari zilizopigwa.


kupuuza => 9
exten => _9810.,1,Piga(DAHDI/g2/$(EXTEN:1))
kupanua => _9810.,2,Msongamano
ni pamoja na => umbali mrefu

kupuuza => 9
kupanua => _98XXXXXXXXXX,1,Piga(DAHDI/g2/$(EXTEN:1))
kupanua => _98XXXXXXXXXX,2,Msongamano
ni pamoja na => ndani

kupuuza => 9
kupanua => _9XXXXXX,1,Piga(DAHDI/g2/$(EXTEN:1))
kupanua => _9XXXXXX,2,Msongamano
ni pamoja na => chaguo-msingi

Mfano huu unazingatia miktadha 3 iliyo na haki tofauti za ufikiaji kwa PSTN.

Ujenzi wa "ignorepat => 9" huiambia Nyota isizime toni iliyo tayari baada ya kupiga nambari maalum.

Muktadha hukuruhusu kupiga nambari ya kimataifa iliyo na nambari yoyote ya nambari.
Muktadha - nambari ya umbali mrefu hadi tarakimu 11.
Muktadha - nambari ya jiji hadi tarakimu 7 kwa urefu.

Tofauti ya $(EXTEN:1) huondoa kiambishi awali:

  • $(123456789:1) - inarudisha kamba 23456789
  • $(123456789:-4) - inarudisha kamba 6789
  • $(123456789:0:3) - inarudisha mstari wa 123
  • $(123456789:2:3) - inarudisha mstari wa 345
  • $(123456789:-4:3) - hurejesha kamba 678

2.2.6 Kujibu mtihani wa mashine-echo

Jaribio la kujibu la mashine-echo ni muhimu ili mteja aweze kuiita, kupima ubora wa mawasiliano na utendaji wa vifaa vya mteja wao. Unapopiga nambari yoyote ya ndani (kwa mfano 7000), yafuatayo yatatokea:

  • Tunajibu simu.
  • Faili ya sauti ya salamu iliyotayarishwa awali inachezwa.
  • Sauti ya mpigaji hurekodiwa kwa sekunde chache, kisha inachezwa tena kwa mpigaji.
  • Faili ya sauti iliyotayarishwa awali ya kuaga inachezwa.
  • Maliza simu.

Ili kutekeleza hali hii, ongeza kwenye faili ya extension.conf:

Exten => 7000,1,Jibu() ;Chukua simu
exten => 7000,n,Subiri(2) ;Inasubiri sekunde 2
exten => 7000,n,Uchezaji(/etc/asterisk/sauti/demo-echotest) ;Cheza salamu
exten => 7000,n,Subiri(1) ;Inasubiri sekunde 1
exten => 7000,n,Weka(jina=/etc/asterisk/sauti/rekodi/$(STRFTIME($(EPOCH),%Y-%m-%d__%H-%M-%S))__$( CALLERID(nambari))) ;Weka jina na eneo la faili ya sauti
exten => 7000,n,Rekodi($(fname).gsm,0,10,x) ;Rekodi sauti ya mpigaji kwa sekunde 10
exten => 7000,n,Uchezaji(/etc/asterisk/sauti/beep) ;arifu kuhusu mwisho wa kurekodi sauti kwa mawimbi
exten => 7000,n,Subiri(1) ;Inasubiri
exten => 7000,n,Playback($(fname)) ;Cheza kurekodi sauti
exten => 7000,n,Playback(/etc/asterisk/sauti/demo-echodone) ;Inacheza kwaheri
exten => 7000,n,Subiri(2) ;Inasubiri
exten => 7000,n,Hangup() ;Katisha simu

2.2.7 Ongea wakati wa sasa wa mfumo wa seva

Exten = 060,1,PlayBack(karibu)
exten = 060,n,PlayBack(tarakimu/leo)
exten = 060,n,SayUnixTime(,a)
exten = 060,n,SayUnixTime(,k)
kupanua = 060,n,PlayBack(saa)
exten = 060,n,SayUnixTime(,M)
exten = 060,n,PlayBack(dakika)
exten = 060,n,PlayBack(kwaheri)
exten = 060,n,Hangup()

2.2.8 Kitendaji cha kinasa sauti

Ongeza = 98,1,Jibu ()
exten = 98,n,Rekodi(/tmp/myrecord%d:wav)
kupanua = 98,n,Subiri(1)
exten = 98,n,Uchezaji tena($(RECORDED_FILE))
kupanua = 98,n,Subiri(1)
exten = 98,n,Hangup()

2.2.9 Jinsi ya kuchagua njia inayotakiwa kutoka wakati wa kutumia violezo

Kila muktadha uliofafanuliwa katika mpango wa kupiga simu huambia Nyota jinsi ya kushughulikia nambari za simu zinazopiga ndani ya muktadha huo. Kwa kuwa una uwezo wa kutumia templates wakati wa kufafanua upanuzi, kuna uwezekano kabisa kwamba nambari ya simu inayoitwa inaweza kuhusishwa na sio moja, lakini upanuzi kadhaa katika muktadha. Nyota haitatafuta mlinganisho unaofaa na viendelezi vya kiolezo kwa mpangilio uliouelezea kwenye mpango wa kupiga simu, kwa sababu Kwanza, viendelezi vya kiolezo hupangwa. Kwa hivyo, nyota inaweza isishughulikie kupiga nambari ya simu jinsi ungependa.

Mfano huu unafafanua jinsi Nyota hupanga viendelezi vya violezo na jinsi ya kudhibiti mpangilio huu wa kupanga ili kuhakikisha kuwa Kinyota kinateua kiendelezi unachotaka wakati viendelezi viwili au zaidi vya violezo vinaweza kulingana na nambari inayoitwa. Fikiria muktadha "mfano", kwa mfano, unataka simu kwa nambari zote zinazoanza na 918 kupitia laini ya simu ya analogi iliyounganishwa na kiolesura cha DAHDI/1, na simu zingine zote kupitia kiolesura cha SIP/200. Hebu tuandike mfano:


kupanua => _918.,1,Piga(DAHDI/1/$(EXTEN),tTr)
kupanua => _.,1,Piga(SIP/200/$(EXTEN))
exten => h,1, hangup

Lakini muundo huu haufanyi kazi kama tunahitaji! Utapata kwamba bila kujali nambari iliyopigwa, simu zote zinafanywa kupitia interface ya SIP/200. Ukweli ni kwamba Asterisk kwanza hupanga viendelezi, na kisha tu hutafuta mechi ya kwanza. Ili kuona ni kwa mpangilio gani Nyota hutafuta kiendelezi kinacholingana, andika amri katika kiweko cha Nyota: "onyesha mfano wa kupiga simu" . Utaona kwamba viendelezi vimepangwa kwa mpangilio ufuatao:

1. _.
2. _918.
3.h

Kumbuka kwamba agizo hili si sawa kabisa na ulichofafanua katika faili ya extensions.conf. Ingizo katika orodha hii ni _. ni ya kwanza, na ina maana mechi na nambari yoyote iliyopigwa, ikiwa ni pamoja na nambari zinazoanza na 918. Ni muhimu kuzingatia kwamba ugani h (hangup) pia hautachaguliwa kamwe, kwa kuwa pia utafanana na muundo _.
Kwa hivyo, tunawezaje kulazimisha kinyota kuangalia viendelezi vya violezo kwa mechi katika mpangilio tunaohitaji? Kuna njia ya kutoka - hii ni kutumia maagizo ya pamoja, ikijumuisha katika muktadha wa sasa muktadha mwingine ulio na viendelezi vya kiolezo. Kwa mfano:


jumuisha => mfano-ndogo
exten => h,1, hangup
kupanua => _918.,1,Piga(Zap/1/$(EXTEN))

kupanua => _.,1,Piga(Zap/2/$(EXTEN))

Sasa kinyota (kwa muktadha wa "mfano") kitaangalia nambari ya mechi kwa mpangilio ufuatao:

1. _918.
2. h
3. _.

Je, nyota hufanya nini katika kesi hii:

  • Maingizo marefu ndani ya muktadha wa "mfano" yatahifadhiwa kwanza na, ipasavyo, pia yataangaliwa kwanza.
  • Miktadha iliyojumuishwa ya kila ni pamoja na maagizo yatahifadhiwa kwa mpangilio ambayo yamefafanuliwa.

Miktadha iliyowezeshwa itaangaliwa ili kuona zinazolingana kwa mpangilio zinavyofafanuliwa katika faili ya extensions.conf

2.2.10 Uelekezaji wa Klipu ya Nguvu

Simu zinazoingia kwa kiendelezi cha kupiga simu

Ugani wa kinyota hufanya simu inayotoka kwa simu ya mezani au nambari ya simu. Wakati mpigaji simu wa nje anarudi kwenye laini ya Kinyota CO, simu yake huelekezwa moja kwa moja hadi kwenye kiendelezi cha kinyota. Kuamua nambari ya ndani ya mpigaji simu, hifadhidata ya kawaida ya MySQL asteriskcdrdb inatumiwa, ambayo imeundwa na kiolesura cha wavuti cha FreePBX.


kupanua => _X.,1,Weka(CHANNEL(lugha)=ru)
kupanua => _X.,n,Weka(CALLID=$(CALLERID(namba):-11))
exten => _X.,n,MYSQL(Unganisha connidcdr localhost userdb passworddb asteriskcdrdb utf8);; Wote PIGA SIMU
exten => _X.,n,MYSQL(Query resultidcdr $(connidcdr) CHAGUA *KUTOKA cdr WAPI dst LIKE "%$(CALLID)%" ORDER BY calldate DESC)
;; MAJIBU PIGA SIMU TU
;;exten => _X.,n,MYSQL(Query resultidcdr $(connidcdr) CHAGUA *KUTOKA cdr WAPI dst LIKE "%$(CALLID)%" NA uweke KAMA "HAKUNA JIBU" ORDER BY calldate DESC)
;;
exten => _X.,n,MYSQL(Leta imechukuliwa $(resultidcdr) accid calldate clid src dst)
kupanua => _X.,n,Weka(nambari=$(src))
exten => _X.,n,NoOp(mpigaji --> $(clid) callee --> $(dst))
exten => _X.,n,GOTOIF($["$(dst)" = ""]?nodst:dst)
exten => _X.,n(dst),MYSQL(Futa $(resultidcdr))
kupanua =>
kupanua => _X.,n,Piga(SIP/$(namba),20,tT)
exten => _X.,n,GotoIf($["$(DIALSTATUS)" = "BUSY"]?nodst)
exten => _X.,n,GotoIf($["$(DIALSTATUS)" = "NOANSWER"]?nodst)
exten => _X.,n,GotoIf($["$(DIALSTATUS)" = "IMESHINDWA"]?nodst)
exten => _X.,n(nodst),MYSQL(Futa $(resultidcdr))
exten => _X.,n,MYSQL(Tenganisha $(connidcdr))
exten => _X.,n,Goto(from-trunk,$(DID),1)
kupanua => h,1, hangup()

Sampuli za data kwa dakika 120 zilizopita

CHAGUA * KUTOKA cdr WAPI dst LIKE "%$(CALLID)%" NA tarehe ya simu >= DATE_SUB(SASA(), MUDA DAKIKA 120) AGIZA BY calldate DESC;

au katika masaa matatu:

CHAGUA * KUTOKA cdr WAPI dst LIKE "%$(CALLID)%" NA tarehe ya simu >= DATE_SUB(SASA(), MUDA SAA 03) AGIZA BY calldate DESC;

Pato la koni ya nyota wakati wa kuelekeza kupitia hifadhidata ya cdr:

Utekelezaji [ 3216111@kutoka-samsung:1] Goto("SIP/samsung-00001694", "dynamic_did,3216111,1") katika rafu mpya
-- Goto (dynamic_did,1111,1)
--Utekelezaji [ 3216111v@dynamic_did:1] Weka("SIP/samsung-00001694", "CHANNEL(lugha)=ru") katika rafu mpya
--Utekelezaji [ 3216111@dynamic_did:2] Weka("SIP/samsung-00001694", "CALLID=8129981138 ") katika rafu mpya
--Utekelezaji [ 3216111@dynamic_did:3] MYSQL("SIP/samsung-00001694", "Unganisha connidcdr localhost userdb passworddb asteriskcdrdb utf8") kwenye mrundikano mpya
--Utekelezaji [ 3216111@dynamic_did:4] MYSQL("SIP/samsung-00001694", "Hoja resultidcdr 11 CHAGUA * KUTOKA cdr WAPI dst LIKE "%8129981138%" NA calldate >= DATE_SUB(SASA(), INTERVAL 03 HOUR)") katika rafu mpya
--Utekelezaji [ 3216111@dynamic_did:5] MYSQL("SIP/samsung-00001694", "Leta fetchid 12 accid calldate clid src dst") katika mrundikano mpya
ONYO: app_mysql.c:498 aMYSQL_fetch: ast_MYSQL_fetch: Nyuga nyingi (24) kuliko viasili (5)
--Utekelezaji [ 3216111@dynamic_did:6] Weka("SIP/samsung-00001694", "nambari=1000") katika rafu mpya
--Utekelezaji [ 3216111@dynamic_did:7] NoOp("SIP/samsung-00001694", "aliyepiga --> 1000 waliopiga --> 8129981138") katika rundo jipya
--Utekelezaji [ 3216111@dynamic_did:8] GotoIf("SIP/samsung-00001694", "0?nodst:dst") katika mrundikano mpya
-- Goto (dynamic_did,1111,9)
--Utekelezaji [ 3216111@dynamic_did:9] MYSQL("SIP/samsung-00001694", "Futa 12") kwenye rafu mpya
--Utekelezaji [ 3216111@dynamic_did:10] MYSQL("SIP/samsung-00001694", "Tenganisha 11") kwenye rafu mpya
--Utekelezaji [ 3216111@dynamic_did:11] Piga("SIP/samsung-00001694", "SIP/1000,20,tT") katika rafu mpya

2.2.11 Kuingiza mawimbi ya DTMF kutoka kwa vitufe vya simu na kuandika data kwa faili ya maandishi.

Mpigaji huingia kwenye ishara za dtmf, nambari zilizopigwa zimeandikwa kwa faili ya maandishi.

Ongeza => s,1,Jibu()
exten => s,2,Uchezaji(msimbo wa ufikiaji)
exten => s,3,Soma(myvar,beep,6,15)
exten => s,n,SayDigits($(myvar))
exten => s,n,Weka(CDR(userfield)=$(myvar))
exten => s,n,Verbose($(myvar))
exten => s,n,System(echo "$(CALLERID(num))" - "$(myvar)" >> /var/log/asterisk/test)

Maelezo ya hatua za muktadha:

  • Jibu - jibu simu (anzisha muunganisho)
  • Uchezaji - cheza ujumbe wa kawaida (ingiza msimbo).
  • Soma - soma data iliyoingizwa na mtumiaji na uihifadhi kwa tofauti ya $myvar
  • SayDigits - zungumza data iliyohifadhiwa katika tofauti.
  • Weka / kazi "CDR" - hifadhi data kutoka kwa kutofautiana katika CDR ya uwanja wa mtumiaji.
  • Verbose - pato data kutofautiana kwa console na logi.
  • Mfumo - andika data kwa njia tofauti kwa faili ya maandishi kwenye mstari mpya.

2.2.12 Kuingiza mawimbi ya DTMF kutoka kwa vitufe vya simu na kuhifadhi kwenye hifadhidata ya MySQL

Exten => s,n,Thibitisha(/tmp/pass,a)
exten => s,n,Uchezaji tena(/var/lib/asterisk/sauti/desturi/data)
exten => s,n,Soma(data,beep,3,15)
exten => s,n,SayDigits($(data))
exten => s,n,MYSQL(Unganisha jaribio la jaribio la mwenyeji wa ndani)
exten => s,n,MYSQL(Matokeo ya hoja $(connid) WEKA _$(myvar) WEKA callerid=$(CALLERID(jina)), data=$(data), date=$(STRFTIME($(EPOCH) ,%C%y%m%d%H%M)))
exten => s,n,MYSQL(Futa $(connid))

Sawa na mfano uliopita, ni data pekee iliyohifadhiwa katika MYSQL.

MYSQL(Unganisha connid dhhost[:dbport] dbuser dbpass dbname ) - unganisha kwenye hifadhidata
MYSQL (Matokeo ya swali $(connid) - andika data kwenye hifadhidata
MYSQL (Futa $ (matokeo)) - kumbukumbu wazi

2.2.13 Kuweka kikomo idadi ya simu zinazopigwa kwa wakati mmoja kwa nambari iliyopigwa

  • Nambari 810ХХХХХХХХ imepigwa, ujumbe unaonyeshwa kwenye console: Upigaji wa nyota 810ХХХХХХХХ
  • GROUP() kazi hupeana simu kwa kikundi kirefu
  • Ujumbe unaonyeshwa kwenye dashibodi: Idadi ya simu zinazopigwa kwa wakati mmoja ni $(GROUP_COUNT(nde)), ambapo $(GROUP_COUNT(nde) = nambari ya mfuatano wa simu.
  • Hali imeangaliwa, ikiwa idadi ya simu zinazopigwa kwa wakati mmoja ni kubwa kuliko 1, simu inatumwa kwa kiendelezi cha 666 na kukatwa kwenye pato la kiweko: Idadi ya simu zinazopigwa kwa wakati mmoja ni 2 zaidi ya kikomo.
  • Ikiwa simu ni ya kwanza, nambari hiyo inapigwa kupitia shina la SIP la mtoa huduma.

    Exten => _810.,1,Verbose(1,***** Nyota inapiga $(EXTEN) *******)
    sawa => n,Weka(GROUP()=refu)
    sawa => n,Verbose(1,**** Idadi ya simu zinazotumika kwa wakati mmoja ni $(GROUP_COUNT(ndefu)))
    sawa => n,GotoIf($[$(GROUP_COUNT(long)) > 1]?666)
    sawa => n,Weka(CDR(userfield)=unblocked$(EXTEN))
    sawa => n,Piga(SIP/mtoa huduma/$(EXTEN),60)
    sawa => 666,Verbose(1,***Nambari ya simu zinazotumika kwa wakati mmoja ni $(GROUP_COUNT(nde)) zaidi ya kikomo)
    sawa => n,Weka(DIALSTATUS=CHANUNAVAIL)

    2.2.14 Vigogo wa akiba na LCR (uteuzi wa mwelekeo wa simu zinazotoka kwa gharama ya chini zaidi)

    Ni muhimu sana kusanidi LCR (Njia ndogo ya Pwani) na uelekezaji kwingine ikiwa kuna hitilafu ya njia ya nje.


    kupanua => _98XXXXXXXXXX,1,Piga(DAHDI/g2/$(EXTEN:1))
    kupanua => _98XXXXXXXXXX,2,Msongamano()

    kupanua => _98495XXXXXX,1,Piga(IAX/shina/$(EXTEN:1),tTr)
    exten => _98495XXXXXXX,n,Piga(DAHDI/g2/$(EXTEN:1))
    kupanua => _98495XXXXXXX,n,Msongamano()

    ni pamoja na => low_rate_moscow
    ni pamoja na => umbali mrefu

    Katika mfano huu, simu za umbali mrefu zinaelekezwa kwenye kiolesura cha DAHDI, lakini simu kwenda Moscow hupitishwa kupitia mtoa huduma mwenye faida zaidi kwenye shina la IAX. Ikiwa shina la IAX halipatikani, simu huelekezwa kwingine kupitia DAHDI.

    Moja ya sifa maarufu (au labda zisizopendwa) za mfumo wowote wa simu wa kisasa ni barua ya sauti. Kwa kawaida, kinyota ina mfumo wa barua ya sauti unaonyumbulika. Miongoni mwa uwezo wake tunaweza kutaja:

    • Sanduku za barua za sauti zilizolindwa kwa ukubwa usio na kikomo, kila moja ikiwa na folda za barua Kwa
    • kuandaa ujumbe wa sauti.
    • Salamu tofauti kwa majimbo yenye shughuli nyingi na zisizopatikana.
    • Salamu za kawaida na maalum.
    • Uwezo wa kuunganisha simu kwa visanduku vingi vya barua, na visanduku vya barua kwa simu nyingi.
    • Arifa ya kupokea ujumbe wa sauti kupitia barua pepe yenye uwezo wa kuambatisha ujumbe wa sauti
    • barua kama faili ya sauti.
    • Usambazaji na utangazaji wa barua ya sauti.
    • Kiashiria cha Kusubiri Ujumbe (taa inayowaka
    • au toni ya vipindi) katika aina nyingi za simu.
    • Orodha ya masanduku ya barua ya sauti kwa wafanyikazi wa kampuni.

    Usanidi wa barua ya sauti umefafanuliwa katika faili ya usanidi ya voicemail.conf. Faili hii ina mipangilio ambayo inaweza kutumika kurekebisha mfumo wa barua za sauti kulingana na mahitaji yako mahususi.

    Kuunda visanduku vya barua - Katika kila muktadha wa barua ya sauti, visanduku tofauti vya barua hufafanuliwa. Sintaksia ifuatayo inatumika kuelezea kisanduku cha barua:
    mailbox => nenosiri, jina[,barua pepe[,barua pepe_pager[,chaguo]]]
    Hebu tueleze madhumuni ya kila sehemu ya maelezo ya kisanduku cha barua:

    • kisanduku cha barua - Hii ndio nambari ya kisanduku cha barua. Kawaida hii inalingana na nambari ya ugani ya seti ya simu inayohusishwa nayo.
    • nenosiri - Nenosiri la nambari ambalo litatumiwa na mmiliki wa kisanduku cha barua kufikia ujumbe wake wa sauti. Mtumiaji akibadilisha nenosiri lake, mfumo husasisha sehemu hii katika faili ya voicemail.conf.
    • jina - Hili ni jina la mmiliki wa kisanduku cha barua. Maandishi katika uga huu yanatumika katika saraka ya simu ya kampuni ili kuruhusu waliojisajili kutumia majina ya watumiaji wanapopiga simu.
    • barua pepe - Hii ni barua pepe ya mmiliki wa kisanduku cha barua ya sauti. Nyota inaweza kutuma arifa za barua ya sauti (pamoja na ujumbe wa sauti yenyewe) kwa akaunti maalum ya barua pepe.
    • pager_email - Hii ni barua pepe ya paja au simu ya mkononi ya mmiliki wa kisanduku cha barua ya sauti. Nyota inaweza kutuma ujumbe mfupi kukujulisha kuwa ujumbe wa sauti umepokelewa anwani iliyopewa Barua pepe.
    • chaguzi - Hii ni orodha ya chaguzi zinazoamua eneo la saa ambalo mmiliki wa kisanduku cha barua yuko na kubatilisha mipangilio ya kimataifa barua ya sauti. Kuna chaguo tisa halali: ambatisha, sevamaili, tz, saycid, kagua, opereta, callback, dialout, na exitcontext. Chaguzi hizi zinatambuliwa na chaguo=jozi za thamani zilizotenganishwa na vibambo vya bomba (|). Chaguo la tz huweka saa za eneo la mtumiaji kwa eneo la saa lililofafanuliwa mapema katika sehemu ya faili ya voicemail.conf. Chaguo nane zilizosalia zinabatilisha mipangilio ya kimataifa ya barua ya sauti inayolingana na majina yao.

    Hapa kuna maelezo ya kawaida ya kisanduku cha barua:

    101 => 1234, Joe Public, [barua pepe imelindwa] ,[barua pepe imelindwa],tz=katikati|ambatanisha=ndio

    Tukiendelea na uundaji wa mpango wetu wa kupiga simu kutoka sura ya mwisho, hebu tutengeneze visanduku vya sauti kwa ajili ya John na Jane. Hebu tufafanue nenosiri la John kama 1234, na kwa Jane kama 4444 (kumbuka, hii inafanywa katika faili ya voicemail.conf, si katika extensions.conf):


    101 => 1234,John Doe, [barua pepe imelindwa] ,[barua pepe imelindwa]
    102 => 4444, Jane Doe, [barua pepe imelindwa] ,[barua pepe imelindwa]

    Kuongeza Ujumbe wa Sauti kwenye Dialplan - Kwa kuwa sasa tumeunda visanduku vya barua kwa ajili ya Jane na John, hebu tuwaruhusu wanaopiga simu kuwaachia ujumbe ikiwa hawatajibu simu. Ili kufanya hivyo, tutatumia programu ya VoiceMail(). Programu ya VoiceMail() huelekeza mpigaji simu kwenye kisanduku cha barua kilichobainishwa ili aweze kuacha ujumbe. Sanduku la barua lazima lifafanuliwe kama: mailbox@context, ambapo muktadha ni jina la muktadha wa barua ya sauti. Herufi b au u pia zinaweza kuongezwa hapa ili kuomba aina ya salamu. Ikiwa herufi b inatumiwa, mteja atasikia ujumbe kwamba mmiliki wa kisanduku cha barua ana shughuli nyingi. Ikiwa herufi u inatumiwa, mpigaji simu atasikia ujumbe unaoonyesha kuwa mmiliki wa kisanduku cha barua (ikiwa yupo) hapatikani. Wacha tuitumie hii katika mpango wetu wa kupiga simu. Hapo awali, mstari ufuatao ulikuwa katika muktadha, ukitoa uwezo wa kumwita John:

    Ongeza => 101.1,Piga($(JOHN))

    Sasa hebu tuongeze ujumbe ambao haupatikani ambao mpigaji simu atasikia ikiwa John hatajibu simu ndani ya sekunde 10.
    Kumbuka, hoja ya pili kwa programu ya Dial() ni kuisha. Ikiwa simu haitajibiwa kabla ya muda kuisha, simu itatumwa kwa kipaumbele kinachofuata. Hebu tuweke muda wa kuisha kuwa sekunde 10 na tuongeze kipaumbele ili kumhamisha mteja kwenye ujumbe wa sauti ikiwa John hatajibu simu kwa wakati:

    Ongeza => 101,1,Piga($(JOHN),10)
    exten => 101,n,VoiceMail( 101@chaguo-msingi, u)

    Sasa hebu turekebishe hili ili kama John yuko busy (kwenye simu nyingine), mpigaji simu aelekezwe kwenye ujumbe wa sauti, ambapo anasikia ujumbe wenye shughuli nyingi. Ili kufanya hivyo, tutatumia kutofautisha kwa $(DIALSTATUS), ambayo ina moja ya maadili ya hali (orodha ya maadili yote yanaweza kupatikana kwenye koni ya Asterisk kwa kutumia amri "msingi wa onyesho la kupiga simu"):

    Ongeza => 101,1,Piga($(JOHN),10)
    exten => 101,n,GotoIf($["$(DIALSTATUS)" = "BUSY"]?busy:inavail)
    exten => 101,n(haipatikani),Ujumbe wa sauti( 101@chaguo-msingi, u)
    exten => 101,n,Hangup()
    exten => 101,n(busy),VoiceMail( 101@chaguo-msingi,b)
    exten => 101,n,Hangup()

    Wapigaji simu sasa watapokea ujumbe wa sauti wa John (pamoja na salamu zinazofaa) ikiwa John ana shughuli nyingi au hapatikani. Walakini, bado kuna shida ndogo - John hana uwezo wa kurejesha ujumbe wake. Hebu turekebishe hili.

    Ufikiaji wa Ujumbe wa Sauti - Watumiaji wanaweza kuepua ujumbe wao wa barua ya sauti, kubadilisha chaguo na kurekodi salamu za barua ya sauti kwa kutumia programu ya VoiceMain(). Katika fomu yake ya kawaida ya maombi, VoiceMailMain() inaitwa bila hoja. Hebu tuongeze kiendelezi cha 700 kwenye muktadha wa dialplan ili watumiaji wa ndani waweze kupiga simu ili kufikia ujumbe wao wa sauti:

    Ongeza => 700,1,VoiceMainMain()

    Kuunda saraka ya simu ya kupiga nambari kwa jina - Kuna kipengele kimoja cha mwisho muhimu cha mfumo wa sauti Barua ya nyota- saraka ya simu kwa kupiga nambari kwa jina. Inaundwa kwa kutumia Directory() maombi. Programu hii, kwa kutumia majina yaliyotajwa katika maelezo ya kisanduku cha barua katika faili ya voicemail.conf, humpa mteja orodha ya simu ya wanaojisajili kwa PBX kwa ajili ya kupiga nambari kwa jina.

    Directory() inachukua hoja tatu: muktadha wa barua ya sauti ambayo majina husomwa, muktadha wa dialplan ambamo inaitwa.
    mtumiaji (hiari), na kamba ya chaguzi (pia ni hiari). Kwa chaguo-msingi, Directory() hutafuta mtumiaji kwa jina la mwisho.
    Ikiwa chaguo la f limepitishwa, utafutaji unafanywa kwa jina. Wacha tuongeze saraka mbili za kupiga nambari kwa jina katika muktadha wa yetu
    sampuli ya kupiga simu ili waliojisajili watafute kwa jina la kwanza au la mwisho:

    Ongeza => 8,1, Saraka(chaguomsingi, zinazoingia,f)
    exten => 9,1, Saraka(chaguomsingi, zinazoingia)

    Wasajili wakibonyeza kitufe cha 8, watapokea saraka iliyokusanywa kwa jina. Ikiwa watapiga 9, watapokea saraka iliyokusanywa kwa jina la mwisho.

    2.2.16 Zapateller()

    Zapateller() ni programu rahisi ya Kinyota ambayo hucheza sauti maalum ya habari mwanzoni mwa simu. Vipiga simu kiotomatiki (vinavyotumika sana katika mifumo ya uuzaji wa simu) hukubali toni hii kama ishara ya kukatwa. Na wao
    Sio tu kwamba watakatisha simu, lakini pia wataashiria nambari kuwa haitumiki, ambayo itasaidia kuzuia aina zote za simu za uuzaji kwa njia ya simu. Ili kutumia utendakazi huu kwenye kipiga simu chako, unaita tu Zapateller() programu.

    Pia tunatumia chaguo la hiari la nocallerid ili toni ichezwe ikiwa tu simu inayoingia haitoi maelezo ya Kitambulisho cha Anayepiga. Hapa kuna mfano wa kutumia Zapateller() katika kiendelezi cha muktadha:


    exten => s,1,Zapateller(nocallerid)
    exten => s,n,Uchezaji (ingiza-nje-ya-mtu)

    2.2.17 Hifadhi ya Simu

    Kipengele kingine cha urahisi ni maegesho ya simu. Inatoa uwezo wa kusimamisha simu na kuisimamisha ili iweze kujibiwa katika kiendelezi kingine. Mipangilio yote ya maegesho ya simu (kama vile viendelezi vya kutumia, idadi ya viti, n.k.) imewekwa katika faili ya usanidi ya features.conf. Sehemu ya features.conf ya faili ina mipangilio minne kuhusu maegesho ya simu:

    • parkext - Hii ndio nambari ya ugani ya maegesho. Hamishia simu kwa kiendelezi hiki na mfumo utakuambia ni nafasi gani ya maegesho. Nambari chaguo-msingi ya upanuzi wa maegesho ni 700.
    • parkpos - Chaguo hili huamua idadi ya nafasi za maegesho. Kwa mfano, kwa kutaja nambari 701-720, utaunda maeneo 20 ya maegesho yenye nambari 701-720.
    • muktadha - Hili ndilo jina la muktadha wa maegesho. Ili uweze kuegesha simu, lazima uwashe muktadha huu.
    • muda wa maegesho - Ikiwa chaguo hili limewekwa, huamua muda gani (kwa sekunde) simu inaweza kubaki kwenye kura ya maegesho. Ikiwa simu haijajibiwa ndani ya muda uliowekwa, simu inapigwa kwa nambari ya ugani ambayo simu ilikuja kwenye kura ya maegesho.

    Baada ya kuhariri faili ya features.conf, lazima uanzishe upya Kinyota kwa sababu faili hii inasomwa tu wakati mfumo unapowashwa. Kuendesha amri ya kupakia upya hakutasoma faili ya features.conf.

    Pia kumbuka kuwa kwa sababu mtumiaji anahitaji kuwa na uwezo wa kuhamisha simu kwa kiendelezi cha maegesho, programu ya Dial() lazima itumie chaguo za t na/au T.

    Kwa hivyo, wacha tuunde mpango rahisi wa kuonyesha maegesho ya simu:


    ni pamoja na => simu zilizoegeshwa
    kupanua => 103,1,Piga(SIP/Bob,tT)
    kupanua => 104,1,Piga(SIP/Charlie,tT)

    Hebu tuonyeshe kanuni ya wito wa maegesho. Wacha tuseme Alice anapigia simu mfumo na kupiga kiendelezi 103 ili kuzungumza na Bob. Baada ya muda, Bob anahamisha simu hiyo hadi ugani 700, ambayo inamwambia kwamba simu kutoka kwa Alice iliegeshwa kwenye sehemu ya 701. Kisha Bob anampigia simu Charlie katika ugani 104 na kumwambia kwamba Alice anasubiri kwa 701. Charlie anapiga ugani 701 na kuzungumza naye. Alice. Hii ni njia rahisi na nzuri ya kuwezesha ubadilishaji wa mpigaji simu kati ya watumiaji wa mfumo.
    Dial()'s t na hoja za T hazihitajiki kwa aina zote za vituo. Kwa mfano, simu nyingi za SIP hutekeleza hili kwa kutumia kipengele au kitufe cha kawaida na kuashiria SIP.

    2.2.18 Kuandaa simu ya mkutano kwa kutumia MeetMe()

    Kipengele muhimu vile vile ni kuanzisha simu ya sauti ya mkutano kwa kutumia programu ya MeetMe(). Programu hii inaruhusu watumiaji wengi kuwasiliana kwa wakati mmoja kana kwamba wote walikuwa katika sehemu moja. Kazi kuu ni pamoja na:

    • Uwezo wa kuunda mikutano iliyolindwa na nenosiri.
    • Utawala wa mkutano (kunyamaza kwa mkutano, kuzuia mkutano, kutengwa kwa washiriki).
    • Chaguo la kunyamazisha washiriki wote isipokuwa mmoja (muhimu kwa matangazo ya kampuni, matangazo, n.k.).
    • Uundaji wa mikutano tuli au inayobadilika.

    Wacha tupitie mchakato wa kusanidi chumba cha msingi cha mkutano hatua kwa hatua. Chaguo za usanidi za mfumo wa mikutano wa MeetMe ziko katika faili ya meetme.conf. Faili hii ya usanidi hubainisha vyumba vya mikutano na manenosiri ya hiari ya nambari. (Kama
    nenosiri limewekwa, itahitajika kuingia mikutano yote iliyofanyika kwa kutumia chumba hiki cha mkutano.) Kwa mfano wetu, tutaweka chumba cha mkutano katika ugani 600. Kwanza, tutaweka mipangilio yote katika faili ya meetme.conf. Tupigie simu chumba hiki cha mikutano
    600 na wakati huu hatutaweka nenosiri:


    conf => 600

    Mara tu unapomaliza kufanya kazi na faili ya usanidi, unahitaji kuwasha upya kinyota ili iweze kusoma faili ya meetme.conf tena. Kisha, tutaongeza usaidizi wa chumba cha mkutano kwenye dialplan kwa kutumia programu ya MeetMe(). MeetMe() inachukua hoja tatu: jina la chumba cha mkutano (lililowekwa katika meetme.conf), seti ya chaguo, na nenosiri ambalo mtumiaji lazima aingie ili kujiunga na mkutano. Wacha tuanzishe mkutano rahisi kwa kutumia chumba cha mkutano 600, chaguo la i (ambalo hutoa tahadhari wakati mtu amejiunga au kuondoka kwenye mkutano) na nenosiri 54321:

    Exten => 600,1,MeetMe(600,i,54321)

    Wapigaji simu wanapofikia kiendelezi cha 600, wataombwa kuweka nenosiri. Ikiwa wataingia 54321 kwa usahihi, watakubaliwa kwenye mkutano.
    Nyingine maombi muhimu- MeetMeCount() . Kama jina lake linavyopendekeza, programu hii huhesabu idadi ya watumiaji
    katika chumba kimoja au kingine cha mikutano. Inahitaji hoja mbili: chumba cha mkutano ambapo idadi ya washiriki inapaswa kuhesabiwa, na jina la hiari la kigezo cha kuhifadhi nambari hii. Ikiwa hoja ya pili, ambayo ni, jina la kutofautisha, haijatolewa, nambari inayosababishwa inachezwa kwa mpigaji:

    Exten => 601,1,Playback(conf-thereare)
    exten => 601,n,MeetMeCount(600)
    exten => 601,n,Playback(conf-peopleinconf)
    Ikiwa kigezo kitapitishwa kama hoja ya pili kwa MeetMeCount(), jumla ya idadi ya washiriki imepewa kigezo hiki, na nambari yenyewe.
    haichezeki. Hivi ndivyo unavyoweza kupunguza idadi ya washiriki:
    ; punguza chumba cha mkutano kwa washiriki 10
    exten => 600,1,MeetMeCount(600,CONFCOUNT)
    exten => 600,n,GotoIf($[$(CONFCOUNT) 600,n(meetme),MeetMe(600,i,54321)
    exten => conf_full,1,Playback(conf-full)

    2.2.19 simu 3 (au zaidi) ya karamu kwenye kinyota kwa kutumia ConfBridge()

    Mpangilio huu hukuruhusu kupiga simu ya n-way kwenye kinyota kwa kutumia programu ya ConfBridge.
    Suluhisho ni urekebishaji wa suluhu la kufanya kazi na ConfBridge (programu mpya ya mkutano wa kinyota kuliko MeetMe, ambayo pia haitegemei moduli ya DAHDI).
    Ili mpango huu ufanye kazi, kinyota lazima kiwe na moduli za app_confbridge.so na chan_bridge.so.

    Maelezo ya utendaji

    Msimbo *0 huongezwa kwenye misimbo ya huduma ya Kinyota (lazima ifafanuliwe katika faili ya features.conf na kuongezwa kwa kigezo cha DYNAMIC_FEATURES). Msimbo wa huduma *0 husababisha utekelezaji wa mwanzo-msingi wa jumla, ambao huanzisha mkutano wenye jina kama UNIQUEID kwa simu ya sasa na kuelekeza kwingine mteja ambaye si mwanzilishi wa mkutano huo hadi kwenye mkutano ulioundwa. Baada ya hayo, msajili aliyeanzisha mkutano ana fursa ya kuongeza mshiriki wa 3 kwenye mkutano.

    Misimbo ifuatayo ya huduma inapatikana kwa mteja anayeongeza mshiriki mpya kwenye mkutano:

    • ** - kata simu, usiongeze mtu aliyeitwa kwenye mkutano
    • # - ongeza mtu aliyeitwa kwenye mkutano

    Baada ya kutekeleza misimbo yoyote kati ya hizi za huduma, mteja aliyeongeza mshiriki mpya anarudi kwenye mkutano. Wasajili wote kwenye mkutano wanaweza kufikia nambari ya huduma *0. Baada ya kutekeleza nambari hii, aliyejiandikisha huondoka kwenye mkutano, anapata fursa ya kuongeza mshiriki kwenye mkutano, kisha anarudi kwenye mkutano. Idadi ya simu za wakati mmoja za n-party na washiriki wao imepunguzwa tu na utendakazi wa seva.

    1) Mipangilio ya ConfBridge: confbridge.conf


    aina = mtumiaji
    aina = mtumiaji
    aina = menyu
    *0 = kuondoka_kongamano

    2) Dialplan: extensions.conf


    exten => s,1,ChannelRedirect($(BRIDGEPEER),njia-conf,$(CONFNO),1)
    ;

    exten => s,1,Soma(NEW_CALLEE,piga,20,i)

    sawa =>

    sawa =>
    sawa =>
    sawa =>
    sawa =>
    sawa => n,Piga( Ndani/$(NEW_CALLEE)@kutoka-ndani,gH)
    sawa =>
    sawa => n,ChannelRedirect($(CHANNEL(jina)),way-conf,$(CONFNO),1)
    ;

    exten => _X.,1,Jibu
    sawa => n,Weka(__CONFNO=$(EXTEN))
    sawa => n,Weka(DYNAMIC_FEATURES=$(DYNAMIC_FEATURES_NWAY))
    sawa => n,Weka(CONFBRIDGE(bridge,language)=$(CHANNEL(lugha)))
    sawa => n,Weka(CONFBRIDGE(mtumiaji,tangaza_hesabu_ya_mtumiaji)=hapana)
    sawa => n,Weka(CONFBRIDGE(mtumiaji,tangaza_jiunge_ondoka)=hapana)
    sawa => n,Weka(CONFBRIDGE(mtumiaji,tangaza_mtumiaji_tu)=hapana)
    sawa => n,Weka(CONFBRIDGE(mtumiaji,muziki_unaposhikilia_wakati_utupu)=ndiyo)
    sawa => n,ConfBridge($(CONFNO),njia_menu)
    sawa => n,Nenda(njia-alika,s,1)
    ;

    exten => s,1,Weka(__CONFNO=$(UNIQUEID))
    sawa => n,ChannelRedirect($(BRIDGEPEER),njia-conf,$(CONFNO),1)
    sawa => n,Soma(NEW_CALLEE,piga,20,i)
    ; Ongeza vipengele vinavyobadilika vya mwaliko wa n-way
    sawa => n,Weka(DYNAMIC_FEATURES=$(DYNAMIC_FEATURES_NWAYINV))
    ; Bainisha muktadha wa upigaji simu na upiga
    sawa => n,ExecIf($[$(REGEX("H" $(DIAL_OPTIONS)))) = 0]?Weka(_DIAL_OPTIONS=$(DIAL_OPTIONS)H))
    sawa => n,Weka(CALLER=$(CALLERID(namba)))
    sawa => n,Weka(DIALOUT_CONTEXT=$(SIPPEER($(CALLER),muktadha)))
    sawa => n,ExecIf($["$(DIALOUT_CONTEXT)" = ""]?Weka(DIALOUT_CONTEXT=kutoka-ndani))
    sawa => n,Piga( Karibu/$(NEW_CALLEE)@$(DIALOUT_CONTEXT),gH)
    sawa => n,Weka(DYNAMIC_FEATURES=$(DYNAMIC_FEATURES_NWAY)) n,ChannelRedirect($(CHANNEL(jina)),way-conf,$(CONFNO),1)

    3) Misimbo ya huduma ya nyota: vipengele.conf


    tenganisha=**
    nway-start => *0,self,Macro,way-start
    nway-ok => #,mwenyewe/mpigia simu,Makro,njia-sawa>

    Ongeza kwenye faili ya extensions.conf


    DYNAMIC_FEATURES = kipengele1#feature2#njia-start
    DYNAMIC_FEATURES_NWAY = kipengele1
    DYNAMIC_FEATURES_NWAYINV = kipengele2#njia-sawa

    Maelezo ya vigezo:

    • tenganisha - msimbo wa kawaida wa huduma ya Kinyota unaosababisha simu ya sasa kukatika. kipengele1, kipengele2 - misimbo mingine maalum ya huduma iliyosanidiwa kwenye Kinyota (misimbo tofauti ya huduma inaweza kupatikana katika hatua tofauti za mkutano)
    • DYNAMIC_FEATURES_NWAY - misimbo ya huduma inapatikana wakati wa simu ya n-way
    • DYNAMIC_FEATURES_NWAYINV - misimbo ya huduma inapatikana wakati wa mwaliko wa simu ya n-way

    2.2.20 Kurekodi mazungumzo ya simu katika umbizo la (.wav).

    Kurekodi mazungumzo ni utendaji rahisi kabisa. Unaweza kusikiliza kila wakati nani alisema nini kwa nani. Usanidi sio ngumu, jumuisha tu vitendaji vya Monitor au MixMonitor kwenye dialplan ili kuchakata mwelekeo huu. Tofauti kati ya kazi hizi ni kwamba Monitor huandika sauti ya mpigaji na sauti ya mpigaji kando katika faili tofauti. Na MixMonitor huunda faili moja ambayo ina pande zote mbili za mazungumzo.
    Katika dialplan inaonekana kama hii kwa Monitor:


    exten => _8X.,1,Weka(jina=$(STRFTIME($(EPOCH),%Y%m%d%H%M))-$(CALLERID(namba))-$(EXTEN))
    exten => _8X.,2,Monitor(wav,/home/share/monitor/$(fname),mb)
    kupanua => _8X.,3,Piga(SIP/trunk1/$(EXTEN),tTr)

    Katika mfano huu, na mstari wa kwanza, Weka (fname, nk, tunaelezea jina la faili ambayo rekodi ya mazungumzo itahifadhiwa. Kwa upande wetu, jina la faili litajumuisha tarehe na wakati simu ilifanyika. , nambari ya mpigaji na mahali alipopiga.Kurekodi kama ilivyotajwa tayari, itakuwa na faili mbili; mwisho, nambari 1 na 2 zitaongezwa ipasavyo kwa nambari za kituo.
    Na mfano wa pili ni kutumia MixMonitor, kila kitu ni rahisi tu:


    exten => _8.,1,Weka(jina=$(STRFTIME($(EPOCH),%Y%m%d%H%M))-$(CALLERID(nambari))-$(EXTEN))
    exten => _8.,2,MixMonitor(/home/share/monitor/$(fname).wav)
    kupanua => _8.,3,Piga(SIP/trunk2/$(EXTEN),tTr)

    Kila kitu ni sawa hapa, tu kuna bendera chache katika amri ya MixMonitor, jina la faili tu na ugani limeingizwa hapa.

    2.2.21 Kurekodi mazungumzo kwenye Nyota kwa udhibiti rahisi kupitia CLI

    Hati hii inaeleza jinsi ya kuunda mfumo maalum wa kurekodi simu kulingana na nyota.

    Maelezo mafupi ya suluhisho

    Kila simu inayoingia na inayotoka inatumwa kwa muktadha wa uanzishaji wa kurekodi mazungumzo, ambayo utafutaji wa sheria unatekelezwa kwa kiwango cha dialplan maalum. Hifadhidata ya ndani ya kinyota hutumiwa kuhifadhi sheria za kurekodi. Mbinu hii simu:

    • tumia vitendaji vya DB vilivyojengwa ili kutafuta maadili;
    • tumia kiweko cha nyota na amri ya hifadhidata ili kurekebisha sheria.

    Kuna matawi mawili kwenye hifadhidata:

    • rec_a - tawi hili lina nambari za mteja A (callerid), ambayo unahitaji kuwezesha kurekodi;
    • rec_b - ipasavyo, katika tawi hili sheria za nambari ya mteja B (dnid).

    *CLI> hifadhidata weka rec_a 701 1
    Imesasisha hifadhidata
    *CLI> hifadhidata weka rec_b 2323956 1
    Imesasisha hifadhidata
    *CLI> onyesho la hifadhidata
    /rec_a/701: 1
    /rec_b/2323956: 1
    *CLI>

    Katika mfano hapo juu, sheria mbili ziliundwa. Mmoja atarekodi simu zote kutoka kwa mtumiaji wa ndani aliye na nambari 701, mwingine atarekodi simu zote kwa nambari 2323956. Kama unavyoona, alama ya shughuli ya sheria inatumiwa - 0 au 1. Hii hukuruhusu kuzima kurekodi kwa muda bila kufuta nambari. kutoka kwa hifadhidata.

    Umbizo la kurekodi
    Faili zilizorekodiwa zimeandikwa kwa /var/spool/asterisk/monitor folda katika umbizo lifuatalo:

    data/yyyy/mm/dd/hh_MM_ss_a_b_callid, ambapo:

    • yyyy - mwaka wa kurekodi;
    • mm - mwezi wa kurekodi;
    • dd - siku ya kurekodi;
    • hh - saa ya mazungumzo kuanza;
    • MM - dakika mazungumzo yalianza;
    • ss - pili ya mazungumzo kuanza;
    • a - nambari ya mteja a au haijulikani ikiwa callerid imefichwa;
    • b - nambari ya mteja b;
    • kuitwa - kitambulisho cha simu.

    Kwa hivyo, jina la faili lina habari zote muhimu ili kupata rekodi inayotaka baadaye. Unapotumia programu zinazorekodi mazungumzo yao ya mwisho hadi mwisho, unaweza kusimamisha kurekodi. Wakati wa kuhamisha simu, unahitaji pia kuacha kurekodi mazungumzo katika TRANSFER_CONTEXT na kuanza kurekodi tena.

    Mpangilio wa kinyota

    Ifuatayo ni kipande cha kipiga simu cha Nyota ambacho kinatekeleza mantiki iliyoelezwa hapo juu.

    extensions.conf:



    kupanua =>
    kupanua => _X.,n,Piga(DAHDI/g1/$(EXTEN),t)

    exten => _X.,1,Gosub(rekodi ndogo,$(EXTEN),1)
    kupanua => _X.,n,Piga(SIP/$(EXTEN),T)

    exten => s,1,StopMixMonitor()
    kupanua => _X.,1,Weka(MPIGA SIMU=haijulikani)
    kupanua => _X.,n,GoToIf($?db)
    kupanua => _X.,n,Weka(CALLER=$(CALLERID(namba)))
    exten => _X.,n(db),GotoIf($?record:stop)
    exten => _X.,n,GotoIf($?record:stop)
    kupanua => _X.,n(rekodi),MixMonitor(data/$(STRFTIME(,%G/%m/%H_%M_%S))_$(CALLER)_$(ANAITWA).gsm)
    kupanua => _X.,n(simama),Rudisha

    Hasara: Wakati katika jina la faili ni wakati simu ilifika, lakini sio mwanzo wa mazungumzo. Ili kuonyesha wakati wa kuanza kwa mazungumzo, unahitaji kuunda ulinganifu au uupe jina jipya baada ya mwisho wa mazungumzo.

    2.2.22 Saa ya kengele kwenye kinyota

    Kuna zaidi ya njia moja ya kutekeleza saa ya kengele katika Linux (pengine ndiyo rahisi zaidi: "lala 20m && mpg123 ~/bell.mp3"), lakini ninataka kitu kizuri na kisicho kawaida. Utafutaji wa mtandao wa "wakeup ya kinyota" utatoa suluhu kadhaa, zilizoandikwa kwa kutumia lugha tofauti za programu na zinazotofautiana kidogo katika mchakato wa usakinishaji na uwezo. Maarufu zaidi kati yao ni hati ya PHP wakeup.php, iliyoandikwa na Andi Wysocki. Pakua kumbukumbu ya tar kutoka kwa kiunga, fungua faili ya php kwenye saraka na maandishi ya AGI (Asterisk Kiolesura cha lango- lango interface kwa njia ambayo programu za nje inaweza kudhibiti mpangilio wa kinyota) na kuifanya itekelezwe: "chmod a+x /var/lib/asterisk/agi-bin/wakeup.php" ( saraka inayotaka unaweza kujua kwa kuangalia thamani ya mabadiliko ya astagidir katika usanidi wa asterisk.conf).
    Hati ya wakeup.php ina idadi ya vigeu vinavyohitaji kurekebishwa kwa kuzingatia mipangilio ya mfumo:

    ; Mahali Mkalimani wa PHP inaweza kutofautiana kwenye mifumo tofauti ya Linux
    #!/usr/bin/php -q
    ; Ni bora kuondoa logi kutoka /tmp
    $parm_error_log = "/var/log/asterisk/wakeup.log";
    ; Kwa msingi, hati huunda faili za muda katika /tmp,
    ; lakini ikiwa saraka hiyo iko kwenye kizigeu tofauti, wakeup.php itakataa kufanya kazi, kwa hivyo:
    $parm_temp_dir = "/var/spool/asterisk/tmp";

    Kanuni ya kuzindua hati ni sawa na mfano wa Motion - tunaingiza tu maelezo kuhusu nambari mpya katika extensions.conf:

    Ongeza => *97,1,Jibu()
    exten => *97,n,AGI(wakeup.php)
    exten => *97,n,Hangup()

    Sasa unahitaji tu kupiga *97 na, kwa ombi, ingiza wakati ambapo mfumo unapaswa kupiga simu tena. Kwa mfano, ili kuweka kengele ya 17:55 (leo ni fainali ya Kombe la Ligi ya Uingereza), tunapiga "0555" na kisha "2" (1 - kabla ya saa sita mchana, 2 - baada ya mchana).
    Ukikumbana na matatizo ya kuendesha hati, sakinisha vifurushi vya php5-cli na kinyota-sauti-ziada na utumie matumizi ya fromdos kuleta wakeup.php kwa viwango vya Unix.

    2.2.23 SIP/SIMPLE ujumbe wa maandishi katika Nyota

    Mbinu ya SIP MESSAGE (RFC 3428), pia inajulikana kama itifaki RAHISI, hutumika kusambaza ujumbe. Katika kinyota, msaada wake ulionekana katika toleo la 10. Usanidi wa kazi (toleo la 11 la Nyota hutumiwa).
    Chaguo #1
    Kwa sehemu ya faili sip.conf mistari imeongezwa:


    outofcall_message_context = ujumbe
    auth_message_requests = hapana

    Na katika dialplan upanuzi.conf muktadha umeongezwa:


    exten => _XXX,1,MessageTuma(sip:$(EXTEN),"$(CALLERID(jina))"$(MESSAGE(kutoka)))

    Ingiza kiasi X kwa mujibu wa idadi ya tarakimu katika nambari zako za kiendelezi.

    Chaguo nambari 2
    Kwa sehemu ya faili sip.conf mistari imeongezwa:

    Kubali_outofcall_message = ndiyo
    outofcall_message_context = astms
    textsupport = ndiyo
    auth_message_requests = ndiyo

    Na katika dialplan upanuzi.conf muktadha umeongezwa:


    kupanua => _.,1,NoOp(kipiga simu cha kupokea SMS kimealikwa)
    kupanua => _.,n,NoOp(Kwa $(MESSAGE(kwa)))
    exten => _.,n,NoOp(Kutoka $(MESSAGE(kutoka)))
    exten => _.,n,NoOp(Mwili $(MESSAGE(mwili)))
    kupanua => _.,n,Weka(ACTUALTO=$(CUT(UJUMBE(kwa),@,1)))
    exten => _.,n,MessageSend($(ACTUALTO),$(MESSAGE(kutoka)))
    exten => _.,n,NoOp(Hali ya kutuma ni $(MESSAGE_SEND_STATUS))
    exten => _.,n,GotoIf($["$(MESSAGE_SEND_STATUS)" != "SUCCESS"]?sendfailedmsg)
    exten => _.,n,Hangup()
    exten => h,1,Hangup()
    ;
    exten => _.,n(sendfailedmsg),Weka(MESSAGE(body)="[$(STRFTIME($(EPOCH),%d%m%Y-%H:%M:%S))] Ujumbe wako kwa $(EXTEN) imeshindwa. Jaribu tena baadaye.")
    exten => _.,n,Weka(ME_1=$(CUT(UJUMBE(kutoka), exten => _.,n,Weka(ACTUALFROM=$(CUT(ME_1,@,1))))
    exten => _.,n,MessageSend($(ACTUALFROM),ServiceCenter)
    exten => _.,n,Hangup()
    exten => h,1,Hangup()

    2.2.24 Utendaji wa huduma ya usalama na usimamizi wa kampuni - Kusikiliza mazungumzo mtandaoni

    Chaguo #1


    exten => 5555,1,Macro(user-callerid)
    exten => 5555,2,Thibitisha(1234)
    exten => 5555,3,Soma(SPYNUM,wakala-eneo jipya)
    kupanua => 5555.4,ChanSpy(SIP/$(SPYNUM))

    Chaguo nambari 2


    exten => _555XX.,1,chanspy(sip/$(EXTEN:3))
    exten => 556,1,ChanSpy(chaneli,B) - chaneli zote mbili zinasikika, kama mkutano wa pande tatu
    exten => 557,1,ChanSpy(channel,q) - chaneli hazisikii, unasikia kila kitu
    exten => 558,1,ChanSpy(channel,w) - ni kituo unachounganisha pekee ndicho kinaweza kukusikia, unaweza kusikia chaneli zote mbili

    Amri kuu ya onyesho la ChanSpy inaonyesha chaguo zote za utendaji

    Hivi ndivyo inavyofanya kazi kwenye simu nyingi

    Ongeza => *9720,1,ChanSpy(SIP/720,wqv(-1))
    exten => *9701,1,ChanSpy(SIP/701,wqv(-1))
    kupanua => *9700,1,ChanSpy(SIP/700,wqv(-1))

    Chaguo #3

    ;sikiliza - Sikiliza mazungumzo (hawawezi kukusikia)
    exten => _*222x.#,1,Macro(mtumiaji-mpigaji,)
    exten => _*222x.#,n,Jibu
    kupanua => _*222x.#,n,NoCDR
    kupanua => _*222x.#,n,Subiri(1)
    exten => _*222x.#,n,ChanSpy(sip/$(EXTEN:4),q)
    exten => _*222x.#,n,Hangup ;nong'ona - Kuvamia mazungumzo
    exten => _*223x.#,1,Macro(mtumiaji-mpigaji,)
    exten => _*223x.#,n,Jibu
    kupanua => _*223x.#,n,NoCDR
    kupanua => _*223x.#,n,Subiri(1)
    exten => _*223x.#,n,ChanSpy(sip/$(EXTEN:4),qw)
    exten => _*223x.#,n,Hangup ;barge - Washiriki wote 3 wanaweza kusikia
    exten => _*224x.#,1,Macro(mtumiaji-mpigaji,)
    exten => _*224x.#,n,Jibu
    kupanua => _*224x.#,n,NoCDR
    kupanua => _*224x.#,n,Subiri(1)
    kupanua => _*224x.#,n,ChanSpy(SIP/$(EXTEN:4),qB)
    exten => _*224x.#,n,Hangup