{"id":270847,"date":"2015-12-22T10:57:02","date_gmt":"2015-12-22T07:57:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=270847"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=270847","title":{"rendered":"Asterisk + Huawei E1550 \u0438\u043b\u0438 \u043a\u0430\u043a \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0438\u0438"},"content":{"rendered":"<p>       \u041a\u043e\u0433\u0434\u0430 \u044f \u043f\u043e\u043b\u0442\u043e\u0440\u0430 \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434, \u0431\u0443\u0434\u0443\u0447\u0438 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u043c 4 \u043a\u0443\u0440\u0441\u0430 \u0442\u0435\u043b\u0435\u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u0439, \u043f\u0440\u0438\u0448\u0435\u043b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044e \u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u0441\u0430\u0434\u043c\u0438\u043d\u0430, \u044f \u043f\u043e\u043d\u044f\u043b \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u0443 \u043c\u0435\u043d\u044f \u0431\u0443\u0434\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e, \u0430 \u0443\u0447\u0438\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0435\u0449\u0435 \u0431\u043e\u043b\u044c\u0448\u0435. \u0423\u0447\u0435\u0431\u0443 \u044f \u043e\u0442\u043e\u0434\u0432\u0438\u043d\u0443\u043b \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043b\u0430\u043d, \u0430 \u043f\u043e\u0442\u043e\u043c \u0438 \u0432\u043e\u0432\u0441\u0435 \u0441\u0442\u0430\u043b \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u0430\u0440\u0430\u0445 \u0440\u0430\u0437 \u0432 \u043c\u0435\u0441\u044f\u0446, \u043f\u043e\u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u044b\u043b\u043e \u043c\u043d\u043e\u0433\u043e, \u0438 \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u0443\u0436 \u0442\u043e\u0447\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u0442\u043e\u0433\u043e, \u0447\u0435\u043c\u0443 \u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u0443\u0447\u0438\u0442\u044c \u0432 \u0443\u043d\u0438\u0432\u0435\u0440\u0435. <\/p>\n<p>  \u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0434\u0430\u0436\u0430\u043c\u0438, \u0438 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0437\u0434\u0435\u0441\u044c \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043c\u043d\u043e\u0433\u043e \u0442\u0430\u043a\u0438\u0445 \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u043e\u0432\u0443\u0442 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430\u043c\u0438 \u043f\u043e \u043f\u0440\u043e\u0434\u0430\u0436\u0430\u043c, \u0438 \u0438\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0437\u0432\u043e\u043d\u0438\u0442\u044c!<\/p>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u044b\u0439 \u0436\u0435 \u0434\u0435\u043d\u044c \u043c\u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0438\u0438. 5 \u0448\u043b\u044e\u0437\u043e\u0432 VoIP Audiocodes MP-202B \u0438 \u0434\u0435\u0441\u044f\u0442\u043e\u043a DECT \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432+ \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 SIP \u0442\u0440\u0430\u043d\u043a \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435. \u042d\u0442\u0438\u043c\u0438-\u0442\u043e \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430\u043c\u0438 \u0438 \u0436\u043e\u043d\u0433\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0438 30 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0432\u0435\u0441\u044c \u0434\u0435\u043d\u044c. \u0427\u0451 \u0437\u0430 &#8230;, \u043f\u043e\u0434\u0443\u043c\u0430\u043b \u044f \u0438 \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c Asterisk.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u0441 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c \u043d\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0438\u0438 \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u044d\u0442\u0438\u0445 \u0441\u0430\u043c\u044b\u0445 Huawei E1550 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0448\u0442\u0443\u043a, \u0442.\u043a. \u0431\u044b\u043b\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0435\u0448\u0435\u0432\u043b\u0435 \u043a\u0443\u043f\u0438\u0442\u044c 4 \u043c\u043e\u0434\u0435\u043c\u0430, \u0447\u0435\u043c GSM \u0448\u043b\u044e\u0437 \u043d\u0430 4 \u043a\u0430\u043d\u0430\u043b\u0430. \u042d\u0442\u043e \u0438 \u0431\u044b\u043b\u0430 \u043c\u043e\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e \u043d\u0435\u043e\u043f\u044b\u0442\u043d\u043e\u0441\u0442\u0438. \u042d\u0442\u043e \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c, \u043d\u043e \u043c\u044b \u0442\u043e \u0441 \u0432\u0430\u043c\u0438 \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u043d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e, \u0447\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435. \u0418 \u0442\u0443\u0442 \u044f \u043f\u043e\u0437\u043d\u0430\u043b \u0431\u043e\u043b\u044c. \u0411\u043e\u043b\u044c \u0447\u0442\u043e:<\/p>\n<ul>\n<li>\u041c\u043e\u0434\u0435\u043c\u044b \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u043c\u0430\u0442\u0435\u0440\u0438\u043d\u0441\u043a\u0443\u044e \u043f\u043b\u0430\u0442\u0443 \u0431\u043e\u043a \u043e \u0431\u043e\u043a \u043a\u043e\u043b-\u0432\u043e\u043c 4 \u0448\u0442\u0443\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u043d\u0435 \u0431\u0443\u0434\u0443\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u043e \u043f\u0435\u0440\u0432\u044b\u0445: \u043d\u0435 \u043d\u0430 \u0432\u0441\u0435\u0445 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0442\u043e\u043a\u0430 (\u043d\u0443\u0436\u043d\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043c\u043e\u0434\u0435\u043c\u0443 500mA \u043d\u0430 \u043f\u043e\u0440\u0442, \u0430 \u043c\u0430\u0442\u0435\u0440\u0438\u043d\u043a\u0430 \u043d\u0435 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f), \u0430 \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445: \u0441\u0443\u0434\u044f \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u043c\u043e\u0434\u0435\u043c\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0440\u0438\u0440\u0443\u044e\u0442, \u0447\u0442\u043e \u0442\u043e\u0436\u0435 \u043d\u0435 \u0435\u0441\u0442\u044c \u0433\u0443\u0434.   <\/li>\n<li>\u041d\u0435 \u0432\u0441\u0435 USB \u0445\u0430\u0431\u044b \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u0445\u043e\u0440\u043e\u0448\u0438, \u0438 \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0438 \u0432\u043f\u0430\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u043a\u043e\u043d\u0434\u0435\u043d\u0441\u0430\u0442\u043e\u0440\u044b. \u041a\u0430\u043a \u0438\u0442\u043e\u0433, \u044f \u043a\u0443\u043f\u0438\u043b STLab U-340 (\u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u043a\u0443\u043f\u0438\u0442\u044c D-Link DUB-H7, \u043d\u043e \u0435\u0433\u043e \u043d\u0430 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u0431\u044b\u043b\u043e). \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b \u0435\u0433\u043e \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443, \u0442\u043a\u043d\u0443\u043b \u043c\u043e\u0434\u0435\u043c\u044b \u0432 \u043d\u0435\u0433\u043e \u2014 \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u043e\u0441\u044c, \u0442\u0430\u043a \u0438 \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u0447\u0438 \u0438 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0442\u0432\u0430\u043b\u0438\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043c\u043e\u0432. \u041f\u0435\u0440\u0432\u043e\u0435 \u0447\u0442\u043e \u044f \u0441\u0434\u0435\u043b\u0430\u043b, \u044d\u0442\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b \u0435\u0433\u043e, \u0438 \u0443\u0432\u0438\u0434\u0435\u043b, \u0447\u0442\u043e \u043d\u0438\u0444\u0438\u0433\u0430 \u0442\u0430\u043c \u043d\u0435\u0442 \u043a\u043e\u043d\u0434\u0435\u043d\u0441\u0430\u0442\u043e\u0440\u043e\u0432. \u041a\u0443\u043f\u0438\u043b. \u0412\u043f\u0430\u044f\u043b. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b. \u041f\u043e\u0443\u043b\u044b\u0431\u0430\u043b\u0441\u044f. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041b\u0443\u0447\u0448\u0435. \u041d\u0435 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e, \u043d\u043e \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0435, \u043e\u0442\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043e\u0441\u043d\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0441\u043b\u044b\u0448\u043d\u043e \u0441\u0442\u0430\u043b\u043e \u043b\u0443\u0447\u0448\u0435(\u043f\u043e\u0437\u0436\u0435 \u044f \u0435\u0449\u0435 \u043f\u0440\u0438\u043a\u0443\u043f\u0438\u043b USB \u0443\u0434\u043b\u0438\u043d\u0438\u0442\u0435\u043b\u0435\u0439 15\u0441\u043c, \u0447\u0442\u043e\u0431 \u0440\u043e\u0437\u043d\u0435\u0441\u0442\u0438 \u043c\u043e\u0434\u0435\u043c\u044b \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430).  <\/li>\n<\/ul>\n<p>  \u0418 \u0432\u043e\u0442 \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u0432\u0441\u0435 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0443\u0436\u0435 \u0447\u0442\u043e-\u0442\u043e \u0440\u0435\u0448\u0430\u0442\u044c \u0441 \u0442\u0435\u043c, \u043a\u0430\u043a \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0437\u0432\u043e\u043d\u043a\u0438, \u0442.\u00a0\u043a. \u043c\u0438\u043d\u0443\u0442 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u043c\u043e\u0434\u0435\u043c\u0435 \u0431\u044b\u043b\u043e \u043f\u043e 1000, \u0430 \u043d\u0430\u043c \u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e \u0431 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e.<\/p>\n<p>  \u0421 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0443 \u043c\u0435\u043d\u044f \u0431\u044b\u043b \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0434\u0438\u0430\u043b\u043f\u043b\u0430\u043d. \u041d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u0418\u041c\u0425\u041e. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u044f \u043d\u0430\u0431\u0440\u0430\u043b\u0441\u044f \u043e\u043f\u044b\u0442\u0430 \u0432 \u0441\u0438\u0441\u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438, \u043f\u043e\u0434\u0443\u0447\u0438\u043b Python \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438, \u0438\u2026 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0441\u044f \u0441 Lua. \u042f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043b \u0432\u0435\u0441\u044c \u0434\u0438\u0430\u043b\u043f\u043b\u0430\u043d \u043d\u0430 Lua \u0438 \u043e\u043d \u0441 650 \u0441\u0442\u0440\u043e\u043a \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u0432 200 \u0441 \u043b\u0438\u0448\u043d\u0438\u043c. \u0418 \u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0438\u0430\u043b\u043f\u043b\u0430\u043d \u043d\u0430 Lua \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e, \u0441\u043e\u0432\u0435\u0442\u0443\u044e. <\/p>\n<p>  \u041d\u043e \u0432\u043e\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0435 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 Python3.4.<\/p>\n<p>  \u0421\u0443\u0442\u044c \u0432 \u0447\u0435\u043c. \u0415\u0441\u0442\u044c \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u043e\u0442 \u041c\u0422\u0421. \u042f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b \u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440, \u0447\u0442\u043e \u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043a\u043e\u043b-\u0432\u043e \u043c\u0438\u043d\u0443\u0442 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0435. \u0422\u0430\u043a \u0432\u043e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u0445\u043e\u0434\u0438\u0442 \u043f\u043e Cron&#8217;\u0443 \u043d\u0430 \u0441\u0430\u0439\u0442, \u043f\u0430\u0440\u0441\u0438\u0442 \u0435\u0433\u043e, \u0432\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u0438\u043d\u0443\u0442 \u0438 \u043f\u0438\u0448\u0435\u0442 \u0432 SQLite \u0431\u0430\u0437\u0443. \u0412\u043e\u0442 \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u0434\u0438\u0430\u043b\u043f\u043b\u0430\u043d\u0435: \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u0431\u043e\u0440\u0430 \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u043c \u0438\u0437 \u0431\u0430\u0437\u044b \u0432\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043c\u0438\u043d\u0443\u0442, \u0438 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0435 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u0437\u0432\u043e\u043d\u043e\u043a.<\/p>\n<p>  \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 Pyhton \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0441\u0430\u0439\u0442 \u0438 \u043f\u0430\u0440\u0441\u0438\u0442 \u043c\u0438\u043d\u0443\u0442\u044b:<\/p>\n<pre><code class=\"python\">#!\/usr\/bin\/env python3.4 import requests, bs4, threading, sys, sqlite3, smtplib, os numbers_dic = {                 # &lt;\u0438\u043c\u044f \u043a\u0430\u043d\u0430\u043b\u0430 \u0432 \u0410\u0441\u0442\u0435\u0440\u0438\u0441\u043a\u0435&gt; \u0447\u0442\u043e \u0442\u043e \u0442\u0438\u043f\u0430 mts1 \u0438\u0437 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 Dongle\/mts1 \u0432 \u0434\u0438\u0430\u043b\u043f\u043b\u0430\u043d\u0435                 #\u0432\u0441\u0435 ID \u044f \u0431\u0440\u0430\u043b \u0438\u0437 \u0441\u0430\u0439\u0442\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e FireBug                 #\u0434\u043b \u043f\u0440\u0438\u043c\u0435\u0440\u0430  '111111':'mts1'                '&lt;\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439_id_\u0434\u043b\u044f \u043a\u0430\u043d\u0430\u043b\u0430&gt;':'&lt;\u0438\u043c\u044f \u043a\u0430\u043d\u0430\u043b\u0430 \u0432 \u0410\u0441\u0442\u0435\u0440\u0438\u0441\u043a\u0435&gt;',                  '&lt;\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439_id_\u0434\u043b\u044f \u043a\u0430\u043d\u0430\u043b\u0430&gt;':'&lt;\u0438\u043c\u044f \u043a\u0430\u043d\u0430\u043b\u0430 \u0432 \u0410\u0441\u0442\u0435\u0440\u0438\u0441\u043a\u0435&gt;',                  '&lt;\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439_id_\u0434\u043b\u044f \u043a\u0430\u043d\u0430\u043b\u0430&gt;':'&lt;\u0438\u043c\u044f \u043a\u0430\u043d\u0430\u043b\u0430 \u0432 \u0410\u0441\u0442\u0435\u0440\u0438\u0441\u043a\u0435&gt;',                '&lt;\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439_id_\u0434\u043b\u044f \u043a\u0430\u043d\u0430\u043b\u0430&gt;':'&lt;\u0438\u043c\u044f \u043a\u0430\u043d\u0430\u043b\u0430 \u0432 \u0410\u0441\u0442\u0435\u0440\u0438\u0441\u043a\u0435&gt;',                '&lt;\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439_id_\u0434\u043b\u044f \u043a\u0430\u043d\u0430\u043b\u0430&gt;':'&lt;\u0438\u043c\u044f \u043a\u0430\u043d\u0430\u043b\u0430 \u0432 \u0410\u0441\u0442\u0435\u0440\u0438\u0441\u043a\u0435&gt;'  } bill_info_dic={} bill_info = [] # \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u0438\u043c\u044f \u043a\u0430\u043d\u0430\u043b\u043e\u0432, \u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043a\u043e\u043b-\u0432\u043e \u043c\u0438\u043d\u0443\u0442 minutes_lines={} # \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 session = requests.session() session.post('https:\/\/manager.mts.ua\/Ncih\/Security.mvc\/LogOn', { # \u044d\u0442\u043e \u043a\u0430\u043a \u0431\u044b \u0432\u0430\u0448 URL \u0434\u043b\u044f \u043b\u043e\u0433\u0438\u043d\u0430     'Name': '&lt;your_login_name&gt;',     'Password': '&lt;your_password_name&gt;',     'remember': 1, }) # \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0432 \u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u043c \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0435 url=&quot;https:\/\/manager.mts.ua\/Ncih\/ObjectInfo.mvc\/Phone&quot; headers = {     'User-Agent': 'Mozilla\/5.0 (Windows NT 10.0; WOW64; rv:42.0) Gecko\/20100101 Firefox\/42.0',     'Accept': '*\/*',     'Content-Type': 'application\/x-www-form-urlencoded; charset=UTF-8',     'X-Requested-With': 'XMLHttpRequest',     'Referer': 'https:\/\/manager.mts.ua\/Ncih\/Hierarchy.mvc' } # \u043c\u0435\u0442\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0441\u0430\u0439\u0442 \u0438 \u0442\u0430\u0449\u0438\u0442 \u043c\u043d\u0435 \u0432\u0435\u0441\u044c \u0431\u0438\u043b\u043b\u0438\u043d\u0433 \u043f\u043e \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0443 def request_to_billing():     url = &quot;https:\/\/manager.mts.ua\/Ncih\/ObjectInfo.mvc\/PersonalAccount&quot;     data_obj = {       'objectId': '&lt;some_id&gt;' #\u0432\u0441\u0435 ID \u044f \u0431\u0440\u0430\u043b \u0438\u0437 \u0441\u0430\u0439\u0442\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e FireBug     }     content = session.get(url, data=data_obj, headers=headers)     parsed = bs4.BeautifulSoup(content.content,'html.parser')     # \u0432\u043e\u0442 \u0442\u0443\u0442 \u044f \u0438\u0437 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 &lt;td&gt; \u0432\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u044e \u0438\u043d\u0444\u0443 \u043f\u043e \u0431\u0438\u043b\u043b\u0438\u043d\u0433\u0443     td_blocks = parsed.select('td')     balance=(td_blocks[1].getText().split()[0])     waste_1_of_month=(td_blocks[5].getText().split()[0])     sum_of_last_pay=(td_blocks[9].getText().split()[0])     calculate_period_balance=(td_blocks[17].getText().split()[0])     # \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c \u0437\u0430\u043f\u044f\u0442\u044b\u0435 \u043d\u0430 \u0442\u043e\u0447\u043a\u0438, \u0438 \u0437\u0430\u043d\u043e\u0441\u0438\u043c \u0432\u0441\u0435 \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u044c bill_info_dic     bill_info_dic[float(balance.replace(&quot;,&quot;, &quot;.&quot;))]=&quot;Balance&quot;     bill_info_dic[float(waste_1_of_month.replace(&quot;,&quot;, &quot;.&quot;))]=&quot;Spented from 1st of current month&quot;     bill_info_dic[float(sum_of_last_pay.replace(&quot;,&quot;, &quot;.&quot;))]=&quot;Sum of last pay&quot;     bill_info_dic[float(calculate_period_balance.replace(&quot;,&quot;, &quot;.&quot;))]=&quot;Balance at the beginning of the calculation period&quot;     # \u043f\u0438\u0448\u0435\u043c \u0432\u0441\u0435 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 bill_info     bill_info.append(balance)     bill_info.append(&quot;Balance&quot;)     bill_info.append(waste_1_of_month)     bill_info.append(&quot;Spented from 1st of current month&quot;)     bill_info.append(sum_of_last_pay)     bill_info.append(&quot;Sum of last pay&quot;)     bill_info.append(calculate_period_balance)     bill_info.append(&quot;Balance at the beginning of the calculation period&quot;) # \u043c\u0435\u0442\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0438\u0436\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0446\u0438\u043a\u043b\u0435 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0442\u0440\u0435\u0434\u0435, \u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0441\u0430\u0439\u0442 \u0438 \u0442\u0430\u0449\u0438\u0442 \u043c\u043d\u0435 \u043c\u0438\u043d\u0443\u0442\u044b    def request_to_min(num_id):     url = &quot;https:\/\/manager.mts.ua\/Ncih\/ObjectInfo.mvc\/Phone&quot;     data_obj = {       'objectId': num_id     }     content = session.get(url, data=data_obj, headers=headers)     parsed = bs4.BeautifulSoup(content.content,'html.parser')     span_blocks = parsed.select('span')     minutes = (span_blocks[2].getText())     sminutes = minutes.split()     minutes_lines[numbers_dic[num_id]]=float(sminutes[1].replace(&quot;,&quot;, &quot;.&quot;)) # \u0442\u0443\u0442 \u0438\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 (\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0435\u0441\u0442\u044c \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430) if ((len(sys.argv) &gt; 1) and (sys.argv[1] == &quot;billing&quot;)):     request_to_billing()     # \u0441\u043e\u0437\u0434\u0430\u0435\u043c sqlite \u0431\u0430\u0437\u0443     conn = sqlite3.connect('\/etc\/asterisk\/scripts\/asterisk_dp.db')     curs = conn.cursor()     # \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443     curs.execute('CREATE TABLE IF NOT EXISTS mts_billing(id INTEGER PRIMARY KEY, money REAL, description VARCHAR(50))')     conn.commit()     # \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0431\u0430\u0437\u0443, \u0435\u0441\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043a\u043b\u044e\u0447\u0438 \u0434\u043b\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430 del \u0438 new     if ((len(sys.argv) &gt; 2) and (sys.argv[2] == &quot;del&quot;)):       curs.execute('DELETE FROM mts_billing')       conn.commit()     n_bill = 1     for money, descr in bill_info_dic.items():         if ((len(sys.argv) &gt; 2) and (sys.argv[2] == &quot;new&quot;)):           curs.execute('INSERT INTO mts_billing VALUES (NULL, %f, &quot;%s&quot;)' % (money, descr))         else:           curs.execute('UPDATE mts_billing set money = %f, description = &quot;%s&quot; WHERE id = %d' % (money, descr, n_bill))         n_bill += 1     conn.commit()     conn.close() # \u0442\u0443\u0442 \u043a\u043b\u044e\u0447 billing_mail \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u043d\u0435 \u043d\u0430 \u043f\u043e\u0447\u0442\u0443 \u0438\u043d\u0444\u0443  elif ((len(sys.argv) &gt; 1) and (sys.argv[1] == &quot;billing_mail&quot;)):     request_to_billing()     conn = sqlite3.connect('\/etc\/asterisk\/scripts\/asterisk_dp.db')     curs = conn.cursor()     curs.execute(&quot;SELECT * FROM mts_minutes&quot;)     conn.commit()     d = curs.fetchall()     msg = 'From:xxx@xxx.com\\n' \\           'Subject:GSM BILLING FROM ASTERISK\\n\\n' \\           '%s =&gt; %s\\n%s =&gt; %s\\n%s =&gt; %s\\n%s =&gt; %s\\n%s\\n' % (bill_info[0],bill_info[1],bill_info[2],                                                         bill_info[3],bill_info[4],bill_info[5],                                                         bill_info[6],bill_info[7],d)     sender_addr = 'xxx@xxx.com'     rcpt_addr = 'yyy@gmail.com'     smtpobj=smtplib.SMTP_SSL('&lt;ip or domain name of mail server&gt;')     smtpobj.ehlo()     smtpobj.login('xxx@xxx.com', '&lt;password&gt;')     smtpobj.sendmail(sender_addr, rcpt_addr, msg) # \u043a\u043b\u044e\u0447 minutes \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u043b-\u0432\u043e \u043c\u0438\u043d\u0443\u0442 \u0432 \u0431\u0430\u0437\u0443 elif ((len(sys.argv) &gt; 1) and (sys.argv[1] == &quot;minutes&quot;)):     threads = []     for id in numbers_dic:       thrd = threading.Thread(target=request_to_min, args=(id,))       thrd.start()       threads.append(thrd)     for t in threads:       t.join()     conn = sqlite3.connect('\/etc\/asterisk\/scripts\/asterisk_dp.db')     curs = conn.cursor()     curs.execute('CREATE TABLE IF NOT EXISTS mts_minutes(id INTEGER PRIMARY KEY, minutes REAL, number VARCHAR(15))')     conn.commit()     if ((len(sys.argv) &gt; 2) and (sys.argv[2] == &quot;del&quot;)):       curs.execute('DELETE FROM mts_minutes')       conn.commit()     n_min = 1     for num in sorted(minutes_lines, reverse=True, key=lambda num: minutes_lines[num]):         if ((len(sys.argv) &gt; 2) and (sys.argv[2] == &quot;new&quot;)):           curs.execute('INSERT INTO mts_minutes VALUES (NULL, %f, &quot;%s&quot;)' % (minutes_lines[num], num))         elif ((len(sys.argv) &gt; 2) and (sys.argv[2] == &quot;show&quot;)):           print(&quot;min: %s =&gt; number: %s&quot; % (minutes_lines[num], num))         else:           curs.execute('UPDATE mts_minutes set minutes = %f, number = &quot;%s&quot; WHERE id = %d' % (minutes_lines[num], num, n_min))         n_min += 1     conn.commit()     conn.close()     msg = 'From:xxx@xxx.com\\nSubject:MINUTES\\n\\n%s' % sorted(minutes_lines)     sender_addr = 'xxx@xxx.com'     rcpt_addr = 'yyy@gmail.com'     smtpobj=smtplib.SMTP_SSL('&lt;ip or domain name of mail server&gt;')     smtpobj.ehlo()     smtpobj.login('xxx@xxx.com', '&lt;password&gt;')     smtpobj.sendmail(sender_addr, rcpt_addr, msg)  else:   print(&quot; -&quot;*10)   print(&quot;    MINUTES REQUEST TOOL&quot;, end='\\n'*2)   print(&quot;    HELP&quot;, end='\\n'*2)   print(&quot;    ARGS&quot;)   print(&quot;      minutes [del|new] -- \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043c\u0438\u043d\u0443\u0442\u044b \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 mts_minutes (del \u043e\u0447\u0438\u0441\u0442\u0438\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0443, new \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u044b\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 del, \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c\u0441\u044f&quot;)   print(&quot;      billing [del|new] -- \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043c\u0438\u043d\u0443\u0442\u044b \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 mts_billing (del \u043e\u0447\u0438\u0441\u0442\u0438\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0443, new \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u044b\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 del, \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c\u0441\u044f&quot;)   print(&quot;      billing_mail      -- \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430 \u043f\u043e\u0447\u0442\u0443 \u0431\u0438\u043b\u043b\u0438\u043d\u0433&quot;)   print(&quot; -&quot;*10) <\/code><\/pre>\n<p>  \u042f \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u043f\u043e\u043a\u0430 \u0448\u0430\u0440\u044e \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438, \u0438 \u0442\u043e \u0447\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432\u044b\u0448\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u0434\u043e\u043c \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u043c, \u043d\u043e \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 + \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u0442\u044c. \u041f\u043e\u043d\u044f\u0442\u043d\u043e \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 HTML \u043a\u043e\u0434 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043d\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f. \u041d\u0443 \u0447\u0442\u043e \u0436\u2026 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043b\u044f \u043c\u0435\u043d\u044f. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0442 \u0434\u0440\u0443\u0433\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440, \u0434\u0440\u0443\u0433\u043e\u0439 \u0431\u0438\u043b\u0438\u043d\u0433, \u0442\u043e \u0432\u0430\u043c \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u0434\u0435\u043b\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0441\u043c\u0435\u043d\u0438\u0442\u044c URL&#8217;\u044b \u0438 \u043f\u0440\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u043e HTML \u043a\u043e\u0434\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0447\u0442\u043e \u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u0447\u0442\u043e \u0438 \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u0430\u0440\u0441\u0438\u0442\u044c. \u0415\u0449\u0435 \u043c\u043d\u0435 \u043a\u0441\u0442\u0430\u0442\u0438 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0431\u044b\u043b\u043e \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0438\u0442\u043e\u043d\u0430 IPython3, \u0443\u0434\u043e\u0431\u043d\u043e.<\/p>\n<p>  \u0412\u043e\u043e\u0431\u0449\u0435 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u044f \u0434\u0435\u043b\u0430\u043b \u0431\u043e\u043b\u0435\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c. \u041e\u043d \u043c\u043d\u0435 \u043d\u0430 \u043f\u043e\u0447\u0442\u0443 \u0438 \u0431\u0438\u043b\u043b\u0438\u043d\u0433 \u043e\u0442\u0441\u044b\u043b\u0430\u0435\u0442, \u0438 \u0438\u043d\u0444\u0443 \u043f\u043e \u043c\u0438\u043d\u0443\u0442\u0430\u043c. \u0410 \u0432\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0437\u043d\u0430\u0435\u0442 \u043a\u043e\u043b-\u0432\u043e \u043c\u0438\u043d\u0443\u0442 \u0438 \u043f\u0438\u0448\u0435\u0442 \u0438\u0445 \u0432 \u0431\u0430\u0437\u0443:<\/p>\n<pre><code class=\"python\">#!\/usr\/bin\/env python3.4 import requests, bs4, threading, sys, sqlite3, os  numbers_dic = {                 # &lt;\u0438\u043c\u044f \u043a\u0430\u043d\u0430\u043b\u0430 \u0432 \u0410\u0441\u0442\u0435\u0440\u0438\u0441\u043a\u0435&gt; \u0447\u0442\u043e \u0442\u043e \u0442\u0438\u043f\u0430 mts1 \u0438\u0437 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 Dongle\/mts1 \u0432 \u0434\u0438\u0430\u043b\u043f\u043b\u0430\u043d\u0435                 #\u0432\u0441\u0435 ID \u044f \u0431\u0440\u0430\u043b \u0438\u0437 \u0441\u0430\u0439\u0442\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e FireBug                 #\u0434\u043b \u043f\u0440\u0438\u043c\u0435\u0440\u0430  '111111':'mts1'                '&lt;\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439_id_\u0434\u043b\u044f \u043a\u0430\u043d\u0430\u043b\u0430&gt;':'&lt;\u0438\u043c\u044f \u043a\u0430\u043d\u0430\u043b\u0430 \u0432 \u0410\u0441\u0442\u0435\u0440\u0438\u0441\u043a\u0435&gt;',                  '&lt;\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439_id_\u0434\u043b\u044f \u043a\u0430\u043d\u0430\u043b\u0430&gt;':'&lt;\u0438\u043c\u044f \u043a\u0430\u043d\u0430\u043b\u0430 \u0432 \u0410\u0441\u0442\u0435\u0440\u0438\u0441\u043a\u0435&gt;',                  '&lt;\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439_id_\u0434\u043b\u044f \u043a\u0430\u043d\u0430\u043b\u0430&gt;':'&lt;\u0438\u043c\u044f \u043a\u0430\u043d\u0430\u043b\u0430 \u0432 \u0410\u0441\u0442\u0435\u0440\u0438\u0441\u043a\u0435&gt;',                '&lt;\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439_id_\u0434\u043b\u044f \u043a\u0430\u043d\u0430\u043b\u0430&gt;':'&lt;\u0438\u043c\u044f \u043a\u0430\u043d\u0430\u043b\u0430 \u0432 \u0410\u0441\u0442\u0435\u0440\u0438\u0441\u043a\u0435&gt;',                '&lt;\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439_id_\u0434\u043b\u044f \u043a\u0430\u043d\u0430\u043b\u0430&gt;':'&lt;\u0438\u043c\u044f \u043a\u0430\u043d\u0430\u043b\u0430 \u0432 \u0410\u0441\u0442\u0435\u0440\u0438\u0441\u043a\u0435&gt;'  }  # \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u0438\u043c\u044f \u043a\u0430\u043d\u0430\u043b\u043e\u0432, \u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043a\u043e\u043b-\u0432\u043e \u043c\u0438\u043d\u0443\u0442 minutes_lines={} # \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 session = requests.session() session.post('https:\/\/manager.mts.ua\/Ncih\/Security.mvc\/LogOn', { # \u044d\u0442\u043e \u043a\u0430\u043a \u0431\u044b \u0432\u0430\u0448 URL \u0434\u043b\u044f \u043b\u043e\u0433\u0438\u043d\u0430     'Name': '&lt;your_login_name&gt;',     'Password': '&lt;your_password_name&gt;',     'remember': 1, }) # \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0432 \u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u043c \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0435 url=&quot;https:\/\/manager.mts.ua\/Ncih\/ObjectInfo.mvc\/Phone&quot; headers = {     'User-Agent': 'Mozilla\/5.0 (Windows NT 10.0; WOW64; rv:42.0) Gecko\/20100101 Firefox\/42.0',     'Accept': '*\/*',     'Content-Type': 'application\/x-www-form-urlencoded; charset=UTF-8',     'X-Requested-With': 'XMLHttpRequest',     'Referer': 'https:\/\/manager.mts.ua\/Ncih\/Hierarchy.mvc' }  # \u043c\u0435\u0442\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0438\u0436\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0446\u0438\u043a\u043b\u0435 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0442\u0440\u0435\u0434\u0435, \u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0441\u0430\u0439\u0442 \u0438 \u0442\u0430\u0449\u0438\u0442 \u043c\u043d\u0435 \u043c\u0438\u043d\u0443\u0442\u044b    def request_to_min(num_id):     url = &quot;https:\/\/manager.mts.ua\/Ncih\/ObjectInfo.mvc\/Phone&quot;     data_obj = {       'objectId': num_id     }     content = session.get(url, data=data_obj, headers=headers)     parsed = bs4.BeautifulSoup(content.content,'html.parser')     span_blocks = parsed.select('span')     minutes = (span_blocks[2].getText())     sminutes = minutes.split()     minutes_lines[numbers_dic[num_id]]=float(sminutes[1].replace(&quot;,&quot;, &quot;.&quot;)) # \u0442\u0443\u0442 \u0438\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 (\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0435\u0441\u0442\u044c \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430) # \u043a\u043b\u044e\u0447 minutes \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u043b-\u0432\u043e \u043c\u0438\u043d\u0443\u0442 \u0432 \u0431\u0430\u0437\u0443 elif ((len(sys.argv) &gt; 1) and (sys.argv[1] == &quot;minutes&quot;)):     threads = []     for id in numbers_dic:       thrd = threading.Thread(target=request_to_min, args=(id,))       thrd.start()       threads.append(thrd)     for t in threads:       t.join()     conn = sqlite3.connect('\/etc\/asterisk\/scripts\/asterisk_dp.db')     curs = conn.cursor()     curs.execute('CREATE TABLE IF NOT EXISTS mts_minutes(id INTEGER PRIMARY KEY, minutes REAL, number VARCHAR(15))')     conn.commit()     if ((len(sys.argv) &gt; 2) and (sys.argv[2] == &quot;del&quot;)):       curs.execute('DELETE FROM mts_minutes')       conn.commit()     n_min = 1     for num in sorted(minutes_lines, reverse=True, key=lambda num: minutes_lines[num]):         if ((len(sys.argv) &gt; 2) and (sys.argv[2] == &quot;new&quot;)):           curs.execute('INSERT INTO mts_minutes VALUES (NULL, %f, &quot;%s&quot;)' % (minutes_lines[num], num))         elif ((len(sys.argv) &gt; 2) and (sys.argv[2] == &quot;show&quot;)):           print(&quot;min: %s =&gt; number: %s&quot; % (minutes_lines[num], num))         else:           curs.execute('UPDATE mts_minutes set minutes = %f, number = &quot;%s&quot; WHERE id = %d' % (minutes_lines[num], num, n_min))         n_min += 1     conn.commit()     conn.close() <\/code><\/pre>\n<p>  \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u0438\u0430\u043b\u043f\u043b\u0430\u043d\u0430 \u043d\u0430 Lua \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0435\u0440\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0431\u0430\u0437\u044b (Asterisk \u043a\u0441\u0442\u0430\u0442\u0438 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d \u0441 Lua \u0432\u0435\u0440\u0441\u0438\u0438 5.2):<\/p>\n<pre><code class=\"lua\">local sqlite3 = require(&quot;lsqlite3&quot;) -- \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0445\u043e\u0434\u0438\u0442 \u0432 \u0431\u0430\u0437\u0443 \u0438 \u0431\u0435\u0440\u0435\u0442 \u043d\u043e\u043c\u0435\u0440, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0442\u044c\u0441\u044f \u0437\u0432\u043e\u043d\u043e\u043a function gsm_outgoing(context, extension)   local db = sqlite3.open(&quot;\/etc\/asterisk\/scripts\/asterisk_dp.db&quot;, &quot;wc&quot;)   -- kyivstar section   -- \u043d\u043e\u043c\u0435\u0440\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u041a\u0438\u0435\u0432\u0441\u0442\u0430\u0440, \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043e\u0434\u0438\u043d \u043a\u0430\u043d\u0430\u043b Dongle\/kyivstar, \u0432 \u0431\u0430\u0437\u0443 \u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e   if ((extension:sub(1,3) == extension:sub(1,3):match('06[7,8]')) or (extension:sub(1,3) == extension:sub(1,3):match('09[6,7,8]'))) then     app.dial(string.format(&quot;Dongle\/kyivstar\/%s, 45 tkr&quot;, extension))     local state = channel.DIALSTATUS:get()     -- \u043d\u043e \u043a\u0430\u043d\u0430\u043b Dongle\/kyivstar \u043e\u0434\u0438\u043d, \u0438 \u0435\u0441\u043b\u0438 \u043e\u043d \u0437\u0430\u043d\u044f\u0442, \u0442\u043e \u043c\u044b \u0432\u0441\u0435 \u0436\u0435 \u043f\u043e\u0437\u0432\u043e\u043d\u0438\u043c \u0447\u0435\u0440\u0435\u0437 \u043e\u0434\u0438\u043d \u0438\u0437 \u041c\u0422\u0421     if (state == &quot;CHANUNAVAIL&quot;) then      for _, _, c in db:urows(&quot;SELECT * FROM mts_minutes&quot;) do      app.noop(&quot;Calling through &quot;..c)      app.dial(string.format(&quot;Dongle\/%s\/%s, 45 tkr&quot;, c, extension))      local state = channel.DIALSTATUS:get()      if (state ~= &quot;CHANUNAVAIL&quot;) then        app.noop(&quot;Device &quot;..c..&quot; in  status &quot;..state)        break      else        app.noop(&quot;Device &quot;..c..&quot; in  status &quot;..state)      end;      end;     end;     app.hangup()     ---mts section   else     for _, _, c in db:urows(&quot;SELECT * FROM mts_minutes&quot;) do      app.noop(&quot;Calling through &quot;..c)      app.dial(string.format(&quot;Dongle\/%s\/%s, 45 tkr&quot;, c, extension))      local state = channel.DIALSTATUS:get()      if (state ~= &quot;CHANUNAVAIL&quot;) then        app.noop(&quot;GOOD ! Device &quot;..c..&quot; in  status &quot;..state)        break      else        app.noop(&quot;So sad ! Device &quot;..c..&quot; in  status &quot;..state)      end;     end;   app.hangup()   end; end;  extensions = {  -- \u0418\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0437\u0432\u043e\u043d\u043a\u0438 \u041c\u0422\u0421    gsm = {     [&quot;_03[1,2,3,4,5,6,7,8]XXXXXXX&quot;] = gsm_outgoing;--mts     [&quot;_04[1,2,3,5,6,7,8,9]XXXXXXX&quot;] = gsm_outgoing;--mts     [&quot;_05[0,1,2,3,4,5,6,7,8,9]XXXXXXX&quot;] = gsm_outgoing;--mts     [&quot;_06[1,2,3,4,5,6,9]XXXXXXX&quot;] = gsm_outgoing;--mts     [&quot;_07[3]XXXXXXX&quot;] = gsm_outgoing;--life     [&quot;_09[1,2,3,4,5,9]XXXXXXX&quot;] = gsm_outgoing;--mts     [&quot;_06[7,8]XXXXXXX&quot;] = gsm_outgoing;--kyivstar     [&quot;_09[6,7,8]XXXXXXX&quot;] = gsm_outgoing;--kyivstar   }; } <\/code><\/pre>\n<p>  \u0420\u0435\u0437\u044e\u043c\u0438\u0440\u0443\u044f, \u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0438\u0438 \u0432 \u043e\u0431\u0449\u0435\u043c, \u0442\u043e \u0434\u0430, Asterisk \u2014 \u043a\u0440\u0443\u0442\u043e \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0443 \u043d\u0435\u0433\u043e \u043c\u043d\u043e\u0433\u043e, \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e. \u041d\u043e \u0432\u043e\u0442 \u043b\u0435\u043f\u0438\u0442\u044c \u0442\u0443\u0434\u0430 \u0442\u0430\u043a\u043e\u0435 \u043a\u0430\u043a GSM \u200b\u043c\u043e\u0434\u0435\u043c\u044b, \u044f \u043d\u0435 \u0441\u043e\u0432\u0435\u0442\u0443\u044e. \u0414\u0430! \u041e\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0438 \u043f\u0440\u0438 \u0443\u043c\u0435\u043d\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0430\u044f\u043b\u044c\u043d\u0438\u043a\u043e\u043c, \u043e\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0435\u0449\u0435 \u043b\u0443\u0447\u0448\u0435, \u043d\u043e\u2026 \u041e\u043d\u043e \u0432\u0430\u043c \u043d\u0430\u0434\u043e? \u041f\u043e\u043a\u0443\u043f\u0430\u0439\u0442\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0448\u043b\u044e\u0437\u044b. \u0423 \u043c\u0435\u043d\u044f \u0432\u0441\u0435. \u0412\u0441\u0435 \u043f\u0438\u0441!       <\/p>\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\/273661\/\"> http:\/\/habrahabr.ru\/post\/273661\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       \u041a\u043e\u0433\u0434\u0430 \u044f \u043f\u043e\u043b\u0442\u043e\u0440\u0430 \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434, \u0431\u0443\u0434\u0443\u0447\u0438 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u043c 4 \u043a\u0443\u0440\u0441\u0430 \u0442\u0435\u043b\u0435\u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u0439, \u043f\u0440\u0438\u0448\u0435\u043b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044e \u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u0441\u0430\u0434\u043c\u0438\u043d\u0430, \u044f \u043f\u043e\u043d\u044f\u043b \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u0443 \u043c\u0435\u043d\u044f \u0431\u0443\u0434\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e, \u0430 \u0443\u0447\u0438\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0435\u0449\u0435 \u0431\u043e\u043b\u044c\u0448\u0435. \u0423\u0447\u0435\u0431\u0443 \u044f \u043e\u0442\u043e\u0434\u0432\u0438\u043d\u0443\u043b \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043b\u0430\u043d, \u0430 \u043f\u043e\u0442\u043e\u043c \u0438 \u0432\u043e\u0432\u0441\u0435 \u0441\u0442\u0430\u043b \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u0430\u0440\u0430\u0445 \u0440\u0430\u0437 \u0432 \u043c\u0435\u0441\u044f\u0446, \u043f\u043e\u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u044b\u043b\u043e \u043c\u043d\u043e\u0433\u043e, \u0438 \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u0443\u0436 \u0442\u043e\u0447\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u0442\u043e\u0433\u043e, \u0447\u0435\u043c\u0443 \u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u0443\u0447\u0438\u0442\u044c \u0432 \u0443\u043d\u0438\u0432\u0435\u0440\u0435. <\/p>\n<p>  \u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0434\u0430\u0436\u0430\u043c\u0438, \u0438 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0437\u0434\u0435\u0441\u044c \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043c\u043d\u043e\u0433\u043e \u0442\u0430\u043a\u0438\u0445 \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u043e\u0432\u0443\u0442 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430\u043c\u0438 \u043f\u043e \u043f\u0440\u043e\u0434\u0430\u0436\u0430\u043c, \u0438 \u0438\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0437\u0432\u043e\u043d\u0438\u0442\u044c!<\/p>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u044b\u0439 \u0436\u0435 \u0434\u0435\u043d\u044c \u043c\u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0438\u0438. 5 \u0448\u043b\u044e\u0437\u043e\u0432 VoIP Audiocodes MP-202B \u0438 \u0434\u0435\u0441\u044f\u0442\u043e\u043a DECT \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432+ \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 SIP \u0442\u0440\u0430\u043d\u043a \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435. \u042d\u0442\u0438\u043c\u0438-\u0442\u043e \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430\u043c\u0438 \u0438 \u0436\u043e\u043d\u0433\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0438 30 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0432\u0435\u0441\u044c \u0434\u0435\u043d\u044c. \u0427\u0451 \u0437\u0430 &#8230;, \u043f\u043e\u0434\u0443\u043c\u0430\u043b \u044f \u0438 \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c Asterisk.  <\/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-270847","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/270847","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=270847"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/270847\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=270847"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=270847"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=270847"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}