# Python

{% hint style="success" %}
Если нужна разработка скрипта под вашу задачу - то обращайтесь к [нам](https://nextbot.bitrix24site.ru/dev/)
{% endhint %}

## Основная информация

{% hint style="warning" %}
Для использования Python Script необходимо приобрести подписку уровня **Бизнес**.

Вызов Python Script тарифицируется следующим образом

* 0.01 botcoin за вызов - при выключенном режиме отладки
* 0.05 botcoin за вызов - при включенном режиме отладки
  {% endhint %}

Функция может выполнять Python-скрипты для различных задач, например: отправка запросов по [REST API](/functional/functions/sending-result/python/ispolzovanie-rest-api.md), [чтение или запись в Google Таблицы](/functional/functions/sending-result/python/podklyuchenie-i-rabota-s-google-tablicam.md) и т.д.

<figure><img src="/files/MuX2fwGICYMEeT8p14OV" alt=""><figcaption></figcaption></figure>

Используется **RestrictedPython**, доступны только встроенные библиотеки. Подключение сторонних библиотек через `import` отключено.

**Доступные возможности:**

{% code fullWidth="false" %}

```python
# Математика: abs, round, pow, sum, max, min, divmod, math (модуль)
# Типы данных: bool, int, float, str, chr, ord, bin, oct, hex
# Структуры: dict, list, tuple, set, frozenset, len, sorted, reversed, any, all
# Итерация: range, enumerate, zip, iter, next, filter, map
# Операторы присваивания: +=, -=, *=, /=, //=, %=, **=, <<=, >>=, &=, ^=, |=
# HTTP: requests.get(), requests.post(), requests.put(), requests.delete()
# JSON: json.loads(), json.dumps()
# Кодирование: base64 (модуль) - для кодирования/декодирования в base64
# Хеширование: hashlib (модуль) - для создания хешей (md5, sha1, sha256 и др.)
# Работа с CSV: csv (модуль) - для чтения/записи CSV файлов
# Структуры данных: collections (модуль) - Counter, defaultdict, deque и др.
# Функциональное программирование: itertools, functools (модули)
# Регулярные выражения: re (модуль)
# Дата и время: datetime (модуль), time (модуль), dateutil (модуль)
# Случайные числа: random (модуль)
# Статистика: statistics (модуль)
# URL обработка: urllib.parse (модуль)
# Логирование: debug() - для отладочных сообщений
```

{% endcode %}

**Работа с аргументами**

Параметры функции доступны в скрипте через словарь `args`.<br>

<figure><img src="/files/ET2v5sxjSrtH3YmUcglc" alt="" width="563"><figcaption></figcaption></figure>

Например, если у вас в функции есть переменная `event_type`, вы можете передать её значение в скрипт следующим образом:

```python
event_type = args.get("event_type", "")
```

## Пользовательские переменные в `args`

Если у агента созданы пользовательские переменные, они тоже передаются в `Python Script`.

Они доступны в словаре `args` по следующим путям:

```python
# Пользовательские переменные агента в args["variables"]["agent"]:
# args["variables"]["agent"]["Unique_Agent_ID"] - ID Агента: Уникальный ID Агента (тип: string)

# Пользовательские переменные диалога в args["variables"]["dialog"]:
# args["variables"]["dialog"]["ClientName"] - Имя Клиента: Переменная для имени клиента (тип: string)
# args["variables"]["dialog"]["Order_ID"] - Номер заказа: Номер заказа (тип: number)
```

На практике удобнее сначала получить оба словаря, а потом обращаться к нужным ключам:

```python
agent_vars = args.get("variables", {}).get("agent", {})
dialog_vars = args.get("variables", {}).get("dialog", {})

agent_id = agent_vars.get("Unique_Agent_ID", "")
client_name = dialog_vars.get("ClientName", "")
order_id = dialog_vars.get("Order_ID", 0)
```

Такой подход особенно удобен, если вы хотите передавать пользовательские переменные в `Custom API`, CRM или использовать их в собственной логике внутри скрипта.

**Обязательная переменная `result`**

В скрипте обязательно должна быть переменная `result`.\
Содержимое этой переменной будет доступно вашему ИИ-ассистенту. Пример:

```python
result = {'status': 'success',
          'data': received_data # например массив с полученными данными
          }
```

В этом случае ИИ-ассистент получит результат выполнения функции и доступ к данным.

***

## Тестирование кода

Вы можете протестировать код перед запуском.\
Если необходимо — включите режим отладки и нажмите "Сохранить".

{% hint style="info" %}
В режиме отладки выводится больше логов. Всё, что обёрнуто в `debug()`, будет отображаться в журнале выполнения.

Тестирование кода также тарифицируется.
{% endhint %}

Чтобы протестировать код:

нажмите "Тестировать код" и прокрутите страницу вниз

1. Нажмите **"Тестировать код"**

<figure><img src="/files/MuX2fwGICYMEeT8p14OV" alt=""><figcaption></figcaption></figure>

1. Прокрутите страницу вниз
2. В разделе **"Тестовые аргументы"** укажите необходимые значения переменных функции<br>

   <figure><img src="/files/O0eQ3I5ryNWoZRj10gxY" alt=""><figcaption></figcaption></figure>
3. Нажмите "Запустить тест".

<figure><img src="/files/GrCcOcEfUriElklf1W1y" alt=""><figcaption><p>Результат с включенным режимом отладки</p></figcaption></figure>

<figure><img src="/files/d8dK4wFJE24I8SrlT8dY" alt=""><figcaption><p>Результат без режима отладки</p></figcaption></figure>


---

# 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://doc.nextbot.ru/functional/functions/sending-result/python.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.
