{"id":282404,"date":"2016-12-13T10:45:06","date_gmt":"2016-12-13T07:45:06","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=282404"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=282404","title":{"rendered":"\u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0421\u041c\u0421 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f jSMPP \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438 UDH, SAR, Payload"},"content":{"rendered":"<p>\u041d\u0430\u0448\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438 email \u0438 sms. \u041d\u0430 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0445 \u044d\u0442\u0430\u043f\u0430\u0445 \u0434\u043b\u044f \u0440\u0430\u0441\u0441\u044b\u043b\u043e\u043a \u0441\u043c\u0441 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 API \u043f\u043e\u0441\u0440\u0435\u0434\u043d\u0438\u043a\u0430. \u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0440\u0430\u0441\u0442\u0435\u0442 \u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0435, \u043c\u044b \u043f\u0440\u0438\u043d\u044f\u043b\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0441\u043e\u0444\u0442 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043c\u0441 \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 smpp. \u042d\u0442\u043e \u043d\u0430\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0443 \u043d\u0430\u0431\u043e\u0440 \u0431\u0430\u0439\u0442\u043e\u0432, \u0430 \u043e\u043d \u0443\u0436\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043b \u0442\u0440\u0430\u0444\u0438\u043a \u043f\u043e \u0441\u0442\u0440\u0430\u043d\u0430\u043c \u0438 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c.<br \/>  \u041f\u043e\u0441\u043b\u0435 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c\u0438 \u0438 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c\u0438 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043c\u0441 \u0432\u044b\u0431\u043e\u0440 \u043f\u0430\u043b \u043d\u0430 <a href=\"https:\/\/code.google.com\/archive\/p\/jsmpp\/\">jsmpp<\/a>. \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e, \u043a\u0440\u043e\u043c\u0435 <a href=\"https:\/\/habrahabr.ru\/post\/202142\/\">\u044d\u0442\u043e\u0439<\/a>, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043b \u0438\u0437 <a href=\"https:\/\/code.google.com\/archive\/p\/jsmpp\/issues\">google \u043f\u043e jsmpp<\/a>. \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 SMPP \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435 <a href=\"https:\/\/ru.scribd.com\/document\/68185006\/%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB%D0%B0-SMPP-v3-4\">\u0442\u044b\u0446<\/a>.<br \/>  \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u044f \u043c\u043d\u043e\u0433\u0438\u043c \u043e\u0431\u043b\u0435\u0433\u0447\u0443 \u0436\u0438\u0437\u043d\u044c \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 SMPP \u0441\u0435\u0440\u0432\u0438\u0441\u0430.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h5>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h5>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u043e\u044d\u0442\u0430\u043f\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043c\u0441. \u041b\u043e\u0433\u0438\u043a\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043c\u0441 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<br \/>  1. \u041a\u043b\u0438\u0435\u043d\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0412\u0430\u043c \u0441\u043c\u0441 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0445\u043e\u0447\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c (\u0432 \u0432\u0438\u0434\u0435 json):  <\/p>\n<pre><code class=\"javascript\">{         &quot;sms_id&quot;: &quot;test_sms_123&quot;,         &quot;sender&quot;: &quot;\u0412\u0430\u0448\u0435 \u0430\u043b\u044c\u0444\u0430 \u0438\u043c\u044f&quot;,         &quot;phone&quot;: &quot;380959999900&quot;,         &quot;text_body&quot;: &quot;\u041f\u0440\u0438\u0432\u0435\u0442! \u0422\u044b \u0432\u044b\u0438\u0433\u0440\u0430\u043b 1000000$!&quot;,                &quot;flash&quot;: 0 } <\/code><\/pre>\n<p>  \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 flash \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u043e \u0442\u043e\u043c \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/Flash-SMS\">flash \u0441\u043c\u0441<\/a>.<br \/>  2. \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435, \u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0438\u0445 \u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u0434 \u0442\u043e\u0442 \u0441\u043f\u043e\u0441\u043e\u0431, \u043a\u0430\u043a\u0438\u043c \u043c\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0435\u0433\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0443, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e: <b>UDH, SAR, Payload<\/b>. \u0412\u0441\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e \u043a\u0430\u043a\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0412\u0430\u0448 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440.<br \/>  3. \u0412\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0443 \u0438 \u043e\u043d \u0412\u0430\u043c \u043e\u0442\u0434\u0430\u0435\u0442 \u0432 \u043e\u0442\u0432\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u0438\u0435\u043c \u0441\u043c\u0441 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u043c, \u044f \u043d\u0430\u0437\u0432\u0430\u043b \u0435\u0435 <b>transaction_id<\/b>.<br \/>  4. \u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0441\u043c\u0441 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u043c \u043f\u0440\u0430\u0432\u043e \u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0412\u0430\u043c \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0430 (\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e, \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0438 \u0442.\u0434.) \u043d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 48 \u0447\u0430\u0441\u043e\u0432. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0412\u0430\u043c \u043f\u0440\u0438\u0439\u0434\u0435\u0442\u0441\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0412\u0430\u0448 <b>sms_id<\/b> \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 <b>transaction_id<\/b>.<br \/>  5. \u041a\u043e\u0433\u0434\u0430 \u0441\u043c\u0441 \u0434\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044e, \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0412\u0430\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 <b>transaction_id<\/b> \u0438 \u0441\u0442\u0430\u0442\u0443\u0441 (DELIVERED).<br \/>  <cut\/>  <\/p>\n<h5>\u0421\u0442\u0430\u0442\u0443\u0441\u044b<\/h5>\n<p>  \u041f\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0430\u043c \u043f\u043e\u0441\u043e\u0432\u0435\u0442\u0443\u044e 2 \u0441\u0442\u0430\u0442\u044c\u0438: <a href=\"http:\/\/www.smssolutions.net\/tutorials\/smpp\/smppdeliveryreports\/\">\u0437\u0434\u0435\u0441\u044c<\/a> \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e 10 \u0441\u0442\u0430\u0442\u0443\u0441\u0430\u043c, \u0430 <a href=\"http:\/\/smpp.w2wts.com\/SMPP_Developers.aspx\">\u0437\u0434\u0435\u0441\u044c<\/a> \u0443\u0436\u0435 \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0447\u0435\u043d\u044c \u043a\u043e\u0434\u043e\u0432 \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u0432 \u0438 \u0438\u0445 \u043f\u043e\u043b\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435.<br \/>  <cut\/><br \/>  Maven \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u043b\u044f API jSmpp:  <\/p>\n<pre><code class=\"xml\">        &lt;dependency&gt;             &lt;groupId&gt;com.googlecode.jsmpp&lt;\/groupId&gt;             &lt;artifactId&gt;jsmpp&lt;\/artifactId&gt;             &lt;version&gt;2.1.0-RELEASE&lt;\/version&gt;         &lt;\/dependency&gt; <\/code><\/pre>\n<p>  \u041e\u043f\u0438\u0448\u0443 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c:   <\/p>\n<ul>\n<li><b>SMPPSession<\/b> \u2014 \u0441\u0435\u0441\u0441\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0412\u044b \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0443 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0438 \u0441\u043e \u0441\u0447\u0435\u0442\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0434\u0435\u043d\u044c\u0433\u0438;<\/li>\n<li><b>SessionStateListener<\/b> \u2014 \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044c \u0438\u0437\u0432\u0435\u0449\u0430\u0435\u0442 \u0412\u0430\u0441 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0442\u0430\u0442\u0443\u0441 \u0412\u0430\u0448\u0435\u0439 \u0441\u0435\u0441\u0441\u0438\u0438 \u0431\u044b\u043b \u0438\u0437\u043c\u0435\u043d\u0435\u043d, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u0435\u0441\u0441\u0438\u044f \u0437\u0430\u043a\u0440\u044b\u043b\u0430\u0441\u044c;<\/li>\n<li><b>MessageReceiverListener<\/b> \u2014 \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 <b>DeliverSm<\/b>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f <b>transaction_id<\/b>, <b>\u0441\u0442\u0430\u0442\u0443\u0441<\/b> \u0438 <b>\u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440<\/b>;<\/li>\n<\/ul>\n<p>  <cut\/>  <\/p>\n<h5>\u0421\u043f\u043e\u0441\u043e\u0431 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 Payload<\/h5>\n<p>  \u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u044d\u0442\u043e <b>payload<\/b>. \u0412\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u043e\u0439 \u0434\u043b\u0438\u043d\u044b \u0441\u043c\u0441 \u0412\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0435, \u0412\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u0441\u043c\u0441 \u043e\u0434\u043d\u0438\u043c \u043f\u0430\u043a\u0435\u0442\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0441\u0430\u043c \u0437\u0430\u0431\u043e\u0442\u0438\u0442\u0441\u044f \u043e \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0438 \u0441\u043c\u0441 \u043d\u0430 \u0447\u0430\u0441\u0442\u0438. \u0421\u043a\u043b\u0435\u0439\u043a\u0430 \u0447\u0430\u0441\u0442\u0435\u0439 \u0443\u0436\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f. \u0421 \u043d\u0435\u0433\u043e \u0438 \u043d\u0430\u0447\u043d\u0435\u043c \u043e\u0431\u0437\u043e\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043c\u0441.<br \/>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0443. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0435\u0441\u0441\u0438\u044e \u0438 \u0435\u0435 \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u043f\u0440\u0438\u0435\u043c \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u0432 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u043c\u0441. \u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u043c\u0435\u0442\u043e\u0434\u0430 <b>createSmppSession<\/b> \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0443, \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u043c\u043d\u043e\u044e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435 <b>SmppServer<\/b>. \u041e\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u0430\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435: \u043b\u043e\u0433\u0438\u043d, \u043f\u0430\u0440\u043e\u043b\u044c, ip, \u043f\u043e\u0440\u0442 \u0438 \u0442.\u0434.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041c\u0435\u0442\u043e\u0434 \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0438\u0439 SMPP \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">protected SMPPSession session; protected SmppServer server; private ExecutorService receiveTask; private SessionStateListener stateListener;  ... \/\/ some of your code  public void createSmppSession() {         StopWatchHires watchHires = new StopWatchHires();         watchHires.start();         log.info(&quot;Start to create SMPPSession {}&quot;, sessionName);          try {             session = new SMPPSession();             session.connectAndBind(server.getHostname(),                     server.getPort(),                     new BindParameter(                             BindType.BIND_TRX,                             server.getSystemId(),                             server.getPassword(),                             server.getSystemType(),                             TypeOfNumber.UNKNOWN,                             NumberingPlanIndicator.UNKNOWN,                             null));              stateListener = new SessionStateListenerImpl();             session.addSessionStateListener(stateListener);             session.setMessageReceiverListener(new SmsReceiverListenerImpl());             session.setTransactionTimer(TRANSACTION_TIMER);              if (Objects.isNull(receiveTask)                     || receiveTask.isShutdown()                     || receiveTask.isTerminated()) {                  this.receiveTask = Executors.newCachedThreadPool();             }              watchHires.stop();              log.info(&quot;Open smpp session id {}, state {}, duration {} for {}&quot;,                     session.getSessionId(), session.getSessionState().name(),                     watchHires.toHiresString(), sessionName);          } catch (IOException e) {              watchHires.stop();              if (SmppServerConnectResponse.contains(e.getMessage())) {                 log.error(&quot;Exception while SMPP session creating. Reason: {}. Duration {}, {}&quot;,                         e.getMessage(), watchHires.toHiresString(), sessionName);                  close();                 return;              } else if (e instanceof UnknownHostException) {                 log.error(&quot;Exception while SMPP session creating. Unknown hostname {}, duration {}, {}&quot;,                         e.getMessage(), watchHires.toHiresString(), sessionName);                 close();                 return;             } else {                 log.error(&quot;Failed to connect SMPP session for {}, duration {}, Because {}&quot;,                         sessionName, watchHires.toHiresString(), e.getMessage());             }         }          if (!isConnected()) {             reconnect();         }     } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0418\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043e\u0431\u044a\u0435\u0442\u044b \u043a\u043b\u0430\u0441\u0441\u043e\u0432 <b>SmsReceiverListenerImpl<\/b> \u0438 <b>SessionStateListenerImpl<\/b> \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0435\u0441\u0441\u0438\u0438. \u041f\u0435\u0440\u0432\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043f\u0440\u0438\u0435\u043c \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u0432 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u043c\u0441, \u0432\u0442\u043e\u0440\u043e\u0439 \u2014 \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044c \u0441\u0435\u0441\u0441\u0438\u0438. <br \/>  <cut\/><br \/>  \u041a\u043b\u0430\u0441\u0441 <b>SessionStateListenerImpl<\/b> \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <i>onStateChange<\/i> \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043a\u043b\u0430\u0441\u0441 \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u0435\u0441\u0441\u0438\u0438 \u0438 \u043d\u043e\u0432\u043e\u0433\u043e. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u0435\u0441\u043b\u0438 \u0441\u0435\u0441\u0441\u0438\u044f \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0430, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u043f\u0435\u0440\u0435\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.   <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044c SMPP \u0441\u0435\u0441\u0441\u0438\u0438<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">  \/**      * This class will receive the notification from {@link SMPPSession} for the      * state changes. It will schedule to re-initialize session.      *\/     class SessionStateListenerImpl implements SessionStateListener {         @Override         public void onStateChange(SessionState newState, SessionState oldState, Object source) {             if (!newState.isBound()) {                 log.warn(&quot;SmppSession changed status from {} to {}. {}&quot;,                           oldState, newState, sessionName);                 reconnect();             }         }     } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <cut\/><br \/>  \u041f\u0440\u0438\u043c\u0435\u0440 <b>SmsReceiverListenerImpl<\/b>. \u0412\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c 3 \u043c\u0435\u0442\u043e\u0434\u0430: <i>onAcceptDeliverSm<\/i>, <i>onAcceptAlertNotification<\/i>, <i>onAcceptDataSm<\/i>. \u041d\u0430\u043c \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043c\u0441 \u043d\u0443\u0436\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u044b\u0439. \u041e\u043d \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043e\u0442 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 <b>transaction_id<\/b>, \u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u043d\u0430\u0448\u0443 \u0441\u043c\u0441 \u0438 \u0441\u0442\u0430\u0442\u0443\u0441. \u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0412\u044b \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u0435 \u0434\u0432\u0430 \u043a\u043b\u0430\u0441\u0441\u0430: <b>SmppErrorStatus<\/b> \u0438 <b>StatusType<\/b> \u2014 \u044d\u0442\u043e <i>enum<\/i>-\u043a\u043b\u0430\u0441\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u0440\u0430\u043d\u044f\u0442 \u0441\u0442\u0430\u0442\u0443\u0441\u044b \u0441 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438 \u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 (\u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0443, \u043d\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0443 \u0438 \u0442.\u0434.) \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044c \u0441\u043c\u0441 \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u0432<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">\/*The logic on this listener should be accomplish in a short time,     because the deliver_sm_resp will be processed after the logic executed.*\/     class SmsReceiverListenerImpl implements MessageReceiverListener {          @Override         public void onAcceptDeliverSm(DeliverSm deliverSm) throws ProcessRequestException {             if (Objects.isNull(deliverSm)) {                 log.error(&quot;Smpp server return NULL delivery answer&quot;);                 return;             }             try {                 \/\/ this message is delivery receipt                 DeliveryReceipt delReceipt = deliverSm.getShortMessageAsDeliveryReceipt();                 \/\/delReceipt.getId() must be equals transactionId from SMPPServer                 String transactionId = delReceipt.getId();                 StatusType statusType;                 String subStatus;                 if (MessageType.SMSC_DEL_RECEIPT.containedIn(deliverSm.getEsmClass())) {                      \/\/  && delReceipt.getDelivered() == 1                     statusType = getDeliveryStatusType(delReceipt.getFinalStatus());                     SmppErrorStatus smppErrorStatus =                             SmppErrorStatus.contains(delReceipt.getError());                      if (smppErrorStatus != null)                         subStatus = smppErrorStatus.name();                     else                         subStatus = delReceipt.getError();                 } else {                     statusType = StatusType.SMS_UNDELIVERED;                     \/\/ this message is regular short message                     log.error(&quot;Delivery SMS event has wrong receipt. Message: {}&quot;, deliverSm.getShortMessage());                     subStatus = SmppErrorStatus.INVALID_FORMAT.name();                 }  \/\/ some providers return phone number in deliverSm.getSourceAddr()                 String phoneNumber = deliverSm.getDestAddress();                 saveDeliveryStatus(transactionId, statusType, subStatus, phoneNumber));                 log.info(&quot;Receiving delivery receipt from {} to {}, transaction id {}, status {}, subStatus {}&quot;,                         deliverSm.getSourceAddr(), deliverSm.getDestAddress(),                         transactionId, statusType, subStatus);              } catch (InvalidDeliveryReceiptException e) {                 log.error(&quot;Exception while SMS is sending, destination address {}, {}&quot;,                         deliverSm.getDestAddress(), e.getMessage(), e);             }         }          @Override         public void onAcceptAlertNotification(AlertNotification alertNotification) {             log.error(&quot;Error on sending SMS message: {}&quot;, alertNotification.toString());         }          @Override         public DataSmResult onAcceptDataSm(DataSm dataSm, Session source) throws ProcessRequestException {             log.debug(&quot;Event in SmsReceiverListenerImpl.onAcceptDataSm!&quot;);             return null;         }          private StatusType getDeliveryStatusType(DeliveryReceiptState state) {&lt;cut \/&gt;             if (state.equals(DeliveryReceiptState.DELIVRD))                 return StatusType.SMS_DELIVERED;             else if (state.equals(DeliveryReceiptState.ACCEPTD))                 return StatusType.ACCEPTED;             else if (state.equals(DeliveryReceiptState.DELETED))                 return StatusType.DELETED;             else if (state.equals(DeliveryReceiptState.EXPIRED))                 return StatusType.EXPIRED;             else if (state.equals(DeliveryReceiptState.REJECTD))                 return StatusType.REJECTED;             else if (state.equals(DeliveryReceiptState.UNKNOWN))                 return StatusType.UNKNOWN;             else                 return StatusType.SMS_UNDELIVERED;         }      } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <cut\/><br \/>  \u041d\u0443 \u0438 \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u2014 \u043c\u0435\u0442\u043e\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043c\u0441.<br \/>  \u0412\u044b\u0448\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 JSON \u044f \u0434\u0435\u0441\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b \u0432 \u043e\u0431\u044a\u0435\u043a\u0442 <b>SMSMessage<\/b>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044f \u043e\u0431\u044a\u0435\u043a\u0442 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u0437\u043d\u0430\u0439\u0442\u0435, \u0447\u0442\u043e \u043e\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u044e \u043d\u0443\u0436\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u0440\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u0443\u044e \u0441\u043c\u0441.<br \/>  \u041c\u0435\u0442\u043e\u0434 <i>sendSmsMessage<\/i>, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0438\u0436\u0435, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 <b>SingleSmppTransactionMessage<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0431 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0441\u043c\u0441 \u0441 <b>transaction_id<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u043c.<br \/>  \u041a\u043b\u0430\u0441\u0441 <b>Gsm0338<\/b> \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u043a\u0438\u0440\u0438\u043b\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432 \u0441\u043c\u0441. \u042d\u0442\u043e \u0432\u0430\u0436\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u043e\u0431\u0449\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0443 \u043e\u0431 \u044d\u0442\u043e\u043c. \u042d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u0431\u044b\u043b \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 <a href=\"http:\/\/www.smsitaly.com\/Download\/ETSI_GSM_03.38.pdf\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430<\/a>.<br \/>  Enum \u043a\u043b\u0430\u0441\u0441 <b>SmppResponseError<\/b> \u0431\u044b\u043b \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0448\u0438\u0431\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c SMPP \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430, \u0441\u0441\u044b\u043b\u043a\u0430 <a href=\"https:\/\/www.nowsms.com\/smpp-error-code-reference\">\u0442\u0443\u0442<\/a>.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041c\u0435\u0442\u043e\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043c\u0441<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">public SingleSmppTransactionMessage sendSmsMessage(final SMSMessage message) {          final String bodyText = message.getTextBody();         final int smsLength = bodyText.length();         OptionalParameter messagePayloadParameter;         String transportId = null;         String error = null;         boolean isUSC2 = false;         boolean isFlashSms = message.isFlash();          StopWatchHires watchHires = new StopWatchHires();         watchHires.start();          log.debug(&quot;Start to send sms id {} length {}&quot;,                 message.getSmsId(), smsLength);          try {              byte[] encoded;             if ((encoded = Gsm0338.encodeInGsm0338(bodyText)) != null) {                 messagePayloadParameter =                         new OptionalParameter.OctetString(                                 OptionalParameter.Tag.MESSAGE_PAYLOAD.code(),                                 encoded);                  log.debug(&quot;Found Latin symbols in sms id {} message&quot;, message.getSmsId());              } else {                 isUSC2 = true;                 messagePayloadParameter =                         new OptionalParameter.OctetString(                                 OptionalParameter.Tag.MESSAGE_PAYLOAD.code(),                                 bodyText,                                 &quot;UTF-16BE&quot;);                 log.debug(&quot;Found Cyrillic symbols in sms id {} message&quot;, message.getSmsId());             }              GeneralDataCoding dataCoding = getDataCodingForServer(isUSC2, isFlashSms);              log.debug(&quot;Selected data_coding: {}, value: {}, SMPP server type: {}&quot;,                     dataCoding.getAlphabet(),                     dataCoding.toByte(),                     server.getServerType());              transportId = session.submitShortMessage(                     &quot;CMT&quot;,                     TypeOfNumber.ALPHANUMERIC,                     NumberingPlanIndicator.UNKNOWN,                     message.getSender(),                     TypeOfNumber.INTERNATIONAL,                     NumberingPlanIndicator.ISDN,                     message.getPhone(),                     ESM_CLASS,                     ZERO_BYTE,                     ONE_BYTE,                     null,                     null,                     rd,                     ZERO_BYTE,                     dataCoding,                     ZERO_BYTE,                     EMPTY_ARRAY,                     messagePayloadParameter);           } catch (PDUException e) {             error = e.getMessage();             \/\/ Invalid PDU parameter             log.error(&quot;SMS id:{}. Invalid PDU parameter {}&quot;,                     message.getSmsId(), error);             log.debug(&quot;Session id {}, state {}. {}&quot;, session.getSessionId(), session.getSessionState().name(), e);         } catch (ResponseTimeoutException e) {             error = analyseExceptionMessage(e.getMessage());             \/\/ Response timeout             log.error(&quot;SMS id:{}. Response timeout: {}&quot;,                     message.getSmsId(), e.getMessage());             log.debug(&quot;Session id {}, state {}. {}&quot;, session.getSessionId(), session.getSessionState().name(), e);         } catch (InvalidResponseException e) {             error = e.getMessage();             \/\/ Invalid response             log.error(&quot;SMS id:{}. Receive invalid response: {}&quot;,                     message.getSmsId(), error);             log.debug(&quot;Session id {}, state {}. {}&quot;, session.getSessionId(), session.getSessionState().name(), e);         } catch (NegativeResponseException e) {             \/\/ get smpp error codes             error = String.valueOf(e.getCommandStatus());             \/\/ Receiving negative response (non-zero command_status)             log.error(&quot;SMS id:{}, {}. Receive negative response: {}&quot;,                     message.getSmsId(), message.getPhone(), e.getMessage());             log.debug(&quot;Session id {}, state {}. {}&quot;, session.getSessionId(), session.getSessionState().name(), e);         } catch (IOException e) {             error = analyseExceptionMessage(e.getMessage());             log.error(&quot;SMS id:{}. IO error occur {}&quot;,                     message.getSmsId(), e.getMessage());             log.debug(&quot;Session id {}, state {}. {}&quot;, session.getSessionId(), session.getSessionState().name(), e);         } catch (Exception e) {             error = e.getMessage();             log.error(&quot;SMS id:{}. Unexpected exception error occur {}&quot;,                     message.getSmsId(), error);             log.debug(&quot;Session id {}, state {}. {}&quot;, session.getSessionId(), session.getSessionState().name(), e);         }          watchHires.stop();          log.info(&quot;Sms id:{} length {} sent with transaction id:{} from {} to {}, duration {}&quot;,                 message.getSmsId(), smsLength,                 transportId, message.getSender(),                 message.getPhone(), watchHires.toHiresString());          return new SingleSmppTransactionMessage(message, server.getId(), error, transportId);     }      private GeneralDataCoding getDataCodingForServer (boolean isUCS2Coding, boolean isFlashSms){          GeneralDataCoding coding;          if (isFlashSms) {             coding = isUCS2Coding ? UCS2_CODING : DEFAULT_CODING;         } else {             coding = isUCS2Coding ? UCS2_CODING_WITHOUT_CLASS : DEFAULT_CODING_WITHOUT_CLASS;         }          return coding;     }      \/**      * Analyze exception message for our problem with session      * While schedule reconnecting session sms didn't send and didn't put to resend      *\/     private String analyseExceptionMessage(String exMessage){          if(Objects.isNull(exMessage))             return exMessage;          if (exMessage.contains(&quot;No response after waiting for&quot;))             return SmppResponseError.RECONNECT_RSPCTIMEOUT.getErrCode();          else if (exMessage.contains(&quot;Cannot submitShortMessage while&quot;))             return SmppResponseError.RECONNECT_CANNTSUBMIT.getErrCode();          else if (exMessage.contains(&quot;Failed sending submit_sm command&quot;))             return SmppResponseError.RECONNECT_FAILEDSUBMIT.getErrCode();          return exMessage;     } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <cut\/><br \/>  \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043e\u043f\u0438\u0448\u0443 \u043c\u0435\u0442\u043e\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043c\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 UDH, \u0441\u0441\u044b\u043b\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0437\u0434\u0435\u0441\u044c. \u042d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043e\u0431\u044f\u0437\u044b\u0432\u0430\u0435\u0442 \u0412\u0430\u0441 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u0431\u0430\u0439\u0442\u044b, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0434\u0435\u043b\u0438\u0442\u044c \u0438\u0445 \u043d\u0430 \u043f\u043e\u0434\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u0432 \u043f\u0435\u0440\u0432\u044b\u0445 \u0431\u0438\u0442\u0430\u0445 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u044e \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e. \u0411\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u0435\u043b\u043e. <br \/>  <a href=\"https:\/\/github.com\/scorpioa\/unismpp\">Github \u0441\u0441\u044b\u043b\u043a\u0430<\/a>.<br \/>  \u041d\u0430\u0434\u0435\u044e\u0441\u044c \u043c\u043e\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442 \u0412\u0430\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 SMPP \u0441\u0435\u0440\u0432\u0438\u0441\u0430. \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u0435.<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:\/\/habrahabr.ru\/post\/310828\/\"> https:\/\/habrahabr.ru\/post\/310828\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041d\u0430\u0448\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438 email \u0438 sms. \u041d\u0430 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0445 \u044d\u0442\u0430\u043f\u0430\u0445 \u0434\u043b\u044f \u0440\u0430\u0441\u0441\u044b\u043b\u043e\u043a \u0441\u043c\u0441 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 API \u043f\u043e\u0441\u0440\u0435\u0434\u043d\u0438\u043a\u0430. \u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0440\u0430\u0441\u0442\u0435\u0442 \u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0435, \u043c\u044b \u043f\u0440\u0438\u043d\u044f\u043b\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0441\u043e\u0444\u0442 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043c\u0441 \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 smpp. \u042d\u0442\u043e \u043d\u0430\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0443 \u043d\u0430\u0431\u043e\u0440 \u0431\u0430\u0439\u0442\u043e\u0432, \u0430 \u043e\u043d \u0443\u0436\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043b \u0442\u0440\u0430\u0444\u0438\u043a \u043f\u043e \u0441\u0442\u0440\u0430\u043d\u0430\u043c \u0438 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c.<br \/>  \u041f\u043e\u0441\u043b\u0435 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c\u0438 \u0438 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c\u0438 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043c\u0441 \u0432\u044b\u0431\u043e\u0440 \u043f\u0430\u043b \u043d\u0430 <a href=\"https:\/\/code.google.com\/archive\/p\/jsmpp\/\">jsmpp<\/a>. \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e, \u043a\u0440\u043e\u043c\u0435 <a href=\"https:\/\/habrahabr.ru\/post\/202142\/\">\u044d\u0442\u043e\u0439<\/a>, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043b \u0438\u0437 <a href=\"https:\/\/code.google.com\/archive\/p\/jsmpp\/issues\">google \u043f\u043e jsmpp<\/a>. \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 SMPP \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435 <a href=\"https:\/\/ru.scribd.com\/document\/68185006\/%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB%D0%B0-SMPP-v3-4\">\u0442\u044b\u0446<\/a>.<br \/>  \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u044f \u043c\u043d\u043e\u0433\u0438\u043c \u043e\u0431\u043b\u0435\u0433\u0447\u0443 \u0436\u0438\u0437\u043d\u044c \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 SMPP \u0441\u0435\u0440\u0432\u0438\u0441\u0430.  <\/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-282404","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/282404","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=282404"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/282404\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=282404"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=282404"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=282404"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}