---
title: "Блок «Python-код» в цепочке: скрипты в песочнице | tuk-tuk.online"
nav_title: "Python-код"
url: https://docs.tuk-tuk.online/chains/blocks/python-code
markdown: https://docs.tuk-tuk.online/chains/blocks/python-code.md
section: "Блоки"
description: "Блок PYTHON_CODE: скрипт с доступом к переменным цепочки, результат через переменную result, разрешённые и запрещённые модули, таймаут 10 секунд, вывод до 256 КБ."
keywords: ["Python бот", "PYTHON_CODE блок", "скрипт в боте", "песочница Python", "код автоматизация", "Python цепочка", "программирование бот"]
lang: ru
product: tuk-tuk.online
app: https://lk.tuk-tuk.online
api_base: https://back.tuk-tuk.online
---

> [!AI] Кратко
> Блок PYTHON_CODE выполняет Python-скрипт в песочнице с доступом к переменным цепочки; результат возвращается через переменную result и попадает в {{pythonResult}} и {{python_N}}.
>
> - Таймаут до 10 секунд, размер вывода до 256 КБ
> - Переменные в скрипте: last_message, ai_result, name, phone, email, client_identifier, channel_type, custom_field_ИМЯ, aiResult_N, python_N, webhook_N, var_N
> - Разрешённые модули: json, re, math, datetime, string, random, hashlib
> - Запрещены файловая система, сеть, базы данных, subprocess/threading, eval/exec, pickle
> - После блока {{lastMessage}} равен {{pythonResult}}
>
> Связанные страницы: https://docs.tuk-tuk.online/chains/blocks, https://docs.tuk-tuk.online/chains/blocks/webhook, https://docs.tuk-tuk.online/chains/blocks/set-variable, https://docs.tuk-tuk.online/chains/blocks/ai-process

# Python-код

Блок выполняет Python-скрипт внутри цепочки. Скрипт читает переменные контекста (сообщение клиента, результат AI, ответ вебхука), обрабатывает их и возвращает результат через переменную `result`. Нужен, когда стандартных блоков не хватает: вычисления, форматирование, разбор JSON.

Скрипт запускается в изолированной песочнице без доступа к файлам, сети и системным вызовам.

## Настройки

| Поле | Описание |
|---|---|
| Код | Python-скрипт. Результат записывается в переменную `result` |
| Таймаут | Максимальное время выполнения, до 10 секунд |

## Доступные переменные

Внутри скрипта доступны переменные цепочки:

| Переменная | Что содержит |
|---|---|
| `last_message` (или `lastMessage`) | Последнее сообщение клиента |
| `ai_result` (или `aiResult`) | Результат AI-обработки |
| `name` / `clientName` | Имя клиента |
| `phone` | Телефон |
| `email` | Email |
| `client_identifier` | Уникальный идентификатор клиента |
| `channel_type` | Тип канала |
| `custom_field_ИМЯ` | Кастомные поля диалога |
| `aiResult_N` | Результат AI-блока номер N |
| `python_N` | Результат Python-блока номер N |
| `webhook_N` | Ответ вебхука номер N |
| `var_N` | Пользовательская переменная номер N |

## Как вернуть результат

Присвойте значение переменной `result`:

```python
result = "Привет, " + name + "!"
```

```python
price = 5000
discount = 0.1
result = str(price * (1 - discount))  # "4500.0"
```

```python
import json
data = json.loads(ai_result)
result = data.get("summary", "Нет данных")
```

## Пример

Извлечение email из текста:

```python
import re
match = re.search(r'[\w.-]+@[\w.-]+', last_message)
result = match.group(0) if match else "не найден"
```

Форматирование суммы:

```python
price = int(last_message)
result = f"{price:,}".replace(",", " ") + " ₽"
# 5000 -> "5 000 ₽"
```

Разбор JSON из ответа вебхука:

```python
import json
data = json.loads(webhook_1 or '{}')
status = data.get("status", "неизвестно")
result = f"Статус заказа: {status}"
```

Дата на завтра:

```python
from datetime import datetime, timedelta
tomorrow = datetime.now() + timedelta(days=1)
result = tomorrow.strftime("%d.%m.%Y")
```

## Что сохраняется в контексте

| Переменная | Значение |
|---|---|
| `{{pythonResult}}` | Результат последнего Python-блока |
| `{{python_N}}` | Результат Python-блока номер N |
| `{{lastMessage}}` | После блока равен `{{pythonResult}}` |

## Ограничения

| Параметр | Значение |
|---|---|
| Таймаут | До 10 секунд |
| Размер вывода | До 256 КБ |
| Импорты | Только безопасные модули стандартной библиотеки |

Разрешённые модули: `json`, `re`, `math`, `datetime`, `string`, `random`, `hashlib`, плюс базовый Python (циклы, условия, списки, словари).

Запрещено:

| Категория | Что нельзя |
|---|---|
| Файловая система | `os`, `sys`, `pathlib`, `glob`, `tempfile`, `open()` |
| Сеть | `socket`, `http`, `urllib`, `requests`, `ftplib`, `smtplib` |
| Базы данных | `sqlite3`, `mysql`, `psycopg2`, `pymongo`, `redis` |
| Системные вызовы | `subprocess`, `ctypes`, `multiprocessing`, `threading` |
| Опасные функции | `eval()`, `exec()`, `compile()`, `getattr()`, `__import__()` |
| Сериализация | `pickle`, `shelve`, `marshal` |

> [!TIP] Для HTTP-запросов используйте блок [Webhook](https://docs.tuk-tuk.online/chains/blocks/webhook), а его ответ разбирайте в Python через `webhook_N`.
