Расчёт стоимости заказа + отправка данных по REST API + email (пример реализации)
Last updated
Was this helpful?
Was this helpful?
process_data# Доступные параметры в словаре args:
# args["form_data"]["material"] - Материал (тип: string)
# args["form_data"]["width"] - Ширина в метрах (тип: string)
# args["form_data"]["length"] - Длина в метрах (тип: string)
# args["form_data"]["client_name"] - Имя (тип: string)
# args["form_data"]["phone"] - Телефон (тип: string)
# args["form_data"]["email"] - email (тип: string)
# args["form_data"]["agreement"]["value"] - значение согласия (тип: bool)
# args["form_data"]["agreement"]["consent_text"] - текст согласия (тип: string)
# args["form_data"]["agreement"]["date_agreement"] - дата согласия (тип: string)
debug("Комплексная обработка заявки")
form_data = args.get("form_data", {})
# --- 1. Получение и валидация данных ---
material = form_data.get("material", "").strip()
phone = form_data.get("phone", "").strip()
receiver_email = form_data.get("email", "").strip()
agreement = form_data.get("agreement", "")
# Безопасное преобразование в float
def to_float(value):
try:
return float(str(value).replace(",", "."))
except:
return 0
width = to_float(form_data.get("width", 0))
length = to_float(form_data.get("length", 0))
if width <= 0 or length <= 0:
debug("Некорректные размеры")
result = {
"status": "error",
"message": "Некорректные размеры"
}
else:
# --- 2. Расчёт ---
price_per_m2 = 100 # пример
area = width * length
total = round(area * price_per_m2, 2)
debug(f"Площадь: {area}")
debug(f"Стоимость: {total}")
# --- 3. Подготовка payload ---
payload = {
"material": material,
"width": width,
"length": length,
"area": area,
"total": total,
"phone": phone,
"email": receiver_email,
"agreement": agreement,
"source": "pd_form"
}
# --- 4. Отправка в API ---
try:
debug("Отправка по POST запроса...")
response = requests.post(
"https://api.company.com/orders", # ваш API-эндпоинт
json=payload
)
response.raise_for_status()
debug("POST запрос успешно отправлено")
except Exception as e:
debug(f"Ошибка REST API: {str(e)}")
# --- 5. Email (только если есть email и согласие) ---
if receiver_email and agreement.get("value", False):
try:
debug("Подготовка email")
smtp_server = "smtp.gmail.com"
smtp_port = 465
sender_email = "[email protected]" # ваш email для отправки писем
sender_password = "xxxx xxxx xxxx xxxx" # пароль приложения
subject = "Предварительный расчет стоимости"
body = (
"Здравствуйте!\n\n"
f"Материал: {material}\n"
f"Площадь: {area} м2\n"
f"Стоимость: {total} руб.\n\n"
"С вами свяжется менеджер для уточнения деталей."
)
MIMEText = email["mime"]["text"]["MIMEText"]
msg = MIMEText(body, "plain")
msg.add_header("Subject", subject)
msg.add_header("From", sender_email)
msg.add_header("To", receiver_email)
context = ssl.create_default_context()
with smtplib.SMTP_SSL(smtp_server, smtp_port, context=context) as server:
debug("Подключение к SMTP...")
server.login(sender_email, sender_password)
server.sendmail(sender_email, receiver_email, msg.as_string())
debug("Email отправлен")
except Exception as e:
debug(f"Ошибка email: {str(e)}")
else:
debug("Email не отправлен (нет email или согласия)")
# --- 6. Результат ---
result = {
"status": "success",
"total": total,
"area": area
}
{
"status": "success",
"total": 600,
"area": 6
}Ты консультант в магазине стройматериалов. Твоя задача — уточнить, какой строительный материал нужен клиенту, и затем вызвать функцию `process_data`. Не нужно уточнять никаких дополнительных параметров или задавать сопутствующие вопросы.
# Steps
1. Приветствуй клиента и прояви готовность помочь с выбором стройматериалов.
2. Узнай, какой именно материал нужен клиенту.
3. Как только клиент отвечает, вызови функцию `process_data`.
4. Заверши взаимодействие, поблагодарив клиента за его выбор.
# Output Format
Напиши ответ в формате диалога. Разговор должен быть дружелюбным, кратким и ориентированным на клиента.
# Examples
**Пример**
- Консультант: Добрый день! Чем могу помочь?
- Клиент: Мне нужен гипсокартон.
- Консультант: Отлично, сейчас всё посчитаем!
- process_data()
# Notes
- Не инициируй диалог, кроме как для приветствия и предложения помощи.
- Не уточняй количества, марки или других характеристик материалов.Форма персональных данных успешно заполнена и отправлена пользователем. Функция: process_data.
Результат:
Python Script result:
{
"status": "success",
"total": 600,
"area": 6
}1. [
2. "Комплексная обработка заявки",
3. "Площадь: 6.0",
4. "Стоимость: 600.0",
5. "Отправка в CRM...",
6. "Успешно отправлено в CRM",
7. "Подготовка email",
8. "Подключение к SMTP...",
9. "Email отправлен"
10. ]{
"material": "гипсокартон",
"width": 2,
"length": 3,
"area": 6,
"total": 600,
"phone": "79991111234",
"email": "[email protected]",
"agreement": {
"value": true,
"consent_text": "Cогласен с <a href=\"https://app.nextbot.ru/\">политикой обработки персональных данных</a>",
"date_agreement": "2026-03-23T07:44:16.924Z"
},
"source": "pd_form"
}