{"id":336304,"date":"2022-07-28T15:00:41","date_gmt":"2022-07-28T15:00:41","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=336304"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=336304","title":{"rendered":"<span>Asterisk. \u0414\u043e\u0441\u0442\u0430\u0432\u043a\u0430 SIP Message \u043f\u043e\u0441\u043b\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0430\u0431\u043e\u043d\u0435\u043d\u0442\u0430 \u0438\u0437 off-line&#8217;\u0430<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 <a href=\"https:\/\/habr.com\/ru\/post\/568958\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u044f \u043e\u043f\u0438\u0441\u0430\u043b \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b \u0438 \u0441\u043e\u0431\u0440\u0430\u043b GSM &lt;> SIP \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043d\u0430 \u0431\u0430\u0437\u0435 Asterisk. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043a\u0430\u043a \u0431\u044b\u0442\u044c \u0441 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u043c\u0438 SMS,  \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0432 \u0441\u0435\u0442\u0438 (\u043d\u0435 \u043f\u0440\u043e\u0448\u0435\u043b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e \u043d\u0430 PBX).<\/p>\n<h2>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430<\/h2>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0448\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e, \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e SMS (MESSAGE(body)) \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u0437 BASE64 \u0432 plane text \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0441 \u043c\u043e\u0434\u0435\u043c\u043e\u043c. \u042d\u0442\u043e \u043e\u0441\u0442\u0430\u0442\u043e\u043a \u043e\u0442 \u0434\u0435\u0431\u0430\u0433\u0430, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u0438\u0434\u0435\u0442\u044c \u0447\u0442\u043e \u043f\u0440\u0438\u0448\u043b\u043e \u043d\u0430 \u043c\u043e\u0434\u0435\u043c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 Asterisk. \u042f \u043d\u0435 \u0441\u0442\u0430\u043b \u043c\u0435\u043d\u044f\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u0443 \u043c\u0435\u043d\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0445 SMS (\u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0431\u0438\u0442\u043e \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u0435\u0439). \u0421 \u043d\u0435\u0439 \u044f \u0431\u0443\u0434\u0443 \u0440\u0430\u0437\u0431\u0435\u0440\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 MESSAGE(body) \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0443\u0436\u0435 \u0432 \u0432\u0438\u0434\u0435 SIP Message \u043d\u0430 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0443\u044e PBX, \u0433\u0434\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0435\u0442\u0441\u044f \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e dial plan. <\/p>\n<p>\u0418 \u0442\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 &#8212; \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f (\u043e\u043d \u0436\u0435 extension) \u0431\u044b\u043b \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0435\u0433\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0430 \u043d\u0435 \u0432 \u0441\u0435\u0442\u0438 &#8212; \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0431\u0435\u0437\u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043d\u043e \u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f.<\/p>\n<p><em>\u042f \u0441\u0447\u0438\u0442\u0430\u044e \u0447\u0442\u043e GSM \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0432\u0441\u0435\u0433\u0434\u0430, \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u0441\u0442\u0430\u043b \u0437\u0430\u043c\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u043c\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438.<\/em><\/p>\n<h2>\u0417\u0430\u0434\u0430\u0447\u0430<\/h2>\n<p>\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u044c SIP \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0438\u0445 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u0443\u044e \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0443.<\/p>\n<h2>\u0420\u0435\u0448\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0423 Asterisk \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 (message queue). \u041d\u043e \u0441\u0430\u043c\u043e \u043f\u043e \u0441\u0435\u0431\u0435 \u044d\u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c Message(body) \u043a\u0443\u0434\u0430 \u043b\u0438\u0431\u043e &#171;\u043d\u0430 \u043f\u043e\u0442\u043e\u043c&#187;, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u043e \u043f\u0435\u0440\u0432\u043e\u0439 \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0440\u043e\u0443\u0442\u0438\u043d\u0433\u0430 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 (\u0438\u0437 \u0441\u0435\u0440\u0438\u0438 &#8212; \u0443 \u043d\u0430\u0441 \u043f\u043e\u0442\u043e\u043a, \u0430 \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439 \u0438\u043b\u0438 \u0437\u0430\u043d\u044f\u0442).<\/p>\n<p>\u041f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0441\u0442\u044b\u043b\u044c &#8212; \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0438 \u043f\u043e\u043c\u0435\u0449\u0430\u0442\u044c \u0438\u0445 \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0434\u0438\u0440\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e, \u043e\u0442\u043a\u0443\u0434\u0430 Asterisk \u0438\u0445 \u0431\u0443\u0434\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c.  \u0417\u0430\u0434\u0430\u0447\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431 \u043f\u043e\u043c\u0435\u0449\u0430\u0442\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 <a href=\"https:\/\/wiki.asterisk.org\/wiki\/display\/AST\/Asterisk+Call+Files\" rel=\"noopener noreferrer nofollow\">call file<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e (N) \u0440\u0430\u0437 \u0447\u0435\u0440\u0435\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 (T) \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<p><em>\u042f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u0441\u043f\u0440\u0430\u0432\u043a\u0430\u043c \u043f\u043e \u0432\u0441\u0435\u043c \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c\u044b\u043c \u043c\u043d\u043e\u0439 \u0444\u0438\u0448\u043a\u0430\u043c Asterisk&#8217;\u0430. \u0427\u0438\u0442\u0430\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0433\u0434\u0435 \u0447\u0442\u043e \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e.<\/em><\/p>\n<p>\u041e\u0431\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0434\u0435\u043b\u0430\u044e\u0442\u0441\u044f \u0434\u0432\u0443\u043c\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438: <a href=\"https:\/\/wiki.asterisk.org\/wiki\/display\/AST\/Asterisk+13+Application_System\" rel=\"noopener noreferrer nofollow\"><em>app_system<\/em><\/a> \u0438 <a href=\"https:\/\/wiki.asterisk.org\/wiki\/display\/AST\/Asterisk+Call+Files\" rel=\"noopener noreferrer nofollow\"><em>pbx_spool<\/em><\/a>. \u041f\u0435\u0440\u0432\u043e\u0435 &#8212; \u0437\u0430 \u0432\u044b\u0437\u043e\u0432\u044b \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432, \u0432\u0442\u043e\u0440\u043e\u0435 &#8212; \u0437\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 call file.<\/p>\n<p>\u041d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0439:<\/p>\n<ol>\n<li>\n<p>\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u043b\u0438 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0434\u0430\u043b\u043e\u0441\u044c \u043b\u0438 \u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0438\u0448\u043b\u043e \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438, \u0438\u043b\u0438 \u043d\u043e\u0432\u043e\u0435.<\/p>\n<\/li>\n<\/ol>\n<p>\u0422\u0430\u043a \u0436\u0435 \u0432\u0430\u0436\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442, \u0435\u043c\u0443 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b, \u0430 \u043f\u043e \u0441\u0443\u0442\u0438 &#8212; \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0432 shell, \u0447\u0442\u043e \u043d\u0435\u0441\u0435\u0442 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u0435 \u0440\u0438\u0441\u043a\u0438. \u041f\u043e \u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043e\u043f\u044f\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c MESSAGE(body) \u0432 BASE64 \u0438 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043f\u0435\u0440\u0435\u0434 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u043e\u0439 \u0432 SIP \u043a\u043b\u0438\u0435\u043d\u0442.<\/p>\n<p>\u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u0438\u0442\u044c <a href=\"https:\/\/wiki.asterisk.org\/wiki\/display\/AST\/Function_BASE64_ENCODE\" rel=\"noopener noreferrer nofollow\"><em>func_base64<\/em><\/a>.<\/p>\n<h2>\u0414\u0438\u0430\u043b\u043f\u043b\u0430\u043d<\/h2>\n<p>\u041d\u0443 \u0447\u0442\u043e, \u043f\u043e\u0435\u0445\u0430\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c? \u0412\u0441\u0435 \u0447\u0442\u043e \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c &#8212; \u0434\u0435\u043b\u0430\u0435\u043c \u043d\u0430 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0439 PBX.<\/p>\n<pre><code>[incoming-sms] exten = _1.,1,Verbose(1, \"Incoming SMS from ${CALLERID(num)} GSM Gateway to ${EXTEN}\")  same = n,NoOp(To ${MESSAGE(to)})  same = n,NoOp(From ${MESSAGE(from)})  same = n,NoOp(Body ${MESSAGE(body)})  same = n,MessageSend(${MESSAGE(to)},${MESSAGE(from)})  same = n,NoOp(Send status is ${MESSAGE_SEND_STATUS})  ;same = n,GotoIf($[\"${MESSAGE_SEND_STATUS}\" != \"SUCCESS\"]?handlefailedmsg)  same = n,GotoIf($[\"${MESSAGE_SEND_STATUS}\" != \"SUCCESS\"]?chktq)  same = n,Hangup() ; Notify sender that message was not delivered  ;same = n(handlefailedmsg),NoOp(Sending error back to user)  ;same = n,Set(SRC=${MESSAGE(from)})  ;same = n,Set(DST=${MESSAGE(to)})  ;same = n,Set(MSG=${MESSAGE(body)})  ;same = n,Set(MESSAGE(body)=\"[${STRFTIME(${EPOCH},,%d%m%Y-%H:%M:%S)}] Your message to ${EXTEN} has failed. Sending when available\")  ;same = n,ExecIf($[\"${CUT(MESSAGE(from),&lt;,2)}\" != \"\" ]?Set(ME_1=${CUT(MESSAGE(from),&lt;,2)}):Set(ME_1=${MESSAGE(from)}))  ;same = n,Set(ACTUALFROM=${ME_1})  ;same = n,MessageSend(${ACTUALFROM},ServiceCenter)  ;same = n,GotoIf($[\"${INQUEUE}\" != \"1\"]?startq)  ;same = n,Hangup() ; Check that we are not in queue  same = n(chktq),GotoIf($[\"${INQUEUE}\" != 1 ]?startq)  same = n,Hangup() ; Starting Queue for messages  same = n(startq),NoOp(Queueing message for offline)  same = n,Set(MSGTIME=${STRFTIME(${EPOCH},,%d%m%Y-%H:%M:%S)})  same = n,Set(SRC=\"${BASE64_ENCODE(${MESSAGE(from)})}\")  same = n,Set(DST=${BASE64_ENCODE(${MESSAGE(to)}})  same = n,Set(MSG=${MESSAGE(body)})  same = n,Set(DUMP_MSG=\"${MSGTIME} ${MSG}\") ; We do not want our BASH to execute strange things... so BASE64 encoding  same = n,Set(MSG=\"${BASE64_ENCODE(${DUMP_MSG})}\")  same = n,System(\/var\/lib\/asterisk\/agi-bin\/astqueue.sh -SRC ${SRC} -DST ${DST} -MSG ${MSG})  same = n,Hangup() [app-fakeanswer] exten = _1.,1,Verbose(1, \"Processing offline message queue for ${EXTEN}\")  same = n,Set(DESTDEV=${EXTEN})  same = n,Set(THISDEVSTATE=${DEVICE_STATE(PJSIP\/${DESTDEV})})  same = n,GotoIf($[\"${THISDEVSTATE}\" = \"UNAVAILABLE\"]?hang)  same = n,GotoIf($[\"${THISDEVSTATE}\" = \"UNKNOWN\"]?hang)  same = n,Answer  same = n,Hangup  same = n(hang),Hangup()<\/code><\/pre>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043f\u043e \u0431\u043b\u043e\u043a\u0430\u043c.<\/p>\n<h3>\u0412\u0445\u043e\u0434 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c<\/h3>\n<p>\u041d\u0430\u0447\u0430\u043b\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435, \u0442\u0430\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e, \u043f\u043e\u043a\u0430 \u043c\u044b \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u043c \u043a \u0441\u0442\u0440\u043e\u043a\u0430\u043c<\/p>\n<pre><code>;same = n,GotoIf($[\"${MESSAGE_SEND_STATUS}\" != \"SUCCESS\"]?handlefailedmsg)  same = n,GotoIf($[\"${MESSAGE_SEND_STATUS}\" != \"SUCCESS\"]?chktq)<\/code><\/pre>\n<p>\u041c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0441\u043c\u043e\u0433\u043b\u0438 \u043b\u0438 \u043c\u044b \u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435. \u0423 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441 \u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0435\u0441\u043b\u0438 \u043e\u043d \u043d\u0435 \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 <em>SUCCESS.<\/em><\/p>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 (\u044f \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e) \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0441 \u0432 \u0431\u043b\u043e\u043a \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044e. \u0422\u0430\u043a \u043a\u0430\u043a \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u0443\u0432\u0435\u0434\u043e\u043c\u0438\u0442\u044c \u043e \u0441\u0443\u0434\u044c\u0431\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043d\u0435\u0442 (\u0443 \u043d\u0430\u0441 SMS \u0434\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u043e\u0441\u044c \u043d\u0430 \u043c\u043e\u0434\u0435\u043c), \u043d\u0443\u0436\u043d\u043e \u0440\u0443\u0447\u043a\u0430\u043c\u0438 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f. <em>\u0412\u0435\u0441\u044c \u0431\u043b\u043e\u043a \u0441\u0442\u0440\u043e\u043a 11-21 \u044f \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b. \u0427\u0442\u043e-\u0442\u043e \u0442\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043d\u043e \u044d\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u0447\u0438\u0441\u0442\u043e \u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0435, \u0435\u0441\u043b\u0438 \u044f \u0440\u0435\u0448\u0443 \u044d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c.<\/em><\/p>\n<h3>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f<\/h3>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u0431\u043b\u043e\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u043e\u0442\u043a\u0443\u0434\u0430 \u044d\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438<\/p>\n<pre><code>; Check that we are not in queue  same = n(chktq),GotoIf($[\"${INQUEUE}\" != 1 ]?startq)  same = n,Hangup()<\/code><\/pre>\n<p>\u0412\u0442\u043e\u0440\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 &#8212; \u043e\u0442\u0441\u044b\u043b\u043a\u0430 \u043a \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e \u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438. \u041d\u0443\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u0430\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c BASE64, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0443 \u043d\u0430\u0441 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u044b (\u0431\u0443\u0434\u0435\u0442 \u0432\u0438\u0434\u043d\u043e \u043d\u0438\u0436\u0435)<\/p>\n<p>\u0422.\u0435. \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <em>INQUEU<\/em> \u043d\u0435 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 1, \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0447\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0448\u043b\u043e \u043a \u043d\u0430\u043c \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0431\u043b\u043e\u043a\u0430, \u0442.\u0435. \u0431\u044b\u043b\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043e \u043e\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c PBX, \u043d\u043e \u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0430\u0434\u0440\u0435\u0441\u0430\u0442\u0443. \u0418 \u0434\u0430, \u044d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0437\u0436\u0435 \u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u0430 \u0438\u0437 call \u0444\u0430\u0439\u043b\u0430, \u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 &#8212; \u0441\u043a\u0440\u043f\u0438\u0442\u043e\u043c.<\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0438<\/h3>\n<pre><code>; Starting Queue for messages                                                                                    same = n(startq),NoOp(Queueing message for offline)  same = n,Set(MSGTIME=${STRFTIME(${EPOCH},,%d%m%Y-%H:%M:%S)})                                                    same = n,Set(SRC=\"${BASE64_ENCODE(${MESSAGE(from)})}\")  same = n,Set(DST=${BASE64_ENCODE(${MESSAGE(to)}})                                                               same = n,Set(MSG=${MESSAGE(body)})  same = n,Set(DUMP_MSG=\"${MSGTIME} ${MSG}\")<\/code><\/pre>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u043c\u044b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438. \u0421\u043c \u0441\u0442\u0440\u043e\u043a\u0443 \u0447\u0435\u0442\u044b\u0440\u0435.<\/p>\n<p>\u0422\u0440\u0435\u0442\u044c\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0448\u0438\u0444\u0440\u0443\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f. Shell \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u043b\u044e\u0431\u0438\u0442 \u0432\u0441\u044f\u043a\u0438\u0435 \u0442\u0430\u043c + \u0438 &lt; \u0438 \u043c\u044b \u0432\u0441\u0435 \u044d\u0442\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0432 \u0431\u0435\u0437\u043e\u0431\u0438\u0434\u043d\u0443\u044e \u0430\u0431\u0440\u0430\u043a\u0430\u0434\u0430\u0431\u0440\u0443 \u0434\u043b\u044f \u0434\u0435\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>\u0427\u0435\u0442\u0432\u0435\u0440\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u043c\u044b \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0442\u0435\u043a\u0441\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043c\u0435\u0449\u0435\u043d \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c. \u0421\u0443\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0430 &#8212; \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438, \u0432 \u043d\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u0434\u0430\u0442\u0430-\u0432\u0440\u0435\u043c\u044f \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u043e \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043b\u043e\u0441\u044c \u0438 \u0441\u0430\u043c \u0442\u0435\u043a\u0441\u0442. \u0412 \u043f\u0440\u043e\u0441\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0431\u044b \u0442\u0435\u043a\u0441\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0443\u0437\u043d\u0430\u0442\u044c \u043a\u043e\u0433\u0434\u0430 \u0436\u0435 \u043c\u044b \u0435\u0433\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b\u0438.<\/p>\n<h3>\u0417\u0430\u043f\u0440\u043e\u0441 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0438 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c<\/h3>\n<pre><code>; We do not want our BASH to execute strange things... so BASE64 encoding  same = n,Set(MSG=\"${BASE64_ENCODE(${DUMP_MSG})}\")  same = n,System(\/var\/lib\/asterisk\/agi-bin\/astqueue.sh -SRC ${SRC} -DST ${DST} -MSG ${MSG})  same = n,Hangup()<\/code><\/pre>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0431\u043b\u043e\u043a \u0443 \u043d\u0430\u0441 \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f (DATE+Message(body)) \u0432\u043c\u0435\u0441\u0442\u0435 \u0432 BASE64 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0435\u0434\u0438\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<p>\u0410 \u0434\u0430\u043b\u0435\u0435 \u043c\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a, \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f \u0438 \u0442\u0435\u043a\u0441\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.<\/p>\n<h3>\u0412\u0441\u0435, \u0438\u043b\u0438 \u043d\u0435\u0442?<\/h3>\n<p>\u041d\u0435\u0442. \u041f\u043e\u043a\u0430 \u044f \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u0432\u0430\u043c \u0441\u0430\u043c \u0441\u043a\u0440\u0438\u043f\u0442, \u043d\u0435 \u044f\u0441\u043d\u043e \u0437\u0430\u0447\u0435\u043c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 <em>app-fakeanswer<\/em><\/p>\n<pre><code>[app-fakeanswer] exten = _1.,1,Verbose(1, \"Processing offline message queue for ${EXTEN}\")  same = n,Set(DESTDEV=${EXTEN})  same = n,Set(THISDEVSTATE=${DEVICE_STATE(PJSIP\/${DESTDEV})})  same = n,GotoIf($[\"${THISDEVSTATE}\" = \"UNAVAILABLE\"]?hang)  same = n,GotoIf($[\"${THISDEVSTATE}\" = \"UNKNOWN\"]?hang)  same = n,Answer  same = n,Hangup  same = n(hang),Hangup()<\/code><\/pre>\n<p>\u041e\u0442\u0432\u0435\u0442 \u0434\u043e \u0431\u0435\u0437\u043e\u0431\u0440\u0430\u0437\u0438\u044f \u043f\u0440\u043e\u0441\u0442. \u041a\u043e\u0433\u0434\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f message_queue \u043e\u043d\u043e \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u044d\u0442\u043e\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0438 \u0438\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f (extension). \u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u043c\u044b \u0432\u044b\u0445\u043e\u0434\u0438\u043c, \u0435\u0441\u043b\u0438 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d &#8212; \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 <em>incoming-sms<\/em><\/p>\n<h3>\u0421\u043a\u0440\u0438\u043f\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f call file<\/h3>\n<p>\u0418 \u0442\u0430\u043a, \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435.<\/p>\n<p>\u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u043c\u0438 <a href=\"https:\/\/wiki.asterisk.org\/wiki\/pages\/viewpage.action?pageId=32375589\" rel=\"noopener noreferrer nofollow\">AGI<\/a> \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438, \u0430 \u043f\u043e \u0441\u0443\u0442\u0438 &#8212; bash \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u043f\u0435\u0440\u0435\u0436\u0443\u0435\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b, \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0435\u0441\u0442\u044c \u043b\u0438 \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f \u0438 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c call file , \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0442\u043e\u043c \u043f\u043e\u043b\u043e\u0436\u0438\u043c \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0434\u0438\u0440\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c Asterisk.<\/p>\n<p>\u041e\u0431\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0437\u0430\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c \u0432 <em>\/var\/lib\/asterisk\/agi-bin\/<\/em> \u0438\u043b\u0438 \u0442\u0443\u0434\u0430, \u0433\u0434\u0435 \u0443 \u0432\u0430\u0441 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0430 agi \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f, \u0430 \u0442\u0430\u043a \u0436\u0435 \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u0438\u0434\u0430\u0442\u044c \u0438\u043c +x (\u043f\u0440\u0430\u0432\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f) \u0438 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u0438\u0437-\u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443 \u0432\u0430\u0441 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 Asterisk (<em>chmod &amp; chown<\/em>).<\/p>\n<p><em>\u042f \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043b \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0439 \u0432 \u0441\u0435\u0442\u0438 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0432 \u0435\u0433\u043e \u043f\u043e\u0434 \u0441\u0432\u043e\u0438 \u043f\u0443\u0442\u0438 \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0432 \u043f\u0430\u0440\u0443 \u043a\u043e\u0441\u044f\u043a\u043e\u0432.<\/em><\/p>\n<pre><code class=\"bash\">#!\/bin\/bash ############################################################################## # v0.2                                                                       # # copyleft Sanjay Willie sanjayws@gmail.com                                  # # SCRIPT PURPOSE: GENERATE SMS OFFLINE QUEUE                                 # # GEN INFO: Change variables sections                                        # ############################################################################## # This script was edit by Michael A. Gates                                   # # because it didn't work in freepbx 5.11                                     # # I am by no means a Linux guy or a Asterisk                                 # # guy. Without Sanjay Willie's work I could                                  # # not have done this.                                                        # #                                                                            # #Contact:michael.allen.gates@gmail.com                                       # #added message ordering from                                                 # #http:\/\/www.irishvoip.com\/w\/knowledgebase.php?action=displayarticle&amp;id=13    # ##############################################################################   #VARIABLES maxretry=10000#Number of Atempts for sending the sms retryint=60#Number of Seconds between Retries #CONSTANTS ERRORCODE=0 d_unique=`date +%s` d_friendly=`date +%T_%D` astbin=`which asterisk` myrandom=$[ ( $RANDOM % 1000 )  + 1 ] #  function bail() {       echo \"SMS:[$ERRORCODE] $MSGOUT. Runtime:$d_friendly. UniqueCode:$d_unique\"     exit $ERRORCODE } function gencallfile(){  filename=$1 destexten=$2 source=$3 dest=$4 message=$5 mydate=`date +%d%m%y` logdate=`date` #dest=echo $dest | grep -d # echo -e \"Channel: Local\/$destexten@app-fakeanswer CallerID: $source Maxretries: $maxretry RetryTime: $retryint Context: incoming-sms Extension: $destexten Priority: 1  Set: MESSAGE(body)=$message Set: MESSAGE(to)=$dest Set: MESSAGE(from)=$source Set: INQUEUE=1 \"> \/var\/spool\/asterisk\/tmp\/$filename  # move files chmod 777 \/var\/spool\/asterisk\/tmp\/$filename sleep 3 # # Check to see if there is already a message for this extension queued # if so then move to the hold folder and let the cron job astcron.sh check for delivery of the queued message # and only then deliver the hold messages. This will make sure the messages are delivered in order # ifexist=`ls \/var\/spool\/asterisk\/outgoing\/|grep call | grep -c $destexten` if [[ \"$ifexist\" == \"0\" ]]; then # # move file to outgoing folder # mv \/var\/spool\/asterisk\/tmp\/$filename \/var\/spool\/asterisk\/outgoing\/ #echo \"moved\" else # # move file to hold folder # mv \/var\/spool\/asterisk\/tmp\/$filename \/var\/spool\/asterisk\/hold\/ #echo \"holded\"  fi # #exit $ERRORCODE bail }  while test -n \"$1\"; do     case \"$1\" in         -SRC)             source=\"$2\"             echo $source             shift            ;;         -DST)             dest=\"$2\"             echo $dest             shift            ;;         -MSG)             message=\"$2\"             echo $message             shift            ;;         -TIME)             originaltime=\"$2\"             echo $originaltime             shift            ;;              esac shift done  # decoding BASE64 source=`echo $source | base64 -d` dest=`echo $dest | base64 -d` message=`echo $message | base64 -d` originaltime=`echo $originaltime | base64 -d`  #[checking for appropriate arguments] if [[ \"$source\" == \"\" ]]; then     echo \"ERROR: No source. Quitting.\"     ERRORCODE=1     bail fi  if [[ \"$dest\" == \"\" ]]; then     echo \"ERROR: No usable destination. Quitting.\"     ERRORCODE=1     bail fi  if [[ \"$message\" == \"\" ]]; then     echo \"ERROR: No message specified.Quitting.\"     ERRORCODE=1     bail fi #[End Argument checking]  # Check to see if extension exist  destexten=`echo $dest | cut -d\\@ -f1 | cut -d\\: -f2` ifexist=`$astbin -rx \"pjsip show endpoints\" | grep -c $destexten`  if [[ \"$ifexist\" == \"0\" ]]; then echo \"Destination extension don't exist, exiting..\" ERRORCODE=1 baduser=$destexten destexten=`echo $source | cut -d\\@ -f1 | cut -d\\: -f2` temp=$source source=$dest dest=$temp message=\"The user $baduser does not exist, please try your message again using a different recipient.:(\" filename=\"$destexten-$d_unique.$myrandom.NoSuchUser.call\" gencallfile \"$filename\" \"$destexten\" \"$source\" \"$dest\" \"$message\" bail fi #End of Check   # If that conditions pass, then we will queue, # you can write other conditions too to keep the sanity of the looping destexten=`echo $dest | cut -d\\@ -f1 | cut -d\\: -f2` filename=\"$destexten-$d_unique.$myrandom.call\" gencallfile \"$filename\" \"$destexten\" \"$source\" \"$dest\" \"$message\" bail <\/code><\/pre>\n<p>\u0427\u0442\u043e \u0442\u0443\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e:<\/p>\n<ul>\n<li>\n<p>\u0421\u0442\u0440\u043e\u043a\u0438 20 \u0438 21: \u0437\u0430\u0434\u0430\u044e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432 \u0438 \u0432\u0440\u0435\u043c\u044f \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u043f\u044b\u0442\u043a\u0430\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0442\u0440\u043e\u043a\u0430 50: \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043a\u0443\u0434\u0430 \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0442\u0440\u043e\u043a\u0430 56: \u044d\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 (\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <em>INQUEUE<\/em>), \u0430 \u0442\u0430\u043a \u0436\u0435 \u043c\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u0443\u0442\u044c \u043a \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 Asterisk&#8217;\u0443 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0442\u0440\u043e\u043a\u0438 113-116: \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u0443\u044e\u0442 \u0432\u0441\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0442\u0440\u043e\u043a\u0430 138: \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0430 \u0435\u0441\u0442\u044c \u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c \u0438 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442, \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0441 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435. \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f. \u0418\u043c\u0435\u043d\u043d\u043e \u0442\u0443\u0442 \u0431\u044b\u043b\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0437\u0430\u043a\u043e\u044b\u0432\u0440\u043a\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0443\u0436\u043d\u043e \u0432\u0435\u0440\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u043c\u0430\u043d\u0434\u0443 \u0432 Asterisk \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0432\u0430\u0448\u0435\u043c\u0443 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c\u0443 \u0441\u043b\u0443\u0447\u0430\u044e.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0442\u0440\u043e\u043a\u0430 159 \u0438 \u0434\u0430\u043b\u0435\u0435: \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442 \u0444\u0430\u0439\u043b, \u043f\u0440\u0438\u0434\u0435\u043b\u044b\u0432\u0430\u044e\u0442 \u0435\u043c\u0443 \u043f\u0441\u0435\u0432\u0434\u043e-\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 (\u0434\u043b\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0438 \u0438\u0437\u0431\u0435\u0433\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0438).<\/p>\n<\/li>\n<\/ul>\n<h2>\u0410 \u043a\u0430\u043a \u0431\u044b\u0442\u044c \u0441 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438?<\/h2>\n<p>\u0410 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e. \u0415\u0441\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0441\u043a\u0440\u043f\u0438\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0435 call file&#8217;\u044b \u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0438\u0445 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438.<\/p>\n<pre><code class=\"bash\">#!\/bin\/bash  # This file should go in \/var\/lib\/asterisk\/agi-bin # make sure you change your permissions of astcron.sh to 775 #Change to hold directory # cd \/var\/spool\/asterisk\/hold  # # Check through all queued files in sort order (so we always get the oldest first) # for filename in `ls -v *.call`; do   destexten=`echo $filename | cut -d - -f1 `  echo \"Checking extension\" $destexten \"for file\" $filename \"for existing messages\"  ifexist=`ls \/var\/spool\/asterisk\/outgoing\/| grep call | grep -c $destexten`  # # if extension doesnt exist then queued message has been delivered # so we can move the waiting message now #  if [[ \"$ifexist\" == \"0\" ]]; then echo \"No existing message for \" $destexten  # # move file to outgoing folder # echo \"Moving filename\" $filename \"to outgoing\"  mv \/var\/spool\/asterisk\/hold\/$filename \/var\/spool\/asterisk\/outgoing\/  # # If we actually do a move then delay just in case # there is more than one waiting message for that extension # sleep 3 fi done <\/code><\/pre>\n<p>\u0422\u0443\u0442 \u043d\u0443\u0436\u043d\u043e \u043d\u0435 \u0437\u0430\u0431\u044b\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u043d\u0443 \u0434\u0438\u0440\u0440\u043a\u0435\u0442\u043e\u0440\u0438\u044e <em>hold<\/em>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f call \u0444\u0432\u0439\u043b\u044b \u0434\u043e \u043c\u043e\u043c\u043d\u0435\u0442\u0430 \u043a\u043e\u0433\u0434\u0430 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u043d\u0430 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0443 \u0432 \u043f\u0430\u043f\u043a\u0443 <em>outgoing<\/em>.<\/p>\n<p>\u041e\u043f\u044f\u0442\u044c \u0436\u0435 \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0443\u0442\u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0432\u0430\u0448\u0438\u043c \u0440\u0435\u0430\u043b\u0438\u044f\u043c.<\/p>\n<p>\u0418 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 <em>crontab<\/em> \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u0447\u043a\u0443<\/p>\n<pre><code class=\"bash\">* * * * * cronic \/var\/lib\/asterisk\/agi-bin\/astcron.sh \/dev\/null 2>&amp;1 || true<\/code><\/pre>\n<p>\u042d\u0442\u0430 \u0448\u0442\u0443\u043a\u0430 \u0434\u0435\u0440\u0433\u0430\u0435\u0442 \u0435\u0436\u0435\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u043e \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u0438.<\/p>\n<h2>\u041d\u0430 \u0437\u0430\u043a\u0443\u0441\u043a\u0443<\/h2>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0432 \u0432\u0430\u0448 <em>extensions.conf <\/em>\u0438\u0434\u0435\u043c \u0432 \u0430\u0441\u0442\u0435\u0440\u0438\u0441\u043a \u0438 \u0434\u0435\u043b\u0430\u0435\u043c <em>dialplan reload.<\/em><\/p>\n<p>\u041e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a\u043b\u0438\u0435\u043d\u0442 \u0438\u043b\u0438 sip-\u0442\u0435\u043b\u0435\u0444\u043e\u043d \u043e\u0442 \u0441\u0435\u0442\u0438 \u0438 \u0448\u043b\u0430\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435. \u041f\u043e\u0434\u043b\u043a\u044e\u0447\u0430\u0435\u043c\u0441\u044f &#8212; \u0432\u0443\u0430\u043b\u044f (\u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432\u0435\u0440\u043d\u043e).<\/p>\n<p>P.S. \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0437\u0430\u0441\u0442\u0440\u0435\u0430\u044e\u0442 \u043c\u043d\u043e\u0433\u043e\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043a\u0430\u043a \u044f \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b &#8212; \u044d\u0442\u043e \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0437.<\/p>\n<p>\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0438 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442\u0441\u044f.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/679582\/\"> https:\/\/habr.com\/ru\/post\/679582\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 <a href=\"https:\/\/habr.com\/ru\/post\/568958\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u044f \u043e\u043f\u0438\u0441\u0430\u043b \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b \u0438 \u0441\u043e\u0431\u0440\u0430\u043b GSM &lt;> SIP \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043d\u0430 \u0431\u0430\u0437\u0435 Asterisk. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043a\u0430\u043a \u0431\u044b\u0442\u044c \u0441 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u043c\u0438 SMS,  \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0432 \u0441\u0435\u0442\u0438 (\u043d\u0435 \u043f\u0440\u043e\u0448\u0435\u043b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e \u043d\u0430 PBX).<\/p>\n<h2>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430<\/h2>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0448\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e, \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e SMS (MESSAGE(body)) \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u0437 BASE64 \u0432 plane text \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0441 \u043c\u043e\u0434\u0435\u043c\u043e\u043c. \u042d\u0442\u043e \u043e\u0441\u0442\u0430\u0442\u043e\u043a \u043e\u0442 \u0434\u0435\u0431\u0430\u0433\u0430, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u0438\u0434\u0435\u0442\u044c \u0447\u0442\u043e \u043f\u0440\u0438\u0448\u043b\u043e \u043d\u0430 \u043c\u043e\u0434\u0435\u043c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 Asterisk. \u042f \u043d\u0435 \u0441\u0442\u0430\u043b \u043c\u0435\u043d\u044f\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u0443 \u043c\u0435\u043d\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0445 SMS (\u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0431\u0438\u0442\u043e \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u0435\u0439). \u0421 \u043d\u0435\u0439 \u044f \u0431\u0443\u0434\u0443 \u0440\u0430\u0437\u0431\u0435\u0440\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 MESSAGE(body) \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0443\u0436\u0435 \u0432 \u0432\u0438\u0434\u0435 SIP Message \u043d\u0430 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0443\u044e PBX, \u0433\u0434\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0435\u0442\u0441\u044f \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e dial plan. <\/p>\n<p>\u0418 \u0442\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 &#8212; \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f (\u043e\u043d \u0436\u0435 extension) \u0431\u044b\u043b \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0435\u0433\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0430 \u043d\u0435 \u0432 \u0441\u0435\u0442\u0438 &#8212; \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0431\u0435\u0437\u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043d\u043e \u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f.<\/p>\n<p><em>\u042f \u0441\u0447\u0438\u0442\u0430\u044e \u0447\u0442\u043e GSM \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0432\u0441\u0435\u0433\u0434\u0430, \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u0441\u0442\u0430\u043b \u0437\u0430\u043c\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u043c\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438.<\/em><\/p>\n<h2>\u0417\u0430\u0434\u0430\u0447\u0430<\/h2>\n<p>\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u044c SIP \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0438\u0445 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u0443\u044e \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0443.<\/p>\n<h2>\u0420\u0435\u0448\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0423 Asterisk \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 (message queue). \u041d\u043e \u0441\u0430\u043c\u043e \u043f\u043e \u0441\u0435\u0431\u0435 \u044d\u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c Message(body) \u043a\u0443\u0434\u0430 \u043b\u0438\u0431\u043e &#171;\u043d\u0430 \u043f\u043e\u0442\u043e\u043c&#187;, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u043e \u043f\u0435\u0440\u0432\u043e\u0439 \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0440\u043e\u0443\u0442\u0438\u043d\u0433\u0430 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 (\u0438\u0437 \u0441\u0435\u0440\u0438\u0438 &#8212; \u0443 \u043d\u0430\u0441 \u043f\u043e\u0442\u043e\u043a, \u0430 \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439 \u0438\u043b\u0438 \u0437\u0430\u043d\u044f\u0442).<\/p>\n<p>\u041f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0441\u0442\u044b\u043b\u044c &#8212; \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0438 \u043f\u043e\u043c\u0435\u0449\u0430\u0442\u044c \u0438\u0445 \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0434\u0438\u0440\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e, \u043e\u0442\u043a\u0443\u0434\u0430 Asterisk \u0438\u0445 \u0431\u0443\u0434\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c.  \u0417\u0430\u0434\u0430\u0447\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431 \u043f\u043e\u043c\u0435\u0449\u0430\u0442\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 <a href=\"https:\/\/wiki.asterisk.org\/wiki\/display\/AST\/Asterisk+Call+Files\" rel=\"noopener noreferrer nofollow\">call file<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e (N) \u0440\u0430\u0437 \u0447\u0435\u0440\u0435\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 (T) \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<p><em>\u042f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u0441\u043f\u0440\u0430\u0432\u043a\u0430\u043c \u043f\u043e \u0432\u0441\u0435\u043c \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c\u044b\u043c \u043c\u043d\u043e\u0439 \u0444\u0438\u0448\u043a\u0430\u043c Asterisk&#8217;\u0430. \u0427\u0438\u0442\u0430\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0433\u0434\u0435 \u0447\u0442\u043e \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e.<\/em><\/p>\n<p>\u041e\u0431\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0434\u0435\u043b\u0430\u044e\u0442\u0441\u044f \u0434\u0432\u0443\u043c\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438: <a href=\"https:\/\/wiki.asterisk.org\/wiki\/display\/AST\/Asterisk+13+Application_System\" rel=\"noopener noreferrer nofollow\"><em>app_system<\/em><\/a> \u0438 <a href=\"https:\/\/wiki.asterisk.org\/wiki\/display\/AST\/Asterisk+Call+Files\" rel=\"noopener noreferrer nofollow\"><em>pbx_spool<\/em><\/a>. \u041f\u0435\u0440\u0432\u043e\u0435 &#8212; \u0437\u0430 \u0432\u044b\u0437\u043e\u0432\u044b \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432, \u0432\u0442\u043e\u0440\u043e\u0435 &#8212; \u0437\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 call file.<\/p>\n<p>\u041d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0439:<\/p>\n<ol>\n<li>\n<p>\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u043b\u0438 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0434\u0430\u043b\u043e\u0441\u044c \u043b\u0438 \u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0438\u0448\u043b\u043e \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438, \u0438\u043b\u0438 \u043d\u043e\u0432\u043e\u0435.<\/p>\n<\/li>\n<\/ol>\n<p>\u0422\u0430\u043a \u0436\u0435 \u0432\u0430\u0436\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442, \u0435\u043c\u0443 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b, \u0430 \u043f\u043e \u0441\u0443\u0442\u0438 &#8212; \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0432 shell, \u0447\u0442\u043e \u043d\u0435\u0441\u0435\u0442 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u0435 \u0440\u0438\u0441\u043a\u0438. \u041f\u043e \u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043e\u043f\u044f\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c MESSAGE(body) \u0432 BASE64 \u0438 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043f\u0435\u0440\u0435\u0434 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u043e\u0439 \u0432 SIP \u043a\u043b\u0438\u0435\u043d\u0442.<\/p>\n<p>\u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u0438\u0442\u044c <a href=\"https:\/\/wiki.asterisk.org\/wiki\/display\/AST\/Function_BASE64_ENCODE\" rel=\"noopener noreferrer nofollow\"><em>func_base64<\/em><\/a>.<\/p>\n<h2>\u0414\u0438\u0430\u043b\u043f\u043b\u0430\u043d<\/h2>\n<p>\u041d\u0443 \u0447\u0442\u043e, \u043f\u043e\u0435\u0445\u0430\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c? \u0412\u0441\u0435 \u0447\u0442\u043e \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c &#8212; \u0434\u0435\u043b\u0430\u0435\u043c \u043d\u0430 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0439 PBX.<\/p>\n<pre><code>[incoming-sms] exten = _1.,1,Verbose(1, \"Incoming SMS from ${CALLERID(num)} GSM Gateway to ${EXTEN}\")  same = n,NoOp(To ${MESSAGE(to)})  same = n,NoOp(From ${MESSAGE(from)})  same = n,NoOp(Body ${MESSAGE(body)})  same = n,MessageSend(${MESSAGE(to)},${MESSAGE(from)})  same = n,NoOp(Send status is ${MESSAGE_SEND_STATUS})  ;same = n,GotoIf($[\"${MESSAGE_SEND_STATUS}\" != \"SUCCESS\"]?handlefailedmsg)  same = n,GotoIf($[\"${MESSAGE_SEND_STATUS}\" != \"SUCCESS\"]?chktq)  same = n,Hangup() ; Notify sender that message was not delivered  ;same = n(handlefailedmsg),NoOp(Sending error back to user)  ;same = n,Set(SRC=${MESSAGE(from)})  ;same = n,Set(DST=${MESSAGE(to)})  ;same = n,Set(MSG=${MESSAGE(body)})  ;same = n,Set(MESSAGE(body)=\"[${STRFTIME(${EPOCH},,%d%m%Y-%H:%M:%S)}] Your message to ${EXTEN} has failed. Sending when available\")  ;same = n,ExecIf($[\"${CUT(MESSAGE(from),&lt;,2)}\" != \"\" ]?Set(ME_1=${CUT(MESSAGE(from),&lt;,2)}):Set(ME_1=${MESSAGE(from)}))  ;same = n,Set(ACTUALFROM=${ME_1})  ;same = n,MessageSend(${ACTUALFROM},ServiceCenter)  ;same = n,GotoIf($[\"${INQUEUE}\" != \"1\"]?startq)  ;same = n,Hangup() ; Check that we are not in queue  same = n(chktq),GotoIf($[\"${INQUEUE}\" != 1 ]?startq)  same = n,Hangup() ; Starting Queue for messages  same = n(startq),NoOp(Queueing message for offline)  same = n,Set(MSGTIME=${STRFTIME(${EPOCH},,%d%m%Y-%H:%M:%S)})  same = n,Set(SRC=\"${BASE64_ENCODE(${MESSAGE(from)})}\")  same = n,Set(DST=${BASE64_ENCODE(${MESSAGE(to)}})  same = n,Set(MSG=${MESSAGE(body)})  same = n,Set(DUMP_MSG=\"${MSGTIME} ${MSG}\") ; We do not want our BASH to execute strange things... so BASE64 encoding  same = n,Set(MSG=\"${BASE64_ENCODE(${DUMP_MSG})}\")  same = n,System(\/var\/lib\/asterisk\/agi-bin\/astqueue.sh -SRC ${SRC} -DST ${DST} -MSG ${MSG})  same = n,Hangup() [app-fakeanswer] exten = _1.,1,Verbose(1, \"Processing offline message queue for ${EXTEN}\")  same = n,Set(DESTDEV=${EXTEN})  same = n,Set(THISDEVSTATE=${DEVICE_STATE(PJSIP\/${DESTDEV})})  same = n,GotoIf($[\"${THISDEVSTATE}\" = \"UNAVAILABLE\"]?hang)  same = n,GotoIf($[\"${THISDEVSTATE}\" = \"UNKNOWN\"]?hang)  same = n,Answer  same = n,Hangup  same = n(hang),Hangup()<\/code><\/pre>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043f\u043e \u0431\u043b\u043e\u043a\u0430\u043c.<\/p>\n<h3>\u0412\u0445\u043e\u0434 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c<\/h3>\n<p>\u041d\u0430\u0447\u0430\u043b\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435, \u0442\u0430\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e, \u043f\u043e\u043a\u0430 \u043c\u044b \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u043c \u043a \u0441\u0442\u0440\u043e\u043a\u0430\u043c<\/p>\n<pre><code>;same = n,GotoIf($[\"${MESSAGE_SEND_STATUS}\" != \"SUCCESS\"]?handlefailedmsg)  same = n,GotoIf($[\"${MESSAGE_SEND_STATUS}\" != \"SUCCESS\"]?chktq)<\/code><\/pre>\n<p>\u041c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0441\u043c\u043e\u0433\u043b\u0438 \u043b\u0438 \u043c\u044b \u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435. \u0423 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441 \u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0435\u0441\u043b\u0438 \u043e\u043d \u043d\u0435 \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 <em>SUCCESS.<\/em><\/p>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 (\u044f \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e) \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0441 \u0432 \u0431\u043b\u043e\u043a \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044e. \u0422\u0430\u043a \u043a\u0430\u043a \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u0443\u0432\u0435\u0434\u043e\u043c\u0438\u0442\u044c \u043e \u0441\u0443\u0434\u044c\u0431\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043d\u0435\u0442 (\u0443 \u043d\u0430\u0441 SMS \u0434\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u043e\u0441\u044c \u043d\u0430 \u043c\u043e\u0434\u0435\u043c), \u043d\u0443\u0436\u043d\u043e \u0440\u0443\u0447\u043a\u0430\u043c\u0438 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f. <em>\u0412\u0435\u0441\u044c \u0431\u043b\u043e\u043a \u0441\u0442\u0440\u043e\u043a 11-21 \u044f \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b. \u0427\u0442\u043e-\u0442\u043e \u0442\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043d\u043e \u044d\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u0447\u0438\u0441\u0442\u043e \u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0435, \u0435\u0441\u043b\u0438 \u044f \u0440\u0435\u0448\u0443 \u044d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c.<\/em><\/p>\n<h3>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f<\/h3>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u0431\u043b\u043e\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u043e\u0442\u043a\u0443\u0434\u0430 \u044d\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438<\/p>\n<pre><code>; Check that we are not in queue  same = n(chktq),GotoIf($[\"${INQUEUE}\" != 1 ]?startq)  same = n,Hangup()<\/code><\/pre>\n<p>\u0412\u0442\u043e\u0440\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 &#8212; \u043e\u0442\u0441\u044b\u043b\u043a\u0430 \u043a \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e \u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438. \u041d\u0443\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u0430\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c BASE64, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0443 \u043d\u0430\u0441 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u044b (\u0431\u0443\u0434\u0435\u0442 \u0432\u0438\u0434\u043d\u043e \u043d\u0438\u0436\u0435)<\/p>\n<p>\u0422.\u0435. \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <em>INQUEU<\/em> \u043d\u0435 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 1, \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0447\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0448\u043b\u043e \u043a \u043d\u0430\u043c \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0431\u043b\u043e\u043a\u0430, \u0442.\u0435. \u0431\u044b\u043b\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043e \u043e\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c PBX, \u043d\u043e \u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0430\u0434\u0440\u0435\u0441\u0430\u0442\u0443. \u0418 \u0434\u0430, \u044d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0437\u0436\u0435 \u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u0430 \u0438\u0437 call \u0444\u0430\u0439\u043b\u0430, \u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 &#8212; \u0441\u043a\u0440\u043f\u0438\u0442\u043e\u043c.<\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0438<\/h3>\n<pre><code>; Starting Queue for messages                                                                                    same = n(startq),NoOp(Queueing message for offline)  same = n,Set(MSGTIME=${STRFTIME(${EPOCH},,%d%m%Y-%H:%M:%S)})                                                    same = n,Set(SRC=\"${BASE64_ENCODE(${MESSAGE(from)})}\")  same = n,Set(DST=${BASE64_ENCODE(${MESSAGE(to)}})                                                               same = n,Set(MSG=${MESSAGE(body)})  same = n,Set(DUMP_MSG=\"${MSGTIME} ${MSG}\")<\/code><\/pre>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u043c\u044b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438. \u0421\u043c \u0441\u0442\u0440\u043e\u043a\u0443 \u0447\u0435\u0442\u044b\u0440\u0435.<\/p>\n<p>\u0422\u0440\u0435\u0442\u044c\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0448\u0438\u0444\u0440\u0443\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f. Shell \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u043b\u044e\u0431\u0438\u0442 \u0432\u0441\u044f\u043a\u0438\u0435 \u0442\u0430\u043c + \u0438 &lt; \u0438 \u043c\u044b \u0432\u0441\u0435 \u044d\u0442\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0432 \u0431\u0435\u0437\u043e\u0431\u0438\u0434\u043d\u0443\u044e \u0430\u0431\u0440\u0430\u043a\u0430\u0434\u0430\u0431\u0440\u0443 \u0434\u043b\u044f \u0434\u0435\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>\u0427\u0435\u0442\u0432\u0435\u0440\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u043c\u044b \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0442\u0435\u043a\u0441\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043c\u0435\u0449\u0435\u043d \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c. \u0421\u0443\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0430 &#8212; \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438, \u0432 \u043d\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u0434\u0430\u0442\u0430-\u0432\u0440\u0435\u043c\u044f \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u043e \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043b\u043e\u0441\u044c \u0438 \u0441\u0430\u043c \u0442\u0435\u043a\u0441\u0442. \u0412 \u043f\u0440\u043e\u0441\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0431\u044b \u0442\u0435\u043a\u0441\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0443\u0437\u043d\u0430\u0442\u044c \u043a\u043e\u0433\u0434\u0430 \u0436\u0435 \u043c\u044b \u0435\u0433\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b\u0438.<\/p>\n<h3>\u0417\u0430\u043f\u0440\u043e\u0441 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0438 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c<\/h3>\n<pre><code>; We do not want our BASH to execute strange things... so BASE64 encoding  same = n,Set(MSG=\"${BASE64_ENCODE(${DUMP_MSG})}\")  same = n,System(\/var\/lib\/asterisk\/agi-bin\/astqueue.sh -SRC ${SRC} -DST ${DST} -MSG ${MSG})  same = n,Hangup()<\/code><\/pre>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0431\u043b\u043e\u043a \u0443 \u043d\u0430\u0441 \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f (DATE+Message(body)) \u0432\u043c\u0435\u0441\u0442\u0435 \u0432 BASE64 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0435\u0434\u0438\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<p>\u0410 \u0434\u0430\u043b\u0435\u0435 \u043c\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a, \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f \u0438 \u0442\u0435\u043a\u0441\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.<\/p>\n<h3>\u0412\u0441\u0435, \u0438\u043b\u0438 \u043d\u0435\u0442?<\/h3>\n<p>\u041d\u0435\u0442. \u041f\u043e\u043a\u0430 \u044f \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u0432\u0430\u043c \u0441\u0430\u043c \u0441\u043a\u0440\u0438\u043f\u0442, \u043d\u0435 \u044f\u0441\u043d\u043e \u0437\u0430\u0447\u0435\u043c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 <em>app-fakeanswer<\/em><\/p>\n<pre><code>[app-fakeanswer] exten = _1.,1,Verbose(1, \"Processing offline message queue for ${EXTEN}\")  same = n,Set(DESTDEV=${EXTEN})  same = n,Set(THISDEVSTATE=${DEVICE_STATE(PJSIP\/${DESTDEV})})  same = n,GotoIf($[\"${THISDEVSTATE}\" = \"UNAVAILABLE\"]?hang)  same = n,GotoIf($[\"${THISDEVSTATE}\" = \"UNKNOWN\"]?hang)  same = n,Answer  same = n,Hangup  same = n(hang),Hangup()<\/code><\/pre>\n<p>\u041e\u0442\u0432\u0435\u0442 \u0434\u043e \u0431\u0435\u0437\u043e\u0431\u0440\u0430\u0437\u0438\u044f \u043f\u0440\u043e\u0441\u0442. \u041a\u043e\u0433\u0434\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f message_queue \u043e\u043d\u043e \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u044d\u0442\u043e\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0438 \u0438\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f (extension). \u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u043c\u044b \u0432\u044b\u0445\u043e\u0434\u0438\u043c, \u0435\u0441\u043b\u0438 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d &#8212; \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 <em>incoming-sms<\/em><\/p>\n<h3>\u0421\u043a\u0440\u0438\u043f\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f call file<\/h3>\n<p>\u0418 \u0442\u0430\u043a, \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435.<\/p>\n<p>\u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u043c\u0438 <a href=\"https:\/\/wiki.asterisk.org\/wiki\/pages\/viewpage.action?pageId=32375589\" rel=\"noopener noreferrer nofollow\">AGI<\/a> \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438, \u0430 \u043f\u043e \u0441\u0443\u0442\u0438 &#8212; bash \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u043f\u0435\u0440\u0435\u0436\u0443\u0435\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b, \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0435\u0441\u0442\u044c \u043b\u0438 \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f \u0438 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c call file , \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0442\u043e\u043c \u043f\u043e\u043b\u043e\u0436\u0438\u043c \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0434\u0438\u0440\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c Asterisk.<\/p>\n<p>\u041e\u0431\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0437\u0430\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c \u0432 <em>\/var\/lib\/asterisk\/agi-bin\/<\/em> \u0438\u043b\u0438 \u0442\u0443\u0434\u0430, \u0433\u0434\u0435 \u0443 \u0432\u0430\u0441 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0430 agi \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f, \u0430 \u0442\u0430\u043a \u0436\u0435 \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u0438\u0434\u0430\u0442\u044c \u0438\u043c +x (\u043f\u0440\u0430\u0432\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f) \u0438 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u0438\u0437-\u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443 \u0432\u0430\u0441 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 Asterisk (<em>chmod &amp; chown<\/em>).<\/p>\n<p><em>\u042f \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043b \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0439 \u0432 \u0441\u0435\u0442\u0438 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0432 \u0435\u0433\u043e \u043f\u043e\u0434 \u0441\u0432\u043e\u0438 \u043f\u0443\u0442\u0438 \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0432 \u043f\u0430\u0440\u0443 \u043a\u043e\u0441\u044f\u043a\u043e\u0432.<\/em><\/p>\n<pre><code class=\"bash\">#!\/bin\/bash ############################################################################## # v0.2                                                                       # # copyleft Sanjay Willie sanjayws@gmail.com                                  # # SCRIPT PURPOSE: GENERATE SMS OFFLINE QUEUE                                 # # GEN INFO: Change variables sections                                        # ############################################################################## # This script was edit by Michael A. Gates                                   # # because it didn't work in freepbx 5.11                                     # # I am by no means a Linux guy or a Asterisk                                 # # guy. Without Sanjay Willie's work I could                 <\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\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-336304","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/336304","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=336304"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/336304\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=336304"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=336304"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=336304"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}