20 במרץ 2023, 21:02

@Chaim כמו שכתבו הפתרון הוא read, כדאי לכתוב את זה בnode.js כי יש ספריה שנבנתה ע"י @מאזין-נלהב ושופרה על ידי.
https://github.com/ShlomoCode/yemot-router2
אם לדוגמה אתה רוצה

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

הקוד ייראה בערך ככה:

   for (let i = 0; i < messages.length; i++) {
        const message = messages[i];
        const resp = await call.read([message], 'tap', { block_change_type_lang: true, read_none: true,  sec_wait: 0.1, max: 1 });
        // הדגמה - אם הקיש 2 תוך כדי שם התחנה - לחזור לתחנה קודמת
        if (resp === '2') {
            if (i === 0) { // שלא יגיע למספר שלילי
                i -= 1;
            } else {
                i -= 2;
            }
        }
    }

messages הוא בעצם מערך של הודעות טקסט להשמעה.
read_none מאפשר תשובה ריקה, כך שאם המאזין לא לחץ כלום במהלך השמעת ההודעה, השרת של ימות פשוט יפנה לשרת שלך, ויקבל שוב הודעה אחת להשמעה.
אם המאזין יקיש תוך כדי, אתה תקבל את ההקשה שלו ותדע מה לעשות איתה, כאשר כמובן אתה בקוד שלך ויודע מה לעשות בתגובה.
לעשות את זה בלי הספריה הנ"ל זה באמת סיוט... הספריה הזו גורמת לכך שהקוד בעצם קריא ורץ לפי הסדר, מתחילה ועד סוף, ללא שום איבוד נתונים בין הקריאות של ימות.
ראיתי ששאלת על תפריט, שם זה פשוט עוד יותר - משמיעים הודעה אחת עם read, והתשובה שהוקשה אתה מפרש אותה כבחירה בתפריט.