ఖచ్చితంగా మీలో చాలా మందికి, నాలాగే, ఏదైనా ప్రత్యేకంగా చేయాలనే ఆలోచన ఉంది. ఈ వ్యాసంలో నేను PBXని అభివృద్ధి చేస్తున్నప్పుడు ఎదుర్కొనే సాంకేతిక సమస్యలు మరియు పరిష్కారాలను వివరిస్తాను. బహుశా ఇది ఎవరైనా వారి స్వంత ఆలోచనను నిర్ణయించుకోవడంలో సహాయపడవచ్చు మరియు ఎవరైనా బాగా నడిచే మార్గాన్ని అనుసరించవచ్చు, ఎందుకంటే నేను పయినీర్ల అనుభవం నుండి కూడా ప్రయోజనం పొందాను.
ఆలోచన మరియు కీలక అవసరాలు
మరియు ఇదంతా ప్రేమతో ప్రారంభమైంది చుక్క (కమ్యూనికేషన్ అప్లికేషన్లను నిర్మించడానికి ఫ్రేమ్వర్క్), టెలిఫోనీ మరియు ఇన్స్టాలేషన్ల ఆటోమేషన్ freepbx (వెబ్ ఇంటర్ఫేస్ చుక్క) కంపెనీ అవసరాలు ప్రత్యేకతలు లేకుండా మరియు సామర్థ్యాలలోకి వస్తే freepbx - ప్రతిదీ గొప్పది. మొత్తం ఇన్స్టాలేషన్ XNUMX గంటలలోపు జరిగింది, కంపెనీ కాన్ఫిగర్ చేయబడిన PBX, వినియోగదారు-స్నేహపూర్వక ఇంటర్ఫేస్ మరియు కావాలనుకుంటే చిన్న శిక్షణ మరియు మద్దతును పొందింది.
కానీ చాలా ఆసక్తికరమైన పనులు ప్రామాణికం కానివి మరియు అది అంత అద్భుతమైనది కాదు. చుక్క చాలా చేయవచ్చు, కానీ వెబ్ ఇంటర్ఫేస్ను పని క్రమంలో ఉంచడానికి, చాలా రెట్లు ఎక్కువ సమయం గడపడం అవసరం. కాబట్టి మిగిలిన PBXని ఇన్స్టాల్ చేయడం కంటే చిన్న వివరాలు చాలా ఎక్కువ సమయం పట్టవచ్చు. మరియు విషయం ఏమిటంటే వెబ్ ఇంటర్ఫేస్ను వ్రాయడానికి చాలా సమయం పడుతుంది, కానీ పాయింట్ నిర్మాణ లక్షణాలలో ఉంది freepbx. ఆర్కిటెక్చర్ విధానాలు మరియు పద్ధతులు freepbx php4 సమయంలో వేయబడింది మరియు ఆ సమయంలో ఇప్పటికే php5.6 ఉంది, దానిపై ప్రతిదీ సరళంగా మరియు మరింత సౌకర్యవంతంగా చేయవచ్చు.
చివరి స్ట్రా ఒక రేఖాచిత్రం రూపంలో గ్రాఫికల్ డయల్ప్లాన్లు. నేను ఇలాంటివి నిర్మించడానికి ప్రయత్నించినప్పుడు freepbx, నేను దానిని గణనీయంగా తిరిగి వ్రాయవలసి ఉంటుందని మరియు క్రొత్తదాన్ని నిర్మించడం సులభం అని నేను గ్రహించాను.
ప్రధాన అవసరాలు:
- సాధారణ సెటప్, అనుభవం లేని నిర్వాహకులకు కూడా అకారణంగా అందుబాటులో ఉంటుంది. అందువల్ల, కంపెనీలకు మా వైపు PBX నిర్వహణ అవసరం లేదు,
- సులభమైన సవరణ తద్వారా పనులు తగిన సమయంలో పరిష్కరించబడతాయి,
- PBXతో ఏకీకరణ సౌలభ్యం. యు freepbx సెట్టింగ్లను మార్చడానికి API లేదు, అనగా. ఉదాహరణకు, మీరు మూడవ పక్షం అప్లికేషన్ నుండి సమూహాలు లేదా వాయిస్ మెనులను సృష్టించలేరు, API మాత్రమే చుక్క,
- ఓపెన్సోర్స్ - ప్రోగ్రామర్లకు క్లయింట్ కోసం సవరణలకు ఇది చాలా ముఖ్యమైనది.
వేగవంతమైన అభివృద్ధి యొక్క ఆలోచన ఏమిటంటే, అన్ని కార్యాచరణలు వస్తువుల రూపంలో మాడ్యూళ్ళను కలిగి ఉంటాయి. అన్ని ఆబ్జెక్ట్లు సాధారణ పేరెంట్ క్లాస్ని కలిగి ఉండాలి, అంటే అన్ని ప్రధాన ఫంక్షన్ల పేర్లు ఇప్పటికే తెలిసినవి కాబట్టి ఇప్పటికే డిఫాల్ట్ ఇంప్లిమెంటేషన్లు ఉన్నాయి. స్ట్రింగ్ కీలతో అనుబంధ శ్రేణుల రూపంలో ఆర్గ్యుమెంట్ల సంఖ్యను నాటకీయంగా తగ్గించడానికి ఆబ్జెక్ట్లు మిమ్మల్ని అనుమతిస్తాయి, వీటిని మీరు కనుగొనవచ్చు freepbx మొత్తం ఫంక్షన్ మరియు సమూహ విధులను పరిశీలించడం ద్వారా ఇది సాధ్యమైంది. వస్తువుల విషయంలో, సామాన్యమైన స్వయంపూర్తి అన్ని లక్షణాలను చూపుతుంది మరియు సాధారణంగా జీవితాన్ని చాలాసార్లు సులభతరం చేస్తుంది. అదనంగా, వారసత్వం మరియు పునర్నిర్వచనం ఇప్పటికే అనేక సమస్యలను సవరణలతో పరిష్కరిస్తుంది.
మళ్లీ పని చేసే సమయాన్ని మందగించిన తదుపరి విషయం నకిలీని నివారించడం విలువైనది. ఉద్యోగిని డయల్ చేయడానికి బాధ్యత వహించే మాడ్యూల్ ఉంటే, ఉద్యోగికి కాల్ పంపాల్సిన అన్ని ఇతర మాడ్యూల్లు దానిని ఉపయోగించాలి మరియు వారి స్వంత కాపీలను సృష్టించకూడదు. కాబట్టి, మీరు ఏదైనా మార్చవలసి వస్తే, మీరు ఒకే చోట మాత్రమే మార్చాలి మరియు “ఇది ఎలా పని చేస్తుంది” అనే శోధనను ఒకే చోట నిర్వహించాలి మరియు మొత్తం ప్రాజెక్ట్లో శోధించకూడదు.
మొదటి సంస్కరణ మరియు మొదటి లోపాలు
మొదటి నమూనా ఒక సంవత్సరంలోనే సిద్ధంగా ఉంది. మొత్తం PBX, ప్రణాళిక ప్రకారం, మాడ్యులర్, మరియు మాడ్యూల్స్ కాల్లను ప్రాసెస్ చేయడానికి కొత్త కార్యాచరణను జోడించడమే కాకుండా, వెబ్ ఇంటర్ఫేస్ను కూడా మార్చగలవు.
అవును, అటువంటి పథకం రూపంలో డయల్ప్లాన్ను నిర్మించాలనే ఆలోచన నాది కాదు, కానీ ఇది చాలా సౌకర్యవంతంగా ఉంటుంది మరియు నేను అదే చేసాను చుక్క.
మాడ్యూల్ రాయడం ద్వారా, ప్రోగ్రామర్లు ఇప్పటికే చేయగలరు:
- కాల్ ప్రాసెసింగ్ కోసం మీ స్వంత కార్యాచరణను సృష్టించండి, ఇది రేఖాచిత్రంపై అలాగే ఎడమ వైపున ఉన్న మూలకాల మెనులో ఉంచబడుతుంది,
- వెబ్ ఇంటర్ఫేస్ కోసం మీ స్వంత పేజీలను సృష్టించండి మరియు ఇప్పటికే ఉన్న పేజీలకు మీ టెంప్లేట్లను జోడించండి (పేజీ డెవలపర్ దీని కోసం అందించినట్లయితే),
- మీ సెట్టింగ్లను ప్రధాన సెట్టింగ్ల ట్యాబ్కు జోడించండి లేదా మీ స్వంత సెట్టింగ్ల ట్యాబ్ను సృష్టించండి,
- ప్రోగ్రామర్ ఇప్పటికే ఉన్న మాడ్యూల్ నుండి వారసత్వంగా పొందవచ్చు, ఫంక్షనాలిటీలో కొంత భాగాన్ని మార్చవచ్చు మరియు దానిని కొత్త పేరుతో నమోదు చేయవచ్చు లేదా అసలు మాడ్యూల్ను భర్తీ చేయవచ్చు.
ఉదాహరణకు, మీరు మీ స్వంత వాయిస్ మెనుని ఈ విధంగా సృష్టించవచ్చు:
......
class CPBX_MYIVR extends CPBX_IVR
{
function __construct()
{
parent::__construct();
$this->_module = "myivr";
}
}
.....
$myIvrModule = new CPBX_MYIVR();
CPBXEngine::getInstance()->registerModule($myIvrModule,__DIR__); //Зарегистрировать новый модуль
CPBXEngine::getInstance()->registerModuleExtension($myIvrModule,'ivr',__DIR__); //Подменить существующий модуль
మొదటి సంక్లిష్టమైన అమలులు మొదటి అహంకారాన్ని మరియు మొదటి నిరాశను తెచ్చిపెట్టాయి. ఇది పనిచేసినందుకు నేను సంతోషించాను, నేను ఇప్పటికే ప్రధాన లక్షణాలను పునరుత్పత్తి చేయగలిగాను freepbx. పథకం యొక్క ఆలోచనను ప్రజలు ఇష్టపడినందుకు నేను సంతోషించాను. అభివృద్ధిని సరళీకృతం చేయడానికి ఇంకా చాలా ఎంపికలు ఉన్నాయి, కానీ ఆ సమయంలో కూడా కొన్ని పనులు ఇప్పటికే సులభతరం చేయబడ్డాయి.
PBX కాన్ఫిగరేషన్ని మార్చడం కోసం API నిరుత్సాహపరిచింది - ఫలితం మేము కోరుకున్నట్లుగా లేదు. నేను అదే సూత్రాన్ని తీసుకున్నాను freepbx, వర్తించు బటన్ను క్లిక్ చేయడం ద్వారా, మొత్తం కాన్ఫిగరేషన్ మళ్లీ సృష్టించబడుతుంది మరియు మాడ్యూల్స్ పునఃప్రారంభించబడతాయి.
ఇది ఇలా కనిపిస్తుంది:
*డయల్ప్లాన్ అనేది ఒక నియమం (అల్గోరిథం), దీని ద్వారా కాల్ ప్రాసెస్ చేయబడుతుంది.
కానీ ఈ ఎంపికతో, PBX సెట్టింగులను మార్చడానికి సాధారణ APIని వ్రాయడం అసాధ్యం. మొదట, మార్పులను వర్తించే ఆపరేషన్ చుక్క చాలా పొడవుగా మరియు వనరులు ఎక్కువగా ఉన్నాయి.
రెండవది, మీరు ఒకే సమయంలో రెండు ఫంక్షన్లను కాల్ చేయలేరు, ఎందుకంటే రెండూ కాన్ఫిగరేషన్ను సృష్టిస్తాయి.
మూడవదిగా, ఇది నిర్వాహకుడు చేసిన వాటితో సహా అన్ని సెట్టింగ్లను వర్తింపజేస్తుంది.
ఈ సంస్కరణలో, లో వలె అస్కోజియా, కేవలం మార్చబడిన మాడ్యూల్ల కాన్ఫిగరేషన్ను రూపొందించడం మరియు అవసరమైన మాడ్యూళ్లను మాత్రమే పునఃప్రారంభించడం సాధ్యమైంది, అయితే ఇవన్నీ సగం కొలతలు. విధానాన్ని మార్చుకోవాల్సిన అవసరం ఏర్పడింది.
రెండవ వెర్షన్. ముక్కు తోక చిక్కుకుంది
సమస్యను పరిష్కరించాలనే ఆలోచన కాన్ఫిగరేషన్ మరియు డయల్ప్లాన్ను మళ్లీ సృష్టించడం కాదు చుక్క, కానీ డేటాబేస్లో సమాచారాన్ని సేవ్ చేయండి మరియు కాల్ను ప్రాసెస్ చేస్తున్నప్పుడు నేరుగా డేటాబేస్ నుండి చదవండి. చుక్క డేటాబేస్ నుండి కాన్ఫిగరేషన్లను ఎలా చదవాలో నాకు ఇప్పటికే తెలుసు, డేటాబేస్లోని విలువను మార్చండి మరియు మార్పులను పరిగణనలోకి తీసుకొని తదుపరి కాల్ ప్రాసెస్ చేయబడుతుంది మరియు డయల్ప్లాన్ పారామితులను చదవడానికి ఫంక్షన్ సరైనది REALTIME_HASH.
చివరికి, పునఃప్రారంభించాల్సిన అవసరం కూడా లేదు చుక్క సెట్టింగులను మార్చినప్పుడు మరియు అన్ని సెట్టింగులు వెంటనే వర్తింపజేయడం ప్రారంభించాయి చుక్క.
డయల్ప్లాన్లో మాత్రమే మార్పులు పొడిగింపు సంఖ్యల జోడింపు మరియు సూచనలు. అయితే ఇవి చిన్న చిన్న మార్పులు
exten=>101,1,GoSub(‘sub-callusers’,s,1(1)); - точечное изменение, добавляется/изменяется через ami
; sub-callusers – универсальная функция генерится при установке модуля.
[sub-callusers]
exten =>s,1,Noop()
exten =>s,n,Set(LOCAL(TOUSERID)=${ARG1})
exten =>s,n,ClearHash(TOUSERPARAM)
exten =>s,n,Set(HASH(TOUSERPARAM)=${REALTIME_HASH(rl_users,id,${LOCAL(TOUSERID)})})
exten =>s,n,GotoIf($["${HASH(TOUSERPARAM,id)}"=""]?return)
...
మీరు ఉపయోగించి డయల్ప్లాన్లో లైన్ను సులభంగా జోడించవచ్చు లేదా మార్చవచ్చు స్నేహితుడు (నియంత్రణ ఇంటర్ఫేస్ చుక్క) మరియు మొత్తం డయల్ప్లాన్ రీబూట్ అవసరం లేదు.
ఇది కాన్ఫిగరేషన్ APIతో సమస్యను పరిష్కరించింది. మీరు నేరుగా డేటాబేస్లోకి వెళ్లి కొత్త సమూహాన్ని జోడించవచ్చు లేదా మార్చవచ్చు, ఉదాహరణకు, సమూహం కోసం “డయల్టైమ్” ఫీల్డ్లోని డయల్-అప్ సమయం మరియు తదుపరి కాల్ ఇప్పటికే పేర్కొన్న సమయం వరకు ఉంటుంది (ఇది దీని కోసం సిఫార్సు కాదు చర్య, ఎందుకంటే కొన్ని API కార్యకలాపాలు అవసరం స్నేహితుడు కాల్స్).
మొదటి కష్టమైన అమలులు మళ్లీ మొదటి గర్వాన్ని మరియు నిరాశను తెచ్చిపెట్టాయి. అది పనిచేసినందుకు నేను సంతోషించాను. డేటాబేస్ ఒక క్లిష్టమైన లింక్గా మారింది, డిస్క్పై ఆధారపడటం పెరిగింది, ఎక్కువ నష్టాలు ఉన్నాయి, కానీ ప్రతిదీ స్థిరంగా మరియు సమస్యలు లేకుండా పని చేసింది. మరియు ముఖ్యంగా, ఇప్పుడు వెబ్ ఇంటర్ఫేస్ ద్వారా చేయగలిగే ప్రతిదాన్ని API ద్వారా చేయవచ్చు మరియు అదే పద్ధతులు ఉపయోగించబడ్డాయి. అదనంగా, వెబ్ ఇంటర్ఫేస్ "PBXకి సెట్టింగ్లను వర్తింపజేయి" బటన్ను తొలగించింది, ఇది నిర్వాహకులు తరచుగా మరచిపోతారు.
అభివృద్ధి మరింత క్లిష్టంగా మారడం నిరాశ కలిగించింది. మొదటి సంస్కరణ నుండి, PHP భాష భాషలో డయల్ప్లాన్ను రూపొందించింది చుక్క మరియు అది పూర్తిగా చదవలేనిదిగా కనిపిస్తుంది, దానితోపాటు భాష కూడా చుక్క డయల్ప్లాన్ రాయడానికి ఇది చాలా ప్రాచీనమైనది.
అది ఎలా కనిపించింది:
$usersInitSection = $dialplan->createExtSection('usersinit-sub','s');
$usersInitSection
->add('',new Dialplanext_gotoif('$["${G_USERINIT}"="1"]','exit'))
->add('',new Dialplanext_set('G_USERINIT','1'))
->add('',new Dialplanext_gosub('1','s','sub-AddOnAnswerSub','usersconnected-sub'))
->add('',new Dialplanext_gosub('1','s','sub-AddOnPredoDialSub','usersinitondial-sub'))
->add('',new Dialplanext_set('LOCAL(TECH)','${CUT(CHANNEL(name),/,1)}'))
->add('',new Dialplanext_gotoif('$["${LOCAL(TECH)}"="SIP"]','sipdev'))
->add('',new Dialplanext_gotoif('$["${LOCAL(TECH)}"="PJSIP"]','pjsipdev'))
రెండవ సంస్కరణలో, డయల్ప్లాన్ సార్వత్రికమైంది, ఇది పారామితులపై ఆధారపడి సాధ్యమయ్యే అన్ని ప్రాసెసింగ్ ఎంపికలను కలిగి ఉంది మరియు దాని పరిమాణం గణనీయంగా పెరిగింది. ఇవన్నీ అభివృద్ధి సమయాన్ని బాగా మందగించాయి మరియు డయల్ప్లాన్లో మరోసారి జోక్యం చేసుకోవడం అవసరమనే ఆలోచన నన్ను బాధించింది.
మూడవ వెర్షన్
సమస్యను పరిష్కరించాలనే ఆలోచన ఉత్పన్నం కాలేదు చుక్క php మరియు ఉపయోగం నుండి డయల్ప్లాన్ చేయండి FastAGI మరియు అన్ని ప్రాసెసింగ్ నియమాలను PHPలోనే వ్రాయండి. FastAGI ఇది అనుమతిస్తుంది చుక్క, కాల్ని ప్రాసెస్ చేయడానికి, సాకెట్కి కనెక్ట్ చేయండి. అక్కడ నుండి ఆదేశాలను స్వీకరించండి మరియు ఫలితాలను పంపండి. అందువల్ల, డయల్ప్లాన్ యొక్క తర్కం ఇప్పటికే సరిహద్దుల వెలుపల ఉంది చుక్క మరియు ఏ భాషలోనైనా వ్రాయవచ్చు, నా విషయంలో PHPలో.
చాలా ట్రయల్ మరియు ఎర్రర్ ఉంది. ప్రధాన సమస్య ఏమిటంటే, నా దగ్గర ఇప్పటికే చాలా తరగతులు/ఫైళ్లు ఉన్నాయి. ఆబ్జెక్ట్లను సృష్టించడానికి, వాటిని ప్రారంభించేందుకు మరియు ఒకదానికొకటి నమోదు చేసుకోవడానికి దాదాపు 1,5 సెకన్లు పట్టింది మరియు ఒక్కో కాల్కు ఈ ఆలస్యం విస్మరించదగినది కాదు.
ప్రారంభించడం ఒక్కసారి మాత్రమే జరిగి ఉండాలి మరియు అందువల్ల phpని ఉపయోగించి సేవను వ్రాయడం ద్వారా పరిష్కారం కోసం శోధన ప్రారంభమైంది Pthreads. ఒక వారం ప్రయోగం తర్వాత, ఈ పొడిగింపు ఎలా పని చేస్తుందనే చిక్కుల కారణంగా ఈ ఎంపిక నిలిపివేయబడింది. ఒక నెల పరీక్ష తర్వాత, నేను PHPలో అసమకాలిక ప్రోగ్రామింగ్ను కూడా వదిలివేయవలసి వచ్చింది; నాకు సరళమైన, ఏదైనా PHP ప్రారంభకులకు సుపరిచితమైనది అవసరం మరియు PHP కోసం అనేక పొడిగింపులు సమకాలీకరించబడతాయి.
పరిష్కారం C లో మా స్వంత బహుళ-థ్రెడ్ సేవ, దీనితో సంకలనం చేయబడింది PHPLIB. ఇది అన్ని ATS php ఫైల్లను లోడ్ చేస్తుంది, అన్ని మాడ్యూల్స్ ప్రారంభించే వరకు వేచి ఉంటుంది, ఒకదానికొకటి కాల్బ్యాక్ను జోడిస్తుంది మరియు ప్రతిదీ సిద్ధంగా ఉన్నప్పుడు, దానిని కాష్ చేస్తుంది. ద్వారా విచారించినప్పుడు FastAGI ఒక స్ట్రీమ్ సృష్టించబడుతుంది, అన్ని తరగతుల కాష్ నుండి కాపీ మరియు డేటా దానిలో పునరుత్పత్తి చేయబడుతుంది మరియు అభ్యర్థన php ఫంక్షన్కు పంపబడుతుంది.
ఈ పరిష్కారంతో, మా సేవకు కాల్ పంపడం నుండి మొదటి ఆదేశానికి సమయం చుక్క 1,5s నుండి 0,05s వరకు తగ్గింది మరియు ఈ సమయం ప్రాజెక్ట్ పరిమాణంపై కొద్దిగా ఆధారపడి ఉంటుంది.
ఫలితంగా, డయల్ప్లాన్ డెవలప్మెంట్ సమయం గణనీయంగా తగ్గింది మరియు నేను PHPలోని అన్ని మాడ్యూళ్ల మొత్తం డయల్ప్లాన్ను తిరిగి వ్రాయవలసి వచ్చినందున నేను దీన్ని అభినందించగలను. మొదట, డేటాబేస్ నుండి ఒక వస్తువును పొందటానికి పద్ధతులు ఇప్పటికే phpలో వ్రాయబడాలి; అవి వెబ్ ఇంటర్ఫేస్లో ప్రదర్శించడానికి అవసరం, మరియు రెండవది, మరియు ఇది ప్రధాన విషయం, చివరకు సంఖ్యలు మరియు శ్రేణులతో తీగలతో సౌకర్యవంతంగా పని చేయడం సాధ్యపడుతుంది. డేటాబేస్ మరియు అనేక PHP పొడిగింపులతో.
మాడ్యూల్ క్లాస్లో డయల్ప్లాన్ను ప్రాసెస్ చేయడానికి మీరు ఫంక్షన్ను అమలు చేయాలి dialplanDynamicCall మరియు వాదన pbxCallRequest పరస్పర చర్య చేయడానికి ఒక వస్తువు ఉంటుంది చుక్క.
అదనంగా, డయల్ప్లాన్ను డీబగ్ చేయడం సాధ్యమైంది (phpకి xdebug ఉంది మరియు ఇది మా సేవ కోసం పనిచేస్తుంది), మీరు వేరియబుల్స్ విలువలను వీక్షించడం ద్వారా దశలవారీగా తరలించవచ్చు.
కాల్ డేటా
ఏదైనా విశ్లేషణలు మరియు నివేదికలకు సరిగ్గా సేకరించిన డేటా అవసరం, మరియు ఈ PBX బ్లాక్ కూడా మొదటి నుండి మూడవ సంస్కరణ వరకు చాలా ట్రయల్ మరియు ఎర్రర్ను ఎదుర్కొంది. తరచుగా, కాల్ డేటా ఒక సంకేతం. ఒక కాల్ = ఒక రికార్డింగ్: ఎవరు పిలిచారు, ఎవరు సమాధానం ఇచ్చారు, ఎంతసేపు మాట్లాడారు. మరింత ఆసక్తికరమైన ఎంపికలలో, కాల్ సమయంలో ఏ PBX ఉద్యోగిని పిలిచారో సూచించే అదనపు సంకేతం ఉంది. కానీ ఇవన్నీ అవసరాలలో కొంత భాగాన్ని మాత్రమే కవర్ చేస్తాయి.
ప్రారంభ అవసరాలు:
- PBX ఎవరిని పిలిచింది అని మాత్రమే కాకుండా, ఎవరు సమాధానమిచ్చారో కూడా సేవ్ చేయండి అంతరాయాలు ఉన్నాయి మరియు కాల్లను విశ్లేషించేటప్పుడు ఇది పరిగణనలోకి తీసుకోవాలి,
- ఉద్యోగితో కనెక్ట్ అయ్యే ముందు సమయం. లో freepbx మరియు కొన్ని ఇతర PBXలు, PBX ఫోన్ని తీసుకున్న వెంటనే కాల్కు సమాధానంగా పరిగణించబడుతుంది. కానీ వాయిస్ మెను కోసం మీరు ఇప్పటికే ఫోన్ను తీయవలసి ఉంటుంది, కాబట్టి అన్ని కాల్లకు సమాధానం ఇవ్వబడుతుంది మరియు సమాధానం కోసం వేచి ఉండే సమయం 0-1 సెకను అవుతుంది. అందువల్ల, ప్రతిస్పందనకు ముందు సమయాన్ని మాత్రమే కాకుండా, కీ మాడ్యూల్స్తో కనెక్ట్ చేయడానికి ముందు సమయాన్ని ఆదా చేయాలని నిర్ణయించబడింది (మాడ్యూల్ స్వయంగా ఈ ఫ్లాగ్ను సెట్ చేస్తుంది. ప్రస్తుతం ఇది “ఉద్యోగి”, “బాహ్య లైన్”),
- మరింత సంక్లిష్టమైన డయల్ప్లాన్ కోసం, వివిధ సమూహాల మధ్య కాల్ ప్రయాణిస్తున్నప్పుడు, ప్రతి మూలకాన్ని విడిగా పరిశీలించగలగడం అవసరం.
PBX మాడ్యూల్స్ కాల్లలో తమ గురించి సమాచారాన్ని పంపినప్పుడు మరియు చివరికి సమాచారాన్ని చెట్టు రూపంలో సేవ్ చేసినప్పుడు ఉత్తమ ఎంపికగా మారింది.
ఇది ఇలా కనిపిస్తుంది:
ముందుగా, కాల్ గురించి సాధారణ సమాచారం (అందరిలాగే - ప్రత్యేకంగా ఏమీ లేదు).
- బయట లైన్లో కాల్ వచ్చింది"పరీక్ష కోసం"05:55:52 వద్ద 89295671458 నంబర్ నుండి 89999999999 నంబర్కు, చివరికి ఒక ఉద్యోగి సమాధానం ఇచ్చాడు"కార్యదర్శి 2» సంఖ్య 104తో. క్లయింట్ 60 సెకన్లు వేచి ఉండి, 36 సెకన్ల పాటు మాట్లాడాడు.
- ఉద్యోగి "కార్యదర్శి 2"112కి కాల్ చేసి, ఒక ఉద్యోగి సమాధానమిస్తాడు"మేనేజర్1» 8 సెకన్ల తర్వాత. వారు 14 సెకన్ల పాటు మాట్లాడతారు.
- క్లయింట్ ఉద్యోగికి బదిలీ చేయబడ్డాడు "మేనేజర్1"అక్కడ వారు మరో 13 సెకన్ల పాటు మాట్లాడుతున్నారు
కానీ ఇది మంచుకొండ యొక్క కొన; ప్రతి రికార్డ్ కోసం మీరు PBX ద్వారా వివరణాత్మక కాల్ చరిత్రను పొందవచ్చు.
మొత్తం సమాచారం కాల్ల గూడుగా ప్రదర్శించబడుతుంది:
- బయట లైన్లో కాల్ వచ్చింది"పరీక్ష కోసం» 05:55:52 వద్ద 89295671458 నంబర్ నుండి 89999999999 నంబర్ వరకు.
- 05:55:53 వద్ద బయటి లైన్ ఇన్కమింగ్ సర్క్యూట్కి కాల్ పంపుతుంది "పరీక్ష»
- పథకం ప్రకారం కాల్ను ప్రాసెస్ చేస్తున్నప్పుడు, మాడ్యూల్ "మేనేజర్ కాల్", దీనిలో కాల్ 16 సెకన్లు. ఇది క్లయింట్ కోసం అభివృద్ధి చేయబడిన మాడ్యూల్.
- మాడ్యూల్ "మేనేజర్ కాల్"సంఖ్య (క్లయింట్)కి బాధ్యత వహించే ఉద్యోగికి కాల్ పంపుతుంది"మేనేజర్1” మరియు ప్రతిస్పందన కోసం 5 సెకన్లు వేచి ఉంది. మేనేజర్ సమాధానం చెప్పలేదు.
- మాడ్యూల్ "మేనేజర్ కాల్"సమూహానికి కాల్ పంపుతుంది"CORP నిర్వాహకులు" వీరు అదే దిశలో ఉన్న ఇతర నిర్వాహకులు (ఒకే గదిలో కూర్చుని) మరియు ప్రతిస్పందన కోసం 11 సెకన్లు వేచి ఉన్నారు.
- సమూహం "CORP నిర్వాహకులు"ఉద్యోగులను పిలుస్తుంది"మేనేజర్1, మేనేజర్2, మేనేజర్3"ఏకకాలంలో 11 సెకన్లు. జవాబు లేదు.
- మేనేజర్ కాల్ ముగుస్తుంది. మరియు సర్క్యూట్ మాడ్యూల్కి కాల్ పంపుతుంది "1c నుండి మార్గాన్ని ఎంచుకోవడం" క్లయింట్ కోసం వ్రాసిన మాడ్యూల్ కూడా. ఇక్కడ కాల్ 0 సెకన్ల పాటు ప్రాసెస్ చేయబడింది.
- సర్క్యూట్ వాయిస్ మెనుకి కాల్ పంపుతుంది "అదనపు డయలింగ్తో ప్రాథమిక" క్లయింట్ అక్కడ 31 సెకన్ల పాటు వేచి ఉన్నారు, అదనపు డయలింగ్ లేదు.
- పథకం సమూహానికి కాల్ పంపుతుంది "కార్యదర్శులు", ఇక్కడ క్లయింట్ 12 సెకన్లు వేచి ఉన్నారు.
- ఒక సమూహంలో, 2 ఉద్యోగులను ఒకే సమయంలో పిలుస్తారు "కార్యదర్శి 1"మరియు"కార్యదర్శి 2"మరియు 12 సెకన్ల తర్వాత ఉద్యోగి సమాధానమిస్తాడు"కార్యదర్శి 2" కాల్కి సమాధానం పేరెంట్ కాల్లుగా డూప్లికేట్ చేయబడింది. సమూహంలో అతను సమాధానం ఇచ్చాడు "కార్యదర్శి 2"సర్క్యూట్కి కాల్ చేసినప్పుడు సమాధానం వచ్చింది"కార్యదర్శి 2"మరియు బయట లైన్లో కాల్కి సమాధానమిచ్చాడు"కార్యదర్శి 2".
ఇది ప్రతి ఆపరేషన్ మరియు వాటి గూడు గురించి సమాచారాన్ని ఆదా చేయడం ద్వారా కేవలం నివేదికలను తయారు చేయడం సాధ్యపడుతుంది. వాయిస్ మెనులోని నివేదిక అది ఎంతవరకు సహాయపడుతుందో లేదా అడ్డుకుంటుంది అని తెలుసుకోవడానికి మీకు సహాయం చేస్తుంది. ఉద్యోగులు తప్పిపోయిన కాల్లపై నివేదికను రూపొందించండి, కాల్ ఇంటర్సెప్ట్ చేయబడిందని మరియు అందువల్ల మిస్డ్గా పరిగణించబడదని మరియు ఇది గ్రూప్ కాల్ అని పరిగణనలోకి తీసుకుని, మరియు ఎవరైనా ఇంతకు ముందు సమాధానం ఇచ్చారు, అంటే కాల్ కూడా మిస్ కాలేదు.
అటువంటి సమాచార నిల్వ మీరు ప్రతి సమూహాన్ని విడిగా తీసుకోవడానికి మరియు అది ఎంత ప్రభావవంతంగా పని చేస్తుందో నిర్ణయించడానికి మరియు గంటకు సమాధానం ఇవ్వబడిన మరియు తప్పిపోయిన సమూహాల గ్రాఫ్ను రూపొందించడానికి మిమ్మల్ని అనుమతిస్తుంది. మేనేజర్కి కనెక్ట్ చేసిన తర్వాత బదిలీలను విశ్లేషించడం ద్వారా బాధ్యతాయుతమైన మేనేజర్కి కనెక్షన్ ఎంత ఖచ్చితమైనదో కూడా మీరు తనిఖీ చేయవచ్చు.
మీరు చాలా వైవిధ్యమైన అధ్యయనాలను కూడా నిర్వహించవచ్చు, ఉదాహరణకు, డేటాబేస్లో లేని నంబర్లు ఎంత తరచుగా సరైన పొడిగింపును డయల్ చేస్తాయి లేదా ఎంత శాతం అవుట్గోయింగ్ కాల్లు మొబైల్ ఫోన్కు ఫార్వార్డ్ చేయబడతాయి.
బాటమ్ లైన్ ఏమిటి?
PBXని నిర్వహించడానికి నిపుణుడు అవసరం లేదు; అత్యంత సాధారణ నిర్వాహకుడు దీన్ని చేయగలడు - ఆచరణలో పరీక్షించబడింది.
సవరణల కోసం, తీవ్రమైన అర్హతలు కలిగిన నిపుణులు అవసరం లేదు; PHP పరిజ్ఞానం సరిపోతుంది, ఎందుకంటే SIP ప్రోటోకాల్ కోసం మరియు క్యూ కోసం మరియు ఉద్యోగిని మరియు ఇతరులకు కాల్ చేయడం కోసం మాడ్యూల్స్ ఇప్పటికే వ్రాయబడ్డాయి. కోసం రేపర్ క్లాస్ ఉంది చుక్క. మాడ్యూల్ను అభివృద్ధి చేయడానికి, ప్రోగ్రామర్ రెడీమేడ్ మాడ్యూల్లకు కాల్ చేయవచ్చు (మరియు మంచి మార్గంలో ఉండాలి). మరియు జ్ఞానం చుక్క క్లయింట్ ఏదైనా కొత్త నివేదికతో పేజీని జోడించమని అడిగితే అవి పూర్తిగా అనవసరం. మూడవ పక్ష ప్రోగ్రామర్లు తట్టుకోగలిగినప్పటికీ, డాక్యుమెంటేషన్ మరియు వ్యాఖ్యల సాధారణ కవరేజ్ లేకుండా వారు అసురక్షితంగా భావిస్తారని అభ్యాసం చూపిస్తుంది, కాబట్టి అభివృద్ధికి ఇంకా స్థలం ఉంది.
మాడ్యూల్స్ వీటిని చేయగలవు:
- కొత్త కాల్ ప్రాసెసింగ్ సామర్థ్యాలను సృష్టించండి,
- వెబ్ ఇంటర్ఫేస్కు కొత్త బ్లాక్లను జోడించండి,
- ఇప్పటికే ఉన్న ఏదైనా మాడ్యూల్స్ నుండి వారసత్వంగా పొందండి, ఫంక్షన్లను పునర్నిర్వచించండి మరియు దాన్ని భర్తీ చేయండి లేదా కొద్దిగా సవరించిన కాపీగా ఉండండి,
- మీ సెట్టింగ్లను ఇతర మాడ్యూళ్ల సెట్టింగ్ల టెంప్లేట్కు జోడించండి మరియు మరిన్ని చేయండి.
API ద్వారా PBX సెట్టింగ్లు. పైన వివరించిన విధంగా, అన్ని సెట్టింగ్లు డేటాబేస్లో నిల్వ చేయబడతాయి మరియు కాల్ సమయంలో చదవబడతాయి, కాబట్టి మీరు API ద్వారా అన్ని PBX సెట్టింగ్లను మార్చవచ్చు. APIకి కాల్ చేస్తున్నప్పుడు, కాన్ఫిగరేషన్ పునఃసృష్టించబడదు మరియు మాడ్యూల్స్ పునఃప్రారంభించబడవు, కాబట్టి, మీరు ఎంత మంది సెట్టింగ్లు మరియు ఉద్యోగులను కలిగి ఉన్నారనేది పట్టింపు లేదు. API అభ్యర్థనలు త్వరగా అమలు చేయబడతాయి మరియు ఒకదానికొకటి నిరోధించబడవు.
PBX అన్ని కీలక కార్యకలాపాలను కాలవ్యవధితో (నిరీక్షణ/సంభాషణ), గూడు కట్టడం మరియు PBX నిబంధనలతో (ఉద్యోగి, సమూహం, బాహ్య లైన్, ఛానెల్, నంబర్ కాదు) కాల్లతో నిల్వ చేస్తుంది. ఇది నిర్దిష్ట క్లయింట్ల కోసం వివిధ నివేదికలను రూపొందించడానికి మిమ్మల్ని అనుమతిస్తుంది మరియు వినియోగదారు-స్నేహపూర్వక ఇంటర్ఫేస్ను సృష్టించడం చాలా పని.
తర్వాత ఏం జరుగుతుందో కాలమే చెబుతుంది. పునరావృతం చేయవలసిన అనేక సూక్ష్మ నైపుణ్యాలు ఇంకా ఉన్నాయి, ఇంకా చాలా ప్రణాళికలు ఉన్నాయి, కానీ 3 వ సంస్కరణను సృష్టించి ఒక సంవత్సరం గడిచిపోయింది మరియు ఆలోచన పని చేస్తుందని మేము ఇప్పటికే చెప్పగలం. వెర్షన్ 3 యొక్క ప్రధాన ప్రతికూలత హార్డ్వేర్ వనరులు, అయితే అభివృద్ధి సౌలభ్యం కోసం మీరు సాధారణంగా చెల్లించాల్సి ఉంటుంది.
మూలం: www.habr.com