{"id":264308,"date":"2015-08-26T12:48:02","date_gmt":"2015-08-26T08:48:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=264308"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=264308","title":{"rendered":"\u041f\u0438\u0448\u0435\u043c \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0435 IVR \u043c\u0435\u043d\u044e \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 TCL, \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Cisco IVR API"},"content":{"rendered":"<p>             \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0440\u0435\u0447\u044c \u043e \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u043c \u043c\u0435\u043d\u044e (<b>IVR<\/b>) \u0434\u043b\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432 Cisco, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 TCL, \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043d\u0430 Cisco 3845.<\/p>\n<h1>\u0418\u0442\u0430\u043a, \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f \u0432 \u0430\u0437\u0430\u0445<\/h1>\n<p>  Cisco \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 <b>IOS<\/b> 12 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043a\u0430\u043a <b>VXML<\/b> \u0442\u0430\u043a \u0438 <b>TCL<\/b> \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u044b\u043c \u043c\u0435\u043d\u044e. \u041e\u0434\u043d\u0430\u043a\u043e, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 <b>VXML<\/b>, \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u043d\u0430 <b>TCL<\/b> \u0438\u043c\u0435\u044e\u0442 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 <b>Cisco IVR API<\/b>. \u0422\u0430\u043a \u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0433\u0438\u0431\u0440\u0438\u0434\u043d\u044b\u0435 <b>IVR<\/b> \u0441\u043a\u0440\u0438\u043f\u0442\u044b, \u0441\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c\u0438 \u043a\u0443\u0441\u043a\u0430\u043c\u0438 <b>VXML<\/b> \u043a\u043e\u0434\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 <b>TCL<\/b> \u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/p>\n<p>  \u0412\u0441\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 IVR \u043e\u0442 Cisco, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043d\u0435 \u0434\u043e\u0432\u0435\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c <a href=\"https:\/\/cloud.mail.ru\/public\/FFBy\/ZEujVorKp\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<h3>FSM<\/h3>\n<p>  \u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043f\u0440\u0438 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0438 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0433\u043e \u043c\u0435\u043d\u044e \u043e\u0442 Cisco \u043c\u043d\u0435 \u0431\u044b\u043b\u043e \u043e\u0447\u0435\u043d\u044c \u0442\u0440\u0443\u0434\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0434\u0430\u043a \u044d\u0442\u043e <b>FSM<\/b> \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b.<br \/>  \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"python\">set ivr_fsm(CALLCOMES,ev_setup_indication) &quot;act_Setup same_state&quot; <\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u0442\u0430\u043a\u0438\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0433\u043e\u0434\u043d\u043e, \u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u043e\u043d\u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 <b>TCL<\/b> \u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0442\u0430\u043a\u043e\u0435. <br \/>  \u041e\u0431\u0449\u0438\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u044d\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0442\u0430\u043a\u043e\u0432:  <\/p>\n<pre><code class=\"python\">set array(CURRSTATE,curr_event) \u201cact_proc NEXTSTATE\u201d <\/code><\/pre>\n<p>  \u0433\u0434\u0435:<br \/>   <b>array<\/b> \u2013 \u044d\u0442\u043e \u0438\u043c\u044f <i><b>FSM<\/b><\/i> \u043c\u0430\u0441\u0441\u0438\u0432\u0430.<br \/>   <b>CURRSTATE<\/b> \u2013 \u0438\u043c\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0435 <i><b>curr_event<\/b><\/i>.<br \/>   <b>act_proc<\/b> \u2013 \u0438\u043c\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f <i><b>curr_event<\/b><\/i> \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 <b><i>CURRSTATE<\/i><\/b>.<br \/>   <b>NEXTSTATE<\/b> \u2013 \u0438\u043c\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 <i><b>act_proc<\/b><\/i>.<\/p>\n<p>  \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, <b>FSM<\/b> \u044d\u0442\u043e \u043c\u0430\u0440\u043a\u0435\u0440, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 Cisco \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0435 \u043e\u0442 API \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0441 <b>curr_event<\/b> \u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 \u0441 <b>CURRSTATE<\/b>, \u0435\u0441\u043b\u0438 \u0432 \u043a\u0430\u043a\u043e\u043c \u043b\u0438\u0431\u043e FSM \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043e\u043d\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u044b, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 <b>act_proc<\/b> \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 <b>NEXTSTATE<\/b>.<\/p>\n<p>  \u0421\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0432 \u044d\u0442\u043e\u043c \u2014 \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c\u0438 <b>FSM<\/b> \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430\u043c\u0438 <b>\u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e<\/b>. \u0422.\u0435. \u0434\u043b\u044f Cisco \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0440\u044f\u0434\u043e\u043a, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b FSM \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b, \u0432\u0441\u0435 \u043e\u043d\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h3>\u0424\u0443\u043d\u043a\u0446\u0438\u0438<\/h3>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u044d\u0442\u043e \u0441\u0430\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0434\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/p>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u0440\u044f\u0434 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432, \u043d\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043e\u0431\u044b\u0447\u043d\u043e\u043c\u0443 \u044f\u0437\u044b\u043a\u0443 \u041e\u041e\u041f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c 2 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:  <\/p>\n<pre><code class=\"python\">media play leg_incoming $playng_files(noexist) leg setup $numbers(ckp) callinfo leg_incoming <\/code><\/pre>\n<p>  \u0422\u043e \u043f\u043e \u043b\u043e\u0433\u0438\u043a\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e (\u0438\u043b\u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c) \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0443 \u0432\u0430\u0441 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f: <i><b>media play<\/b><\/i> \u0430 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0435 <i><b>leg setup<\/b><\/i>.<\/p>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0442\u043e\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f \u0432 \u0442\u0430\u043a\u043e\u043c \u0436\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u043d\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 <b>\u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0436\u0438\u0434\u0430\u0442\u044c\u0441\u044f<\/b> \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f 1\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0438 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 <i><b>media play<\/b><\/i> \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430. \u041e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0443\u0436\u0435 \u0437\u0430 \u0441\u0447\u0435\u0442 <b>FSM<\/b> \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432.<\/p>\n<p>  \u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u0444\u0430\u0439\u043b\u0435 tcl_ivr_2.0_programming_guide, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043a\u0430\u0447\u0430\u0442\u044c <a href=\"https:\/\/cloud.mail.ru\/public\/FFBy\/ZEujVorKp\">\u0437\u0434\u0435\u0441\u044c<\/a>, \u044f \u043f\u043e\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u044e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0442\u0435\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0435<\/p>\n<h1>1) \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430<\/h1>\n<p>  \u041d\u0430\u0447\u0430\u043b\u043e \u043b\u044e\u0431\u043e\u0433\u043e TCL IVR \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 <i><b>init<\/b><\/i>, \u0432 \u043c\u043e\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"python\">proc init { } {     puts &quot;\\n proc Init start&quot;     global param } <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043f\u043e \u0441\u0443\u0442\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0432\u043e\u0434 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <i><b>puts &quot;&#8230;&quot;<\/b><\/i> \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <i><b>param<\/b><\/i><\/p>\n<p>  \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0441\u043b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <i><b>init<\/b><\/i>. \u041d\u0430 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0432\u0435\u0449\u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438\u0441\u044c, \u0434\u0430\u043b\u044c\u0448\u0435 \u0432\u0441\u0435 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0433\u043e <b>FSM<\/b> \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0438 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e:  <\/p>\n<pre><code class=\"python\">fsm define ivr_fsm CALLCOMES <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0438\u043c\u044f <b>FSM<\/b> \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0437\u0430\u0434\u0430\u043d\u043e \u043a\u0430\u043a <b>ivr_fsm<\/b>, \u0438 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <b>CALLCOMES<\/b>. \u0421 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043c, \u0434\u0430\u043b\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0435, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 (\u044f \u043d\u0430\u0434\u0435\u044e\u0441\u044c).<\/p>\n<h1>2) \u041f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435<\/h1>\n<p>  <\/p>\n<pre><code class=\"python\">proc Play_Welcome { } { \tputs &quot;\\n\\n IVR - proc Play_Welcome start \\n\\n&quot; \tglobal playng_files \tglobal param \tglobal pattern \tglobal numbers \tglobal workingtime \t \t#\u0412\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443, \u0433\u0434\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \tinit_perCallVars \t \t#\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0440\u0435\u043c\u044f \tGetDate \t \t#\u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u0440\u0435\u043c\u044f \u0438\u043b\u0438 \u043d\u0435\u0442, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435  \tif {$workingtime} { \tset after_welcome $playng_files(takenumber)\t \t} else { \tset after_welcome $playng_files(noworking) \t} \t \t#\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \tset param(interruptPrompt) true \tset param(abortKey) * \tset param(terminationKey) #\t \t \t#\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0432\u044b\u0437\u043e\u0432 \tleg setupack leg_incoming \tleg proceeding leg_incoming \tleg connect leg_incoming \t \t#\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0441\u0431\u043e\u0440\u0430 \u043d\u0430\u0436\u0430\u0442\u044b\u0445 \u0446\u0438\u0444\u0440 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0437\u0432\u043e\u043d\u044f\u0449\u0435\u0433\u043e \tleg collectdigits leg_incoming param pattern \t \t#\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0448 \u0444\u0430\u0439\u043b\u043e\u0432 \u0437\u0432\u043e\u043d\u044f\u0449\u0435\u043c\u0443 \u0430\u0431\u043e\u043d\u0435\u043d\u0442\u0443, \u043f\u043e\u0441\u043b\u0435 \u0438\u0445 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f  \t#\u043d\u0430\u0447\u043d\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u0439\u043c\u0435\u0440 param(interDigitTimeout), \u043f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e  \t#\u041f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 ev_collectdigits_done \tmedia play leg_incoming %s500 $playng_files(welcome) $after_welcome $playng_files(onhold) \t \t#\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0442\u0430\u0439\u043c\u0435\u0440, \u043f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 ev_named_timer \ttimer start named_timer $numbers(waiting_time) t1 } <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0432\u0441\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043e.<\/p>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u043b\u0438\u043d\u0438\u0438 \u043a Cisco \u0437\u0430 \u0441\u0447\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434 <i><b>leg setupack, leg proceeding, leg connect,<\/b><\/i> \u0438 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0448 \u043c\u0443\u0437\u044b\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0432\u043e \u0432\u0445\u043e\u0434\u044f\u0449\u0443\u044e \u043b\u0438\u043d\u0438\u044e \u0437\u0430 \u0441\u0447\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <i><b>media play leg_incoming<\/b><\/i>. <br \/>  \u0422\u0443\u0442 \u0436\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u0431\u043e\u0440\u0430 \u043d\u0430\u0436\u0430\u0442\u044b\u0445 \u043a\u043b\u0430\u0432\u0438\u0448 <b><i>leg collectdigit<\/i><\/b> \u0438 \u0442\u0430\u0439\u043c\u0435\u0440 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <i><b>timer start<\/b><\/i>.<\/p>\n<p>  \u0418 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u0440\u0435\u043c\u044f \u0438\u043b\u0438 \u043d\u0435\u0442, \u0432\u044b\u0437\u044b\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044e <i><b>GetDate<\/b><\/i>:  <\/p>\n<pre><code class=\"python\">proc GetDate { } { \tglobal workingtime \t \t#\u0427\u0430\u0441 \tset houris [clock format [clock seconds] -format %H] \t#\u0414\u0435\u043d\u044c \u043d\u0435\u0434\u0435\u043b\u0438 \tset dayis [clock format [clock seconds] -format %A] \t#\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \tif {$houris &gt; 17 || $houris &lt; 8 || $dayis==&quot;Sunday&quot; || $dayis==&quot;Saturday&quot;} { \tset workingtime 0 \t} else { \tset workingtime 1 \t} } <\/code><\/pre>\n<p>  \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e \u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0438\u043b\u0438 \u043d\u0435\u0442 \u043c\u044b \u043c\u0435\u043d\u044f\u0435\u043c \u043c\u0443\u0437\u044b\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0433\u0440\u0430\u043d \u0437\u0432\u043e\u043d\u044f\u0449\u0435\u043c\u0443 \u0430\u0431\u043e\u043d\u0435\u043d\u0442\u0443.<\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u043d\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u0430\u043a <i><b>fsm define ivr_fsm CALLCOMES<\/b><\/i>, \u0432 \u043d\u0435\u0433\u043e \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0441\u0440\u0430\u0437\u0443 3 <b>FSM<\/b>:  <\/p>\n<pre><code class=\"python\">set ivr_fsm(CALLCOMES,ev_setup_indication)    &quot;Play_Welcome,        same_state&quot; set ivr_fsm(CALLCOMES,ev_collectdigits_done)  &quot;CheckDestanation,  same_state&quot; set ivr_fsm(CALLCOMES,ev_named_timer)          &quot;GoToReception,      same_state&quot; <\/code><\/pre>\n<p>  \u0421\u043e\u0431\u044b\u0442\u0438\u0435 <i><b>ev_setup_indication<\/b><\/i> \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0438 \u0437\u0432\u043e\u043d\u043a\u0430, \u0438 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 <i><b>Play_Welcome<\/b><\/i>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043f\u0438\u0441\u0430\u043d \u0441\u0442\u0430\u0440\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0441\u0431\u043e\u0440\u0430 \u043d\u0430\u0436\u0430\u0442\u044b\u0445 \u0446\u0438\u0444\u0440 \u0438 \u0441\u0442\u0430\u0440\u0442 \u0442\u0430\u0439\u043c\u0435\u0440\u0430.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043c\u0443\u0437\u044b\u043a\u0438 \u0430\u0431\u043e\u043d\u0435\u043d\u0442\u0443, \u043d\u0430\u0447\u043d\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u043e\u0442\u0447\u0435\u0442 \u0442\u0430\u0439\u043c\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c <i><b>param(initialDigitTimeout)<\/b><\/i> (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0447\u0443\u0442\u044c \u0432\u044b\u0448\u0435 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 <i><b>set param(initialDigitTimeout) 15<\/b><\/i> \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 15 \u0441\u0435\u043a\u0443\u043d\u0434), \u0442.\u043a. \u043e\u043d \u0443 \u043d\u0430\u0441 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d, \u0435\u0433\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 10 \u0441\u0435\u043a\u0443\u043d\u0434, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 <b><i>ev_collectdigits_done<\/i><\/b>, \u043f\u0440\u0438 \u043d\u0430\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u044b \u043e\u043f\u0438\u0441\u0430\u043b\u0438 \u0432 <b>FSM<\/b> \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435, \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <b><i>CheckDestanation<\/i><\/b>.<\/p>\n<p>  \u0422\u0430\u0439\u043c\u0435\u0440, \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u0432 <b><i>Play_Welcome<\/i><\/b> \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:  <\/p>\n<pre><code class=\"python\">#\u0422\u0438\u043f \u0442\u0430\u0439\u043c\u0435\u0440\u0430 named_timer, \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0432\u0437\u044f\u0442\u0430 \u0438\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 numbers(waiting_time), \u0438\u043c\u044f \u0442\u0430\u0439\u043c\u0435\u0440\u0430 t1 timer start named_timer $numbers(waiting_time) t1 <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0441\u0432\u043e\u0435\u0433\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 <i><b>ev_named_timer<\/b><\/i>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c <b>FSM<\/b> \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u043c:  <\/p>\n<pre><code class=\"python\">set ivr_fsm(CALLCOMES,ev_named_timer)          &quot;GoToReception,      same_state&quot; <\/code><\/pre>\n<p>  \u0438 \u0432\u044b\u0437\u043e\u0432\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 <b><i>GoToReception<\/i><\/b>.<\/p>\n<h1>3) \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u043e\u043c\u0435\u0440\u0430<\/h1>\n<p>  <\/p>\n<pre><code class=\"python\">proc CheckDestanation { } { \tputs &quot;\\n\\n IVR - proc CheckDestanation start \\n\\n&quot; \tglobal playng_files \tglobal numbers \tglobal digit \t#\u041e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0448 \u043c\u0435\u0434\u0438\u0430 \tmedia stop leg_incoming \t \t#\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \tset status [infotag get evt_status] \tset digit [infotag get evt_dcdigits] \t \t#\u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0446\u0438\u0444\u0440\u044b \u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u044b \t#\u0415\u0441\u043b\u0438 \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u0430\u044f \u0446\u0438\u0444\u0440\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u0439, \u0447\u0442\u043e \u0437\u0430\u0434\u0430\u043d\u0430 \u0432 $numbers(fast_reception),  \t#\u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c  digit  \u043d\u0430 \u043d\u043e\u043c\u0435\u0440 \u0440\u0435\u0441\u0435\u043f\u0448\u043d \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c $digit \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e CheckCallersAndConnect, \t# \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0432 \u0441\u0442\u0430\u0442\u0443\u0441 \u043d\u0430 CALLCONNECTED, \t# \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443, \u043f\u0440\u0438 \u043d\u0430\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f ev_setup_done (\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u043d\u043e\u043c\u0435\u0440\u0443 \u0441\u0435\u043a\u0440\u0435\u0442\u0430\u0440\u044f) \t# \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 CallIsConnect \tif {$digit == $numbers(fast_reception)} { \t\tputs &quot;\\n\\n IVR - proc CheckDestanation digit = $digit\\nGoing to next reception \\n\\n&quot; \t\tfsm setstate CALLCONNECTED \t\tset digit $numbers(reception) \t\t#\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c $digit \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e CheckCallersAndConnect \t\tCheckCallersAndConnect $digit \t#\u0415\u0441\u043b\u0438 \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u0430\u044f \u0446\u0438\u0444\u0440\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u0439, \u0447\u0442\u043e \u0437\u0430\u0434\u0430\u043d\u0430 \u0432 $numbers(fast_ckp), \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043d\u0430 \u0426\u041a\u041f \t#\u0447\u0435\u0440\u0435\u0437 CheckCallersAndConnect \t} elseif {$digit == $numbers(fast_ckp)} { \t\tputs &quot;\\n\\n IVR - proc CheckDestanation digit = $digit\\nGoing to next CKP \\n\\n&quot; \t\tfsm setstate CALLCONNECTED \t\tset digit $numbers(ckp) \t\t#\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c $digit \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e CheckCallersAndConnect \t\tCheckCallersAndConnect $digit \t#\u0415\u0441\u043b\u0438 \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u0430\u044f \u0446\u0438\u0444\u0440\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u0439, \u0447\u0442\u043e \u0437\u0430\u0434\u0430\u043d\u0430 \u0432 $numbers(fast_fax), \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043d\u0430 \u0444\u0430\u043a\u0441 \t#\u0447\u0435\u0440\u0435\u0437 CheckCallersAndConnect \t} elseif {$digit == $numbers(fast_fax)} { \t\tputs &quot;\\n\\n IVR - proc CheckDestanation digit = $digit\\nGoing to next fax \\n\\n&quot; \t\tfsm setstate CALLCONNECTED \t\tset digit $numbers(fax) \t\t#\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c $digit \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e CheckCallersAndConnect \t\tCheckCallersAndConnect $digit \t#\u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u0443\u0441 = cd_004 (\u0432\u0432\u0435\u0434\u0435\u043d\u044b \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0435 \u0446\u0438\u0444\u0440\u044b \u043d\u043e\u043c\u0435\u0440\u0430) - \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a \u043d\u0443\u0436\u043d\u043e\u043c\u0443 \u043d\u043e\u043c\u0435\u0440\u0443  \t#\u0447\u0435\u0440\u0435\u0437 CheckCallersAndConnect \t} elseif {$status == &quot;cd_004&quot;} { \t\tputs &quot;\\n\\n IVR - proc CheckDestanation status = $status digit = $digit \\n\\n&quot; \t\tfsm setstate CALLCONNECTED \t\t#\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c $digit \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e CheckCallersAndConnect \t\tCheckCallersAndConnect $digit \t#\u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u0443\u0441 = cd_005 (\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0441 dial plan) - \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a \u043d\u0443\u0436\u043d\u043e\u043c\u0443 \u043d\u043e\u043c\u0435\u0440\u0443  \t#\u0447\u0435\u0440\u0435\u0437 CheckCallersAndConnect\t \t} elseif {$status == &quot;cd_005&quot;} { \t\tputs &quot;\\n\\n IVR - proc CheckDestanation status = $status digit = $digit \\n\\n&quot; \t\tfsm setstate CALLCONNECTED\t \t\t#\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c $digit \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e CheckCallersAndConnect \t\tCheckCallersAndConnect $digit\t \t#\u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u0443\u0441 = cd_006 (\u043d\u0430\u0431\u0440\u0430\u043d \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043d\u043e\u043c\u0435\u0440) - \u0438\u0433\u0440\u0430\u0435\u043c \u0432 \u043b\u0438\u043d\u0438\u044e $playng_files(noexist) \t# \u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u0441\u0442\u0430\u0442\u0443\u0441 \u043d\u0430 TORECEPTION, \u043f\u0440\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0438 \u043d\u0430\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f  \t#ev_media_done (\u043a\u043e\u043d\u0435\u0446 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430) \u0432\u044b\u0437\u043e\u0432\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 Play_TakeNumber \t} elseif {$status == &quot;cd_006&quot;} { \t\tputs &quot;\\n\\n IVR - proc CheckDestanation status = $status digit = $digit \\n\\n&quot; \t\tfsm setstate TRYAGAIN \t\tmedia play leg_incoming $playng_files(noexist) \t#\u0412\u043e \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u0441\u0442\u0430\u0442\u0443\u0441 \u043d\u0430 TORECEPTION, \u043f\u0440\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e  \t#\u0438 \u043d\u0430\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f ev_media_done (\u043a\u043e\u043d\u0435\u0446 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430) \u0432\u044b\u0437\u043e\u0432\u0435\u0442\u0441\u044f  \t#\u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 GoToReception \t} else { \t\t#\u041f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u043c &quot;\u0412\u0430\u0448 \u0432\u044b\u0437\u043e\u0432 \u043f\u0435\u0440\u0435\u0430\u0434\u0440\u0435\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0435\u043a\u0440\u0435\u0442\u0430\u0440\u044f&quot; \t\tfsm setstate TORECEPTION \t\tmedia play leg_incoming $playng_files(toreception)\t\t \t\tputs &quot;\\n\\n IVR - proc CheckDestanation status = $status \\n\\n&quot; \t}\t } <\/code><\/pre>\n<p>  \u0412 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0435 CheckDestanation, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d\u0430 \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0431\u043e\u0440\u0430 \u043d\u043e\u043c\u0435\u0440\u0430 \u0437\u0432\u043e\u043d\u044f\u0449\u0438\u043c \u0430\u0431\u043e\u043d\u0435\u043d\u0442\u043e\u043c, \u043c\u044b \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438 \u043d\u0430\u0431\u043e\u0440\u0435 \u0446\u0438\u0444\u0440\u044b \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <i><b>fsm setstate<\/b><\/i>.<\/p>\n<p>  \u0412\u0441\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u043f\u043e\u043f\u0430\u0432\u0448\u0438\u0435 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u043f\u043e\u0434 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 FSM \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b:  <\/p>\n<pre><code class=\"python\">set ivr_fsm(CALLCONNECTED,ev_setup_done)   &quot;CallIsConnect,  same_state&quot; set ivr_fsm(TORECEPTION,ev_media_done)           &quot;GoToReception,  same_state&quot; set ivr_fsm(TRYAGAIN,ev_media_done)           &quot;Play_TakeNumber,  TRYING&quot; set ivr_fsm(TRYING,ev_collectdigits_done)  &quot;CheckDestanation,  same_state&quot; set ivr_fsm(TRYING,ev_named_timer)   &quot;GoToReception,  same_state&quot; <\/code><\/pre>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443.<\/p>\n<p>  1) \u0418\u0442\u0430\u043a, \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f <i><b>CheckDestanation<\/b><\/i> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0441\u0431\u043e\u0440\u0430 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448.<br \/>  2) \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043d\u0430\u0436\u0430\u0442\u044b\u0445 \u043a\u043b\u0430\u0432\u0438\u0448\u0430\u0445 \u043c\u044b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e digit \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b set digit [infotag get evt_dcdigits]<br \/>  \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043b\u0438\u043d\u0438\u0438 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e status<br \/>  3) \u0417\u0430\u0442\u0435\u043c \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043f\u0440\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0438:  <\/p>\n<pre><code class=\"python\">if {$digit == $numbers(fast_reception)} {  puts &quot;\\n\\n IVR - proc CheckDestanation digit = $digit\\nGoing to next reception \\n\\n&quot;  fsm setstate CALLCONNECTED  leg setup $numbers(reception) callinfo leg_incoming } <\/code><\/pre>\n<h1>4) \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u043e\u043c\u0435\u0440\u0430 \u0437\u0432\u043e\u043d\u044f\u0449\u0435\u0433\u043e \u0430\u0431\u043e\u043d\u0435\u043d\u0442\u0430<\/h1>\n<p>  <\/p>\n<pre><code class=\"python\">proc CheckCallersAndConnect {digit} {  puts &quot;\\n\\n IVR - proc CheckCallersAndConnect start \\n\\n&quot;    set callernumber [infotag get leg_ani]    switch $callernumber {   &quot;9120000000&quot; {set callInfo(displayInfo) &quot;Director(mobile)&quot;}   &quot;9130000000&quot; {set callInfo(displayInfo) &quot;Buhgalter(mobile)&quot;}     default {}   }  puts &quot;\\n\\n IVR - caller is $callernumber connect with $digit\\n\\n&quot;    leg setup $digit callInfo leg_incoming } <\/code><\/pre>\n<p>  \u0414\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u043b\u0435, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0435\u0435 \u0437\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u043c\u0435\u043d\u0438 \u0437\u0432\u043e\u043d\u044f\u0449\u0435\u0433\u043e. \u041f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0434\u0438 \u044d\u0441\u0442\u0435\u0442\u0438\u043a\u0438, \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u044f\u0442\u043d\u0435\u0435, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u043e\u043c\u0435\u0440 \u043d\u043e \u0438 ID \u0430\u0431\u043e\u043d\u0435\u043d\u0442\u0430. \u041f\u043e\u0441\u043b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f ID \u0430\u0431\u043e\u043d\u0435\u043d\u0442\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043b\u0438\u043d\u0438\u0438 \u043a \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u043c\u0443 \u043d\u043e\u043c\u0435\u0440\u0443.<\/p>\n<h1>5) \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u043e\u043c\u0435\u0440\u0430<\/h1>\n<p>  <\/p>\n<pre><code class=\"python\">proc CallIsConnect { } { \tputs &quot;\\n\\n IVR - proc CallIsConnect start \\n\\n&quot; \tglobal playng_files\t  \t#\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0447\u0435\u043c\u0443 \u0440\u0430\u0432\u0435\u043d status \tset status [infotag get evt_status] \t \t#\u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u0443\u0441 \u0440\u0430\u0432\u0435\u043d ls_000 (\u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u043c \u043d\u043e\u043c\u0435\u0440\u043e\u043c), \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043d\u0430 CALLACTIVE \tif {$status == &quot;ls_000&quot;} { \tfsm setstate CALLACTIVE\t \t \t#\u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u0443\u0441 \u0440\u0430\u0432\u0435\u043d ls_002 (\u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043e\u0442\u0432\u0435\u0442\u0438\u043b \u043d\u0430 \u0437\u0432\u043e\u043d\u043e\u043a), \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u043e\u043c\u0435\u0440\u0430 \t} elseif {$status == &quot;ls_002&quot;} { \t\tfsm setstate TRYAGAIN \t\tmedia play leg_incoming $playng_files(noanswer) \t#\u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u0443\u0441 - \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u043e\u043c\u0435\u0440\u0430 \t} elseif {$status == &quot;ls_004&quot; || $status == &quot;ls_005&quot; || $status == &quot;ls_006&quot;} { \t\tfsm setstate TRYAGAIN \t\tmedia play leg_incoming $playng_files(noexist) \t#\u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u0443\u0441 \u0440\u0430\u0432\u0435\u043d ls_007 (\u0430\u0431\u043e\u043d\u0435\u043d\u0442 \u0437\u0430\u043d\u044f\u0442), \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u043e\u043c\u0435\u0440\u0430 \t} elseif {$status == &quot;ls_007&quot;} { \t\tfsm setstate TRYAGAIN \t\tmedia play leg_incoming $playng_files(busy) \t} } <\/code><\/pre>\n<p>  \u0414\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c FSM \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u043c:  <\/p>\n<pre><code class=\"python\">set ivr_fsm(CALLCONNECTED,ev_setup_done)   &quot;CallIsConnect,  same_state&quot; <\/code><\/pre>\n<p>  \u0421\u043e\u0431\u044b\u0442\u0438\u0435 <i><b>ev_setup_done<\/b><\/i> \u043d\u0430\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0437\u0432\u043e\u043d\u044f\u0449\u0435\u0433\u043e \u043a \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0439 \u043b\u0438\u043d\u0438\u0438.<\/p>\n<h1>6) \u041f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u043e\u043c\u0435\u0440\u0430<\/h1>\n<p>  <\/p>\n<pre><code class=\"python\">proc Play_TakeNumber { } {     puts &quot;\\n\\n IVR - proc Play_TakeNumber start \\n\\n&quot; \tglobal playng_files \tglobal numbers \tglobal param \tglobal pattern \t \t#\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043a\u0430\u043a\u043e\u0439 \u0440\u0430\u0437 \u0430\u0431\u043e\u043d\u0435\u043d\u0442 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0431\u0440\u0430\u0442\u044c \u043d\u043e\u043c\u0435\u0440 \tif {$numbers(cur_try) &lt;= $numbers(max_try)} { \tputs &quot;\\n\\n IVR - proc Play_TakeNumber current try is: $numbers(cur_try) \\n\\n&quot; \tincr numbers(cur_try)  \t#\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0441\u0431\u043e\u0440\u0430 \u043d\u0430\u0436\u0430\u0442\u044b\u0445 \u0446\u0438\u0444\u0440 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0437\u0432\u043e\u043d\u044f\u0449\u0435\u0433\u043e \tleg collectdigits leg_incoming param pattern  \t#\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0448 \u0444\u0430\u0439\u043b\u043e\u0432 \tmedia play leg_incoming $playng_files(takenumber)  \t#\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0442\u0430\u0439\u043c\u0435\u0440, \u043f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 ev_named_timer \ttimer start named_timer $numbers(waiting_time) t1 \t \t#\u0415\u0441\u043b\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c $numbers(max_try) - \u0440\u0430\u0437\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u043c \t} else {  \t\tfsm setstate CALLDISCONNECTED \t\tmedia play leg_incoming $playng_files(callafter)\t \t} } <\/code><\/pre>\n<p>  \u0414\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043a\u0430\u043a\u043e\u0439 \u0440\u0430\u0437 \u043e\u0448\u0438\u0431\u0430\u0435\u0442\u0441\u044f \u0437\u0432\u043e\u043d\u044f\u0449\u0438\u0439, \u0438 \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 \u0447\u0435\u043c <b><i>$numbers(max_try)<\/i><\/b> \u043f\u0440\u043e\u0441\u0438\u0442 \u0432\u0432\u0435\u0441\u0442\u0438 \u043d\u043e\u043c\u0435\u0440 \u0435\u0449\u0435 \u0440\u0430\u0437.<\/p>\n<p>  \u0414\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 <b>FSM<\/b>:  <\/p>\n<pre><code class=\"python\">set ivr_fsm(TRYAGAIN,ev_media_done)         \t\t&quot;Play_TakeNumber, \tTRYING&quot; set ivr_fsm(TRYING,ev_collectdigits_done)\t\t\t&quot;CheckDestanation, \tsame_state&quot; set ivr_fsm(TRYING,ev_named_timer)\t\t\t\t&quot;GoToReception, \t        same_state&quot; <\/code><\/pre>\n<h1>7) \u0420\u0430\u0437\u0440\u044b\u0432 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f<\/h1>\n<p>  <\/p>\n<pre><code class=\"python\">proc AbortCall { } {  puts &quot;\\n\\n IVR - proc AbortCall start \\n\\n&quot;  call close } <\/code><\/pre>\n<p>  \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 <b>FSM<\/b>:  <\/p>\n<pre><code class=\"python\">set ivr_fsm(any_state,ev_disconnected)      &quot;AbortCall,   same_state&quot; set ivr_fsm(CALLACTIVE,ev_disconnected)     &quot;AbortCall,  CALLDISCONNECTED&quot; set ivr_fsm(CALLDISCONNECTED,ev_disconnected)   &quot;AbortCall,  same_state&quot; set ivr_fsm(CALLDISCONNECTED,ev_media_done)    &quot;AbortCall,  same_state&quot; set ivr_fsm(CALLDISCONNECTED,ev_disconnect_done)  &quot;AbortCall,  same_state&quot; <\/code><\/pre>\n<h1>8) \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430<\/h1>\n<p>  \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u0435 Cisco \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0432 2 \u044d\u0442\u0430\u043f\u0430.<br \/>  <b>\u041f\u0435\u0440\u0432\u043e\u0435<\/b>, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c <b>application<\/b>:  <\/p>\n<pre><code class=\"python\">application  service voicemunu flash:voicemenu.tcl   param allowed_pattern 5[5-7]..   param fastto_reception 1   param reception_number 5501   param fastto_ckp 2   param ckp_number 5604   param fastto_fax 3   param fax_number 5555   param waiting_time 20   param max_try 3   param file_noanswer flash:en_noanswer.au   param file_after flash:en_after.au   param file_noexist flash:en_noexist.au   param file_busy flash:en_busy.au   param file_welcome flash:en_welcome.au   param file_onhold flash:music-on-hold.au   param file_noworking flash:en_takenumber2.au   param file_takenumber flash:en_takenumber2.au <\/code><\/pre>\n<p>  <b>\u0412\u0442\u043e\u0440\u043e\u0435<\/b>, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c <i><b>service<\/b><\/i> \u043a <b><i>dial-peer<\/i><\/b>:  <\/p>\n<pre><code class=\"python\">dial-peer voice 200 pots  description -= ISP Beeline - INcoming call to number 3300100 =-  service voicemunu  incoming called-number 3300100 <\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0438 \u0437\u0432\u043e\u043d\u043a\u0430 \u043d\u0430 \u043d\u043e\u043c\u0435\u0440 3300100, \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u0432\u044b\u0437\u043e\u0432 \u043d\u0430\u0448\u0435\u0433\u043e \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0433\u043e \u043c\u0435\u043d\u044e <b><i>voicemunu<\/i><\/b>.<\/p>\n<h1>9) \u041f\u043e\u043b\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430<\/h1>\n<p>  \u0412\u044b\u0448\u0435 \u0431\u044b\u043b\u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u0434\u0430\u043b\u0435\u0435 \u043f\u043e\u043b\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442, \u0438\u043c\u0435\u0439\u0442\u0435 \u0432 \u0432\u0438\u0434\u0443, \u044d\u0442\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442:  <\/p>\n<pre><code class=\"python\">####################################################### # Cisco IVR TCL script by Konovalov D.A. v.2 ####################################################### # #\t\u0414\u043b\u044f \u0434\u0435\u0431\u0430\u0433\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 #\t\tdebug voip application script #\t\u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u043d\u044b\u0439 \u0434\u0435\u0431\u0430\u0433\u0430 (\u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f, \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0435) # \t\tdebug voip ivr #  # \u0421\u043a\u0440\u0438\u043f\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438: # \tparam allowed_pattern 5[5-7].. # \tparam fastto_reception 1 # \tparam reception_number 5501 #\tparam fastto_ckp 2 # \tparam ckp_number 5604 # \tparam fastto_fax 3 # \tparam fax_number 5555 # \tparam waiting_time 20 # \tparam max_try 3 # \tparam file_welcome flash:en_welcome.au # \tparam file_takenumber flash:en_takenumber.au # \tparam file_after flash:en_after.au # \tparam file_busy flash:en_busy.au # \tparam file_noexist flash:en_noexist.au # \tparam file_noanswer flash:en_noanswer.au # \tparam file_onhold flash:music-on-hold.au #\tparam file_noworking flash:music-on-hold.au  #\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 proc init { } {     puts &quot;\\n proc Init start&quot;     global param }  #\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 proc init_perCallVars { } { \tglobal pattern \tglobal numbers \tglobal playng_files \t \t#####\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u0430\u044f \u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u044f \t#\u0415\u0441\u043b\u0438 \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u0430\u044f \u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u044f, \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 .... - 4 \u043b\u044e\u0431\u044b\u0445 \u0446\u0438\u0444\u0440\u044b \tif {[infotag get cfg_avpair_exists allowed_pattern]} { \t\tset pattern(1) [string trim [infotag get cfg_avpair allowed_pattern]] \t\tputs &quot;\\n\\n IVR - Allowed pattern set as: $pattern(1) \\n\\n&quot; \t\t} else { \t\t\tset pattern(1) .... \t\t\tputs &quot;\\n\\n IVR - Allowed pattern set as DEFAULT: $pattern(1) \\n\\n&quot; \t\t\t}\t \t#####\u041d\u043e\u043c\u0435\u0440\u0430 \t#\u0421\u0435\u043a\u0440\u0435\u0442\u0430\u0440\u044c. \u0415\u0441\u043b\u0438 \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d \u043d\u043e\u043c\u0435\u0440 \u0441\u0435\u043a\u0440\u0435\u0442\u0430\u0440\u044f, \u043d\u043e\u043c\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432 0000 \tif {[infotag get cfg_avpair_exists reception_number]} { \t\tset numbers(reception) [string trim [infotag get cfg_avpair reception_number]] \t\tputs &quot;\\n\\n IVR - reception number set as: $numbers(reception) \\n\\n&quot; \t\t} else {\t\t\t \t\t\tset numbers(reception) 0000 \t\t\tputs &quot;\\n\\n IVR - reception number set as DEFAULT: $numbers(reception) \\n\\n&quot; \t\t\t}\t \t#\u0426\u041a\u041f  \tif {[infotag get cfg_avpair_exists ckp_number]} { \t\tset numbers(ckp) [string trim [infotag get cfg_avpair ckp_number]] \t\tputs &quot;\\n\\n IVR - ckp number set as: $numbers(ckp) \\n\\n&quot; \t\t} else {\t\t\t \t\t\tset numbers(ckp) 0000 \t\t\tputs &quot;\\n\\n IVR - ckp number set as DEFAULT: $numbers(ckp) \\n\\n&quot; \t\t\t} \t#\u0424\u0430\u043a\u0441  \tif {[infotag get cfg_avpair_exists fax_number]} { \t\tset numbers(fax) [string trim [infotag get cfg_avpair fax_number]] \t\tputs &quot;\\n\\n IVR - fax number set as: $numbers(fax) \\n\\n&quot; \t\t} else {\t\t\t \t\t\tset numbers(fax) 0000 \t\t\tputs &quot;\\n\\n IVR - fax number set as DEFAULT: $numbers(fax) \\n\\n&quot; \t\t\t}\t\t\t \t#\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u043d\u0430 \u0420\u0435\u0441\u0435\u043f\u0448\u043d  \tif {[infotag get cfg_avpair_exists fastto_reception]} { \t\tset numbers(fast_reception) [string trim [infotag get cfg_avpair fastto_reception]] \t\tputs &quot;\\n\\n IVR - fast to reception set as: $numbers(fast_reception) \\n\\n&quot; \t\t} else {\t\t\t \t\t\tset numbers(fast_reception) 1 \t\t\tputs &quot;\\n\\n IVR - fast to reception set as DEFAULT: $numbers(fast_reception) \\n\\n&quot; \t\t\t} \t#\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u043d\u0430 \u0426\u041a\u041f  \tif {[infotag get cfg_avpair_exists fastto_ckp]} { \t\tset numbers(fast_ckp) [string trim [infotag get cfg_avpair fastto_ckp]] \t\tputs &quot;\\n\\n IVR - fast to ckp set as: $numbers(fast_ckp) \\n\\n&quot; \t\t} else {\t\t\t \t\t\tset numbers(fast_ckp) 2 \t\t\tputs &quot;\\n\\n IVR - fast to ckp set as DEFAULT: $numbers(fast_ckp) \\n\\n&quot; \t\t\t} \t#\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u043d\u0430 \u0444\u0430\u043a\u0441  \tif {[infotag get cfg_avpair_exists fastto_fax]} { \t\tset numbers(fast_fax) [string trim [infotag get cfg_avpair fastto_fax]] \t\tputs &quot;\\n\\n IVR - fast to fax set as: $numbers(fast_fax) \\n\\n&quot; \t\t} else {\t\t\t \t\t\tset numbers(fast_fax) 3 \t\t\tputs &quot;\\n\\n IVR - fast to fax set as DEFAULT: $numbers(fast_fax) \\n\\n&quot; \t\t\t} \t#\u0412\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043d\u043e\u043c\u0435\u0440\u0430 (\u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0448\u0430 \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f) \tif {[infotag get cfg_avpair_exists waiting_time]} { \t\tset numbers(waiting_time) [string trim [infotag get cfg_avpair waiting_time]] \t\tputs &quot;\\n\\n IVR - wait number set as: $numbers(waiting_time) \\n\\n&quot; \t\t} else {\t\t\t \t\t\tset numbers(waiting_time) 10 \t\t\tputs &quot;\\n\\n IVR - wait number set as DEFAULT: $numbers(waiting_time) \\n\\n&quot; \t\t\t} \t#\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0432\u0432\u0435\u0441\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0437\u0432\u043e\u043d\u043e\u043a \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0432\u0435\u0434\u0435\u043d \u043d\u0430 \u0441\u0435\u043a\u0440\u0435\u0442\u0430\u0440\u044f \tif {[infotag get cfg_avpair_exists max_try]} { \t\tset numbers(max_try) [string trim [infotag get cfg_avpair max_try]] \t\tputs &quot;\\n\\n IVR - max try set as: $numbers(max_try) \\n\\n&quot; \t\tset numbers(cur_try) 0 \t\t} else {\t\t\t \t\t\tset numbers(max_try) 5 \t\t\tputs &quot;\\n\\n IVR - max try set as DEFAULT: $numbers(max_try) \\n\\n&quot; \t\t\tset numbers(cur_try) 0 \t\t\t} \t#####\u041c\u0443\u0437\u044b\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u044c\u0441\u044f\t\t \t#\u0424\u0430\u0439\u043b \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \tif {[infotag get cfg_avpair_exists file_welcome]} { \t\tset playng_files(welcome) [string trim [infotag get cfg_avpair file_welcome]] \t\tputs &quot;\\n\\n IVR - file_welcome set as: $playng_files(welcome) \\n\\n&quot; \t\t} else { \t\t\t#\u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d, \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u0435\u043d \u043d\u0430 \u0442\u0438\u0448\u0438\u043d\u0443 \u0432 1\u043c\u0441 \t\t\tset playng_files(welcome) %s1 \t\t\tputs &quot;\\n\\n IVR - file_welcome set as DEFAULT: $playng_files(welcome) \\n\\n&quot; \t\t\t} \t#\u0424\u0430\u0439\u043b \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432\u0432\u0435\u0441\u0442\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \tif {[infotag get cfg_avpair_exists file_takenumber]} { \t\tset playng_files(takenumber) [string trim [infotag get cfg_avpair file_takenumber]] \t\tputs &quot;\\n\\n IVR - file_takenumber set as: $playng_files(takenumber) \\n\\n&quot; \t\t} else { \t\t\t#\u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d, \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u0435\u043d \u043d\u0430 \u0442\u0438\u0448\u0438\u043d\u0443 \u0432 1\u043c\u0441 \t\t\tset playng_files(takenumber) %s1 \t\t\tputs &quot;\\n\\n IVR - file_takenumber set as DEFAULT: $playng_files(takenumber) \\n\\n&quot; \t\t\t} \t#\u0424\u0430\u0439\u043b &quot;\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u0435\u0440\u0435\u0437\u0432\u043e\u043d\u0438\u0442\u0435 \u043f\u043e\u0437\u0434\u043d\u0435\u0435&quot; \tif {[infotag get cfg_avpair_exists file_after]} { \t\tset playng_files(callafter) [string trim [infotag get cfg_avpair file_after]] \t\tputs &quot;\\n\\n IVR - file_after set as: $playng_files(callafter) \\n\\n&quot; \t\t} else { \t\t\t#\u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d, \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u0435\u043d \u043d\u0430 \u0442\u0438\u0448\u0438\u043d\u0443 \u0432 1\u043c\u0441 \t\t\tset playng_files(callafter) %s1 \t\t\tputs &quot;\\n\\n IVR - file_after set as DEFAULT: $playng_files(callafter) \\n\\n&quot; \t\t\t} \t#\u0424\u0430\u0439\u043b &quot;\u041d\u043e\u043c\u0435\u0440 \u0437\u0430\u043d\u044f\u0442&quot; \tif {[infotag get cfg_avpair_exists file_busy]} { \t\tset playng_files(busy) [string trim [infotag get cfg_avpair file_busy]] \t\tputs &quot;\\n\\n IVR - file_busy set as: $playng_files(busy) \\n\\n&quot; \t\t} else { \t\t\t#\u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d, \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u0435\u043d \u043d\u0430 \u0442\u0438\u0448\u0438\u043d\u0443 \u0432 1\u043c\u0441 \t\t\tset playng_files(busy) %s1 \t\t\tputs &quot;\\n\\n IVR - file_busy set as DEFAULT: $playng_files(busy) \\n\\n&quot; \t\t\t} \t#\u0424\u0430\u0439\u043b &quot;\u041d\u043e\u043c\u0435\u0440 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442&quot; \tif {[infotag get cfg_avpair_exists file_noexist]} { \t\tset playng_files(noexist) [string trim [infotag get cfg_avpair file_noexist]] \t\tputs &quot;\\n\\n IVR - file_noexist set as: $playng_files(noexist) \\n\\n&quot; \t\t} else { \t\t\t#\u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d, \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u0435\u043d \u043d\u0430 \u0442\u0438\u0448\u0438\u043d\u0443 \u0432 1\u043c\u0441 \t\t\tset playng_files(noexist) %s1 \t\t\tputs &quot;\\n\\n IVR - file_noexist set as DEFAULT: $playng_files(noexist) \\n\\n&quot; \t\t\t} \t#\u0424\u0430\u0439\u043b &quot;\u0421\u043e\u0435\u0434\u0435\u043d\u044f\u044e \u0441 \u0441\u0435\u043a\u0440\u0435\u0442\u0430\u0440\u0435\u043c\/\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c&quot; \tif {[infotag get cfg_avpair_exists file_toreception]} { \t\tset playng_files(toreception) [string trim [infotag get cfg_avpair file_toreception]] \t\tputs &quot;\\n\\n IVR - file_toreception set as: $playng_files(toreception) \\n\\n&quot; \t\t} else { \t\t\t#\u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d, \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u0435\u043d \u043d\u0430 \u0442\u0438\u0448\u0438\u043d\u0443 \u0432 1\u043c\u0441 \t\t\tset playng_files(toreception) %s1 \t\t\tputs &quot;\\n\\n IVR - file_toreception set as DEFAULT: $playng_files(toreception) \\n\\n&quot; \t\t\t} \t#\u0424\u0430\u0439\u043b &quot;\u041d\u043e\u043c\u0435\u0440 \u043d\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442, \u043f\u0435\u0440\u0435\u0437\u0432\u043e\u043d\u0438\u0442\u0435 \u043f\u043e\u0437\u0434\u043d\u0435\u0435&quot; \tif {[infotag get cfg_avpair_exists file_noanswer]} { \t\tset playng_files(noanswer) [string trim [infotag get cfg_avpair file_noanswer]] \t\tputs &quot;\\n\\n IVR - file_noanswer set as: $playng_files(noanswer) \\n\\n&quot; \t\t} else { \t\t\t#\u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d, \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u0435\u043d \u043d\u0430 \u0442\u0438\u0448\u0438\u043d\u0443 \u0432 1\u043c\u0441 \t\t\tset playng_files(noanswer) %s1 \t\t\tputs &quot;\\n\\n IVR - file_noanswer set as DEFAULT: $playng_files(noanswer) \\n\\n&quot; \t\t\t} \t#\u0424\u0430\u0439\u043b \u043c\u0443\u0437\u044b\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0438 \tif {[infotag get cfg_avpair_exists file_onhold]} { \t\tset playng_files(onhold) [string trim [infotag get cfg_avpair file_onhold]] \t\tputs &quot;\\n\\n IVR - file_onhold set as: $playng_files(onhold) \\n\\n&quot; \t\t} else { \t\t\t#\u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d, \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u0435\u043d \u043d\u0430 \u0442\u0438\u0448\u0438\u043d\u0443 \u0432 1\u043c\u0441 \t\t\tset playng_files(onhold) %s1 \t\t\tputs &quot;\\n\\n IVR - file_onhold set as DEFAULT: $playng_files(onhold) \\n\\n&quot; \t\t\t} \t#\u0424\u0430\u0439\u043b \u043c\u0443\u0437\u044b\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0412 \u043d\u0435\u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \tif {[infotag get cfg_avpair_exists file_noworking]} { \t\tset playng_files(noworking) [string trim [infotag get cfg_avpair file_noworking]] \t\tputs &quot;\\n\\n IVR - file_noworking set as: $playng_files(noworking) \\n\\n&quot; \t\t} else { \t\t\t#\u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d, \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u0435\u043d \u043d\u0430 \u0442\u0438\u0448\u0438\u043d\u0443 \u0432 1\u043c\u0441 \t\t\tset playng_files(noworking) %s1 \t\t\tputs &quot;\\n\\n IVR - file_noworking set as DEFAULT: $playng_files(noworking) \\n\\n&quot; \t\t\t} }  proc GetDate { } { \tglobal workingtime \t \t#\u0427\u0430\u0441 \tset houris [clock format [clock seconds] -format %H] \t#\u0414\u0435\u043d\u044c \u043d\u0435\u0434\u0435\u043b\u0438 \tset dayis [clock format [clock seconds] -format %A] \t#\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \tif {$houris &gt; 17 || $houris &lt; 8 || $dayis==&quot;Sunday&quot; || $dayis==&quot;Saturday&quot;} { \tset workingtime 0 \t} else { \tset workingtime 1 \t} }  #\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0448\u0430 \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f proc Play_Welcome { } {     puts &quot;\\n\\n IVR - proc Play_Welcome start \\n\\n&quot; \tglobal playng_files \tglobal param \tglobal pattern \tglobal numbers \tglobal workingtime \t \t#\u0412\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443, \u0433\u0434\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \tinit_perCallVars \t \t#\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0440\u0435\u043c\u044f \tGetDate \t#\u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u0440\u0435\u043c\u044f \u0438\u043b\u0438 \u043d\u0435\u0442, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435  \tif {$workingtime} { \tset after_welcome $playng_files(takenumber)\t \t} else { \tset after_welcome $playng_files(noworking) \t} \t \t#\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \tset param(interruptPrompt) true \tset param(abortKey) * \tset param(terminationKey) #\t \t \t#\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0432\u044b\u0437\u043e\u0432     leg setupack leg_incoming     leg proceeding leg_incoming     leg connect leg_incoming \t \t#\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0441\u0431\u043e\u0440\u0430 \u043d\u0430\u0436\u0430\u0442\u044b\u0445 \u0446\u0438\u0444\u0440 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0437\u0432\u043e\u043d\u044f\u0449\u0435\u0433\u043e \tleg collectdigits leg_incoming param pattern \t#\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0448 \u0444\u0430\u0439\u043b\u043e\u0432 \u0437\u0432\u043e\u043d\u044f\u0449\u0435\u043c\u0443 \u0430\u0431\u043e\u043d\u0435\u043d\u0442\u0443, \u043f\u043e\u0441\u043b\u0435 \u0438\u0445 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u043d\u0430\u0447\u043d\u0435\u0442  \t#\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u0439\u043c\u0435\u0440 param(interDigitTimeout), \u043f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e  \t#\u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 ev_collectdigits_done     media play leg_incoming %s500 $playng_files(welcome) $after_welcome $playng_files(onhold) \t#\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0442\u0430\u0439\u043c\u0435\u0440, \u043f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 ev_named_timer \ttimer start named_timer $numbers(waiting_time) t1 }  #\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432\u0432\u0435\u0441\u0442\u0438 \u043d\u043e\u043c\u0435\u0440 proc Play_TakeNumber { } {     puts &quot;\\n\\n IVR - proc Play_TakeNumber start \\n\\n&quot; \tglobal playng_files \tglobal numbers \tglobal param \tglobal pattern \t \t#\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043a\u0430\u043a\u043e\u0439 \u0440\u0430\u0437 \u0430\u0431\u043e\u043d\u0435\u043d\u0442 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0431\u0440\u0430\u0442\u044c \u043d\u043e\u043c\u0435\u0440 \tif {$numbers(cur_try) &lt;= $numbers(max_try)} { \tputs &quot;\\n\\n IVR - proc Play_TakeNumber current try is: $numbers(cur_try) \\n\\n&quot; \tincr numbers(cur_try) \t#\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0441\u0431\u043e\u0440\u0430 \u043d\u0430\u0436\u0430\u0442\u044b\u0445 \u0446\u0438\u0444\u0440 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0437\u0432\u043e\u043d\u044f\u0449\u0435\u0433\u043e \tleg collectdigits leg_incoming param pattern \t#\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0448 \u0444\u0430\u0439\u043b\u043e\u0432 \tmedia play leg_incoming $playng_files(takenumber) \t#\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0442\u0430\u0439\u043c\u0435\u0440, \u043f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 ev_named_timer \ttimer start named_timer $numbers(waiting_time) t1 \t \t#\u0415\u0441\u043b\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c $numbers(max_try) - \u0440\u0430\u0437\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u043c \t} else {  \t\tfsm setstate CALLDISCONNECTED \t\tmedia play leg_incoming $playng_files(callafter)\t \t} }  #\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0437\u0432\u043e\u043d\u043a\u0430 \u043d\u0430 \u0441\u0435\u043a\u0440\u0435\u0442\u0430\u0440\u044f proc GoToReception { } { \tputs &quot;\\n\\n IVR - proc GoToReception start \\n\\n&quot; \tglobal numbers \t#\u041e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0448 \u043c\u0435\u0434\u0438\u0430 \tmedia stop leg_incoming \t#\u041c\u0435\u043d\u044f\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \tfsm setstate CALLCONNECTED \t \tset digit $numbers(reception) \t \t#\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c $digit \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e CheckCallersAndConnect \tCheckCallersAndConnect $digit }  #\u0417\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u0438\u043b\u0438 \u043d\u0435 \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u0437\u0432\u043e\u043d\u044f\u0449\u0438\u043c \u0446\u0438\u0444\u0440\u044b  proc CheckDestanation { } {     puts &quot;\\n\\n IVR - proc CheckDestanation start \\n\\n&quot; \tglobal playng_files \tglobal numbers \tglobal digit \t#\u041e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0448 \u043c\u0435\u0434\u0438\u0430 \tmedia stop leg_incoming \t \t#\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c     set status [infotag get evt_status] \tset digit [infotag get evt_dcdigits] \t \t#\u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0446\u0438\u0444\u0440\u044b \u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u044b \t#\u0415\u0441\u043b\u0438 \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u0430\u044f \u0446\u0438\u0444\u0440\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u0439, \u0447\u0442\u043e \u0437\u0430\u0434\u0430\u043d\u0430 \u0432 $numbers(fast_reception),  \t#\u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c  digit  \u043d\u0430 \u043d\u043e\u043c\u0435\u0440 \u0440\u0435\u0441\u0435\u043f\u0448\u043d \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c $digit \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e CheckCallersAndConnect, \t# \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0432 \u0441\u0442\u0430\u0442\u0443\u0441 \u043d\u0430 CALLCONNECTED, \t# \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443, \u043f\u0440\u0438 \u043d\u0430\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f ev_setup_done (\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u043d\u043e\u043c\u0435\u0440\u0443 \u0441\u0435\u043a\u0440\u0435\u0442\u0430\u0440\u044f) \t# \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 CallIsConnect \tif {$digit == $numbers(fast_reception)} { \t\tputs &quot;\\n\\n IVR - proc CheckDestanation digit = $digit\\nGoing to next reception \\n\\n&quot; \t\tfsm setstate CALLCONNECTED \t\tset digit $numbers(reception) \t\t#\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c $digit \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e CheckCallersAndConnect \t\tCheckCallersAndConnect $digit \t#\u0415\u0441\u043b\u0438 \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u0430\u044f \u0446\u0438\u0444\u0440\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u0439, \u0447\u0442\u043e \u0437\u0430\u0434\u0430\u043d\u0430 \u0432 $numbers(fast_ckp), \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043d\u0430 \u0426\u041a\u041f  \t#\u0447\u0435\u0440\u0435\u0437 CheckCallersAndConnect \t} elseif {$digit == $numbers(fast_ckp)} { \t\tputs &quot;\\n\\n IVR - proc CheckDestanation digit = $digit\\nGoing to next CKP \\n\\n&quot; \t\tfsm setstate CALLCONNECTED \t\tset digit $numbers(ckp) \t\t#\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c $digit \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e CheckCallersAndConnect \t\tCheckCallersAndConnect $digit \t#\u0415\u0441\u043b\u0438 \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u0430\u044f \u0446\u0438\u0444\u0440\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u0439, \u0447\u0442\u043e \u0437\u0430\u0434\u0430\u043d\u0430 \u0432 $numbers(fast_fax), \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043d\u0430 \u0444\u0430\u043a\u0441  \t#\u0447\u0435\u0440\u0435\u0437 CheckCallersAndConnect \t} elseif {$digit == $numbers(fast_fax)} { \t\tputs &quot;\\n\\n IVR - proc CheckDestanation digit = $digit\\nGoing to next fax \\n\\n&quot; \t\tfsm setstate CALLCONNECTED \t\tset digit $numbers(fax) \t\t#\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c $digit \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e CheckCallersAndConnect \t\tCheckCallersAndConnect $digit \t#\u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u0443\u0441 = cd_004 (\u0432\u0432\u0435\u0434\u0435\u043d\u044b \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0435 \u0446\u0438\u0444\u0440\u044b \u043d\u043e\u043c\u0435\u0440\u0430) - \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a \u043d\u0443\u0436\u043d\u043e\u043c\u0443 \u043d\u043e\u043c\u0435\u0440\u0443  \t#\u0447\u0435\u0440\u0435\u0437 CheckCallersAndConnect \t} elseif {$status == &quot;cd_004&quot;} { \t\tputs &quot;\\n\\n IVR - proc CheckDestanation status = $status digit = $digit \\n\\n&quot; \t\tfsm setstate CALLCONNECTED \t\t#\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c $digit \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e CheckCallersAndConnect \t\tCheckCallersAndConnect $digit \t#\u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u0443\u0441 = cd_005 (\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0441 dial plan) - \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a \u043d\u0443\u0436\u043d\u043e\u043c\u0443 \u043d\u043e\u043c\u0435\u0440\u0443  \t#\u0447\u0435\u0440\u0435\u0437 CheckCallersAndConnect\t \t} elseif {$status == &quot;cd_005&quot;} { \t\tputs &quot;\\n\\n IVR - proc CheckDestanation status = $status digit = $digit \\n\\n&quot; \t\tfsm setstate CALLCONNECTED\t \t\t#\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c $digit \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e CheckCallersAndConnect \t\tCheckCallersAndConnect $digit\t \t#\u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u0443\u0441 = cd_006 (\u043d\u0430\u0431\u0440\u0430\u043d \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043d\u043e\u043c\u0435\u0440) - \u0438\u0433\u0440\u0430\u0435\u043c \u0432 \u043b\u0438\u043d\u0438\u044e $playng_files(noexist)  \t#\u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u0441\u0442\u0430\u0442\u0443\u0441 \u043d\u0430 TRYAGAIN, \u043f\u0440\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0438 \u043d\u0430\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f ev_media_done  \t#(\u043a\u043e\u043d\u0435\u0446 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430) \u0432\u044b\u0437\u043e\u0432\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 Play_TakeNumber \t} elseif {$status == &quot;cd_006&quot;} { \t\tputs &quot;\\n\\n IVR - proc CheckDestanation status = $status digit = $digit \\n\\n&quot; \t\tfsm setstate TRYAGAIN \t\tmedia play leg_incoming $playng_files(noexist) \t#\u0412\u043e \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u0441\u0442\u0430\u0442\u0443\u0441 \u043d\u0430 TORECEPTION, \u043f\u0440\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0438  \t#\u043d\u0430\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f ev_media_done (\u043a\u043e\u043d\u0435\u0446 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430) \u0432\u044b\u0437\u043e\u0432\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 GoToReception \t} else { \t\t#\u041f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u043c &quot;\u0412\u0430\u0448 \u0432\u044b\u0437\u043e\u0432 \u043f\u0435\u0440\u0435\u0430\u0434\u0440\u0435\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0435\u043a\u0440\u0435\u0442\u0430\u0440\u044f&quot; \t\tfsm setstate TORECEPTION \t\tmedia play leg_incoming $playng_files(toreception)\t\t \t\tputs &quot;\\n\\n IVR - proc CheckDestanation status = $status \\n\\n&quot; \t}\t }  #\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0437\u0432\u043e\u043d\u044f\u0449\u0435\u0433\u043e, \u0435\u0441\u043b\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442, \u0431\u0443\u0434\u0435\u043c \u043c\u0435\u043d\u044f\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0435 \u0438\u043c\u044f proc CheckCallersAndConnect {digit} { \tputs &quot;\\n\\n IVR - proc CheckCallersAndConnect start \\n\\n&quot; \t \tset callernumber [infotag get leg_ani] \t \t switch $callernumber { \t &quot;9120000000&quot; {set callInfo(displayInfo) &quot;Director(mobile)&quot;} \t &quot;9130000000&quot; {set callInfo(displayInfo) &quot;Buhgalter(mobile)&quot;}   \t default {} \t \t} \t \tleg setup $digit callInfo leg_incoming }  #\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043b\u0438\u043d\u0438\u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0437\u0432\u043e\u043d\u044f\u0449\u0435\u0433\u043e \u043a \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u043c\u0443 \u043d\u043e\u043c\u0435\u0440\u0443 proc CallIsConnect { } { \tputs &quot;\\n\\n IVR - proc CallIsConnect start \\n\\n&quot; \tglobal playng_files\t  \t#\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0447\u0435\u043c\u0443 \u0440\u0430\u0432\u0435\u043d status \tset status [infotag get evt_status] \t \t#\u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u0443\u0441 \u0440\u0430\u0432\u0435\u043d ls_000 (\u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u043c \u043d\u043e\u043c\u0435\u0440\u043e\u043c), \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043d\u0430 CALLACTIVE \tif {$status == &quot;ls_000&quot;} { \tfsm setstate CALLACTIVE\t \t \t#\u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u0443\u0441 \u0440\u0430\u0432\u0435\u043d ls_002 (\u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043e\u0442\u0432\u0435\u0442\u0438\u043b \u043d\u0430 \u0437\u0432\u043e\u043d\u043e\u043a), \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u043e\u043c\u0435\u0440\u0430 \t} elseif {$status == &quot;ls_002&quot;} { \t\tfsm setstate TRYAGAIN \t\tmedia play leg_incoming $playng_files(noanswer) \t#\u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u0443\u0441 - \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u043e\u043c\u0435\u0440\u0430 \t} elseif {$status == &quot;ls_004&quot; || $status == &quot;ls_005&quot; || $status == &quot;ls_006&quot;} { \t\tfsm setstate TRYAGAIN \t\tmedia play leg_incoming $playng_files(noexist) \t#\u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u0443\u0441 \u0440\u0430\u0432\u0435\u043d ls_007 (\u0430\u0431\u043e\u043d\u0435\u043d\u0442 \u0437\u0430\u043d\u044f\u0442), \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u043e\u043c\u0435\u0440\u0430 \t} elseif {$status == &quot;ls_007&quot;} { \t\tfsm setstate TRYAGAIN \t\tmedia play leg_incoming $playng_files(busy) \t} }  #\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0437\u0432\u043e\u043d\u043a\u0430 proc AbortCall { } { \tputs &quot;\\n\\n IVR - proc AbortCall start \\n\\n&quot; \tcall close }  #\u0418\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 init #init_perCallVars  #\u042d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0445 \u043f\u0440\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 #\u041f\u043e \u0441\u0443\u0442\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \t \t#\u0415\u0441\u043b\u0438 \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f ev_disconnected, \u0432\u044b\u0437\u0432\u0430\u0442\u044c AbortCall \tset ivr_fsm(any_state,ev_disconnected)    \t\t\t&quot;AbortCall, \t\tsame_state&quot; \t \t#\u0415\u0441\u043b\u0438 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 CALLCOMES \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 ev_setup_indication (\u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0432\u044b\u0437\u043e\u0432) \t#\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f Play_Welcome, \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 same_state (\u0442.\u0435. \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0436\u043d\u0438\u043c) \tset ivr_fsm(CALLCOMES,ev_setup_indication)  \t\t&quot;Play_Welcome, \t\tsame_state&quot; \t \t#\u0415\u0441\u043b\u0438 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 CALLCOMES \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 ev_collectdigits_done (\u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d \u0432\u0432\u043e\u0434 \u0446\u0438\u0444\u0440)  \t#\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f CheckDestanation, \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0436\u043d\u0438\u043c \tset ivr_fsm(CALLCOMES,ev_collectdigits_done)\t\t&quot;CheckDestanation, \tsame_state&quot; \t \t#\u0415\u0441\u043b\u0438 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 CALLCOMES \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 ev_named_timer (\u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f \u0442\u0430\u0439\u043c\u0435\u0440 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0432\u0432\u043e\u0434\u0430 \u0446\u0438\u0444\u0440)  \t#\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f GoToReception, \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0436\u043d\u0438\u043c \tset ivr_fsm(CALLCOMES,ev_named_timer)\t\t\t\t&quot;GoToReception, \tsame_state&quot; \t \t#\u0415\u0441\u043b\u0438 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 TORECEPTION \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 ev_media_done (\u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0448 \u0444\u0430\u0439\u043b\u0430)  \t#\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f GoToReception, \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0436\u043d\u0438\u043c \tset ivr_fsm(TORECEPTION,ev_media_done)         \t\t&quot;GoToReception, \tsame_state&quot; \t \t#\u0414\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0435 \u0432 \u043d\u043e\u043c\u0435\u0440\u0435 \tset ivr_fsm(TRYAGAIN,ev_media_done)         \t\t&quot;Play_TakeNumber, \tTRYING&quot; \tset ivr_fsm(TRYING,ev_collectdigits_done)\t\t\t&quot;CheckDestanation, \tsame_state&quot; \tset ivr_fsm(TRYING,ev_named_timer)\t\t\t\t\t&quot;GoToReception, \tsame_state&quot; \t \t#\u0415\u0441\u043b\u0438 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 CALLCONNECTED \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 ev_setup_done  \t#(\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e\/\u043d\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u043c \u043d\u043e\u043c\u0435\u0440\u043e\u043c) \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f CallIsConnect, \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0436\u043d\u0438\u043c \tset ivr_fsm(CALLCONNECTED,ev_setup_done) \t\t\t&quot;CallIsConnect,\t\tsame_state&quot; \t \t#\u042d\u0442\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043b\u0438\u043d\u0438\u0438 \tset ivr_fsm(CALLACTIVE,ev_disconnected)   \t\t\t&quot;AbortCall,\t\t\tCALLDISCONNECTED&quot; \tset ivr_fsm(CALLDISCONNECTED,ev_disconnected) \t\t&quot;AbortCall,\t\t\tsame_state&quot; \tset ivr_fsm(CALLDISCONNECTED,ev_media_done)  \t\t&quot;AbortCall,\t\t\tsame_state&quot; \tset ivr_fsm(CALLDISCONNECTED,ev_disconnect_done) \t&quot;AbortCall,\t\t\tsame_state&quot;  fsm define ivr_fsm CALLCOMES <\/code><\/pre>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/265453\/\"> http:\/\/habrahabr.ru\/post\/265453\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>             \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0440\u0435\u0447\u044c \u043e \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u043c \u043c\u0435\u043d\u044e (<b>IVR<\/b>) \u0434\u043b\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432 Cisco, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 TCL, \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043d\u0430 Cisco 3845.<\/p>\n<h1>\u0418\u0442\u0430\u043a, \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f \u0432 \u0430\u0437\u0430\u0445<\/h1>\n<p>  Cisco \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 <b>IOS<\/b> 12 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043a\u0430\u043a <b>VXML<\/b> \u0442\u0430\u043a \u0438 <b>TCL<\/b> \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u044b\u043c \u043c\u0435\u043d\u044e. \u041e\u0434\u043d\u0430\u043a\u043e, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 <b>VXML<\/b>, \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u043d\u0430 <b>TCL<\/b> \u0438\u043c\u0435\u044e\u0442 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 <b>Cisco IVR API<\/b>. \u0422\u0430\u043a \u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0433\u0438\u0431\u0440\u0438\u0434\u043d\u044b\u0435 <b>IVR<\/b> \u0441\u043a\u0440\u0438\u043f\u0442\u044b, \u0441\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c\u0438 \u043a\u0443\u0441\u043a\u0430\u043c\u0438 <b>VXML<\/b> \u043a\u043e\u0434\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 <b>TCL<\/b> \u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/p>\n<p>  \u0412\u0441\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 IVR \u043e\u0442 Cisco, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043d\u0435 \u0434\u043e\u0432\u0435\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c <a href=\"https:\/\/cloud.mail.ru\/public\/FFBy\/ZEujVorKp\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<h3>FSM<\/h3>\n<p>  \u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043f\u0440\u0438 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0438 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0433\u043e \u043c\u0435\u043d\u044e \u043e\u0442 Cisco \u043c\u043d\u0435 \u0431\u044b\u043b\u043e \u043e\u0447\u0435\u043d\u044c \u0442\u0440\u0443\u0434\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0434\u0430\u043a \u044d\u0442\u043e <b>FSM<\/b> \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b.<br \/>  \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"python\">set ivr_fsm(CALLCOMES,ev_setup_indication) &quot;act_Setup same_state&quot; <\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u0442\u0430\u043a\u0438\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0433\u043e\u0434\u043d\u043e, \u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u043e\u043d\u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 <b>TCL<\/b> \u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0442\u0430\u043a\u043e\u0435. <br \/>  \u041e\u0431\u0449\u0438\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u044d\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0442\u0430\u043a\u043e\u0432:  <\/p>\n<pre><code class=\"python\">set array(CURRSTATE,curr_event) \u201cact_proc NEXTSTATE\u201d <\/code><\/pre>\n<p>  \u0433\u0434\u0435:<br \/>   <b>array<\/b> \u2013 \u044d\u0442\u043e \u0438\u043c\u044f <i><b>FSM<\/b><\/i> \u043c\u0430\u0441\u0441\u0438\u0432\u0430.<br \/>   <b>CURRSTATE<\/b> \u2013 \u0438\u043c\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0435 <i><b>curr_event<\/b><\/i>.<br \/>   <b>act_proc<\/b> \u2013 \u0438\u043c\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f <i><b>curr_event<\/b><\/i> \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 <b><i>CURRSTATE<\/i><\/b>.<br \/>   <b>NEXTSTATE<\/b> \u2013 \u0438\u043c\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 <i><b>act_proc<\/b><\/i>.<\/p>\n<p>  \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, <b>FSM<\/b> \u044d\u0442\u043e \u043c\u0430\u0440\u043a\u0435\u0440, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 Cisco \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0435 \u043e\u0442 API \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0441 <b>curr_event<\/b> \u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 \u0441 <b>CURRSTATE<\/b>, \u0435\u0441\u043b\u0438 \u0432 \u043a\u0430\u043a\u043e\u043c \u043b\u0438\u0431\u043e FSM \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043e\u043d\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u044b, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 <b>act_proc<\/b> \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 <b>NEXTSTATE<\/b>.<\/p>\n<p>  \u0421\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0432 \u044d\u0442\u043e\u043c \u2014 \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c\u0438 <b>FSM<\/b> \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430\u043c\u0438 <b>\u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e<\/b>. \u0422.\u0435. \u0434\u043b\u044f Cisco \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0440\u044f\u0434\u043e\u043a, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b FSM \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b, \u0432\u0441\u0435 \u043e\u043d\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-264308","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/264308","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=264308"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/264308\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=264308"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=264308"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=264308"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}