
ãŸããPBXã®ã¢ãŒããã¯ãã£ãšæ©èœã決å®ããŸãããã®èšäºã§ã¯ããªãã£ã¹ã§ãã¬ãã©ããŒãæŽçããã®ã«é©ããåºæ¬ããŒãžã§ã³ãæ€èšããŸããå¿ èŠã«å¿ããŠãã¹ã¯ãªãããèŠä»¶ã«åŸã£ãŠã«ã¹ã¿ãã€ãºã§ããŸãããããã«ã€ããŠã¯åŸã§è©³ãã説æããŸãã 次ã®ã¹ããŒã ã«åŸã£ãŠé»è©±äº€æãæ§ç¯ããŸãã

PBXãŠãŒã¶ãŒã¯ãäºãã«é»è©±ããããããå®éã®é»è©±çªå·ã«é»è©±ãããããããããšãã§ããŸãããŠãŒã¶ãŒïŒãªãã¬ãŒã¿ãŒïŒã®å¥ã®ã°ã«ãŒãã¯ãéåžžã®é»è©±ïŒè©³çŽ°ã¯åŸè¿°ïŒãŸãã¯SIPãä»ããŠPBXã«çä¿¡ããçä¿¡ãåä¿¡ã§ããŸããå¿ èŠã«å¿ããŠåéã SIPé»è©±-SIPãWeb SDK / Mobile SDK-VoxImplantã®é©åãªSDKã䜿çšããŠäœæããããã©ãŠã¶ãŸãã¯ã¹ããŒããã©ã³çšã®ã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ããµããŒããããœãããã©ã³ãŸãã¯ã¢ã€ãã³é»è©±ã
ãããã£ãŠãIP PBXãäœæããã«ã¯ãç¡æã®VoxImplantéçºè ã¢ã«ãŠã³ããå¿ èŠã§ããããã¯https://voximplant.com/sign-upããååŸã§ããŸãã
ã¢ã«ãŠã³ããäœæããŠæå¹ã«ããåŸãã³ã³ãããŒã«ããã«https://manage.voximplant.com/ã«ã¢ã¯ã»ã¹ã㊠ãäž»ã«ä»åŸã®ãã¹ãŠã®äœæ¥ãè¡ããŸãã æåã«ãPBXã®ãŠãŒã¶ãŒãšãªãã¬ãŒã¿ãŒã«å¯Ÿå¿ãããŠãŒã¶ãŒïŒãŠãŒã¶ãŒïŒãäœæããå¿ èŠããããŸãããŠãŒã¶ãŒãäœæãããšãããŠãŒã¶ãŒãå¥ã®å人ã¢ã«ãŠã³ãVoxImplantïŒå¥åã®ã¢ã«ãŠã³ãæ®é«ïŒãæã£ãŠãããã圌ã®åŒã³åºããã¢ã«ãŠã³ãã®äžè¬ã¢ã«ãŠã³ãããå·®ãåŒãããããéžæã§ããŸãããã©ã«ãïŒ-äœãå€æŽããŠããŸããããããã©ã«ãã§å€æŽããŸãã éèŠïŒãã°ã€ã³/ãŠãŒã¶ãŒåïŒ101ã102ã103ãªã©ïŒã«ã¯3æ¡ã®æ°åã³ãŒãã䜿çšããŸããã¹ã¯ãªããã§ã¯ããã®åœ¢åŒããé²ããŸãã ããã§ãPBXæ©èœã®äœæã«çŽæ¥é²ãããšãã§ããŸããVoxImplantãµãŒããŒã¢ããªã±ãŒã·ã§ã³ã¯ããã©ãããã©ãŒã ãééããã³ãŒã«ãåŠçããããã®äžé£ã®ã·ããªãªã§ãã ãããã®ã¹ã¯ãªããã¯éåžžã®Javascriptã§èšè¿°ãããŠãããVoxImplanté¢æ°ãæäœããããã«ããã€ãã®åå空éãšã¯ã©ã¹ã䜿çšã§ããŸãïŒè©³çŽ°ã«ã€ããŠã¯ãªã³ã¯ãåç §ããŠãã ãã ïŒã ã¹ã¯ãªããã¯ããã·ããªãªãã»ã¯ã·ã§ã³ã§äœæããã³ç·šéãããŸãã åèšã§ãçä¿¡ãçºä¿¡ãããã³ãŠãŒã¶ãŒéã®é話ã®3çš®é¡ã®é話åŠçã·ããªãªããããŸãããããããPBXå ¥åãPBXåºåãããã³PBXããŒã«ã«ãšåŒã³ãŸãã æãåçŽãªPBXããŒã«ã«ããå§ããŸãããã
VoxEngine.forwardCallToUser();
ãããã ãã§ããïŒããšããªãã¯å°ããŸã:)ã¯ããããã ãã§ãããªããªãã forwardCallToUserã¯ãã¢ããªã±ãŒã·ã§ã³ã®äœæãé«éåããä¿é²ããããã«äœæãããã«ããŒé¢æ°ã®1ã€ã ããã§ãã å®éããã®é¢æ°ã®èåŸã«ã¯Javaã³ãŒãã®äžéšããããŸãïŒ
VoxEngine.addEventListener(AppEvents.CallAlerting, function(e) { var newCall = this.callUser(e.destination, e.callerid, e.displayName); VoxEngine.easyProcess(e.call, newCall); });
easyProcessããã1ã€ã®ãã«ããŒé¢æ°ã§ããå ŽåãVoxEngineã®ããã¥ã¡ã³ãã§ãã¹ãŠã®é¢æ°ã®è©³çŽ°æ å ±ãèŠã€ããããšãã§ããŸããçŸåšVoxImplantãå匷ããå¿ èŠã¯ãªãã®ã§ã詳现ã«é²ãããšãªãç¶è¡ããŸãã 次ã®ã¹ã¯ãªããïŒPBX outïŒã¯ãéåžžã®é»è©±çªå·ã«çºä¿¡åŒã³åºããéä¿¡ããŸãã
VoxEngine.addEventListener(AppEvents.CallAlerting, function (e) { var call2 = VoxEngine.callPSTN(e.destination.substring(1), "74957893798"); VoxEngine.easyProcess(e.call, call2); });
ãã®ã³ãŒãã§ã¯ã callPSTNé¢æ°ã䜿çšããŠãçºä¿¡è ID-74957893798ã瀺ãé»è©±ãããã¯ãŒã¯ã«é話ããªãã€ã¬ã¯ãããŸããçºä¿¡è IDãçºä¿¡äžã§ããããšã瀺ãããã«ãèšå®->çºä¿¡è IDã»ã¯ã·ã§ã³ã§äºåèªèšŒããå¿ èŠããããŸã æåã®ãã©ã¡ãŒã¿ãŒã§ã¯ã1æ¡ã®ãã¬ãã£ãã¯ã¹ãç Žæ£ããŸãïŒåŸã§ã¹ã¯ãªãããã¢ããªã±ãŒã·ã§ã³ã«ãã€ã³ããããšãã«ãã®æ¡ãæ§æããŸãïŒãããã¯ãPSTNã§ã³ãŒã«ãéãå¿ èŠãããããšãéç¥ããŸããã€ãŸããçªå·ã974952200022ãšå ¥åãããŸããæ°ã ããã§ãããã¹ãŠãéåžžã«åçŽã§ãããããæãèå³æ·±ãã·ããªãªã«ç§»ããŸããçä¿¡ã³ãŒã«ïŒPBXãåŠçããïŒãåŠçããããã«ãéšåã«ãèããè¿œå ããŠãããæ確ã«ããŸãã
// var callerid, displayName; // AppEvents.CallAlerting VoxEngine.addEventListener(AppEvents.CallAlerting, function(e) { // Caller ID callerid = e.callerid; // displayName - SIP displayName = e.displayName; // ( ) e.call.handleTones(true); // , e.call.answer(); });
ãã©ãããã©ãŒã ãžã®æ¥ç¶ãèš±å¯ããŸãããä»åºŠã¯åŒã³åºãåŠçãè¡ãå¿ èŠããããŸããåã®ãªã¹ããŒå ã§åŒã³åºãæ¥ç¶ã€ãã³ãåŠçãè¿œå ããŸãã
// , var GMT_offset = 4, workingHours = [ [0, 0], // Sun [10, 19], // Mon [10, 19], // Tue [10, 19], // Wed [10, 19], // Thu [10, 19], // Fri [0, 0] // Sat ], nonWorkingHours = false, workingHoursGreetingURL = 'http://yourdomain.com/ivr.mp3', //<=== URL MP3- ( ) nonWorkingHoursGreetingURL = 'http://yourdomain.com/ivr_nwh.mp3'; //<=== URL MP3- ( ) e.call.addEventListener(CallEvents.Connected, function(e) { // . / , GMT_offset (GMT+4 ) var d = new Date(new Date().getTime() + GMT_offset * 3600 * 1000), day = d.getUTCDay(), hour = d.getUTCHours(); Logger.write("Day: " + day + " Hour: " + hour); if (hour >= workingHours[day][0] && hour < workingHours[day][1]) { /** * * */ e.call.startPlayback(workingHoursGreetingURL, false); e.call.record(); } else { /** * * */ nonWorkingHours = true; e.call.startPlayback(nonWorkingHoursGreetingURL, false); } });
åŒã³åºããæ¥ç¶ããããã«ãã³ãã©ãŒããã³ã°ã¢ããããŸããããåæããã«ã¯ãã³ãã©ãŒããã³ã°ã¢ããããå¿ èŠããããŸãã
e.call.addEventListener(CallEvents.Disconnected, function(e) { // VoxEngine.terminate(); });
ãããŠãã°ãªãŒãã£ã³ã°ã®åçãå®äºããããã®ãã³ãã©ãŒïŒ
// var TIMEOUT = 3000, operatorTimer; e.call.addEventListener(CallEvents.PlaybackFinished, function(e) { // , - , if (!nonWorkingHours) { operatorTimer = setTimeout(function() { forwardCallToOperator(e.call); }, TIMEOUT); } else VoxEngine.terminate(); // - });
ããããforwardCallToOperatoré¢æ°ã«æ°ä»ããã§ããããé»è©±ã§ãã¿ã³ãæŒããŠå ç·çªå·ãå ¥åããåŠçãæå¹ã«ãããããã«ããã®é¢æ°ã«æ»ããŸãã åã«ãe.call.handleTonesïŒtrueïŒãåŒã³åºããŠãã³ãã©ãŒãæ¢ã«æå¹ã«ããŠããã®ã§ã宣èšããå¿ èŠããããŸãã
// var input = ''; e.call.addEventListener(CallEvents.ToneReceived, function(e) { // e.call.stopPlayback(); // input += e.tone; if (input.length == 3) { // 3 forwardCallToExtension(e.call, input); } });
ããŠã次ã¯æãèå³æ·±ãé¢æ°ãforwardCallToExtensionãšforwardCallToOperatorã®æéã§ãã
var operators = ['101', '102', '103'], // <== , - operatorCalls = {}, nOperatorCalls = 0, activeOperatorCall; function forwardCallToExtension(call, ext) { clearTimeout(operatorTimer); // call.handleTones(false); // ( ) call.playProgressTone("RU"); // , var call2 = VoxEngine.callUser(ext, callerid, displayName); // call2.addEventListener(CallEvents.Failed, VoxEngine.terminate); call2.addEventListener(CallEvents.Connected, function(e) { // - VoxEngine.sendMediaBetween(call, call2); }); call2.addEventListener(CallEvents.Disconnected, VoxEngine.terminate); } function forwardCallToOperator(call) { // call.handleTones(false); nOperatorCalls = 0; // ( ) call.playProgressTone("RU"); // , , . for (var i in operators) { var j = operators[i]; nOperatorCalls++; operatorCalls[j] = VoxEngine.callUser(j, callerid, displayName); operatorCalls[j].addEventListener(CallEvents.Failed, function(e) { if (typeof activeOperatorCall == "undefined") { delete operatorCalls[e.call.number()]; nOperatorCalls--; if (nOperatorCalls == 0) { call.hangup(); } } }); operatorCalls[j].addEventListener(CallEvents.Connected, function(e) { delete operatorCalls[e.call.number()]; activeOperatorCall = e.call; VoxEngine.sendMediaBetween(call, e.call); activeOperatorCall.addEventListener(CallEvents.Disconnected, VoxEngine.terminate); for (var i in operatorCalls) { operatorCalls[i].hangup(); } operatorCalls = {}; }); } }
ãã¹ãŠã®æºåãæŽã£ãã®ã§ãããŒããçµã¿åãããŠå®å šãªã¹ã¯ãªãããååŸããŸã ã æ®ã£ãŠããã®ã¯ãVoxImplantã¢ããªã±ãŒã·ã§ã³ãäœæãããŠãŒã¶ãŒãšã¹ã¯ãªãããæ¥ç¶ããããšã ãã§ãã ããã¯ã次ã®ç°¡åãªæ¹æ³ã§è¡ãããŸãã
1.ãã¢ããªã±ãŒã·ã§ã³ãã»ã¯ã·ã§ã³ã§ãã¢ããªã±ãŒã·ã§ã³ãäœæããååãä»ããŠãããã䜿çšã§ãããŠãŒã¶ãŒãæå®ããŸãã

2.ã¢ããªã±ãŒã·ã§ã³ãäœæããããããã«ç·šéãéžæããŸã
3. [ã«ãŒã«]ã¿ãã§ã[ã«ãŒã«ã®è¿œå ]ãã¿ã³ã䜿çšããŠãããŒã«ã«ãã¢ãŠããã€ã³ã®3ã€ã®æ°ããã«ãŒã«ãäœæããŸãã
ãŠãŒã¶ãŒã®ååã101ã102ã103ãªã©ã®åœ¢åŒã§æå®ããå ŽåãããŒã«ã«ã«ãŒã«ãäœæãããšã ãã¿ãŒã³ãã£ãŒã«ãã§1 [0-9] {2}ãæå®ãããã©ãã°ã¢ã³ãããããã䜿çšããŠãPBXããŒã«ã«ã¹ã¯ãªãããAvailableããAssignedã«ãã©ãã°ããŠãPBXã«æ¥ç¶ããŠãããŠãŒã¶ãŒãå éšçªå·ãåŒã³åºãå Žåã«åŒã³åºãã¹ã¯ãªãããå²ãåœãŠãŸããååã ä¿åããŸãã

åæ§ã«ã[ãã¿ãŒã³]ãã£ãŒã«ãã®åºåã«ãŒã«ã«å¯ŸããŠã9 [0-9] +ïŒcallPSTNã¡ãœããã®e.destination.substringïŒ1ïŒã§èŠãåã9ãæãåºããŠãã ããïŒãæå®ããPBX outã¹ã¯ãªãããAssignedã«ãã©ãã°ããŸãã ä¿åããŸãã
æåŸã®ã«ãŒã«ïŒãã¿ãŒã³ã§ã¯ãã¹ããªããã«äœããæå®ãïŒ74957893798 | 100ïŒãPBXãå²ãåœãŠæžã¿ã«ãã©ãã°ããŸãã ä¿åããŸãã 74957893798ã¯åãªãäŸã§ããé»è©±çªå·ã»ã¯ã·ã§ã³ã§ã¢ããªã±ãŒã·ã§ã³ã«æ¥ç¶ã§ããé»è©±çªå·ãå¿ èŠã§ãã ãŸãã100ã䜿çšãããšãsipïŒ100@appname.accountname.voximplant.comãšãã圢åŒã®URLã䜿çšããŠãSIPãä»ããŠPBXãåŒã³åºãããšãã§ããŸããappnameã¯äœææã«æå®ããã¢ããªã±ãŒã·ã§ã³ã®ååã§ãaccountnameã¯æå®ããVoxImplantã¢ã«ãŠã³ãã®ååã§ãç»é²æã«ã SIP転éããµããŒãããè³Œå ¥æžã¿ã®çªå·ãæ¢ã«ãæã¡ã®å Žåã¯ãããšãã°ãçµç±ã§çä¿¡åŒã³åºãçšã«äœæããSIP URIïŒsipïŒ100@appname.accountname.voximplant.comïŒã«åŒã³åºããéä¿¡ããããšã«ãããPBXã«æ¥ç¶ã§ããŸããäžå£

4.ã¢ããªã±ãŒã·ã§ã³ãä¿åããŸãã
ããã§ãPBXã¯ãSIPé»è©±ïŒãŸãã¯VoxImplant SDKã«åºã¥ãã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ïŒã®æ¥ç¶ãã³ãŒã«ã®åä¿¡ãšåŠçãPBXãŠãŒã¶ãŒéã®ããŒã«ã«ã³ãŒã«ãããã³å®çªå·ãžã®çºä¿¡ã®æºåãã§ããŸããã
PSãã®èšäºã®æ¢è£œã®ã¹ã¯ãªããã¯GitHub https://github.com/voximplant/pbxã«æçš¿ãããŠããŸã ã VoxImplant Web SDKã«åºã¥ãæ¢è£œã®Webé»è©±ã¯ã httpïŒ //webphone.voximplant.com/ïŒaccount = accountnameïŒapp = appnameã«ãããŸããaccountnameãšappnameãèªåã®ååã«çœ®ãæããããšãå¿ããªãã§ãã ããã å€ããå°ãªããæ£æ°ãªSIPãœãããã©ã³ãå¿ èŠãªå ŽåãX-lite / Briaããã£ã³ã»ã«ãã人ã¯ããŸããã