• הרשמה
    • התחברות
    • חיפוש
    • דף הבית
    • אינדקס קישורים
    • פוסטים אחרונים
    • קבלת התראות מהדפדפן
    • משתמשים
    • חיפוש בהגדרות המתקדמות
    • חיפוש גוגל בפורום
    • ניהול המערכת
    • ניהול המערכת - שרת private

    משא ומתן עם השרת

    פורום מפתחים API
    6
    28
    359
    טוען פוסטים נוספים
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
    תגובה
    • הגיבו כנושא
    התחברו בכדי לפרסם תגובה
    נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
    • C
      CUBASE @795501400 נערך לאחרונה על ידי

      @795501400 אני לא מבין, קראת את התיעוד של שלוחת API?

      יש כל מיני דרכים להשמיע למשתמש תשובה, אפשר לענות הודעה פשוטה ואז להגדיר בשלוחה מה לבצע בעקבות התשובה, אפשר בתשובה עצמה להגיד למערכת מה לעשות, תקרא את השרשור של מודול API ואם יש לך שאלה ספציפית אז תשאל...

      7 תגובה 1 תגובה אחרונה תגובה ציטוט 0
      • 7
        795501400 @CUBASE נערך לאחרונה על ידי

        @CUBASE קראתי
        אפילו שלחתי לAI שוב ושוב את הדברים
        לפי מה שאני מבין משם

        שרשור פעולות
        בפעולה מסוג read לא ניתן לשרשר פעולות לביצוע.
        לאחר ביצוע פעולה אחת המערכת שולחת מיד את הנתון לשרת ולא מבצעת את הפעולה השניה
        
        לדוגמה
        
        read=f-000=foo,yes,8,4,7,Number,yes,no,*/&read=f-001=bar,yes,8,4,7,Number,yes,no,*/&
        המערכת תקבל ותשלח רק את הפרמטר foo ולא את הפרמטר bar
        

        וזה בעיה
        יש לי את הקלאס הבא

        def yemot_api_handler(request):
            params = {}
            if request.method == 'POST':
                params = request.POST
            elif request.method == 'GET':
                params = request.GET
            else:
                logger.error("Yemot API Handler received unsupported method: %s", request.method)
                return HttpResponse(status=405)
        
            logger.info("Yemot API Handler received params: %s", dict(params.items()))
        
            api_call_id = params.get('ApiCallId')
            api_real_did = params.get('ApiRealDID')
            api_enter_id = params.get('ApiEnterID')
            action_code = params.get('action_type')
            if action_code is None:
                logger.info("action_type missing, returning 'read' command to Yemot.")
                read_command = "read=t-לדיווח כניסה הקישו 1, לדיווח יציאה הקישו 2=action_type,,Digits,1,1,Digits,yes,yes"
                return HttpResponse(read_command, content_type="text/plain; charset=utf-8")
            if not api_real_did or not api_enter_id:
                logger.error("Missing required parameters after read: DID=%s, EnterID=%s", api_real_did, api_enter_id)
                return HttpResponse("id_list_message=t-שגיאה בקבלת נתונים חיוניים", content_type="text/plain; charset=utf-8")
            try:
                enrollment_query_kwargs = {
                    'major__yemot_did': api_real_did,
                    'enter_id_in_major': api_enter_id,
                    'is_active_in_major': True,
                    'major__is_active': True
                }
                enrollment = StudentMajorEnrollment.objects.select_related('student', 'major').get(**enrollment_query_kwargs)
            except StudentMajorEnrollment.DoesNotExist:
                logger.warning("Enrollment not found using query: %s", enrollment_query_kwargs)
                return HttpResponse("id_list_message=t-הזיהוי שהוקש אינו קיים או אינו פעיל במערכת כולל זו", content_type="text/plain; charset=utf-8")
            except StudentMajorEnrollment.MultipleObjectsReturned:
                logger.error("CRITICAL: Multiple active enrollments found for query: %s", enrollment_query_kwargs)
                return HttpResponse("id_list_message=t-שגיאה חמורה בנתונים, נא פנה למנהל המערכת", content_type="text/plain; charset=utf-8")
            except Exception as e:
                logger.exception("Unexpected error finding enrollment for query: %s", enrollment_query_kwargs)
                return HttpResponse("id_list_message=t-שגיאה כללית בגישה לנתונים", content_type="text/plain; charset=utf-8")
            action_type_str = None
            confirmation_message = "t-הפעולה נכשלה" 
        
            timestamp = timezone.now()
            time_str = timezone.localtime(timestamp).strftime("%H:%M")
        
            if action_code == '1':
                action_type_str = "Entry"
                confirmation_message = f"t-נרשמה כניסה בשעה {time_str}"
            elif action_code == '2':
                action_type_str = "Exit"
                confirmation_message = f"t-נרשמה יציאה בשעה {time_str}"
            else:
                logger.warning("Invalid action code '%s' received for enrollment %s", action_code, enrollment.id)
                confirmation_message = "t-הבחירה שהוקשה שגויה"
        
            if action_type_str:
                try:
                    AttendanceEvent.objects.create(
                        enrollment=enrollment,
                        action_type=action_type_str,
                        timestamp=timestamp,
                        api_call_id=api_call_id
                    )
                    logger.info("Recorded %s for enrollment %s (Student: %s, Major: %s)",
                                action_type_str, enrollment.id, enrollment.student.name, enrollment.major.name)
                except Exception as e:
                    logger.exception("DATABASE ERROR: Failed to save AttendanceEvent for enrollment %s", enrollment.id)
                    confirmation_message = "t-אירעה שגיאה פנימית ברישום, נא פנה למנהל"
        
            yemot_response_text = f"id_list_message={confirmation_message}"
            yemot_response_text += "&go_to_folder=hangup"
        
            return HttpResponse(yemot_response_text, content_type="text/plain; charset=utf-8")
        
        

        זה עובד
        אבל שאני רוצה לטפל במקרה של כניסה כפולה זה אומר שעלי לשלוח בקשה חדשה לגמרי לשרת
        כלומר בחרת כניסה אבל במערכת רשומה כניסה כבר בתאריך X סעה Y מה ברצונך לעשות וכו?
        כיצד אני עושה זאת?

        C תגובה 1 תגובה אחרונה תגובה ציטוט 0
        • C
          CUBASE @795501400 נערך לאחרונה על ידי

          @795501400 אין לי מושג בפייתון, אולי תנסה לפרט יותר מה הבעיה שלך בתקווה שאוכל לעזור...

          7 תגובה 1 תגובה אחרונה תגובה ציטוט 0
          • 7
            795501400 @CUBASE נערך לאחרונה על ידי

            @CUBASE כיון שמודל שעון נוכחות לא עובד כמו שצריך
            אני בונה כזה עצמאי אצלי על השרת
            אני מנסה לטפל מה קרה אם הדיווח לא תקין
            למשל דיווח נוסף על כניסה או דיווח נוסף על יציאה (כלומר חוסר בדיווח קודם)
            כיצד אני בעצם פותח דו שיח נוסף עם השרת אחרי שהוא דיווח לי על יציאה
            באופן רגיל אני עונה לו את ההודעה התקבל דיווח בהצלחה
            אבל פה אני בעצם רוצה לומר לו יש בעיה
            מה לעשות?
            א. ב. או ג?
            כיצד אני עושה את זה?

            C תגובה 1 תגובה אחרונה תגובה ציטוט 0
            • C
              CUBASE @795501400 נערך לאחרונה על ידי CUBASE

              @795501400 אתה מחזיר לו read עם ההודעה שיש בעיה בדיווח ונותן לו להקיש את הפרטים הנצרכים, אתה יכול גם להחזיר id_list_message עם הודעת שגיאה ולשרשר אחריו read עם האפשרויות להקשה, היתרון בכך הוא שניתן לדלג על ההודעה ובכל זאת לשמוע את התפריט של אפשרויות ההקשה (הכוונה שלא ניתן לשרשר ב-read זה אחריו,** לפני** read כן ניתן לשרשר)

              לפי איך שזה נראה אתה הבנת שאחרי שענית read אז לא ניתן להמשיך את הדו שיח, הכוונה שלא ניתן לשרשר פעולות נוספות כמו id_list_message או go_to_folder ע"י כתיבת הפעולות בתשובה עצמה, כלומר לא תוכל לענות כך:

              read=f-000=foo,yes,8,4,7,Number,yes,no,*/&read=f-001=bar,yes,8,4,7,Number,yes,no,*/&
              

              או כך:

              read=f-000=foo,yes,8,4,7,Number,yes,no,*/&go_to_folder=hangup
              

              7 תגובה 1 תגובה אחרונה תגובה ציטוט 0
              • 7
                795501400 @CUBASE נערך לאחרונה על ידי

                @CUBASE אני יכול להחזיר עוד read ועוד ועוד?

                C תגובה 1 תגובה אחרונה תגובה ציטוט 0
                • C
                  CUBASE @795501400 נערך לאחרונה על ידי

                  @795501400 כן, אבל כמו שכתבתי לא בתשובה אחת אלא אתה מחזיר read, מקבל את הקשת המשתמש ומחזיר לו read חדש

                  תגובה 1 תגובה אחרונה תגובה ציטוט 1
                  • ע
                    עידו נערך לאחרונה על ידי

                    @CUBASE ראשית מתנצל על הבורות. שנית, איך אני מממש את המשא ומתן הזה? אם לקחתי מידע מהמאזין, הכנתי ממנו שאילתא למסד נתונים ועכשיו אני רוצה לשאול את המאזין איזה מבין הנתונים שחזרו מהמסד נתונים הוא רוצה, אז לשאול זה לא בעיה (דרך הread) השאלה איך אני גורם לשרת לזכור אילו נתונים נמצאו? הרי כל קריאה לשרת מריצה את הקוד מחדש לא? ואם 2 יתקשרו במקביל/בסמוך, איך השרת ידע לא "להתבלבל" בין הבקשות שלהם ולעשות לכל אחד את מה שצריך לעשות לו?

                    ד תגובה 1 תגובה אחרונה תגובה ציטוט 0
                    • א
                      אביי ורבא נערך לאחרונה על ידי

                      @795501400 @עידו מניסוח השאלות אני מבין שאתם כותבים/לומדים עם AI, לכן אני ממליץ לכם ללמוד כבר להשתמש בnode-js עם הספריה https://github.com/ShlomoCode/yemot-router2 במקום עם py, זה עולם אחר לחלוטין של תקשורת עם המערכת ואין צורך להתעסק בהפניית הבקשות read ושאר ירקות, רק לכתוב קוד בצורה מסודרת ונקיה,

                      (יש כאן גם טמפלייט פשוט וקליל לאפליקציית node כזו)

                      ע 7 3 תגובות תגובה אחרונה תגובה ציטוט 2
                      • ע
                        עידו @אביי ורבא נערך לאחרונה על ידי

                        @אביי-ורבא האמת אני משתמש בphp והייתי מעדיף את C#

                        תגובה 1 תגובה אחרונה תגובה ציטוט 0
                        • ע
                          עידו @אביי ורבא נערך לאחרונה על ידי

                          @אביי-ורבא כתב במשא ומתן עם השרת:

                          @795501400 @עידו מניסוח השאלות אני מבין שאתם כותבים/לומדים עם AI, לכן אני ממליץ לכם ללמוד כבר להשתמש בnode-js עם הספריה https://github.com/ShlomoCode/yemot-router2 במקום עם py, זה עולם אחר לחלוטין של תקשורת עם המערכת ואין צורך להתעסק בהפניית הבקשות read ושאר ירקות, רק לכתוב קוד בצורה מסודרת ונקיה,

                          (יש כאן גם טמפלייט פשוט וקליל לאפליקציית node כזו)

                          נראה מעניין מאוד, אבל איך זה עוזר בעניין המשא ומתן ו"שאר ירקות"? לא כ"כ הבנתי מה הולך שם ואיך זה עובד.

                          א תגובה 1 תגובה אחרונה תגובה ציטוט 0
                          • א
                            אביי ורבא @עידו נערך לאחרונה על ידי אביי ורבא

                            @עידו אתה מכיר קצת nodejs + express?

                            אם לא תשאל את GPT על הקוד של הטמפלייט, הוא יוכל להסביר לך על מבנה הראוטר עצמו

                            בקובץ src/callHandler.js תוכל לראות לוגיקה בסיסית (של תגובה עם id_list_message) שאר המתודות די דומות, תעבוד עם התיעוד ברדמי של הספריה + GPT, מהר מאוד תבין מי נגד מי,

                            אם תסתבך, אתה יכול לשאול בפורום ואשתדל לעזור

                            תגובה 1 תגובה אחרונה תגובה ציטוט 1
                            • 7
                              795501400 @אביי ורבא נערך לאחרונה על ידי

                              @אביי-ורבא הבעיה היא שמה שאני מכיר הוא פייתון
                              NODE לא זכיתי לדעת
                              וודאי שלא לשלב את זני אלו בפרוייקט אחד

                              החלק של שעון הנוכחות זה רק חלק ממערכת שלמה שכתובה בשפת פייתון כך שאינני יכול לשנות אותם לNIDE

                              צ תגובה 1 תגובה אחרונה תגובה ציטוט 0
                              • ד
                                דוד_מלך_ישראל מומחה @עידו נערך לאחרונה על ידי

                                @עידו כתב במשא ומתן עם השרת:

                                @CUBASE ראשית מתנצל על הבורות. שנית, איך אני מממש את המשא ומתן הזה? אם לקחתי מידע מהמאזין, הכנתי ממנו שאילתא למסד נתונים ועכשיו אני רוצה לשאול את המאזין איזה מבין הנתונים שחזרו מהמסד נתונים הוא רוצה, אז לשאול זה לא בעיה (דרך הread) השאלה איך אני גורם לשרת לזכור אילו נתונים נמצאו? הרי כל קריאה לשרת מריצה את הקוד מחדש לא? ואם 2 יתקשרו במקביל/בסמוך, איך השרת ידע לא "להתבלבל" בין הבקשות שלהם ולעשות לכל אחד את מה שצריך לעשות לו?

                                כל בקשת read מבצעת פניה חדשה לשרת עם כל הנתונים שהתקבלו עד עכשו בתוספת הנתון האחרון, כך שהמערכת מבצעת את הפעולה כאילו פנית מראש עם כל הנתונים, אתה יכול לראות את זה בצורה מאד ברורה ב LogApi שנמצא בתיקיית Log במערכת, תראה שם את הפניה הראשונה לשרת, תשובת השרת - read, ובשורה הבאה פניה חוזרת לשרת עם כל הנתונים פלוס הנתון האחרון.

                                תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                • צ
                                  צדיק תמים מומחה @795501400 נערך לאחרונה על ידי

                                  @795501400 כתב במשא ומתן עם השרת:

                                  החלק של שעון הנוכחות זה רק חלק ממערכת שלמה שכתובה בשפת פייתון כך שאינני יכול לשנות אותם לNIDE

                                  אתה יכול להקים יישום nodejs עם הספריה שידבר עם ימות המשיח וכדי לבצע פעולות/לקבל מידע יתקשר עם API כלשהוא שאפליקציית הפייתון תחשוף לו
                                  מעין תיווך

                                  7 תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                  • 7
                                    795501400 @צדיק תמים נערך לאחרונה על ידי

                                    @צדיק-תמים יש לי כרגע המון המון API כתובים ועובדים תקין
                                    גם התקשורת הזאת עובדת
                                    אני מקבל את הנתונים
                                    רק אני לא הצלחתי להבין כיצד לשלוח לו שאלה חדשה אחר כך

                                    (עדין לא הבנתי - אבל כרגע אני לא בודק בלייב האם זה כניסה כפולה או יציאה כפולה - זה מטופל בדוח היומי - כך שלהתחיל להקים שרות בשפה שאינני מכיר בשביל הסבר אחד שחסר לי - קצת הרבה בשבילי)

                                    צ תגובה 1 תגובה אחרונה תגובה ציטוט 1
                                    • ע
                                      עידו @795501400 נערך לאחרונה על ידי עידו

                                      @795501400 כתב במשא ומתן עם השרת:

                                      @CUBASE כעת נשלח אלי פרמטר AAA
                                      כעת כיון שהוא מכיל 2 לפי מה שרשום לי אני צריך לשאול שאלה חדשה
                                      אבל אם היה רשום 1
                                      היה פשוט הודעת OK מהשרת כמובן עם נוסח מה חוזר
                                      אני עדין לא מצליח להבין את התעוד כיצד אני עושה זאת

                                      אם ידוע לך מראש מה יקרה אם ילחץ 2 אז אתה יכול להשתמש ב

                                      read_answer_AAA_2=what_to_do, example: go_to_folder=/2
                                      

                                      ככה לכל פרמטר שנשלח לשרת בread.

                                      את זה אגב, כותבים בשלוחה עצמה.

                                      אגב, לפעמים התיעוד הישן של המודל יותר טוב מהחדש.

                                      7 תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                      • צ
                                        צדיק תמים מומחה @795501400 נערך לאחרונה על ידי

                                        @795501400 כתב במשא ומתן עם השרת:

                                        רק אני לא הצלחתי להבין כיצד לשלוח לו שאלה חדשה אחר כך

                                        בתשובה שלך לימות המשיח אתה מחזיר read עם פרמטר בשם X לדוגמה
                                        ואז ימות המשיח מבקשים מהמשתמש את הנתון
                                        ושולחים לך בקשה חדשה שבה יהיה פרמטר X=מה_שהמשתמש_הקיש

                                        תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                        • 7
                                          795501400 @עידו נערך לאחרונה על ידי 795501400

                                          @עידו באם זה היה תלוי במה שימות עושים (כלומר בהקשת 1 שימות יעשו א ובהקשת 2 שימות יעשו ב לא היה לי בעיה - א. כי אני יודע לקרוא ב. כי אם לא אני GPT + גימיני יודעים לקרוא ואני שלחתי להם את כל התעוד האפשרי על מודל API)
                                          הבעיה מתחילה בזה שהתברר לי שלמרבה הצער אני לא יכול לסמוך על המודל של ימות כלל עקב באגים רבים (עד אי קבלת המספר שאליו התקשרו)
                                          לכן היה עלי לבנות (ואני באמצע עדין) מנגנון שלם על השרת שלי שיהווה את המודל הזה

                                          הנקודה היא לא האם הקיש 1 או 2
                                          הנקוה היא האם כאשר קיבלתי פרמטר 1 (כלומר כניסה) ולי בשרת רשום שביצע כניסה לפני 10 דקות
                                          עלי להתחיל פתאום שאלה חדשה לגמרי
                                          שלא יש כמה אופציות לתשובה
                                          וכן הלאה

                                          ולא אין תעוד ברור כיצד עושים זאת
                                          ועדין אני אשמח באם יש למישהו דוגמא בפיתון של שרשור שאלות
                                          זה מאד יעזור לי

                                          תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                          • צ
                                            צדיק תמים מומחה נערך לאחרונה על ידי צדיק תמים

                                            @795501400 כתב במשא ומתן עם השרת:

                                            @עידו באם זה היה תלוי במה שימות עושים (כלומר בהקשת 1 שימות יעשו א ובהקשת 2 שימות יעשו ב לא היה לי בעיה - א. כי אני יודע לקרוא ב. כי אם לא אני GPT + גימיני יודעים לקרוא ואני שלחתי להם את כל התעוד האפשרי על מודל API)

                                            אולי זה שורש הבעיה
                                            אי אפשר לסמוך לגמרי על LLM, בפרט בתיעוד של ימות המשיח שהוא לא הכי ברור

                                            @795501400 כתב במשא ומתן עם השרת:

                                            הבעיה מתחילה בזה שהתברר לי שלמרבה הצער אני לא יכול לסמוך על המודל של ימות כלל עקב באגים רבים (עד אי קבלת המספר שאליו התקשרו)

                                            זה בעיה אצלך, במערכת שלי יש שלוחות שאלפי משתמשים נכנסים אליהם ביום ומשמיעות נתונים על בסיס פרמטר ApiRealDID ולא קיבלתי תלונה מעולם שזה לא עובד

                                            7 תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                            • פוסט ראשון
                                              פוסט אחרון