Цепочки

Python-код

Кратко

Блок 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}}
На этой странице

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

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

#Настройки

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

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

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

ПеременнаяЧто содержит
last_message (или lastMessage)Последнее сообщение клиента
ai_result (или aiResult)Результат AI-обработки
name / clientNameИмя клиента
phoneТелефон
emailEmail
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