# Примеры плагинов

### Пример 1. Общий плагин (скрипт общего плагина)

Полное имя библиотеки «клеится» из трех составляющих:

* Общий плагин (Common);
* Название плагина «Bot»;
* Скрипт «Commands».

Подключается такая библиотеки с помощью кода

```
require('Common.Bot.Commands');
```

После подключения, в JavaScript автоматически будет доступна переменная *CommonBotCommands*

К методам *CommonBotCommands* можно обращаться, например, для отправки сообщения в мессенджер из JavaScript:

```
CommonBotCommands.SendText('Текст отправленный из V8');
```

Полный список команд каждой библиотеки выходит за рамки данной документации и может постоянно дополняться, для этого смотрите отдельную документацию.

{% hint style="warning" %}
В данном примере речь идет именно об общей библиотеке (Common), внутри которой уже описан специальный объект, который можно использовать с помощью методов, **чтобы добиться такого же варианта использования вы должны самостоятельно описать свой объект на JavaScript**. Оформление в виде JavaScript объекта при создании вашего собственного плагина бизнеса не является обязательным, за счет того что ваши скрипты будут подключаться в виде сниппетов.&#x20;

**Вы можете просто описать любые переменные и функции в вашей библиотеке и обращаться к ним по имени**
{% endhint %}

{% hint style="danger" %}
**ДЛЯ БИБЛИОТЕК УРОВНЯ БИЗНЕСА автоматически создаваемые переменные-объекты не доступны (или доступны только в тех библиотеках, которые для вас создаст команда Метабот).**
{% endhint %}

Отметим, что существуют другие библиотеки, например, такие как *moment.js*. Подключение и использование таких библиотек отличается от использования библиотек созданных на платформе.&#x20;

Например, для *moment.js*, не нужно указывать три «составляющие» названия скрипта (уровень доступа, плагин и скрипт).&#x20;

Для moment.js мы явно объявляем переменную и «экспортируем в нее библиотеку»

```
let moment = require('moment');
```

Подключение различных библиотек может отличаться и зависит от реализации самой библиотеки. Но, в основном как подключать и будет ли доступна автоматически переменная-объект понятно из названия библиотеки (если при подключении нет указания уровня доступа, то скорее всего это *OpenSource* библиотека).

{% hint style="warning" %}
Если вы подключаете к одному скрипту несколько сниппетов, то **переменные объявленные внутри каждого из сниппетов не должны пересекаться между собой** по имени, а также **переменные объявленные в сниппете и вашем скрипте, к которому вы подключаете сниппет не должны пересекаться.**
{% endhint %}

### **Пример 2. Плагин бизнеса (скрипт вашего плагина)**

В разделе **Плагины Бизнеса** создадим новый плагин для формирования текста, который мы будет отправлять пользователю с помощью атрибутов бота.

![](/files/zlhvUzDAeMT2Tf8S3lU6)

Заполним поля формы, пример показан ниже на рисунке, далее сохраним форму.

![](/files/Q0YzW2GIiJPXnqnCWlTf)

Далее, перейдем в скрипты плагина.

![](/files/CEEjkWPXec9po0IBdXSb)

Создадим новый скрипт

![](/files/07ZoOmhwzNiFRax2UFMF)

Заполните поля формы, пример приведен ниже на рисунке. Укажите в исходном коде скрипта:

```
const greetMsg = 'Привет, ' + lead.getData('name') + '!';
memory.setAttr("greet", greetMsg);
```

Здесь мы сохраняем текст приветствия в memory (временном атрибуте бота).

![](/files/yUwA1Pe4CkvZqoxoMyIH)

Полное имя библиотеки «клеится» из трех составляющих:

* Плагин бизнеса (Business);
* Название плагина «Notifications»;
* Скрипт «HelloLead».

Подключается с помощью кода

```
snippet('Business.Notifications.HelloLead');
```

![](/files/lKOlwKvJNEnBuoqTmjGS)

Для проверки работы плагина, в скрипт бота необходимо добавить две команды:

* Выполнить JavaScript, с следующим содержимым:

```
snippet('Business.Notifications.HelloLead');
```

Здесь мы подключаем сниппет, для заполнения атрибута (макропеременной) во временной памяти бота.

* Отправить текст, c следующим содержимым:

```
{{ &$greet }}
```

&#x20;В содержимом использована макропеременная, текст который будет отправлен в мессенджер.

![](/files/nFBRoDpqaGyVhPtjlCo6)

Результат работы скрипта в телеграм:

![](/files/c713WGKGaTzHdoicvG5b)

### **Пример 3. Использование общего плагина в плагине бизнеса**

Модифицируем пример 2 так, чтобы текст отправлялся не с помощью команды **Отправить текст**, а прям из JS кода плагина.

![](/files/21wwubgb0gwlG7sK8Zmx)

В исходном коде скрипта укажем:

```
require('Common.Bot.Commands');
const greetMsg = 'Привет, ' + lead.getData('name') + '!';
CommonBotCommands.sendText(greetMsg);
```

![](/files/0MZomXRWt3AhwgvOoyTG)

Удалим команду **Отправить текст**, команду **Выполнить JavaScript** оставляем без изменений.

![](/files/tPhdS3CuHgcTEJPAwaDu)

В скрипте должна остаться одна команда.

![](/files/WZBzSDNj8QGSd8BI4mVp)

Результат работы данного скрипта будет идентичным примеру 2:

![](/files/00dwifYS7ytdz8h0ZJxq)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://metabot.gitbook.io/documentation/plaginy-metabot24/primery-plaginov.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
