הקוד (ai) אמור לעשות login, להעלות קובץ מהמחשב, logout
אשמח עם משהו שמבין יעבור על זה תודה רבה
DOWNLOAD_FOLDER = 'downloads'
os.makedirs(DOWNLOAD_FOLDER, exist_ok=True)
# --- משתנים גלובליים עבור ה-API ---
YEMOT_API_USERNAME = os.getenv("YEMOT_USERNAME")
YEMOT_API_PASSWORD = os.getenv("YEMOT_PASSWORD")
YEMOT_API_URL = "https://www.call2all.co.il/ym/api"
# -------------------------------------------------------------------
# בדיקת תלות - האם FFmpeg מותקן?
# -------------------------------------------------------------------
if not shutil.which('ffmpeg'):
print("--------------------------------------------------")
print("אזהרה: FFmpeg לא נמצא במערכת שלך.")
print("המרת קבצים ל-WAV לא תעבוד ללא FFmpeg.")
print("אנא התקнן אותו והוסף אותו ל-PATH של המערכת.")
print("--------------------------------------------------")
# -------------------------------------------------------------------
# חלק 1: פונקציות עזר (כולל פונקציית API חדשה)
# -------------------------------------------------------------------
def process_yemot_api(local_wav_path, remote_filename_url):
"""
Handles the entire Yemot API process: Login, Upload, and Logout.
"""
if not YEMOT_API_USERNAME or not YEMOT_API_PASSWORD:
print("שגיאה: שם משתמש או סיסמה של ימות המשיח לא הוגדרו בקובץ .env")
return False
session = requests.Session() # שימוש ב-Session כדי לשמור על ה-cookies בין הבקשות
# --- שלב 1: Login ---
print("שלב 1: מתחבר ל-API של ימות המשיח...")
try:
login_params = {"username": YEMOT_API_USERNAME, "password": YEMOT_API_PASSWORD}
response = session.get(f"{YEMOT_API_URL}/Login", params=login_params, timeout=15)
response.raise_for_status()
response_text = response.text
if "err=" in response_text:
print(f"שגיאת התחברות ל-API: {response_text.split('=')[1]}")
return False
token = response_text.split("=")[1]
print(f"התחברות הצליחה. טוקן: {token}")
except requests.exceptions.RequestException as e:
print(f"שגיאת רשת בעת התחברות: {e}")
return False
# --- שלב 2: Upload File ---
print(f"שלב 2: מעלה את הקובץ '{local_wav_path}'...")
# ימות המשיח דורשת שם קובץ ללא סיומת, וללא תווים מיוחדים.
# ה-URL יכול להכיל תווים כמו ':', '/', '?', '='. נחליף אותם בתו בטוח.
safe_remote_name = remote_filename_url.replace("https://", "").replace("/", "_").replace("?", "_").replace("=", "_").replace(".","_")
# הגדרת נתיב היעד במערכת: IVR2/8/שם_הקובץ
target_path = f"IVR2:8/{safe_remote_name}"
upload_params = {
"token": token,
"what": "ivr_sync",
"path": target_path,
"file_name": safe_remote_name
}
try:
with open(local_wav_path, 'rb') as f:
files = {'file': (f'{safe_remote_name}.wav', f, 'audio/wav')}
response = session.post(f"{YEMOT_API_URL}/UploadFile", params=upload_params, files=files, timeout=60) # Timeout ארוך יותר להעלאה
response.raise_for_status()
response_text = response.text
if "err=" in response_text:
print(f"שגיאת העלאת קובץ: {response_text.split('=')[1]}")
# נמשיך ל-logout גם אם ההעלאה נכשלה
elif "ok" in response_text:
print(f"העלאת הקובץ '{safe_remote_name}.wav' לשלוחה 8 הצליחה!")
else:
print(f"תגובה לא צפויה מה-API בעת העלאה: {response_text}")
except requests.exceptions.RequestException as e:
print(f"שגיאת רשת בעת העלאת קובץ: {e}")
except FileNotFoundError:
print(f"שגיאה קריטית: לא נמצא קובץ מקומי להעלאה בנתיב {local_wav_path}")
finally:
# --- שלב 3: Logout (תמיד יתבצע, גם אם ההעלאה נכשלה) ---
print("שלב 3: מתנתק מה-API...")
try:
logout_params = {"token": token}
response = session.get(f"{YEMOT_API_URL}/Logout", params=logout_params, timeout=10)
if "ok" in response.text:
print("התנתקות מה-API בוצעה בהצלחה.")
else:
print(f"תגובה לא צפויה בעת התנתקות: {response.text}")
except requests.exceptions.RequestException as e:
print(f"שגיאת רשת בעת התנתקות: {e}")
return "ok" in response_text # החזר True אם ההעלאה הצליחה
תודה רבה