mirror of
https://github.com/marcogll/CAROL.git
synced 2026-01-13 21:25:16 +00:00
first commit
This commit is contained in:
143
questions/formbricks/formbricks_assitant.py
Normal file
143
questions/formbricks/formbricks_assitant.py
Normal file
@@ -0,0 +1,143 @@
|
||||
import os
|
||||
import json
|
||||
import requests
|
||||
from rich.console import Console
|
||||
from rich.prompt import Prompt
|
||||
from rich.panel import Panel
|
||||
from rich.text import Text
|
||||
from dotenv import load_dotenv
|
||||
|
||||
load_dotenv()
|
||||
|
||||
# ───────── Catppuccin Frappe ─────────
|
||||
COLORS = {
|
||||
"surface": "#414559",
|
||||
"text": "#c6d0f5",
|
||||
"blue": "#8caaee",
|
||||
"green": "#a6d189",
|
||||
"red": "#e78284",
|
||||
"yellow": "#e5c890",
|
||||
"pink": "#f4b8e4",
|
||||
}
|
||||
|
||||
console = Console(style=COLORS["text"])
|
||||
|
||||
console.print(
|
||||
Panel(
|
||||
Text("🧩 Formbricks Survey Assistant", justify="center", style=COLORS["pink"]),
|
||||
border_style=COLORS["surface"],
|
||||
)
|
||||
)
|
||||
|
||||
BASEURL = os.getenv("FORMBRICKS_BASEURL")
|
||||
API_KEY = os.getenv("FORMBRICKS_API_KEY")
|
||||
ENV_ID = os.getenv("FORMBRICKS_ENVIRONMENT_ID")
|
||||
|
||||
if not all([BASEURL, API_KEY, ENV_ID]):
|
||||
raise RuntimeError("Variables de entorno incompletas")
|
||||
|
||||
LEVEL_FILE_MAP = {
|
||||
"1": "basic_v2_formbricks.json",
|
||||
"2": "medium_v2_formbricks.json",
|
||||
"3": "advanced_v2_formbricks.json",
|
||||
}
|
||||
|
||||
def parse_survey(raw_items):
|
||||
questions = []
|
||||
welcome_card = None
|
||||
ending = None
|
||||
|
||||
for i, item in enumerate(raw_items):
|
||||
t = item.get("type")
|
||||
|
||||
if t == "welcome":
|
||||
welcome_card = {
|
||||
"enabled": True,
|
||||
"headline": item.get("headline"),
|
||||
"html": item.get("html"),
|
||||
"showResponseCount": False,
|
||||
"timeToFinish": False,
|
||||
}
|
||||
|
||||
elif t == "thankYou":
|
||||
ending = {
|
||||
"id": item.get("id", "end_default"),
|
||||
"type": "endScreen",
|
||||
"headline": item.get("headline"),
|
||||
"subheader": item.get("html"),
|
||||
}
|
||||
|
||||
else:
|
||||
q = {
|
||||
"id": item.get("id", f"q{i}"),
|
||||
"type": item.get("type"),
|
||||
"required": item.get("required", True),
|
||||
"headline": item.get("headline"),
|
||||
"shuffleOption": item.get("shuffleOption", "none"),
|
||||
"choices": [
|
||||
{
|
||||
"id": c.get("id", f"{i}_{idx}"),
|
||||
"label": c.get("label"),
|
||||
}
|
||||
for idx, c in enumerate(item.get("choices", []))
|
||||
],
|
||||
}
|
||||
questions.append(q)
|
||||
|
||||
return questions, welcome_card, ending
|
||||
|
||||
# ───────── Inputs ─────────
|
||||
company = Prompt.ask("🏭 Compañía", default="Empresa")
|
||||
level = Prompt.ask("🎚️ Nivel [1/2/3]", choices=["1", "2", "3"], default="1")
|
||||
start_date = Prompt.ask("📅 Fecha inicio (YYYY-MM-DD o vacío)", default="")
|
||||
end_date = Prompt.ask("📅 Fecha término (YYYY-MM-DD o vacío)", default="")
|
||||
|
||||
file_name = LEVEL_FILE_MAP[level]
|
||||
|
||||
with open(file_name, "r", encoding="utf-8") as f:
|
||||
raw_file = json.load(f)
|
||||
|
||||
raw_questions = raw_file.get("questions", [])
|
||||
if not raw_questions:
|
||||
raise RuntimeError("El archivo no contiene preguntas")
|
||||
|
||||
questions, welcome_card, ending = parse_survey(raw_questions)
|
||||
|
||||
title = f"{company} | Evaluacion de moldeo L{level}"
|
||||
|
||||
payload = {
|
||||
"environmentId": ENV_ID,
|
||||
"name": title,
|
||||
"status": "draft",
|
||||
"type": "link",
|
||||
"displayOption": "displayOnce",
|
||||
"languages": [],
|
||||
"questions": questions,
|
||||
}
|
||||
|
||||
if welcome_card:
|
||||
payload["welcomeCard"] = welcome_card
|
||||
if ending:
|
||||
payload["endings"] = [ending]
|
||||
|
||||
headers = {
|
||||
"Content-Type": "application/json",
|
||||
"x-api-key": API_KEY,
|
||||
}
|
||||
|
||||
console.print(Panel(f"📄 {file_name}", title="Archivo seleccionado"))
|
||||
console.print(Panel(f"📝 {title}", title="Creando encuesta (DRAFT)"))
|
||||
|
||||
response = requests.post(
|
||||
f"{BASEURL}/api/v1/management/surveys",
|
||||
json=payload,
|
||||
headers=headers,
|
||||
timeout=30,
|
||||
)
|
||||
|
||||
if response.ok:
|
||||
console.print(Panel("✅ Encuesta creada correctamente", border_style=COLORS["green"]))
|
||||
else:
|
||||
console.print(Panel("❌ Error al crear encuesta", border_style=COLORS["red"]))
|
||||
console.print(response.status_code, response.text)
|
||||
|
||||
Reference in New Issue
Block a user