# Выполнить JavaScript Callback

**Результатом работы данной команды является прием файлов в Телегам боте, отправленных пользователем.**

<div id="bkmrk-%D0%9F%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B-%D0%B4%D0%B0%D0%BD%D0%BD%D0%BE">Принцип работы данной команды:</div>- Когда данная команда запущена, ее состояние зацикливается в текущей точке и текущий и любой следующий входящий вебхук будет обрабатываться этим JavaScript кодом;
- Выйти из команды и перейти к следующей или к другому скрипту можно только с помощью возврата специального значения из JavaScript

<div id="bkmrk-%D0%94%D0%B0%D0%BD%D0%BD%D1%83%D1%8E-%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%83-%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE">Данную команду можно использовать, для:</div>- Запроса любого значения: текста, файла, фото, медиа;
- Интеграции с любой системой: машиной JSON состояний или любым NLP (зацикливая диалог на NLP), системой обработки голосовых сообщений, системной распознавания изображений.

Добавить в скрипт ее можно, выбрав пункт **Выполнить JavaScript Callback** из списка **Команд**:

[![команды.png](https://docs.metabot24.ru/uploads/images/gallery/2024-12/scaled-1680-/ZI16ElDvomnJafPV-komandy.png)](https://docs.metabot24.ru/uploads/images/gallery/2024-12/ZI16ElDvomnJafPV-komandy.png)

<div class="pointer-container" id="bkmrk-%C2%A0"><div class="pointer anim is-page-editable"><svg class="svg-icon" data-icon="link" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg><div class="input-group inline block"> <button class="button outline icon" data-clipboard-target="#pointer-url" title="Копировать ссылку" type="button"><svg class="svg-icon" data-icon="copy" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></button></div><svg class="svg-icon" data-icon="edit" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></div></div><span data-slate-fragment="JTdCJTIyb2JqZWN0JTIyJTNBJTIyZG9jdW1lbnQlMjIlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVEMCVBNCVEMSU4MyVEMCVCRCVEMCVCQSVEMSU4NiVEMCVCOCVEMCVCRSVEMCVCRCVEMCVCMCVEMCVCQiVEMSU4QyVEMCVCRCVEMSU4MyVEMSU4RSUyMCVEMCVCQSVEMCVCRSVEMCVCQyVEMCVCMCVEMCVCRCVEMCVCNCVEMSU4MyUyMCVEMCVCRSVEMSU4MiVEMCVCRiVEMSU4MCVEMCVCMCVEMCVCMiVEMCVCQSVEMCVCOCUyMCVEMSU4MiVEMCVCNSVEMCVCQSVEMSU4MSVEMSU4MiVEMCVCRSVEMCVCMiVEMCVCRSVEMCVCMyVEMCVCRSUyMCVEMSU4MSVEMCVCRSVEMCVCRSVEMCVCMSVEMSU4OSVEMCVCNSVEMCVCRCVEMCVCOCVEMSU4RiUyMCVEMCVCQyVEMCVCRSVEMCVCNiVEMCVCRCVEMCVCRSUyMCVEMCVCOCVEMSU4MSVEMCVCRiVEMCVCRSVEMCVCQiVEMSU4QyVEMCVCNyVEMCVCRSVEMCVCMiVEMCVCMCVEMSU4MiVEMSU4QyUyMCVEMCVCMiUyMCVEMCVCQiVEMSU4RSVEMCVCMSVEMCVCRSVEMCVCOSUyMCVEMSU4NyVEMCVCMCVEMSU4MSVEMSU4MiVEMCVCOCUyMCVEMCVCMiVEMCVCMCVEMSU4OCVEMCVCNSVEMCVCMyVEMCVCRSUyMCVEMCVCMSVEMCVCRSVEMSU4MiVEMCVCMC4lMjAlRDAlQUQlRDElODIlRDAlQkUlMjAlRDAlQkQlRDAlQjAlRDAlQjglRDAlQjElRDAlQkUlRDAlQkIlRDAlQjUlRDAlQjUlMjAlRDElODclRDAlQjAlRDElODElRDElODIlRDAlQkUlMjAlRDAlQjglRDElODElRDAlQkYlRDAlQkUlRDAlQkIlRDElOEMlRDAlQjclRDElODMlRDAlQjUlRDAlQkMlRDAlQjAlRDElOEYlMjAlRDAlQkElRDAlQkUlRDAlQkMlRDAlQjAlRDAlQkQlRDAlQjQlRDAlQjAlMjAlRDAlQjIlMjAlRDAlQkYlRDElODAlRDAlQkUlRDAlQjUlRDAlQkElRDElODIlRDAlQjglRDElODAlRDAlQkUlRDAlQjIlRDAlQjAlRDAlQkQlRDAlQjglRDAlQjglMjAlRDAlQjElRDAlQkUlRDElODIlRDAlQjAuJTIwJUQwJTlEJUQwJUIwJTIwJUQwJUJFJUQxJTgxJUQwJUJEJUQwJUJFJUQwJUIyJUQwJUIwJUQwJUJEJUQwJUI4JUQwJUI4JTIwJUQxJThEJUQxJTgyJUQwJUJFJUQwJUI5JTIwJUQwJUJBJUQwJUJFJUQwJUJDJUQwJUIwJUQwJUJEJUQwJUI0JUQxJThCJTIwJUQxJTgxJUQxJTgyJUQxJTgwJUQwJUJFJUQwJUI4JUQxJTgyJUQxJTgxJUQxJThGJTIwJUQwJUIxJUQwJUJFJUQwJUJCJUQxJThDJUQxJTg4JUQwJUI4JUQwJUJEJUQxJTgxJUQxJTgyJUQwJUIyJUQwJUJFJTIwJUQxJTgwJUQwJUIwJUQwJUI3JUQwJUIzJUQwJUJFJUQwJUIyJUQwJUJFJUQxJTgwJUQwJUJEJUQxJThCJUQxJTg1JTIwJUQwJUI0JUQwJUI4JUQwJUIwJUQwJUJCJUQwJUJFJUQwJUIzJUQwJUJFJUQwJUIyLiUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTJDJTIyc2VsZWN0aW9ucyUyMiUzQSU1QiU1RCU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMjkyNjFkNDI0NTM4NDQwY2M4NTQ4YWI5OTRjNGU1YjM2JTIyJTdEJTVEJTJDJTIya2V5JTIyJTNBJTIyNTRjODk3YzZmNWRkNDE3NmI4ZDZlN2M3Y2VjYjQyZjklMjIlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjJhN2I4MzNlNzZjMWE0YjNhOTc5MDYwMTk4NTA2ZmJlZiUyMiU3RA==">После выбора данной команды в списке **Команд** <span class="r-crgep1 r-b88u0q">перед вами откроется диалоговое окно настройки свойств:</span></span>

[![image.png](https://docs.metabot24.ru/uploads/images/gallery/2023-02/scaled-1680-/pYZTq9d2lVByG5Bk-image.png)](https://docs.metabot24.ru/uploads/images/gallery/2023-02/pYZTq9d2lVByG5Bk-image.png)

<p class="callout info align-left"><span data-slate-fragment="JTdCJTIyb2JqZWN0JTIyJTNBJTIyZG9jdW1lbnQlMjIlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVEMCVBNCVEMSU4MyVEMCVCRCVEMCVCQSVEMSU4NiVEMCVCOCVEMCVCRSVEMCVCRCVEMCVCMCVEMCVCQiVEMSU4QyVEMCVCRCVEMSU4MyVEMSU4RSUyMCVEMCVCQSVEMCVCRSVEMCVCQyVEMCVCMCVEMCVCRCVEMCVCNCVEMSU4MyUyMCVEMCVCRSVEMSU4MiVEMCVCRiVEMSU4MCVEMCVCMCVEMCVCMiVEMCVCQSVEMCVCOCUyMCVEMSU4MiVEMCVCNSVEMCVCQSVEMSU4MSVEMSU4MiVEMCVCRSVEMCVCMiVEMCVCRSVEMCVCMyVEMCVCRSUyMCVEMSU4MSVEMCVCRSVEMCVCRSVEMCVCMSVEMSU4OSVEMCVCNSVEMCVCRCVEMCVCOCVEMSU4RiUyMCVEMCVCQyVEMCVCRSVEMCVCNiVEMCVCRCVEMCVCRSUyMCVEMCVCOCVEMSU4MSVEMCVCRiVEMCVCRSVEMCVCQiVEMSU4QyVEMCVCNyVEMCVCRSVEMCVCMiVEMCVCMCVEMSU4MiVEMSU4QyUyMCVEMCVCMiUyMCVEMCVCQiVEMSU4RSVEMCVCMSVEMCVCRSVEMCVCOSUyMCVEMSU4NyVEMCVCMCVEMSU4MSVEMSU4MiVEMCVCOCUyMCVEMCVCMiVEMCVCMCVEMSU4OCVEMCVCNSVEMCVCMyVEMCVCRSUyMCVEMCVCMSVEMCVCRSVEMSU4MiVEMCVCMC4lMjAlRDAlQUQlRDElODIlRDAlQkUlMjAlRDAlQkQlRDAlQjAlRDAlQjglRDAlQjElRDAlQkUlRDAlQkIlRDAlQjUlRDAlQjUlMjAlRDElODclRDAlQjAlRDElODElRDElODIlRDAlQkUlMjAlRDAlQjglRDElODElRDAlQkYlRDAlQkUlRDAlQkIlRDElOEMlRDAlQjclRDElODMlRDAlQjUlRDAlQkMlRDAlQjAlRDElOEYlMjAlRDAlQkElRDAlQkUlRDAlQkMlRDAlQjAlRDAlQkQlRDAlQjQlRDAlQjAlMjAlRDAlQjIlMjAlRDAlQkYlRDElODAlRDAlQkUlRDAlQjUlRDAlQkElRDElODIlRDAlQjglRDElODAlRDAlQkUlRDAlQjIlRDAlQjAlRDAlQkQlRDAlQjglRDAlQjglMjAlRDAlQjElRDAlQkUlRDElODIlRDAlQjAuJTIwJUQwJTlEJUQwJUIwJTIwJUQwJUJFJUQxJTgxJUQwJUJEJUQwJUJFJUQwJUIyJUQwJUIwJUQwJUJEJUQwJUI4JUQwJUI4JTIwJUQxJThEJUQxJTgyJUQwJUJFJUQwJUI5JTIwJUQwJUJBJUQwJUJFJUQwJUJDJUQwJUIwJUQwJUJEJUQwJUI0JUQxJThCJTIwJUQxJTgxJUQxJTgyJUQxJTgwJUQwJUJFJUQwJUI4JUQxJTgyJUQxJTgxJUQxJThGJTIwJUQwJUIxJUQwJUJFJUQwJUJCJUQxJThDJUQxJTg4JUQwJUI4JUQwJUJEJUQxJTgxJUQxJTgyJUQwJUIyJUQwJUJFJTIwJUQxJTgwJUQwJUIwJUQwJUI3JUQwJUIzJUQwJUJFJUQwJUIyJUQwJUJFJUQxJTgwJUQwJUJEJUQxJThCJUQxJTg1JTIwJUQwJUI0JUQwJUI4JUQwJUIwJUQwJUJCJUQwJUJFJUQwJUIzJUQwJUJFJUQwJUIyLiUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTJDJTIyc2VsZWN0aW9ucyUyMiUzQSU1QiU1RCU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMjkyNjFkNDI0NTM4NDQwY2M4NTQ4YWI5OTRjNGU1YjM2JTIyJTdEJTVEJTJDJTIya2V5JTIyJTNBJTIyNTRjODk3YzZmNWRkNDE3NmI4ZDZlN2M3Y2VjYjQyZjklMjIlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjJhN2I4MzNlNzZjMWE0YjNhOTc5MDYwMTk4NTA2ZmJlZiUyMiU3RA==">С пунктом **Использовать условие** вы можете познакомиться на странице </span>**[Условие выполнения команды JS](https://docs.metabot24.ru/books/3-instrukciya-polzovatelya/page/uslovie-vypolneniya-komandy-js "Условие выполнения команды JS")**<span data-slate-fragment="JTdCJTIyb2JqZWN0JTIyJTNBJTIyZG9jdW1lbnQlMjIlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVEMCVBNCVEMSU4MyVEMCVCRCVEMCVCQSVEMSU4NiVEMCVCOCVEMCVCRSVEMCVCRCVEMCVCMCVEMCVCQiVEMSU4QyVEMCVCRCVEMSU4MyVEMSU4RSUyMCVEMCVCQSVEMCVCRSVEMCVCQyVEMCVCMCVEMCVCRCVEMCVCNCVEMSU4MyUyMCVEMCVCRSVEMSU4MiVEMCVCRiVEMSU4MCVEMCVCMCVEMCVCMiVEMCVCQSVEMCVCOCUyMCVEMSU4MiVEMCVCNSVEMCVCQSVEMSU4MSVEMSU4MiVEMCVCRSVEMCVCMiVEMCVCRSVEMCVCMyVEMCVCRSUyMCVEMSU4MSVEMCVCRSVEMCVCRSVEMCVCMSVEMSU4OSVEMCVCNSVEMCVCRCVEMCVCOCVEMSU4RiUyMCVEMCVCQyVEMCVCRSVEMCVCNiVEMCVCRCVEMCVCRSUyMCVEMCVCOCVEMSU4MSVEMCVCRiVEMCVCRSVEMCVCQiVEMSU4QyVEMCVCNyVEMCVCRSVEMCVCMiVEMCVCMCVEMSU4MiVEMSU4QyUyMCVEMCVCMiUyMCVEMCVCQiVEMSU4RSVEMCVCMSVEMCVCRSVEMCVCOSUyMCVEMSU4NyVEMCVCMCVEMSU4MSVEMSU4MiVEMCVCOCUyMCVEMCVCMiVEMCVCMCVEMSU4OCVEMCVCNSVEMCVCMyVEMCVCRSUyMCVEMCVCMSVEMCVCRSVEMSU4MiVEMCVCMC4lMjAlRDAlQUQlRDElODIlRDAlQkUlMjAlRDAlQkQlRDAlQjAlRDAlQjglRDAlQjElRDAlQkUlRDAlQkIlRDAlQjUlRDAlQjUlMjAlRDElODclRDAlQjAlRDElODElRDElODIlRDAlQkUlMjAlRDAlQjglRDElODElRDAlQkYlRDAlQkUlRDAlQkIlRDElOEMlRDAlQjclRDElODMlRDAlQjUlRDAlQkMlRDAlQjAlRDElOEYlMjAlRDAlQkElRDAlQkUlRDAlQkMlRDAlQjAlRDAlQkQlRDAlQjQlRDAlQjAlMjAlRDAlQjIlMjAlRDAlQkYlRDElODAlRDAlQkUlRDAlQjUlRDAlQkElRDElODIlRDAlQjglRDElODAlRDAlQkUlRDAlQjIlRDAlQjAlRDAlQkQlRDAlQjglRDAlQjglMjAlRDAlQjElRDAlQkUlRDElODIlRDAlQjAuJTIwJUQwJTlEJUQwJUIwJTIwJUQwJUJFJUQxJTgxJUQwJUJEJUQwJUJFJUQwJUIyJUQwJUIwJUQwJUJEJUQwJUI4JUQwJUI4JTIwJUQxJThEJUQxJTgyJUQwJUJFJUQwJUI5JTIwJUQwJUJBJUQwJUJFJUQwJUJDJUQwJUIwJUQwJUJEJUQwJUI0JUQxJThCJTIwJUQxJTgxJUQxJTgyJUQxJTgwJUQwJUJFJUQwJUI4JUQxJTgyJUQxJTgxJUQxJThGJTIwJUQwJUIxJUQwJUJFJUQwJUJCJUQxJThDJUQxJTg4JUQwJUI4JUQwJUJEJUQxJTgxJUQxJTgyJUQwJUIyJUQwJUJFJTIwJUQxJTgwJUQwJUIwJUQwJUI3JUQwJUIzJUQwJUJFJUQwJUIyJUQwJUJFJUQxJTgwJUQwJUJEJUQxJThCJUQxJTg1JTIwJUQwJUI0JUQwJUI4JUQwJUIwJUQwJUJCJUQwJUJFJUQwJUIzJUQwJUJFJUQwJUIyLiUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTJDJTIyc2VsZWN0aW9ucyUyMiUzQSU1QiU1RCU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMjkyNjFkNDI0NTM4NDQwY2M4NTQ4YWI5OTRjNGU1YjM2JTIyJTdEJTVEJTJDJTIya2V5JTIyJTNBJTIyNTRjODk3YzZmNWRkNDE3NmI4ZDZlN2M3Y2VjYjQyZjklMjIlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjJhN2I4MzNlNzZjMWE0YjNhOTc5MDYwMTk4NTA2ZmJlZiUyMiU3RA==">. </span></p>

Следующие поля являются обязательными:

- **Сообщение-вопрос отправляемое до старта данной команды** — сообщение которое будет отправлено в мессенджер при старте данной команды, поле обязательно для заполнения ТОЛЬКО, если выключено поле **Запустить Callback сразу при старте этой команды**;
- **Сообщение при возникновении ошибки** — сообщение которое будет отправлено в мессенджер при возникновении ошибки;
- **Запустить Callback сразу при старте этой команды** — если поле неактивно, то JavaScript код запустится только после того как пользователь получит **Сообщение-вопрос отправляемое до старта данной команды** в мессенджер и что-то ответит;

<p class="callout warning">Если поле активно и это первый запуск **JavaScript Callback данной команды**, то в **JavaScript** будет установлена в **true** системная предопределенная переменная **isFirstImmediateCall**, во всех других случаях **isFirstImmediateCall** устанавливается в **false**. Это необходимо, чтобы можно было проинициализировать компонент и, например, выслать текст вопроса или отправить изначально меню и т.д.</p>

- **JavaScript Callback** — здесь указывается исходный код вашего JavaScript компонента.

По кнопке **Создать** как итог команда появится в редакторе скрипта:

[![image.png](https://docs.metabot24.ru/uploads/images/gallery/2023-02/scaled-1680-/MF3NEyu8n6ukv4jY-image.png)](https://docs.metabot24.ru/uploads/images/gallery/2023-02/MF3NEyu8n6ukv4jY-image.png)

### Возвращаемые значения

JavaScript Callback всегда должен возвращать данные с помощью **«return»** в определенном формате:

##### Для завершения инициализации

- **return null**.

Используется, чтобы платформа ничего не делала со своей стороны, ожидая ответа пользователя. Вместо **retrurn null** можно ничего не указывать после ключевого слова **return**.

##### Для прерывания цикла

- **return true**;
- **return { "result": true ... другие параметры }**;
- **return { "break": true ... другие параметры }**.

Используется для выхода из замыкания и переходу к следующей команде текущего скрипта (если не указан параметр для перехода к другому скрипту).

<p class="callout warning">Прерывание с помощью **throw new Error("break")** недопустимо, в таком случае JS прервется, но из зацикливания не выйдет, т.е. будет распознано как **return null.**</p>

<div id="bkmrk-%D0%9F%D0%BE%D0%B4-%22%D0%B4%D1%80%D1%83%D0%B3%D0%B8%D0%BC%D0%B8-%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82">Под **"другими параметрами"** здесь подразумевается, что можно указать параметры в JSON-объекте, на которые платформа умеет реагировать. На данный момент для **"result": true**, можно указывать следующие параметры:</div>- **"run\_script\_by\_code": "код\_вашего скрипта"** — если указан этот параметр, то выполняется выход из замыкания и переход к указанному скрипту по коду.

##### Для повторения цикла

- **return false**;
- **{ "result": false ... другие параметры }**.

Используется для завершения обработки JavaScript (выхода из JavaScript), без прерывания зацикливания. Callback продолжит выполнение цикла и при приеме любого входящего сообщения мы опять попадем в JavaScript код данной команды (если не указан параметр для перехода к другому скрипту).

<div id="bkmrk-%D0%9F%D0%BE%D0%B4-%22%D0%B4%D1%80%D1%83%D0%B3%D0%B8%D0%BC%D0%B8-%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82-0">Под **"другими параметрами"** здесь подразумевается, что можно указать параметры в JSON-объекте, на которые платформа умеет реагировать. На данный момент для **"result": false**, можно указывать следующие параметры:</div>- **"fallback": "текст вашего фолбэка"** — используется для вывода вместе с фолбэком текста-объяснения;
- **"run\_script\_by\_code": "код\_вашего скрипта"** — используется для запуска другого скрипта по коду, если параметр передан, то fallback и повтор вопроса выводиться не будут;
- **"is\_repeat\_prompt": true / false** — выводить или нет повтор вопроса. Повтор вопроса выводится только, если он указан в настройках команды.