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

    עזרה בהגדרות לקו נסיעות שיתופיות בAPI

    מתוזמן נעוץ נעול הועבר עזרה הדדית למשתמשים מתקדמים
    14 פוסטים 4 כותבים 107 צפיות 3 עוקבים
    טוען פוסטים נוספים
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
    תגובה
    • תגובה כנושא
    התחברו כדי לפרסם תגובה
    נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
    • א מנותק
      אA @יצמח פורקניה
      נערך לאחרונה על ידי אA

      @יצמח-פורקניה
      יש לך שרת שביקשת ממנו קוד?!
      אתה צריך שרת כדי שזה יעבוד.
      אם יהיה לך שרת יש לי קוד שעובד בדיוק בשביל מערכת כזו.

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

        @אA יש לי שרת באתר חינמי

        א ע 2 תגובות תגובה אחרונה תגובה ציטוט 0
        • א מנותק
          אA @יצמח פורקניה
          נערך לאחרונה על ידי

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

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

            @יצמח-פורקניה שרת חינמי לא טוב לימות המשיח בד"כ

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

              @עידו מה זאת אומרת לא טוב, ביינתיים לדעתי הבעיה בהגדרות זה של הבינה מלאכותית, אני נכנס והAPI אומר לי שהמספר שלי לא מזוהה ומעביר אותי להקלטת השם ואז הוא מחכה להקשת ספרה (במקום הקלטה) ולאחר הספרה הראשונה הוא שואל לאישור הקישו 1 וכו' ושוב חוזר המספר לא מזוהה
              נראה לי שהשרת עובד פשוט הקוד של הAPI לא עובד
              אם מישהו יכול להעלות קוד מינימלי שאוכל לבדוק אם הAPI עובד אשמח מאוד

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

                @יצמח-פורקניה מה ההגדרות בשלוחה?
                איזה שרת?

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

                  ההגדרות בשלוחה

                  type=api
                  api_link=https://yemot-rides.onrender.com/ivr-api
                  api_add_id=yes
                  api_add_phone=yes
                  

                  השרת כתוב ב-Node.js עם פריימוורק Express, והוא מאוחסן ב-Render. מסד הנתונים הוא MongoDB Atlas.
                  את הקוד העליתי בהודעה קודמת

                  א י 2 תגובות תגובה אחרונה תגובה ציטוט 0
                  • א מנותק
                    אA @יצמח פורקניה
                    נערך לאחרונה על ידי

                    @יצמח-פורקניה
                    א"א לגשת לקוד.
                    תעלה אותו לכאן בתור קוד.

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

                      @יצמח-פורקניה כתב בעזרה בהגדרות לקו נסיעות שיתופיות בAPI:

                      שלום לכולם,

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

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

                      הוספה לקובץ EnterIDValName, וכו'.

                      ממשק נהגים ונוסעים:

                      (רשימה לבנה)

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

                      API ודאי יהיה צריך להיות מעורב בעסק, מה שכן, אני חושב שאפשר להסתדר רק עם מודול api

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

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

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

                      כנ"ל

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

                      לא רואה דרך בלי api.

                      בכל מקרה אני רוצה שההודעות ימחקו אוטומטית לאחר 3 שעות.

                      מודול api.

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

                      תגיד איפה אתה צריך יותר הרחבה.

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

                        זה הקוד בJS שבינה כתבה לי

                        const express = require("express");
                        const mongoose = require("mongoose");
                        
                        const app = express();
                        const port = process.env.PORT || 3000;
                        const BASE_URL = "https://yemot-rides.onrender.com/ivr-api";
                        const mongoURI = process.env.MONGO_URI;
                        
                        // --- חיבור ל-MongoDB ---
                        mongoose.connect(mongoURI, {useNewUrlParser:true, useUnifiedTopology:true})
                            .then(()=>console.log("Mongo connected"))
                            .catch(err=>console.log("Mongo error:", err));
                        
                        // --- מודלים ---
                        const userSchema = new mongoose.Schema({
                            phone: {type:String, required:true, unique:true},
                            name_recorded: {type:Boolean, default:false},
                            createdAt: {type:Date, default:Date.now}
                        });
                        
                        const rideSchema = new mongoose.Schema({
                            type: {type:String, enum:["driver","passenger"], required:true},
                            driver_phone: {type:String, required:true},
                            direction: String,
                            time: String,
                            seats: String,
                            note_id: String,
                            createdAt: {type:Date, default:Date.now, expires:10800}
                        });
                        
                        const User = mongoose.model("User", userSchema);
                        const Ride = mongoose.model("Ride", rideSchema);
                        
                        // --- מסלול IVR ---
                        app.get("/ivr-api", async (req,res)=>{
                            const ApiPhone = req.query.ApiPhone || req.query.phone;
                            const {ApiDigits, action, t, d, tm, s, r_id} = req.query;
                        
                            if(!ApiPhone || ApiPhone==="anonymous"){
                                return res.send("say=t-לא ניתן לזהות את מספר הטלפון&goto_all_endpoints=exit");
                            }
                        
                            try {
                                // --- בדיקה אם המשתמש רשום ---
                                let user = await User.findOne({phone: ApiPhone});
                                if(!user){
                                    user = await User.create({phone: ApiPhone});
                                }
                        
                                // --- הקלטת שם מיידית ---
                                if(!user.name_recorded && action!=="reg"){
                                    const recName = `name_${ApiPhone}`;
                                    return res.send(
                                        `say=t-שלום! הקליטו את שמכם לאחר הצליל וסיימו בסולמית`+
                                        `&record=${recName},1,10,no,no`+
                                        `&go_to=${BASE_URL}?action=reg`
                                    );
                                }
                        
                                if(action==="reg"){
                                    await User.updateOne({phone:ApiPhone},{name_recorded:true});
                                    return res.send(`say=t-ההרשמה הושלמה&go_to=${BASE_URL}?action=main`);
                                }
                        
                                // --- תפריט ראשי ---
                                if(!action || action==="main"){
                                    return res.send(
                                        `read=t-לנהגים הקישו 1 לנוסעים הקישו 2 למחיקת פרסומים הקישו 3`+
                                        `=digits,1,1,1,7,yes,no&action=h_main`
                                    );
                                }
                        
                                if(action==="h_main"){
                                    if(ApiDigits==="1") return res.send(`go_to=${BASE_URL}?action=d_menu`);
                                    if(ApiDigits==="2") return res.send(`go_to=${BASE_URL}?action=p_menu`);
                                    if(ApiDigits==="3") return res.send(`go_to=${BASE_URL}?action=del`);
                                    return res.send(`go_to=${BASE_URL}?action=main`);
                                }
                        
                                // --- נהג ---
                                if(action==="d_menu"){
                                    return res.send(
                                        `read=t-לפרסום נסיעה הקישו 1 לשמיעת בקשות נוסעים הקישו 2`+
                                        `=digits,1,1,1,7,yes,no&action=h_d`
                                    );
                                }
                                if(action==="h_d"){
                                    if(ApiDigits==="1") return res.send(`go_to=${BASE_URL}?action=sel_dir&t=driver`);
                                    if(ApiDigits==="2") return res.send(`go_to=${BASE_URL}?action=list&list_t=passenger`);
                                    return res.send(`go_to=${BASE_URL}?action=main`);
                                }
                        
                                // --- נוסע ---
                                if(action==="p_menu"){
                                    return res.send(
                                        `read=t-לבקשת נסיעה הקישו 1 לשמיעת נהגים הקישו 2`+
                                        `=digits,1,1,1,7,yes,no&action=h_p`
                                    );
                                }
                                if(action==="h_p"){
                                    if(ApiDigits==="1") return res.send(`go_to=${BASE_URL}?action=sel_dir&t=passenger`);
                                    if(ApiDigits==="2") return res.send(`go_to=${BASE_URL}?action=list&list_t=driver`);
                                    return res.send(`go_to=${BASE_URL}?action=main`);
                                }
                        
                                // --- בחירת כיוון ---
                                if(action==="sel_dir"){
                                    return res.send(
                                        `read=t-מירושלים לבני ברק הקישו 1 מבני ברק לירושלים הקישו 2`+
                                        `=digits,1,1,1,7,yes,no&action=h_dir&t=${t}`
                                    );
                                }
                                if(action==="h_dir"){
                                    if(t==="driver"){
                                        return res.send(
                                            `read=t-הקישו שעת יציאה בארבע ספרות`+
                                            `=digits,4,1,4,7,yes,no&action=set_time&t=${t}&d=${ApiDigits}`
                                        );
                                    }
                                    return res.send(`go_to=${BASE_URL}?action=finish&t=${t}&d=${ApiDigits}`);
                                }
                                if(action==="set_time"){
                                    return res.send(
                                        `read=t-הקישו מספר מקומות פנויים`+
                                        `=digits,1,1,2,7,yes,no&action=finish&t=${t}&d=${d}&tm=${ApiDigits}`
                                    );
                                }
                        
                                // --- שמירה סופית ---
                                if(action==="finish"){
                                    await Ride.create({
                                        type:t,
                                        driver_phone:ApiPhone,
                                        direction:d,
                                        time:tm,
                                        seats:ApiDigits
                                    });
                                    return res.send(`say=t-הפרסום נשמר בהצלחה&go_to=${BASE_URL}?action=main`);
                                }
                        
                                // --- רשימות ---
                                if(action==="list"){
                                    const listT = req.query.list_t;
                                    const items = await Ride.find({type:listT}).sort({createdAt:-1}).limit(1);
                                    if(items.length===0) return res.send(`say=t-אין כרגע פרסומים&go_to=${BASE_URL}?action=main`);
                                    const item = items[0];
                                    let msg = "t-פרסום נסיעה. .";
                                    if(item.time) msg+=`t-בשעה ${item.time}. .`;
                                    if(item.seats) msg+=`t-${item.seats} מקומות פנויים. .`;
                                    msg+="t-לחיוג הקישו 0 לחזרה הקישו 2";
                                    return res.send(`read=${msg}=digits,1,1,1,7,yes,no&action=list_opt&r_id=${item._id}`);
                                }
                                if(action==="list_opt"){
                                    if(ApiDigits==="0"){
                                        const ride = await Ride.findById(r_id);
                                        if(ride) return res.send(`dial=${ride.driver_phone}`);
                                    }
                                    return res.send(`go_to=${BASE_URL}?action=main`);
                                }
                        
                                // --- מחיקה ---
                                if(action==="del"){
                                    const count = await Ride.countDocuments({driver_phone:ApiPhone});
                                    if(count===0) return res.send(`say=t-אין לכם פרסומים פעילים&go_to=${BASE_URL}?action=main`);
                                    return res.send(`read=t-נמצאו ${count} פרסומים למחיקה הקישו 7=digits,1,1,1,7,yes,no&action=del_ok`);
                                }
                                if(action==="del_ok" && ApiDigits==="7"){
                                    await Ride.deleteMany({driver_phone:ApiPhone});
                                    return res.send(`say=t-הפרסומים נמחקו&go_to=${BASE_URL}?action=main`);
                                }
                        
                                return res.send(`go_to=${BASE_URL}?action=main`);
                        
                            } catch(err){
                                console.log(err);
                                return res.send(`say=t-תקלה זמנית במערכת&goto_all_endpoints=exit`);
                            }
                        });
                        
                        app.listen(port,()=>console.log("Server running on port", port));
                        
                        תגובה 1 תגובה אחרונה תגובה ציטוט 0
                        • פוסט ראשון
                          פוסט אחרון