בקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר
-
@צדיק-תמים אפשר להשבית את כל המקשים
-
@צדיק-תמים אפשר להשבית את כל המקשים
-
@עידו300 אם מגדירים
prependToNextAction: trueזה לא יוצא מהשלוחה אלא רק מוסיף את ההודעה לתור פנימי ואז פעם הבאה שהקוד יעשה read או id_list_message בלי prependToNextAction ההודעה שבתור תושמע ג"כ ותימחק מהתורלמעשה זה די מבלבל ו "magic", היום הייתי עושה את זה אחרת
@צדיק-תמים כתב בבקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר:
ואז פעם הבאה שהקוד יעשה read או id_list_message בלי prependToNextAction ההודעה שבתור תושמע ג"כ ותימחק מהתור
לא הבנתי, הוא לא משמיע את זה מיד אלא רק בהשמעה הבאה - ע"י read או id_list_message?
-
@צדיק-תמים כתב בבקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר:
ואז פעם הבאה שהקוד יעשה read או id_list_message בלי prependToNextAction ההודעה שבתור תושמע ג"כ ותימחק מהתור
לא הבנתי, הוא לא משמיע את זה מיד אלא רק בהשמעה הבאה - ע"י read או id_list_message?
-
@צדיק-תמים אם אני רוצה לבצע עוד פעולות אבל הן לא קשורות למאזין, אני צריך שיפעלו גם אם הוא ינתק ובכל מקרה לא יפריעו לו כלל. הוא לא אמור להיות אפילו מודע להן.
איך עושים את זה? -
@צדיק-תמים אם אני רוצה לבצע עוד פעולות אבל הן לא קשורות למאזין, אני צריך שיפעלו גם אם הוא ינתק ובכל מקרה לא יפריעו לו כלל. הוא לא אמור להיות אפילו מודע להן.
איך עושים את זה? -
@צדיק-תמים תודה בודק
-
@צדיק-תמים אני מניח שזה
(() => { await doBigJob(); })(); call.id_list_message(...);הפתרון הפשוט, נכון?
למה אגב, צריך את הawait? זה לא אומר לחכות שהבקשה תסתיים? ואז בעצם לא הרווחנו כלום... -
@צדיק-תמים אני מניח שזה
(() => { await doBigJob(); })(); call.id_list_message(...);הפתרון הפשוט, נכון?
למה אגב, צריך את הawait? זה לא אומר לחכות שהבקשה תסתיים? ואז בעצם לא הרווחנו כלום...@עידו300 כבר כתבתי לך פעם ללמוד איך אסינכרוניות עובדת...
await רק מעכב את השורות הבאות, לא תוקע את התוכנה, וכיוון שזה בפונקציה אנונימית זה לא יעכב את המעבר לשורה הבאה
תכלס הawait פה הוא רק לסמן שזה משהו ארוך, למעיישה חסר גם async בהגדרה של הפונקציית חץ -
@עידו300 כבר כתבתי לך פעם ללמוד איך אסינכרוניות עובדת...
await רק מעכב את השורות הבאות, לא תוקע את התוכנה, וכיוון שזה בפונקציה אנונימית זה לא יעכב את המעבר לשורה הבאה
תכלס הawait פה הוא רק לסמן שזה משהו ארוך, למעיישה חסר גם async בהגדרה של הפונקציית חץ@צדיק-תמים כתב בבקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר:
כבר כתבתי לך פעם ללמוד איך אסינכרוניות עובדת...
אל תדאג אני באמצע... אבל לא ראיתי לזה התייסות.
מה זה מעכב ולא תוקע? זה ממשיך או לא?
אבל למה לעכב אם כל המטרה היא להמשיך בשקט?
-
@צדיק-תמים כתב בבקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר:
כבר כתבתי לך פעם ללמוד איך אסינכרוניות עובדת...
אל תדאג אני באמצע... אבל לא ראיתי לזה התייסות.
מה זה מעכב ולא תוקע? זה ממשיך או לא?
אבל למה לעכב אם כל המטרה היא להמשיך בשקט?
-
@עידו300 כשתבין איך async await עובד לא תהיה לך שום שאלה. לצערי אין לי זמן ללמד פה איך זה עובד.
@צדיק-תמים

בכל מקרה, תודה! -
@עידו300 כשתבין איך async await עובד לא תהיה לך שום שאלה. לצערי אין לי זמן ללמד פה איך זה עובד.
@צדיק-תמים קרה משהו מוזר
אני מתחיל לקבל שגיאות:rror [ERR_MODULE_NOT_FOUND]: Cannot find package '/home/node.stamandsefer.co.il/public_html/node_modules/yemot-router2/' imported from /home/node.stamandsefer.co.il/public_html/src/routes/adAddRoute.js at new NodeError (node:internal/errors:405:5) at legacyMainResolve (node:internal/modules/esm/resolve:218:9) at packageResolve (node:internal/modules/esm/resolve:903:14) at moduleResolve (node:internal/modules/esm/resolve:973:20) at defaultResolve (node:internal/modules/esm/resolve:1206:11) at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:404:12) at ModuleLoader.resolve (node:internal/modules/esm/loader:373:25) at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:250:38) at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:76:39) at link (node:internal/modules/esm/module_job:75:36) { code: 'ERR_MODULE_NOT_FOUND' }שזה אומר שהוא לא מוצא את התיקיה של הספריה של ימות, וכשאני נכנס לבדוק ידנית אני מגלה שהיא הפכה לקיצור דרך, וגם כשאני מתקין שוב מהNPM, היא מותקנת ישר בתור קיצור דרך מה שגורם לזה שא"א להפעיל את הקוד כמובן...
מכיר משהו כזה? -
@צדיק-תמים קרה משהו מוזר
אני מתחיל לקבל שגיאות:rror [ERR_MODULE_NOT_FOUND]: Cannot find package '/home/node.stamandsefer.co.il/public_html/node_modules/yemot-router2/' imported from /home/node.stamandsefer.co.il/public_html/src/routes/adAddRoute.js at new NodeError (node:internal/errors:405:5) at legacyMainResolve (node:internal/modules/esm/resolve:218:9) at packageResolve (node:internal/modules/esm/resolve:903:14) at moduleResolve (node:internal/modules/esm/resolve:973:20) at defaultResolve (node:internal/modules/esm/resolve:1206:11) at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:404:12) at ModuleLoader.resolve (node:internal/modules/esm/loader:373:25) at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:250:38) at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:76:39) at link (node:internal/modules/esm/module_job:75:36) { code: 'ERR_MODULE_NOT_FOUND' }שזה אומר שהוא לא מוצא את התיקיה של הספריה של ימות, וכשאני נכנס לבדוק ידנית אני מגלה שהיא הפכה לקיצור דרך, וגם כשאני מתקין שוב מהNPM, היא מותקנת ישר בתור קיצור דרך מה שגורם לזה שא"א להפעיל את הקוד כמובן...
מכיר משהו כזה? -
@צדיק-תמים מחקתי והתקנתי שוב
ועוד פעם אותו הדבר

-
@צדיק-תמים מחקתי והתקנתי שוב
ועוד פעם אותו הדבר

-
@צדיק-תמים
{
"name": "real-estate-brokerage-platform",
"version": "0.0.1",
"main": "app.js",
"private": "true",
"scripts": {
"start": "node app.js"
},
"keywords": [],
"author": "eido taib",
"license": "UNLICENSED",
"type": "module",
"dependencies": {
"express": "^4.21.2",
"yemot-router2": "file:.."
}
}node_modules]# ls -l yemot-router2
lrwxrwxrwx. 1 root root 5 Oct 30 16:44 yemot-router2 -> ../.. -
@צדיק-תמים כאילו זה מותקן בתיקיית root
בלאגן שלם פתאום נהיה שםסידרתי את זה, לא יודע ממה זה קרה
-
@צדיק-תמים מישהו יודע מה הסיפור של השגיאה הזו?
else if (toDo == 9) { let ans = await call.read([{type: 'text', data: "אנא הקלט משהו"}], "record"); console.log(ans); execFile("python3", ["/public_html/recognize.py",ans], (error, stdout, stderr) => { console.log(stdout); console.log(error); if (error) { console.error(error); call.id_list_message([{type:'text', data: "Error processing audio" }]); return; } console.log("הבעיה כאן! בפלט"); call.id_list_message([{type:'text', data: stdout}]); console.log("הבעיה כאן! בפלט"); }); }זה הקובץ פייתון (מתמלל מצוין, אגב)
from pydub import AudioSegment import speech_recognition as sr from rapidfuzz import process, fuzz import sys, json, tempfile, requests token = "" BASE_URL = f"https://www.call2all.co.il/ym/api/DownloadFile?token={token}&path=ivr2:/" def add_silence(audio_segment): silence = AudioSegment.silent(duration=1000) return silence + audio_segment + silence def recognize_speech(audio_segment): recognizer = sr.Recognizer() with tempfile.NamedTemporaryFile(suffix=".wav", delete=True) as temp_wav: audio_segment.export(temp_wav.name, format="wav") with sr.AudioFile(temp_wav.name) as source: data = recognizer.record(source) try: return recognizer.recognize_google(data, language="he-IL") except sr.UnknownValueError: return "" # לא זוהה דיבור except sr.RequestError as e: return f"Error: {e}" # בעיה עם ה‑API if __name__ == "__main__": # argv[1] = שם הקובץ בתוך ivr2:/ (למשל "1/003.wav") file_name = sys.argv[1] file_url = f"{BASE_URL}{file_name}" # 1️⃣ הורדת הקובץ מהאינטרנט response = requests.get(file_url) if response.status_code != 200: print("Error downloading audio file") sys.exit(1) # 2️⃣ שמירתו זמנית וטעינה עם pydub with tempfile.NamedTemporaryFile(suffix=".wav", delete=True) as temp_audio: temp_audio.write(response.content) temp_audio.flush() audio = AudioSegment.from_file(temp_audio.name, format="wav") # 3️⃣ הוספת שנייה שקט audio = add_silence(audio) # 4️⃣ זיהוי דיבור recognized_text = recognize_speech(audio) # ✅ הדפסת התוצאה print(recognized_text)השגיאה שאני מקבל:
[716b56ab1a7cfd79b974fa0d55f5cbbd65915674]: Cannot send id_list_message after sending response (probably done from uncaughtErrorHandler due to error in asynchronous code after returning response)
אני לא מוצא על איזה id_list_message הוא מתכוון... הוא לא משמיע כלום. גם לא את הid_list_message של השגיאה, בוודאות!
הקטע שהוא רושם ללוג את 2 הטקסטים גם שלפני הid_list_message וגם שאחרי, ז"א שהריצה לא מסתיימת.