Блок выполняет Python-скрипт внутри цепочки. Скрипт читает переменные контекста (сообщение клиента, результат AI, ответ вебхука), обрабатывает их и возвращает результат через переменную result. Нужен, когда стандартных блоков не хватает: вычисления, форматирование, разбор JSON.
Скрипт запускается в изолированной песочнице без доступа к файлам, сети и системным вызовам.
#Настройки
| Поле | Описание |
|---|---|
| Код | Python-скрипт. Результат записывается в переменную result |
| Таймаут | Максимальное время выполнения, до 10 секунд |
#Доступные переменные
Внутри скрипта доступны переменные цепочки:
| Переменная | Что содержит |
|---|---|
last_message (или lastMessage) | Последнее сообщение клиента |
ai_result (или aiResult) | Результат AI-обработки |
name / clientName | Имя клиента |
phone | Телефон |
email | |
client_identifier | Уникальный идентификатор клиента |
channel_type | Тип канала |
custom_field_ИМЯ | Кастомные поля диалога |
aiResult_N | Результат AI-блока номер N |
python_N | Результат Python-блока номер N |
webhook_N | Ответ вебхука номер N |
var_N | Пользовательская переменная номер N |
#Как вернуть результат
Присвойте значение переменной result:
result = "Привет, " + name + "!"price = 5000
discount = 0.1
result = str(price * (1 - discount)) # "4500.0"import json
data = json.loads(ai_result)
result = data.get("summary", "Нет данных")#Пример
Извлечение email из текста:
import re
match = re.search(r'[\w.-]+@[\w.-]+', last_message)
result = match.group(0) if match else "не найден"Форматирование суммы:
price = int(last_message)
result = f"{price:,}".replace(",", " ") + " ₽"
# 5000 -> "5 000 ₽"Разбор JSON из ответа вебхука:
import json
data = json.loads(webhook_1 or '{}')
status = data.get("status", "неизвестно")
result = f"Статус заказа: {status}"Дата на завтра:
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 |
