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

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. בניית מחלקת תקשורת עם ימות המשיח API ב nodejs

בניית מחלקת תקשורת עם ימות המשיח API ב nodejs

מתוזמן נעוץ נעול הועבר תכנות
18 פוסטים 6 כותבים 743 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • ח מנותק
    ח מנותק
    חוקר
    השיב לyossiz ב נערך לאחרונה על ידי
    #7

    @yossiz
    זה בדיוק מה שהייתי צריך, מישהו שיישם לי את מה ש @magicode כתב, אבל לא ידעתי איך ליישם אותו.
    תודה רבה.
    רק אשמח לקצת הסבר אודות המילה get ששמת לפני הפונקציה token.

    yossizY תגובה 1 תגובה אחרונה
    1
    • yossizY מנותק
      yossizY מנותק
      yossiz
      השיב לחוקר ב נערך לאחרונה על ידי
      #8

      @חוקר אמר בבניית מחלקת תקשורת עם ימות המשיח API ב nodejs:

      רק אשמח לקצת הסבר אודות המילה get ששמת לפני הפונקציה token.

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

      📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

      תגובה 1 תגובה אחרונה
      2
      • zvizviZ מנותק
        zvizviZ מנותק
        zvizvi
        כתב ב נערך לאחרונה על ידי
        #9

        מציע לשים את הקוד בGithub כדי שיהיה אפשר לתרום ולשפר אותו.

        https://zvizvi.xyz

        ח תגובה 1 תגובה אחרונה
        2
        • ח מנותק
          ח מנותק
          חוקר
          השיב לzvizvi ב נערך לאחרונה על ידי
          #10

          @zvizvi אמר בבניית מחלקת תקשורת עם ימות המשיח API ב nodejs:

          מציע לשים את הקוד בGithub כדי שיהיה אפשר לתרום ולשפר אותו.

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

          MusiCodeM תגובה 1 תגובה אחרונה
          0
          • MusiCodeM מנותק
            MusiCodeM מנותק
            MusiCode
            השיב לחוקר ב נערך לאחרונה על ידי
            #11

            @חוקר אמר בבניית מחלקת תקשורת עם ימות המשיח API ב nodejs:

            @zvizvi אמר בבניית מחלקת תקשורת עם ימות המשיח API ב nodejs:

            מציע לשים את הקוד בGithub כדי שיהיה אפשר לתרום ולשפר אותו.

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

            ספר לנו על זה,
            ומאיפה אתה יודע.

            ח תגובה 1 תגובה אחרונה
            0
            • ח מנותק
              ח מנותק
              חוקר
              השיב לMusiCode ב נערך לאחרונה על ידי
              #12

              @MusiCode אמר בבניית מחלקת תקשורת עם ימות המשיח API ב nodejs:

              @חוקר אמר בבניית מחלקת תקשורת עם ימות המשיח API ב nodejs:

              @zvizvi אמר בבניית מחלקת תקשורת עם ימות המשיח API ב nodejs:

              מציע לשים את הקוד בGithub כדי שיהיה אפשר לתרום ולשפר אותו.

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

              ספר לנו על זה,
              ומאיפה אתה יודע.

              המתכנת הראשי בימות המשיח שהוא גם המפתח של הAPI אישר את זה מבחינתם.
              לגבי הפונקציות החדשות, פשוט מאוד ראיתי שיש לימות אתר חדש בפיתוח https://www.call2all.co.il/yemot-admin-g1/#/login ובדקתי ברכיב הדף איך זה עובד, ופשוט מאוד כל האתר החדש מבוסס על הAPI, ולכן הם הוסיפו את כל האפשרויות הנדרשות.
              ביניהם:
              קבלת פירוט דקות נכנסות
              קבלת רשימת קבצים בתיקיה
              שכפול/מחיקה/העברה של קובץ/ים
              בקבצי טקסט ניתן העלאת טקסט כטקסט במקום כקובץ.
              הורדת טקסט של קובץ טקסט/ini
              וכנראה עוד כמה שעדיין לא שמתי לב.

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

              const fetch = require('node-fetch');
              const { URLSearchParams } = require('url');
              module.exports = class YmApi {
                  constructor(username, password, ymLink = 'ym') {
                      this.username = username;
                      this.password = password;
                      this.URL = 'https://www.call2all.co.il/' + ymLink + '/api/';
                  }
              
                  get token() {
                      if (!this.tokenPromise) {
                          this.tokenPromise = new Promise((resolve, reject) => {
                              let url = this.URL + 'Login?' + 'username=' + this.username + '&password=' + encodeURIComponent(this.password);
                              fetch(url, { method: 'get' }).then(res => res.json()).then(json => {
                                  console.log(json);
                                  if (json.token) {
                                      resolve(json.token);
                                  } else {
                                      reject('שם משתמש או סיסמא שגויים.');
                                  }
                              });
                          })
                      }
                      return this.tokenPromise;
                  }
              
                  connecting(action, body) {
                      console.log('action ' + action);
                      return this.token.then( token => {
                          let params = new URLSearchParams();
                          params.append('token', token);
                          if (body) {
                              for (let i in body) {
                                  params.append(i, body[i]);
                              }
                          }
                          let url = this.URL + action;
                          return fetch(url, {
                              method: 'POST',
                              body: params
                          }).then(res => res.json()).catch(console.error);
                      });
                  }
              
                  Logout(){
                      return this.connecting('Logout');
                  }
                  RunCampaign(templateId, phones, callerId = false){
                      let body = {
                          templateId : templateId,
                          phones : phones,
                      };
                      if (callerId){
                          body['callerId'] = callerId;
                      }
                      return this.connecting('RunCampaign', body);
                  }
                  GetTemplates(){
                      return this.connecting('GetTemplates');
                  }
              
                  GetTemplates2(){
                      return this.connecting2('GetTemplates');
                  }
              
                  GetIvrTree(path){
                      return this.connecting('GetIvrTree', {path : 'ivr2:' + path});
                  }
              
                  GetIncomingCalls(){
                      return this.connecting('GetIncomingCalls');
                  }
              
                  GetTextFile(what){
                      return this.connecting('GetTextFile', {'what' : 'ivr2:' + what});
                  }
              
                  UploadTextFile(what, contents){
                      return this.connecting('UploadTextFile', {'what' : 'ivr2:' + what, contents : contents});
                  }
              
                  FileAction(action, what, target){ //action = [move, copy, delete]
                      let body = {action : action, 'target' : 'ivr2:' + target};
                      if (typeof what === 'object'){
                          for (let i = 0; i < what.length;i++) {
                              body['what' + i] = 'ivr2:' + what[i];
                          }
                      }else{
                          body['what'] =  'ivr2:' + what;
                      }
                      return this.connecting('FileAction', body);
                  }
              
              };
              

              דוגמת שימוש בהמשך להנ"ל

              YmApi.FileAction('copy', '/025.wav', '/7').then(function (t) {
                  console.log('FileAction');
                  console.log(t);
              });
              
              תגובה 1 תגובה אחרונה
              2
              • MusiCodeM מנותק
                MusiCodeM מנותק
                MusiCode
                כתב ב נערך לאחרונה על ידי MusiCode
                #13

                @חוקר הנה המחלקה שלי (מעט יותר קצר, מבוסס פרומיס):

                דוגמא:

                const yemot_api = require("yemot-api");
                
                (async () => {
                
                	const y = new yemot_api();
                
                	await y.connect("0773137770", "1234");
                
                	let r;
                
                	/** קבלת מספר יחידות */
                	r = await y.exec("GetSession");
                
                	console.log(r);
                
                	/** העלאת קובץ */
                	let o = {
                
                		file: {
                			value: "12345",
                			options: {
                				filename: "123.txt",
                				contentType: "text/txt"
                			}
                		},
                		path: "ivr/123.txt"
                	};
                
                	r = await y.exec("UploadFile", o);
                
                	console.log(r);
                
                	/** הורדת קובץ */
                	o = {
                		path: "ivr/123.txt"
                	};
                
                	r = await y.exec("DownloadFile", o);
                
                	console.log(r);
                
                })();
                

                צריך פונקציה אנונימית, כי רק פונקציות מאפשרות תחביר של א-סינכרוניות.


                המחלקה:
                https://github.com/MusiCode1/yemot-api

                תגובה 1 תגובה אחרונה
                1
                • ח מנותק
                  ח מנותק
                  חוקר
                  כתב ב נערך לאחרונה על ידי
                  #14

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

                  token=091234567:1234
                  

                  ניתן לראות כאן דוגמת שימוש
                  http://www.call2all.co.il/f2/viewtopic.php?f=8&t=5022
                  מבדיקה מול המכנת הראשי בימות המשיח, האפשרות הזו עובדת בכל המקומות במקום טוקן!
                  שימו לב שזה יכול להיות פחות מאובטח שבכל בקשה שולחים את הפרטים המלאים, אבל מצד שני במקום שצריך לעשות רק קריאה אחת, אז זה ודאי לא אחרת מהקריאה ליצירת הטוקן..

                  nigunN תגובה 1 תגובה אחרונה
                  2
                  • nigunN מנותק
                    nigunN מנותק
                    nigun
                    השיב לחוקר ב נערך לאחרונה על ידי
                    #15

                    @חוקר
                    בדקת האם זה מאריך את הקריאה?
                    (במילים אחרות האם יש סיבה להשתמש בטוקן חוץ מאבטחה?)

                    מייל: nigun@duck.com

                    תגובה 1 תגובה אחרונה
                    0
                    • MusiCodeM מנותק
                      MusiCodeM מנותק
                      MusiCode
                      כתב ב נערך לאחרונה על ידי
                      #16

                      מניח שלא אמור מאוד להאריך.

                      ולמעשה, גם אבטחה לא כ"כ, כי זה HTTPS, והכל מוצפן.

                      תגובה 1 תגובה אחרונה
                      1
                      • ח מנותק
                        ח מנותק
                        חוקר
                        כתב ב נערך לאחרונה על ידי חוקר
                        #17

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

                        nigunN תגובה 1 תגובה אחרונה
                        0
                        • nigunN מנותק
                          nigunN מנותק
                          nigun
                          השיב לחוקר ב נערך לאחרונה על ידי nigun
                          #18

                          @חוקר
                          עשיתי עכשיו כמה בדיקות עם wrk ולא מצאתי הבדל

                          מייל: nigun@duck.com

                          תגובה 1 תגובה אחרונה
                          0

                          בא תתחבר לדף היומי!
                          • התחברות

                          • אין לך חשבון עדיין? הרשמה

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