FreePBXని అర్థం చేసుకోవడం మరియు Bitrix24 మరియు మరిన్నింటితో అనుసంధానించడం

Bitrix24 CRM, వర్క్‌ఫ్లో, అకౌంటింగ్ మరియు మేనేజర్‌లు నిజంగా ఇష్టపడే మరియు IT సిబ్బంది నిజంగా ఇష్టపడని అనేక ఇతర అంశాలను మిళితం చేసే భారీ కలయిక. చిన్న క్లినిక్‌లు, తయారీదారులు మరియు బ్యూటీ సెలూన్‌లతో సహా చాలా చిన్న మరియు మధ్య తరహా కంపెనీలు పోర్టల్‌ని ఉపయోగిస్తాయి. నిర్వాహకులు "ప్రేమించే" ప్రధాన విధి టెలిఫోనీ మరియు CRM యొక్క ఏకీకరణ, ఏదైనా కాల్ వెంటనే CRM లో రికార్డ్ చేయబడినప్పుడు, క్లయింట్ కార్డ్‌లు సృష్టించబడతాయి, ఇన్‌కమింగ్ చేసినప్పుడు, క్లయింట్ గురించి సమాచారం ప్రదర్శించబడుతుంది మరియు అతను ఎవరో, అతను ఏమిటో మీరు వెంటనే చూడవచ్చు. అమ్మవచ్చు మరియు అతను ఎంత బాకీ ఉన్నాడు. కానీ Bitrix24 నుండి టెలిఫోనీ మరియు CRMతో దాని ఏకీకరణకు డబ్బు ఖర్చు అవుతుంది, కొన్నిసార్లు చాలా ఎక్కువ. వ్యాసంలో నేను ఓపెన్ టూల్స్ మరియు ప్రముఖ IP PBXతో ఏకీకృతం చేసే అనుభవాన్ని మీకు చెప్తాను freepbx, మరియు వివిధ భాగాల పని యొక్క తర్కాన్ని కూడా పరిగణించండి

నేను IP టెలిఫోనీని విక్రయించే మరియు కాన్ఫిగర్ చేసే, ఇంటిగ్రేట్ చేసే కంపెనీలో అవుట్‌సోర్సర్‌గా పని చేస్తున్నాను. Bitrix24ని కస్టమర్‌లు కలిగి ఉన్న PBXలతో, అలాగే వివిధ VDS కంపెనీల్లోని వర్చువల్ PBXలతో అనుసంధానించడానికి మేము దీనికి మరియు ఈ కంపెనీకి ఏదైనా అందించగలమా అని నన్ను అడిగినప్పుడు, నేను Googleకి వెళ్లాను. మరియు వాస్తవానికి అతను నాకు లింక్ ఇచ్చాడు habr లో వ్యాసం, అక్కడ వివరణ, మరియు గితుబ్ మరియు ప్రతిదీ పని చేస్తున్నట్లు అనిపిస్తుంది. కానీ ఈ పరిష్కారాన్ని ఉపయోగించడానికి ప్రయత్నిస్తున్నప్పుడు, Bitrix24 మునుపటిలాగా ఉండదు మరియు చాలా మళ్లీ చేయవలసి ఉంది. అదనంగా, FreePBX మీ కోసం ఒక బేర్ ఆస్టరిస్క్ కాదు, ఇక్కడ మీరు కాన్ఫిగరేషన్ ఫైల్‌లలో సౌలభ్యం మరియు హార్డ్‌కోర్ డయల్‌ప్లాన్‌ను ఎలా కలపాలి అనే దాని గురించి ఆలోచించాలి.

మేము పని యొక్క తర్కాన్ని అధ్యయనం చేస్తాము

కాబట్టి స్టార్టర్స్ కోసం, ఇది ఎలా పని చేయాలి. PBX వెలుపల నుండి కాల్ వచ్చినప్పుడు (ప్రొవైడర్ నుండి SIP ఆహ్వాన ఈవెంట్), డయల్‌ప్లాన్ (డయల్ ప్లాన్, డయల్‌ప్లాన్) ప్రాసెసింగ్ ప్రారంభమవుతుంది - కాల్‌తో ఏమి మరియు ఏ క్రమంలో చేయాలనే నియమాలు. మొదటి ప్యాకెట్ నుండి, మీరు చాలా సమాచారాన్ని పొందవచ్చు, తర్వాత దానిని నియమాలలో ఉపయోగించవచ్చు. SIP యొక్క అంతర్గత అంశాలను అధ్యయనం చేయడానికి ఒక అద్భుతమైన సాధనం ఎనలైజర్ sngrep (ссылка) ఇది పాపులర్ డిస్ట్రిబ్యూషన్‌లలో ఆప్ట్ ఇన్‌స్టాల్/యమ్ ఇన్‌స్టాల్ మరియు వంటి వాటి ద్వారా ఇన్‌స్టాల్ చేయబడుతుంది, అయితే ఇది మూలం నుండి కూడా నిర్మించబడుతుంది. కాల్ లాగ్ ఇన్ sngrep చూద్దాం

FreePBXని అర్థం చేసుకోవడం మరియు Bitrix24 మరియు మరిన్నింటితో అనుసంధానించడం

సరళీకృత రూపంలో, డయల్‌ప్లాన్ మొదటి ప్యాకెట్‌తో మాత్రమే వ్యవహరిస్తుంది, కొన్నిసార్లు సంభాషణ సమయంలో కూడా కాల్‌లు బదిలీ చేయబడతాయి, బటన్ ప్రెస్‌లు (DTMF), FollowMe, RingGroup, IVR మరియు ఇతర అనేక ఆసక్తికరమైన విషయాలు.

ఆహ్వాన ప్యాక్ లోపల ఏముంది

FreePBXని అర్థం చేసుకోవడం మరియు Bitrix24 మరియు మరిన్నింటితో అనుసంధానించడం

వాస్తవానికి, చాలా సాధారణ డయల్‌ప్లాన్‌లు మొదటి రెండు ఫీల్డ్‌లతో పని చేస్తాయి మరియు మొత్తం లాజిక్ DID మరియు కాలర్‌ఐడి చుట్టూ తిరుగుతుంది. DID - మేము ఎక్కడ కాల్ చేస్తున్నాము, కాలర్ ID - ఎవరు కాల్ చేస్తున్నారు.

కానీ అన్నింటికంటే, మాకు ఒక కంపెనీ ఉంది మరియు ఒక ఫోన్ లేదు - అంటే PBX నగర నంబర్‌లలో (రింగ్ గ్రూప్), IVR (హలో, మీరు కాల్ చేసారు ... ప్రెస్) కాల్ సమూహాలను (అనేక పరికరాలకు ఏకకాలంలో / వరుసగా రింగింగ్) కలిగి ఉంటుందని అర్థం. ఒకటి కోసం ...), సమాధానమిచ్చే యంత్రాలు (పదబంధాలు), సమయ పరిస్థితులు, ఇతర సంఖ్యలకు లేదా సెల్‌కి ఫార్వార్డ్ చేయడం (FollowMe, ఫార్వర్డ్). దీనర్థం వాస్తవానికి కాల్ ఎవరు స్వీకరిస్తారు మరియు కాల్ వచ్చినప్పుడు ఎవరితో సంభాషణ చేస్తారో నిస్సందేహంగా గుర్తించడం చాలా కష్టం. మా క్లయింట్‌ల PBXలో సాధారణ కాల్ ప్రారంభానికి ఉదాహరణ ఇక్కడ ఉంది

FreePBXని అర్థం చేసుకోవడం మరియు Bitrix24 మరియు మరిన్నింటితో అనుసంధానించడం

కాల్ విజయవంతంగా PBXలోకి ప్రవేశించిన తర్వాత, అది వివిధ "సందర్భాలలో" డయల్‌ప్లాన్ ద్వారా ప్రయాణిస్తుంది. ఆస్టరిస్క్ దృక్కోణం నుండి సందర్భం అనేది ఒక సంఖ్యాపరమైన ఆదేశాల సమితి, వీటిలో ప్రతి ఒక్కటి డయల్ చేసిన నంబర్ ద్వారా ఫిల్టర్‌ను కలిగి ఉంటుంది (దీనిని ఎక్స్‌టెన్ అంటారు, ప్రారంభ దశలో ఎక్స్‌టెన్=డిఐడి వద్ద బాహ్య కాల్ కోసం). డయల్‌ప్లాన్ లైన్‌లోని ఆదేశాలు ఏదైనా కావచ్చు - అంతర్గత విధులు (ఉదాహరణకు, అంతర్గత చందాదారుని కాల్ చేయండి - Dial(), ఫోన్ పెట్టు - Hangup()), షరతులతో కూడిన ఆపరేటర్లు (IF, ELSE, ExecIF మరియు ఇలాంటివి), ఈ సందర్భం యొక్క ఇతర నియమాలకు పరివర్తన (Goto, GotoIF), ఫంక్షన్ కాల్ (గోసబ్, మాక్రో) రూపంలో ఇతర సందర్భాలకు మార్పు. ప్రత్యేక ఆదేశం include имя_контекста, ఇది మరొక సందర్భం నుండి ప్రస్తుత సందర్భం ముగింపుకు ఆదేశాలను జోడిస్తుంది. చేర్చడం ద్వారా చేర్చబడిన ఆదేశాలు ఎల్లప్పుడూ అమలు చేయబడతాయి после ప్రస్తుత సందర్భం యొక్క ఆదేశాలు.

FreePBX యొక్క మొత్తం తర్కం గోసబ్, మాక్రో మరియు హ్యాండ్లర్ హ్యాండ్లర్ల ద్వారా చేర్చడం మరియు కాల్ చేయడం ద్వారా విభిన్న సందర్భాలను ఒకదానికొకటి చేర్చుకోవడంపై నిర్మించబడింది. ఇన్‌కమింగ్ FreePBX కాల్‌ల సందర్భాన్ని పరిగణించండి

FreePBXని అర్థం చేసుకోవడం మరియు Bitrix24 మరియు మరిన్నింటితో అనుసంధానించడం

కాల్ పై నుండి క్రిందికి అన్ని సందర్భాల గుండా వెళుతుంది, ప్రతి సందర్భంలో మాక్రోలు (మాక్రో), ఫంక్షన్‌లు (గోసబ్) లేదా కేవలం పరివర్తనాలు (గోటో) వంటి ఇతర సందర్భాలకు కాల్‌లు ఉండవచ్చు, కాబట్టి పిలవబడే నిజమైన చెట్టు మాత్రమే చేయగలదు. లాగ్‌లలో ట్రాక్ చేయబడుతుంది.

సాధారణ PBX కోసం ఒక సాధారణ సెటప్ రేఖాచిత్రం క్రింద చూపబడింది. కాల్ చేస్తున్నప్పుడు, ఇన్‌కమింగ్ మార్గాల్లో DID శోధించబడుతుంది, దాని కోసం తాత్కాలిక పరిస్థితులు తనిఖీ చేయబడతాయి, ప్రతిదీ క్రమంలో ఉంటే, వాయిస్ మెను ప్రారంభించబడుతుంది. దాని నుండి, బటన్ 1 లేదా సమయం ముగిసింది నొక్కడం ద్వారా, డయలింగ్ ఆపరేటర్ల సమూహానికి నిష్క్రమించండి. కాల్ ముగిసిన తర్వాత, hangupcall మాక్రో అని పిలుస్తారు, దీని తర్వాత ప్రత్యేక హ్యాండ్లర్లు (hangup హ్యాండ్లర్) మినహా డయల్‌ప్లాన్‌లో ఏమీ చేయలేరు.

FreePBXని అర్థం చేసుకోవడం మరియు Bitrix24 మరియు మరిన్నింటితో అనుసంధానించడం

ఈ కాల్ అల్గారిథమ్‌లో మేము CRMకి కాల్ ప్రారంభం గురించి సమాచారాన్ని ఎక్కడ అందించాలి, రికార్డింగ్ ఎక్కడ ప్రారంభించాలి, రికార్డింగ్‌ను ఎక్కడ ముగించాలి మరియు CRMకి కాల్ గురించి సమాచారంతో పాటుగా పంపాలి?

బాహ్య వ్యవస్థలతో ఏకీకరణ

PBX మరియు CRM ఇంటిగ్రేషన్ అంటే ఏమిటి? ఇవి ఈ రెండు ప్లాట్‌ఫారమ్‌ల మధ్య డేటా మరియు ఈవెంట్‌లను మార్చే సెట్టింగ్‌లు మరియు ప్రోగ్రామ్‌లు మరియు వాటిని ఒకదానికొకటి పంపుతాయి. స్వతంత్ర వ్యవస్థలు కమ్యూనికేట్ చేయడానికి అత్యంత సాధారణ మార్గం APIల ద్వారా మరియు APIలను యాక్సెస్ చేయడానికి అత్యంత ప్రజాదరణ పొందిన మార్గం HTTP REST. కానీ నక్షత్రం కోసం కాదు.

ఆస్టరిస్క్ లోపల:

  • AGI - డయల్‌ప్లాన్‌లో ప్రధానంగా ఉపయోగించే బాహ్య ప్రోగ్రామ్‌లు / భాగాలకు సింక్రోనస్ కాల్, వంటి లైబ్రరీలు ఉన్నాయి phpagi, PAGI

  • AMI - ఈవెంట్‌లకు సభ్యత్వం పొందడం మరియు టెక్స్ట్ ఆదేశాలను నమోదు చేయడం అనే సూత్రంపై పనిచేసే టెక్స్ట్ TCP సాకెట్, లోపల నుండి SMTPని పోలి ఉంటుంది, ఈవెంట్‌లను ట్రాక్ చేయగలదు మరియు కాల్‌లను నిర్వహించగలదు, లైబ్రరీ ఉంది పామి - ఆస్టరిస్క్‌తో కనెక్షన్‌ని సృష్టించడానికి అత్యంత ప్రజాదరణ పొందినది

AMI అవుట్‌పుట్ ఉదాహరణ

ఈవెంట్: కొత్త ఛానెల్
ప్రత్యేక హక్కు: కాల్, అన్నీ
ఛానెల్: PJSIP/VMS_pjsip-0000078b
ఛానెల్ స్థితి: 4
ChannelStateDesc: రింగ్
కాలర్ ID నంబర్: 111222
కాలర్ID పేరు: 111222
కనెక్ట్ చేయబడిన లైన్ నంబర్:
కనెక్ట్ చేయబడిన లైన్ పేరు:
భాష: Telugu
ఖాతా కోడ్:
సందర్భం: నుండి-pstn
పొడిగింపు: s
ప్రాధాన్యత: 1
ప్రత్యేకత: 1599589046.5244
లింక్డిడ్: 1599589046.5244

  • ARI అనేది JSON ఫార్మాట్‌లో REST, WebSocket ద్వారా రెండింటి మిశ్రమం - కానీ తాజా లైబ్రరీలు మరియు రేపర్‌లతో, చాలా బాగా లేదు, ఆఫ్‌హ్యాండ్ కనుగొనబడింది (phparia, phpari) ఇది సుమారు 3 సంవత్సరాల క్రితం వారి అభివృద్ధిలో మారింది.

కాల్ ప్రారంభించబడినప్పుడు ARI అవుట్‌పుట్ యొక్క ఉదాహరణ

{ "variable":"CallMeCallerIDName", "value":"111222", "type":"ChannelVarset", "timestamp":"2020-09-09T09:38:36.269+0000", "channel":{ "id »:»1599644315.5334″, «పేరు»:»PJSIP/VMSpjsip-000007b6″, "state":"రింగ్", "కాలర్":{ "name":"111222″, "number":"111222″ }, "కనెక్ట్ చేయబడింది":{ "name":"", "number" :"" }, "accountcode":"", "dialplan":{ "context":"from-pstn", "exten":"s", "priority":2, "appపేరు":"స్తబ్దత", "యాప్డేటా":"hello-world" }, "creationtime":"2020-09-09T09:38:35.926+0000", "language":"en" }, "asteriskid":"48:5b:aa:aa:aa:aa", "application":"hello-world" }

సౌలభ్యం లేదా అసౌకర్యం, నిర్దిష్ట APIతో పని చేసే అవకాశం లేదా అసంభవం పరిష్కరించాల్సిన పనుల ద్వారా నిర్ణయించబడతాయి. CRMతో ఏకీకరణ కోసం పనులు క్రింది విధంగా ఉన్నాయి:

  • కాల్ ప్రారంభాన్ని ట్రాక్ చేయండి, అది ఎక్కడ బదిలీ చేయబడిందో, కాలర్ఐడి, డిఐడి, ప్రారంభ మరియు ముగింపు సమయాలను తీసివేయండి, బహుశా డైరెక్టరీ నుండి డేటా (ఫోన్ మరియు CRM వినియోగదారు మధ్య కనెక్షన్ కోసం శోధించడానికి)

  • కాల్ రికార్డింగ్‌ను ప్రారంభించండి మరియు ముగించండి, కావలసిన ఫార్మాట్‌లో సేవ్ చేయండి, ఫైల్ ఎక్కడ ఉందో రికార్డింగ్ చివరిలో తెలియజేయండి

  • బాహ్య ఈవెంట్‌లో (ప్రోగ్రామ్ నుండి) కాల్‌ని ప్రారంభించండి, అంతర్గత నంబర్‌కు, బాహ్య నంబర్‌కు కాల్ చేసి, వాటిని కనెక్ట్ చేయండి

  • ఐచ్ఛికం: స్థలం లేనప్పుడు (CRM ప్రకారం) కాల్‌ల స్వయంచాలక బదిలీ కోసం CRM, డయలర్ సమూహాలతో మరియు FollowMEతో ఏకీకృతం చేయండి

ఈ పనులన్నీ AMI లేదా ARI ద్వారా పరిష్కరించబడతాయి, కానీ ARI చాలా తక్కువ సమాచారాన్ని అందిస్తుంది, చాలా ఈవెంట్‌లు లేవు, AMI ఇప్పటికీ కలిగి ఉన్న అనేక వేరియబుల్స్ (ఉదాహరణకు, మాక్రో కాల్‌లు, మాక్రోలలో వేరియబుల్స్ సెట్టింగ్, కాల్ రికార్డింగ్‌తో సహా) ట్రాక్ చేయబడవు. కాబట్టి, సరైన మరియు ఖచ్చితమైన ట్రాకింగ్ కోసం, ప్రస్తుతానికి AMIని ఎంచుకుందాం (కానీ పూర్తిగా కాదు). అదనంగా (అలాగే, ఇది లేకుండా ఎక్కడ ఉంటుంది, మేము సోమరితనం) - అసలు పనిలో (habr లో వ్యాసం) PAMI ఉపయోగించండి. *అప్పుడు మీరు ARIకి తిరిగి వ్రాయడానికి ప్రయత్నించాలి, కానీ అది పని చేస్తుందనే వాస్తవం కాదు.

ఏకీకరణను తిరిగి ఆవిష్కరించడం

మా FreePBX కాల్ ప్రారంభం, ముగింపు సమయం, నంబర్‌లు, రికార్డ్ చేసిన ఫైల్‌ల పేర్ల గురించి సరళమైన మార్గాల్లో AMIకి నివేదించగలిగేలా చేయడానికి, అసలు రచయితల మాదిరిగానే అదే ట్రిక్ ఉపయోగించి కాల్ వ్యవధిని లెక్కించడం చాలా సులభం. - మీ వేరియబుల్‌లను నమోదు చేయండి మరియు వాటి ఉనికి కోసం అవుట్‌పుట్‌ను అన్వయించండి. ఫిల్టర్ ఫంక్షన్ ద్వారా దీన్ని చేయమని PAMI సూచిస్తుంది.

కాల్ ప్రారంభ సమయం కోసం మీ స్వంత వేరియబుల్‌ను సెట్ చేయడానికి ఇక్కడ ఒక ఉదాహరణ ఉంది (s అనేది DID శోధనను ప్రారంభించే ముందు ప్రదర్శించబడే డయల్‌ప్లాన్‌లోని ప్రత్యేక సంఖ్య)

[ext-did-custom]

exten => s,1,Set(CallStart=${STRFTIME(epoch,,%s)})

ఈ లైన్ కోసం ఒక ఉదాహరణ AMI ఈవెంట్

ఈవెంట్: కొత్త ఛానెల్

ప్రత్యేక హక్కు: కాల్, అన్నీ

ఛానెల్: PJSIP/VMS_pjsip-0000078b

ఛానెల్ స్థితి: 4

ChannelStateDesc: రింగ్

కాలర్ ID నంబర్: 111222

కాలర్ID పేరు: 111222

కనెక్ట్ చేయబడిన లైన్ నంబర్:

కనెక్ట్ చేయబడిన లైన్ పేరు:

భాష: Telugu

ఖాతా కోడ్:

సందర్భం: నుండి-pstn

పొడిగింపు: s

ప్రాధాన్యత: 1

ప్రత్యేకత: 1599589046.5244

లింక్డిడ్: 1599589046.5244

అప్లికేషన్: AppDataని సెట్ చేయండి:

కాల్‌స్టార్ట్=1599571046

ఎందుకంటే FreePBX విస్తరణ.conf మరియు expendion_ ఫైల్‌లను ఓవర్‌రైట్ చేస్తుందిఅదనపు.conf, మేము ఫైల్‌ని ఉపయోగిస్తాము విస్తరణ_కస్టమ్.conf

expendion_custom.conf పూర్తి కోడ్

[globals]	
;; Проверьте пути и права на папки - юзер asterisk должен иметь права на запись
;; Сюда будет писаться разговоры
WAV=/var/www/html/callme/records/wav 
MP3=/var/www/html/callme/records/mp3

;; По этим путям будет воспроизводится и скачиваться запись
URLRECORDS=https://www.host.ru/callmeplus/records/mp3

;; Адрес для калбека при исходящем вызове
URLPHP=https://www.host.ru/callmeplus

;; Да пишем разговоры
RECORDING=1

;; Это макрос для записи разговоров в нашу папку. 
;; Можно использовать и системную запись, но пока пусть будет эта - 
;; она работает
[recording]
exten => ~~s~~,1,Set(LOCAL(calling)=${ARG1})
exten => ~~s~~,2,Set(LOCAL(called)=${ARG2})
exten => ~~s~~,3,GotoIf($["${RECORDING}" = "1"]?4:14)
exten => ~~s~~,4,Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${calling}-${called})
exten => ~~s~~,5,Set(datedir=${STRFTIME(${EPOCH},,%Y/%m/%d)})
exten => ~~s~~,6,System(mkdir -p ${MP3}/${datedir})
exten => ~~s~~,7,System(mkdir -p ${WAV}/${datedir})
exten => ~~s~~,8,Set(monopt=nice -n 19 /usr/bin/lame -b 32  --silent "${WAV}/${datedir}/${fname}.wav"  "${MP3}/${datedir}/${fname}.mp3" && rm -f "${WAV}/${fname}.wav" && chmod o+r "${MP3}/${datedir}/${fname}.mp3")
exten => ~~s~~,9,Set(FullFname=${URLRECORDS}/${datedir}/${fname}.mp3)
exten => ~~s~~,10,Set(CDR(filename)=${fname}.mp3)
exten => ~~s~~,11,Set(CDR(recordingfile)=${fname}.wav)
exten => ~~s~~,12,Set(CDR(realdst)=${called})
exten => ~~s~~,13,MixMonitor(${WAV}/${datedir}/${fname}.wav,b,${monopt})
exten => ~~s~~,14,NoOp(Finish if_recording_1)
exten => ~~s~~,15,Return()


;; Это основной контекст для начала разговора
[ext-did-custom]

;; Это хулиганство, делать это так и здесь, но работает - добавляем к номеру '8'
exten =>  s,1,Set(CALLERID(num)=8${CALLERID(num)})

;; Тут всякие переменные для скрипта
exten =>  s,n,Gosub(recording,~~s~~,1(${CALLERID(number)},${EXTEN}))
exten =>  s,n,ExecIF(${CallMeCallerIDName}?Set(CALLERID(name)=${CallMeCallerIDName}):NoOp())
exten =>  s,n,Set(CallStart=${STRFTIME(epoch,,%s)})
exten =>  s,n,Set(CallMeDISPOSITION=${CDR(disposition)})

;; Самое главное! Обработчик окончания разговора. 
;; Обычные пути обработки конца через (exten=>h,1,чтототут) в FreePBX не работают - Macro(hangupcall,) все портит. 
;; Поэтому вешаем Hangup_Handler на окончание звонка
exten => s,n,Set(CHANNEL(hangup_handler_push)=sub-call-from-cid-ended,s,1(${CALLERID(num)},${EXTEN}))

;; Обработчик окончания входящего вызова
[sub-call-from-cid-ended]

;; Сообщаем о значениях при конце звонка
exten => s,1,Set(CDR_PROP(disable)=true)
exten => s,n,Set(CallStop=${STRFTIME(epoch,,%s)})
exten => s,n,Set(CallMeDURATION=${MATH(${CallStop}-${CallStart},int)})

;; Статус вызова - Ответ, не ответ...
exten => s,n,Set(CallMeDISPOSITION=${CDR(disposition)})
exten => s,n,Return


;; Обработчик исходящих вызовов - все аналогичено
[outbound-allroutes-custom]

;; Запись
exten => _.,1,Gosub(recording,~~s~~,1(${CALLERID(number)},${EXTEN}))
;; Переменные
exten => _.,n,Set(__CallIntNum=${CALLERID(num)})
exten => _.,n,Set(CallExtNum=${EXTEN})
exten => _.,n,Set(CallStart=${STRFTIME(epoch,,%s)})
exten => _.,n,Set(CallmeCALLID=${SIPCALLID})

;; Вешаем Hangup_Handler на окончание звонка
exten => _.,n,Set(CHANNEL(hangup_handler_push)=sub-call-internal-ended,s,1(${CALLERID(num)},${EXTEN}))

;; Обработчик окончания исходящего вызова
[sub-call-internal-ended]

;; переменные
exten => s,1,Set(CDR_PROP(disable)=true)
exten => s,n,Set(CallStop=${STRFTIME(epoch,,%s)})
exten => s,n,Set(CallMeDURATION=${MATH(${CallStop}-${CallStart},int)})
exten => s,n,Set(CallMeDISPOSITION=${CDR(disposition)})

;; Вызов скрипта, который сообщит о звонке в CRM - это исходящий, 
;; так что по факту окончания
exten => s,n,System(curl -s ${URLPHP}/CallMeOut.php --data action=sendcall2b24 --data ExtNum=${CallExtNum} --data call_id=${SIPCALLID} --data-urlencode FullFname='${FullFname}' --data CallIntNum=${CallIntNum} --data CallDuration=${CallMeDURATION} --data-urlencode CallDisposition='${CallMeDISPOSITION}')
exten => s,n,Return

అసలు వ్యాసం రచయితల అసలు డయల్‌ప్లాన్ నుండి ఫీచర్ మరియు వ్యత్యాసం -

  • FreePBX కోరుకున్నట్లుగా .conf ఫార్మాట్‌లో డయల్‌ప్లాన్ చేయండి (అవును, ఇది .ael చేయవచ్చు, కానీ అన్ని వెర్షన్‌లు కాదు మరియు ఇది ఎల్లప్పుడూ అనుకూలమైనది కాదు)

  • ముగింపుని exten=>h ద్వారా ప్రాసెస్ చేయడానికి బదులుగా, hangup_handler ద్వారా ప్రాసెసింగ్ ప్రవేశపెట్టబడింది, ఎందుకంటే FreePBX డయల్‌ప్లాన్ దానితో మాత్రమే పని చేస్తుంది.

  • స్థిర స్క్రిప్ట్ కాల్ స్ట్రింగ్, జోడించిన కోట్‌లు మరియు బాహ్య కాల్ నంబర్ ExtNum

  • ప్రాసెసింగ్ _కస్టమ్ కాంటెక్స్ట్‌లకు తరలించబడింది మరియు FreePBX కాన్ఫిగర్‌లను తాకకుండా లేదా సవరించకుండా మిమ్మల్ని అనుమతిస్తుంది - ఇన్‌కమింగ్ [ఎక్స్-డిడ్-కస్టమ్], అవుట్‌గోయింగ్ ద్వారా [అవుట్‌బౌండ్-ఆల్‌రూట్స్-కస్టమ్]

  • సంఖ్యలకు బైండింగ్ లేదు - ఫైల్ సార్వత్రికమైనది మరియు సర్వర్‌కు మార్గం మరియు లింక్ కోసం మాత్రమే కాన్ఫిగర్ చేయబడాలి

ప్రారంభించడానికి, మీరు లాగిన్ మరియు పాస్‌వర్డ్ ద్వారా AMIలో స్క్రిప్ట్‌లను కూడా అమలు చేయాలి - దీని కోసం, FreePBXలో _కస్టమ్ ఫైల్ కూడా ఉంది

manager_custom.conf ఫైల్

;;  это логин
[callmeplus]
;; это пароль
secret = trampampamturlala
deny = 0.0.0.0/0.0.0.0

;; я работаю с локальной машиной - но если надо, можно и другие прописать
permit = 127.0.0.1/255.255.255.255
read = system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
write = system,call,agent,log,verbose,user,config,command,reporting,originate

ఈ రెండు ఫైల్‌లను తప్పనిసరిగా /etc/asteriskలో ఉంచాలి, ఆపై కాన్ఫిగర్‌లను మళ్లీ చదవండి (లేదా నక్షత్రాన్ని పునఃప్రారంభించండి)

# astrisk -rv
  Connected to Asterisk 16.6.2 currently running on freepbx (pid = 31629)
#freepbx*CLI> dialplan reload
     Dialplan reloaded.
#freepbx*CLI> exit

ఇప్పుడు PHP కి వెళ్దాం

స్క్రిప్ట్‌లను ప్రారంభించడం మరియు సేవను సృష్టించడం

AMI కోసం సేవ అయిన Bitrix 24తో పని చేసే పథకం పూర్తిగా సరళమైనది మరియు పారదర్శకంగా ఉండదు కాబట్టి, ఇది ప్రత్యేకంగా చర్చించబడాలి. ఆస్టరిస్క్, AMI యాక్టివేట్ అయినప్పుడు, కేవలం పోర్ట్‌ను తెరుస్తుంది మరియు అంతే. క్లయింట్ చేరినప్పుడు, అది అధికారాన్ని అభ్యర్థిస్తుంది, ఆపై క్లయింట్ అవసరమైన ఈవెంట్‌లకు సభ్యత్వాన్ని పొందుతుంది. ఈవెంట్‌లు సాదా వచనంలో వస్తాయి, వీటిని PAMI నిర్మాణాత్మక వస్తువులుగా మారుస్తుంది మరియు ఆసక్తి, ఫీల్డ్‌లు, సంఖ్యలు మొదలైన వాటి కోసం మాత్రమే ఫిల్టరింగ్ ఫంక్షన్‌ను సెట్ చేసే సామర్థ్యాన్ని అందిస్తుంది.

కాల్ వచ్చిన వెంటనే, NewExten ఈవెంట్ పేరెంట్ [from-pstn] సందర్భం నుండి ప్రారంభించబడుతుంది, ఆపై అన్ని ఈవెంట్‌లు సందర్భాలలోని పంక్తుల క్రమంలో వెళ్తాయి. _కస్టమ్ డయల్‌ప్లాన్‌లో పేర్కొన్న CallMeCallerIDName మరియు CallStart వేరియబుల్స్ నుండి సమాచారం అందుకున్నప్పుడు,

  1. కాల్ వచ్చిన పొడిగింపు నంబర్‌కు సంబంధించిన యూజర్‌ఐడిని అభ్యర్థించడం. ఇది డయల్-అప్ సమూహం అయితే? ప్రశ్న రాజకీయంగా ఉంది, మీరు అందరికీ ఒకేసారి కాల్‌ని సృష్టించాలా (అందరూ ఒకేసారి కాల్ చేసినప్పుడు) లేదా కాల్ చేస్తున్నప్పుడు వారు పిలిచినట్లుగా సృష్టించాలా? చాలా మంది క్లయింట్లు Fisrt అందుబాటులో ఉన్న వ్యూహాన్ని కలిగి ఉన్నారు, కాబట్టి దీనితో ఎటువంటి సమస్య లేదు, కేవలం ఒక కాల్ మాత్రమే. అయితే సమస్య పరిష్కారం కావాలి.

  2. Bitrix24లో కాల్ రిజిస్ట్రేషన్ ఫంక్షన్, ఇది CallIDని అందిస్తుంది, ఇది కాల్ పారామీటర్‌లను మరియు రికార్డింగ్‌కి లింక్‌ను నివేదించడానికి అవసరం. పొడిగింపు సంఖ్య లేదా వినియోగదారు ID అవసరం

FreePBXని అర్థం చేసుకోవడం మరియు Bitrix24 మరియు మరిన్నింటితో అనుసంధానించడం

కాల్ ముగిసిన తర్వాత, రికార్డ్ డౌన్‌లోడ్ ఫంక్షన్ అని పిలుస్తారు, ఇది ఏకకాలంలో కాల్ పూర్తి స్థితిని నివేదిస్తుంది (బిజీ, సమాధానం లేదు, విజయం) మరియు రికార్డ్‌తో mp3 ఫైల్‌కు లింక్‌ను డౌన్‌లోడ్ చేస్తుంది (ఏదైనా ఉంటే).

CallMeIn.php మాడ్యూల్ నిరంతరం రన్ చేయవలసి ఉన్నందున, దాని కోసం SystemD స్టార్టప్ ఫైల్ సృష్టించబడింది callme.service, ఇది తప్పనిసరిగా /etc/systemd/system/callme.serviceలో ఉంచాలి

[Unit]
Description=CallMe

[Service]
WorkingDirectory=/var/www/html/callmeplus
ExecStart=/usr/bin/php /var/www/html/callmeplus/CallMeIn.php 2>&1 >>/var/log/callmeplus.log
ExecStop=/bin/kill -WINCH ${MAINPID}
KillSignal=SIGKILL

Restart=on-failure
RestartSec=10s

#тут надо смотреть,какие права на папки
#User=www-data  #Ubuntu - debian
#User=nginx #Centos

[Install]
WantedBy=multi-user.target

స్క్రిప్ట్ ప్రారంభించడం మరియు ప్రారంభించడం systemctl లేదా సేవ ద్వారా జరుగుతుంది

# systemctl enable callme
# systemctl start callme

సేవ అవసరమైన విధంగా పునఃప్రారంభించబడుతుంది (క్రాష్‌ల సందర్భంలో). ఇన్‌బాక్స్ ట్రాకింగ్ సేవకు వెబ్ సర్వర్ ఇన్‌స్టాల్ చేయాల్సిన అవసరం లేదు, php మాత్రమే అవసరం (ఇది ఖచ్చితంగా FeePBX సర్వర్‌లో ఉంటుంది). కానీ వెబ్ సర్వర్ ద్వారా కాల్ రికార్డ్‌లకు యాక్సెస్ లేనప్పుడు (httpsతో కూడా), కాల్ రికార్డ్‌లను వినడం సాధ్యం కాదు.

ఇప్పుడు అవుట్‌గోయింగ్ కాల్‌ల గురించి మాట్లాడుకుందాం. CallMeOut.php స్క్రిప్ట్‌కు రెండు విధులు ఉన్నాయి:

  • php స్క్రిప్ట్ కోసం అభ్యర్థన స్వీకరించబడినప్పుడు కాల్ ప్రారంభించడం (బిట్రిక్స్‌లోని "కాల్" బటన్‌ను ఉపయోగించడంతో సహా). ఇది వెబ్ సర్వర్ లేకుండా పని చేయదు, అభ్యర్థన HTTP POST ద్వారా స్వీకరించబడింది, అభ్యర్థనలో టోకెన్ ఉంటుంది

  • Bitrixలో కాల్, దాని పారామితులు మరియు రికార్డుల గురించి సందేశం. కాల్ ముగిసినప్పుడు [సబ్-కాల్-ఇంటర్నల్-ఎండెడ్] డయల్‌ప్లాన్‌లో ఆస్టరిస్క్ ద్వారా తొలగించబడింది

FreePBXని అర్థం చేసుకోవడం మరియు Bitrix24 మరియు మరిన్నింటితో అనుసంధానించడం

వెబ్ సర్వర్ రెండు విషయాల కోసం మాత్రమే అవసరం - Bitrix రికార్డ్ ఫైల్‌లను డౌన్‌లోడ్ చేయడం (HTTPS ద్వారా) మరియు CallMeOut.php స్క్రిప్ట్‌కి కాల్ చేయడం. మీరు అంతర్నిర్మిత FreePBX సర్వర్‌ని ఉపయోగించవచ్చు, ఫైల్‌లు /var/www/html, మీరు మరొక సర్వర్‌ని ఇన్‌స్టాల్ చేయవచ్చు లేదా వేరొక మార్గాన్ని పేర్కొనవచ్చు.

వెబ్ సర్వర్

స్వతంత్ర అధ్యయనం కోసం వెబ్ సర్వర్ సెటప్‌ను వదిలివేద్దాం (టైట్స్, టైట్స్, టైట్స్) మీకు డొమైన్ లేకపోతే, మీరు FreeDomain( https://www.freenom.com/ru/index.html), ఇది మీ తెలుపు IP కోసం మీకు ఉచిత పేరును ఇస్తుంది (బాహ్య చిరునామా మాత్రమే ఉన్నట్లయితే రూటర్ ద్వారా పోర్ట్‌లు 80, 443ని ఫార్వార్డ్ చేయడం మర్చిపోవద్దు). మీరు ఇప్పుడే DNS డొమైన్‌ను సృష్టించినట్లయితే, అన్ని సర్వర్‌లు లోడ్ అయ్యే వరకు మీరు (15 నిమిషాల నుండి 48 గంటల వరకు) వేచి ఉండాలి. దేశీయ ప్రొవైడర్లతో పని చేసిన అనుభవం ప్రకారం - 1 గంట నుండి ఒక రోజు వరకు.

ఇన్‌స్టాలేషన్ ఆటోమేషన్

ఇన్‌స్టాలేషన్‌ను మరింత సులభతరం చేయడానికి గితుబ్‌లో ఇన్‌స్టాలర్ అభివృద్ధి చేయబడింది. కానీ ఇది కాగితంపై మృదువైనది - మేము అన్నింటినీ మాన్యువల్‌గా ఇన్‌స్టాల్ చేస్తున్నప్పుడు, వీటన్నిటితో టింకర్ చేసిన తర్వాత ఎవరితో స్నేహితులు, ఎవరు ఎక్కడికి వెళతారు మరియు ఎలా డీబగ్ చేయాలో స్పష్టంగా అర్థమైంది. ఇంకా ఇన్‌స్టాలర్ లేదు

డాకర్

మీరు పరిష్కారాన్ని త్వరగా ప్రయత్నించాలనుకుంటే - డాకర్‌తో ఒక ఎంపిక ఉంది - త్వరగా ఒక కంటైనర్‌ను సృష్టించండి, దానికి పోర్ట్‌లను వెలుపల ఇవ్వండి, సెట్టింగ్‌ల ఫైల్‌లను స్లిప్ చేసి ప్రయత్నించండి (మీకు ఇప్పటికే సర్టిఫికేట్ ఉంటే, ఇది LetsEncrypt కంటైనర్‌తో ఎంపిక. , మీరు రివర్స్ ప్రాక్సీని FreePBX వెబ్ సర్వర్‌కి దారి మళ్లించాలి (మేము దీనికి మరో పోర్ట్ 88 అని ఇచ్చాము), దీని ఆధారంగా డాకర్‌లో LetsEncrypt చేయాలి ఈ వ్యాసం

మీరు డౌన్‌లోడ్ చేసిన ప్రాజెక్ట్ ఫోల్డర్‌లో (git క్లోన్ తర్వాత) ఫైల్‌ను రన్ చేయాలి, అయితే ముందుగా ఆస్టరిస్క్ కాన్ఫిగ్స్ (నక్షత్ర ఫోల్డర్)లోకి ప్రవేశించి, అక్కడ మీ సైట్ యొక్క రికార్డ్‌లు మరియు URLకి పాత్‌లను వ్రాయండి.

version: '3.3'
services:
  nginx:
    image: nginx:1.15-alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/ssl_docker.conf:/etc/nginx/conf.d/ssl_docker.conf
  certbot:
    image: certbot/certbot
  freepbx:
    image: flaviostutz/freepbx
    ports:
      - 88:80 # для настройки
      - 5060:5060/udp
      - 5160:5160/udp
      - 127.0.0.1:5038:5038 # для CallMeOut.php
#      - 3306:3306
      - 18000-18100:18000-18100/udp
    restart: always
    environment:
      - ADMIN_PASSWORD=admin123
    volumes:
      - backup:/backup
      - recordings:/var/spool/asterisk/monitor
      - ./callme:/var/www/html/callme
      - ./systemd/callme.service:/etc/systemd/system/callme.conf
      - ./asterisk/manager_custom.conf:/etc/asterisk/manager_custom.conf
      - ./asterisk/extensions_custom.conf:/etc/asterisk/extensions_custom.conf
#      - ./conf/startup.sh:/startup.sh

volumes:
  backup:
  recordings:

ఈ docker-compose.yaml ఫైల్ దీని ద్వారా అమలు చేయబడుతుంది

docker-compose up -d

nginx ప్రారంభం కాకపోతే, nginx/ssl_docker.conf ఫోల్డర్‌లోని కాన్ఫిగరేషన్‌లో ఏదో తప్పు ఉంది

ఇతర ఏకీకరణలు

మరియు అదే సమయంలో కొన్ని CRMలను స్క్రిప్ట్‌లలో ఎందుకు ఉంచకూడదు అని మేము అనుకున్నాము. మేము అనేక ఇతర CRM APIలను అధ్యయనం చేసాము, ప్రత్యేకించి ఉచిత అంతర్నిర్మిత PBX - ShugarCRM మరియు Vtiger మరియు అవును! అవును, సూత్రం అదే. కానీ ఇది మరొక కథ, మేము తర్వాత విడిగా గితుబ్‌కి అప్‌లోడ్ చేస్తాము.

సూచనలు

నిరాకరణ: వాస్తవికతతో ఏదైనా సారూప్యత కల్పితం మరియు అది నేను కాదు.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి