{
    "componentChunkName": "component---src-templates-doc-page-js",
    "path": "/docs/ru/JS_API/built_in_services/pushgate/createPushback/",
    "result": {"data":{"site":{"siteMetadata":{"title":"Gatsby-doc-engine"}},"markdownRemark":{"id":"3f852904-c4d4-547d-8459-0b3f10ce2057","excerpt":"$pushgate.createPushback Метод создает специальную сущность для обработки событий — пушбэк.?> Пушбэк используется для отправки событий в сценарий при каких-либо…","html":"<h1>$pushgate.createPushback</h1>\n<hr>\n<p>Метод создает специальную сущность для обработки событий — <em>пушбэк</em>.</p>\n<p class='warn'>Пушбэк используется для отправки событий в сценарий при каких-либо действиях в стороннем сервисе. Таким образом при помощи бота становится возможным создавать исходящие рассылки.</p>\n<p>Рассмотрим принцип работы пушбэков:</p>\n<ol>\n<li>В сценарии вызывается метод <code class=\"language-text\">$pushgate.createPushback</code>. При вызове в метод передаются идентификаторы нужного диалога и строка, определяющая тип события, например <code class=\"language-text\">myEvent</code>.</li>\n<li>Пушбэк регистрируется в платформе. Ему присваивается уникальный идентификатор <code class=\"language-text\">pushbackId</code>, который можно использовать в запросах к методам <a href=\"https://help.just-ai.com/docs/api/pushgate_api/#/Push/executeGet\" target=\"_blank\" rel=\"noopener noreferrer\">GET</a> и <a href=\"https://help.just-ai.com/docs/api/pushgate_api/#/Push/executePost\" target=\"_blank\" rel=\"noopener noreferrer\">POST <code class=\"language-text\">/push_{pushbackId}</code></a> Pushgate API.</li>\n<li>Когда в стороннем сервисе происходит событие, о котором необходимо уведомить клиента при помощи бота, сервис делает HTTP-запрос к методу <code class=\"language-text\">/push_{pushbackId}</code>, чтобы активировать пушбэк.</li>\n<li>Пушбэк генерирует в диалоге с клиентом заданное ранее событие <code class=\"language-text\">myEvent</code>, которое можно обработать при помощи тега <a href=\"/1.11.1/docs/ru/JAICP_DSL/tags/declarative_tags/event\"><code class=\"language-text\">event</code></a> и отправить нужную информацию в диалог.</li>\n</ol>\n<p class='tip'>Пушбэк привязан к диалогу с клиентом в определенном канале. Чтобы клиент получал уведомления в нескольких каналах, он должен дойти до соответствующего места сценария в каждом из них.</p>\n<br>\n<h2>Синтаксис</h2>\n<h3>Принимаемые аргументы</h3>\n<p>Метод <code class=\"language-text\">$pushgate.createPushback</code> принимает 5 аргументов. Все аргументы являются обязательными.</p>\n<table>\n<thead>\n<tr>\n<th>Аргумент</th>\n<th>Описание</th>\n<th>Пример</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code class=\"language-text\">channelType</code></td>\n<td>Тип канала</td>\n<td><code class=\"language-text\">chatwidget</code></td>\n</tr>\n<tr>\n<td><code class=\"language-text\">botId</code></td>\n<td>Идентификатор бота</td>\n<td><code class=\"language-text\">3609248-mybot-3609248-drF-2325272</code></td>\n</tr>\n<tr>\n<td><code class=\"language-text\">chatId</code></td>\n<td>Идентификатор пользователя</td>\n<td><code class=\"language-text\">747078ed-d270-5664-62bf-0a933b43a15f</code></td>\n</tr>\n<tr>\n<td><code class=\"language-text\">event</code></td>\n<td>Название события</td>\n<td><code class=\"language-text\">newNotification</code></td>\n</tr>\n<tr>\n<td><code class=\"language-text\">eventData</code></td>\n<td>Данные, переданные вместе с событием</td>\n<td><code class=\"language-text\">{\"text\": \"Скидка только для вас!\"}</code></td>\n</tr>\n</tbody>\n</table>\n<br>\n<h3>Возвращаемое значение</h3>\n<p>Метод возвращает объект, в котором как поля содержатся все аргументы, переданные при вызове, а также 3 дополнительных поля, описывающие созданный пушбэк.</p>\n<table>\n<thead>\n<tr>\n<th>Поле</th>\n<th>Описание</th>\n<th>Пример</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code class=\"language-text\">id</code></td>\n<td>Идентификатор</td>\n<td><code class=\"language-text\">96190b45-84ee-4007-9aab-d257ad22729f</code></td>\n</tr>\n<tr>\n<td><code class=\"language-text\">link</code></td>\n<td>Ссылка для активации</td>\n<td><code class=\"language-text\">https://{hostName}/push_a6c7ed8b-278c-4b85-9c07-14d5d8b6308a</code></td>\n</tr>\n<tr>\n<td><code class=\"language-text\">created</code></td>\n<td>Время создания</td>\n<td><code class=\"language-text\">2021-03-24 15:31:43.059</code></td>\n</tr>\n</tbody>\n</table>\n<br>\n<h2>Идентификация диалога</h2>\n<p>Аргументы  <code class=\"language-text\">channelType</code>, <code class=\"language-text\">botId</code> и <code class=\"language-text\">chatId</code> определяют диалог, в который в дальнейшем будут отправляться события.</p>\n<p class='warn'>Предполагаемое поведение по умолчанию — отправка событий в тот же самый диалог, из которого был создан пушбэк. Чтобы реализовать стандартное поведение, передавайте в качестве данных аргументов поля объекта <a href=/1.11.1/docs/ru/JS_API/variables/request  ><code class=\"language-text\">$request</code></a>: <code class=\"language-text\">$request.channelType</code>, <code class=\"language-text\">$request.botId</code> и <code class=\"language-text\">$request.channelUserId</code>.</p>\n<br>\n<h2>Название события</h2>\n<p>Аргумент <code class=\"language-text\">event</code> задает название события, которое будет генерировать пушбэк при обращении к методу <code class=\"language-text\">/push_{pushbackId}</code>.</p>\n<p class='tip'>Не рекомендуется создавать события, чьи названия совпадают с уже существующими <a href=/1.11.1/docs/ru/bot_answers/events_table  >системными событиями</a>: они будут обрабатываться некорректно.</p>\n<br>\n<h2>Передача данных с событием</h2>\n<p>Когда в сценарий приходит событие, которое сгенерировал пушбэк, вместе с ним можно передать произвольный объект JSON с любыми вспомогательными данными.</p>\n<p>Для этого используйте для активации пушбэка метод <strong>POST</strong> <code class=\"language-text\">/push_{pushbackId}</code> и передайте нужные данные в теле HTTP-запроса.</p>\n<p class='warn'>Из сценария данные доступны обработчику события в поле <code class=\"language-text\">$request.rawRequest.eventData</code>.</p>\n<p>Также вспомогательные данные можно задать при создании пушбэка, передав объект с данными как последний аргумент <code class=\"language-text\">eventData</code>. Эти данные будут по умолчанию передаваться в следующих случаях:</p>\n<ul>\n<li>Если для активации пушбэка использован метод <strong>GET</strong> <code class=\"language-text\">/push_{pushbackId}</code>.</li>\n<li>Если использован метод <strong>POST</strong> <code class=\"language-text\">/push_{pushbackId}</code> с пустым телом.</li>\n</ul>\n<br>\n<h2>Пример</h2>\n<p>Приведем пример использования метода для рассылки рекламных сообщений.</p>\n<div class=\"gatsby-highlight\" data-language=\"sc\"><pre class=\"language-sc\"><code class=\"language-sc\"><span class=\"token keyword\">state:</span> SubscribeOffer\n    <span class=\"token comment\"># ...</span>\n    <span class=\"token variableParameter\">a:</span> Хотите подписаться на нашу рассылку?\n\n    <span class=\"token keyword\">state:</span> Subscribe\n        <span class=\"token storageType\">intent:</span> /Согласие\n        <span class=\"token storageType\">intent!:</span> /Подписаться\n        <span class=\"token variableParameter\">script:</span>\n            <span class=\"token comment\"># Создание пушбэка.</span>\n            var pushback = $pushgate.createPushback(\n                $request.channelType,\n                $request.botId,\n                $request.channelUserId,\n                \"newNotification\",\n                {}\n            );\n\n            <span class=\"token comment\"># Отправка ссылки на Pushgate API в сторонний сервис.</span>\n            $http.post(\"https://example.com/subscribe\", {\n                headers: {\n                    \"Content-Type\": \"application/json\"\n                },\n                body: {\n                    \"link\": pushback.link\n                }\n            });\n        <span class=\"token variableParameter\">a:</span> Ура, вы подписаны! Теперь вы будете первым узнавать о наших акциях и предложениях.\n\n<span class=\"token comment\"># Включен флаг noContext, чтобы при получении нового уведомления контекст диалога не менялся.</span>\n<span class=\"token keyword\">state:</span> NewNotification || noContext = true\n    <span class=\"token storageType\">event!:</span> newNotification\n    <span class=\"token variableParameter\">if:</span> $request.rawRequest.eventData &amp;&amp; $request.rawRequest.eventData.text\n        <span class=\"token variableParameter\">a:</span> Новое предложение только для вас! <span class=\"token constantCharacter\">{{$request.rawRequest.eventData.text}}</span></code></pre></div>\n<br>\n<ol>\n<li>Когда клиент соглашается подписаться на рассылку, он попадает в стейт <code class=\"language-text\">Subscribe</code>. В обработчике стейта создается пушбэк, генерирующий событие <code class=\"language-text\">newNotification</code>.</li>\n<li>Этот же обработчик отправляет ссылку на пушбэк в сторонний сервис, который добавит ее в рассылку регулярных уведомлений.</li>\n</ol>\n<p class='tip'>Сервис должен сам реализовать логику добавления пушбэка в рассылку.</p>\n<ol start=\"3\">\n<li>Теперь, когда нужно будет отправить подписанным пользователям новое уведомление, сторонний сервис должен отправить, например, такой запрос к Pushgate API:</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">curl</span> --request POST <span class=\"token string\">'https://{hostName}/push_{pushbackId}'</span> <span class=\"token punctuation\">\\</span>\n--header <span class=\"token string\">'Content-Type: application/json'</span> <span class=\"token punctuation\">\\</span>\n--data-raw <span class=\"token string\">'{\n    \"text\": \"Только 25 марта на все тарифы JAICP скидка 20%!\"\n}'</span></code></pre></div>\n<ol start=\"4\">\n<li>При получении запроса пушбэк сгенерирует событие <code class=\"language-text\">newNotification</code>, которое будет обработано в сценарии. При корректном запросе пользователь получит уведомление о новой акции:</li>\n</ol>\n<div align=\"center\">\n    <span class=\"gatsby-resp-image-wrapper\" style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 342px; \">\n      <span class=\"gatsby-resp-image-background-image\" style=\"padding-bottom: 155.55555555555554%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAfCAIAAABoLHqZAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEMUlEQVQ4y31UWW/bRhD2n+4P6EuBPvSlKNC3omgRoEWLIk2dAknjpEYSW5ZkkqbESyLFy+IpWST35JJLFtTa8pEig8FiOOTH2Tm+OUIYb2/yLI9r1qRZttluy6p6otUnHoxxFEVHYFd8//LlN8+fg6JQ5/PFctlyTiiljNV7pXX9RCFChNI0y44YrU8U5Xg8aZo2imPP913PC6+vV65rO87Stl3P84PA833xynXdCgBa10maHlFK+710Xbe07StVNQxjsVxejMearpuWZTvOynVXruusVtZioek6gJBQegvu+p53Hed8advqbGZalqKqi+WS1vXDaw+57D2PwCJy27ab7TbNsl1R0LpGGAOEKgifKIAQAPAUzDnf3tzESVIUBUIIQoQwJgQR/EAJQhhBjCljaZo8yvlgDHbXsZZnVZsBngGewy6HXVq1ddNxCnte55vNPfihiN/Aun/2SvnpePTLG+Xnv8c//nX2YuQNPVe/Btq3WRR+DgxodzJLX0vhWzU+UdZvlPWpsQUAb958sXv/Zf7w2v8b+dcT9VTfyGs+DdhlyCY+BZT3rOm77v7ah4SfRH47z9/Nko/L8sLFoxUarVBFWvE+z/N78EP8XeTuVN+8VePRCk58OvbI2COQ8ntwXbO+bTij3V2l2zthTQtIWxFeoqZArECsxKzZyy0YAXiqKv/IE4KwOptZiwUmBIhhGHot+ooIwRgjjBGAsDoMCarAt3+++Oq33xEAwXW4jiKIcQXAwMT9WVagKMt8sxUeobdgVteYUohQ3/dL257N56ZpWpYlyfKlJEmyfKWq+p4qB4+m66xpkuTxhBmWNZ5MNE0zLUtWlOnlpaCRqqrqbGZYluf7CA9D+2i2Ra1tx7kYjw3TtBYLSZZlRdF0fa5pIqam67phrFzXDwJMafqIGF23jiLTsgTjDcNY2rbn+0EYmpalG4azWul7Wdo2JuQe3PV9y3m22URxXJTlgcaEUkKp2EfCEE78KSUhQruigBCSfWcwIbcq5M5AeGh3lmVHNWsYRQSVXd8DCIZa3AX8VOn+xIS0bTuA4a744fWr746PYVlKiqwbBmuaYQ3sPxKFPRjo7jq3C7Am5I+PZ8/e/Vvvn33fj6IoThLP96/X6yAMr9dr4QnCMElTsWGLshxW78OcndXqYjyWFUU3jLPzc1mWp9PpZDq9lCQxJMrVla7rsixneZ4JVrWcN23Lu852HNOyoji+UlXTNB3HGWbDNGfz+cp1Tcuaa5rreaL4yZM+i8jvP3wwLUuSpPPRSNN1WVHOzs9ns5miKFNJutnt7lcvIURM2FDAPPeDIAjDLM83222+2dzsdmmWBWGYZplwCmJgQuIkOWKMHWZ7VxTrKCqqquW8Zow1jThFXsNj01DGSF03nA9rKAiCJEniOI6iKBAShsFnxff99Xqt6/p/ZICvnfjTpzoAAAAASUVORK5CYII='); background-size: cover; display: block;\"></span>\n  <img class=\"gatsby-resp-image-image\" alt=\"Пример диалога\" title=\"Пример диалога\" src=\"/1.11.1/static/1f83c1428db7111a94a7fba2d59bdbb4/e2c15/createPushback.png\" srcset=\"/1.11.1/static/1f83c1428db7111a94a7fba2d59bdbb4/e2c15/createPushback.png 342w\" sizes=\"(max-width: 342px) 100vw, 342px\" style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\" loading=\"lazy\" decoding=\"async\">\n    </span>\n</div>\n<p class='warn'>Поскольку идентификатор пушбэка не меняется, ссылка на метод <code class=\"language-text\">/push_{pushbackId}</code> остается доступной и для последующих рассылок.</p>","frontmatter":{"title":"","description":null},"headings":[{"value":"$pushgate.createPushback"}]}},"pageContext":{"slug":"/docs/ru/JS_API/built_in_services/pushgate/createPushback/","previous":{"fields":{"slug":"/docs/ru/JS_API/built_in_services/pushgate/pushgate/"},"frontmatter":{"title":"","description":null}},"next":{"fields":{"slug":"/docs/ru/JS_API/built_in_services/pushgate/cancelEvent/"},"frontmatter":{"title":"","description":null}}}},
    "staticQueryHashes": ["1209419333"]}