Kihagyás

CapITris Archiver

A CapITris Archiver célja, hogy a CapITris telefonos rendszerén keresztül futó hívások adatait, illetve hanganyagait a CapITris API-n keresztül lekérje és lementse. A program egy Java alkalmazás (CapITrisArchiver.jar), adatbázis-kapcsolatot nem igényel.

A program futtatása

A programot el lehet egyedileg is indítani, de praktikus lehet ütemezett feladatot beállítani. Több példányban nem futhat, ezt a program elején létrehozott és a program végén törölt 'run.lock' fájl biztosítja.

A programot lehet nostatelistening argumentummal indítani, ez esetben csak a config.json fájlban található adatokat veszi figyelembe és a state.json fájlt figyelmen kívül hagyja.

A state.json fájlt a program lefutása végén menti a program, itt jegyzi be, hogy ha van hiba, illetve, hogy hol tart a letöltési folyamatban. A config.json-ben állítjuk be az időintervallumot, de a state.json-ban a program elmenti, hogy melyik hívás volt az utolsó mentésünk, illetve - ha hiba volt - melyik volt az a hívás, ahol a hiba fellépett.

A program futtatása:

java -jar CapITrisArchiver.jar

VAGY

java -jar CapITrisArchiver.jar -nostatelistening

config.json

Kötelező, enélkül nem működik a program.

Példa:

  {
  "output_dir": "D:/output"
    "api_config": {
      "apikey": "APIKEY...",
      "apiurl": "https://api.capitris.hu/v3/api/ügyfél/"
    },
    "cdr_config": {
      "cdr_mp3name": "[CDRID]_[INTERVIEWID]_[PHONE]_[TIME]",
      "cdr_startdate": "2023.10.25",
      "cdr_enddate": "2023.10.25",
      "cdr_savelist": true,
      "cdr_savemp3": true,
      "cdr_storefields": "cdrid,interviewid,historyid,listitem_num,start_time,..."
    },
    "smtp_config": {
      "sendemail_iferror": true,
      "sender_to": "test@support.hu",
      "smtp_tls": 3,
      "smtp_host": "smtp.office365.com",
      "sender_from": "Teszt <teszt@teszt.hu>",
      "smtp_username": "teszt@teszt.hu",
      "smtp_password": "PWD",
      "smtp_port": 587
    }
  }
Mező Típus Kötelezőség Leírás
output_dir szöveg opcionális (default: futási hely/output) Mentés helye
api_config objektum kötelező CapITris-API konfigurációja
api_config/apikey szöveg kötelező CapITris-API kulcs
api_config/apiurl szöveg kötelező CapITris-API url
cdr_config objektum kötelező Hívások letöltési módjának konfigurációja
cdr_config/cdr_mp3name szöveg opcionális, alapértelmezett: [CDRID][INTERVIEWID][PHONE]_[TIME]) Fájlok elnevezése, az alapértelmezett szövegben található "[" és "]" közötti kifejezések az adott hívásnak megfelelő értékre cserélődnek
cdr_config/cdr_startdate dátum kötelező Hívás idejére vonatkozó kezdő dátum, formátum=yyyy.MM.dd
cdr_config/cdr_enddate dátum opcionális, alapértelmezett mai nap Hívás idejére vonatkozó végdátum, formátum=yyyy.MM.dd
cdr_config/cdr_savelist boolean opcionális, alapértelmezett false Hívás adatait mentse-e a program
cdr_config/cdr_savemp3 boolean opcionális, alapértelmezett false Hívás hanganyagát mentse-e a program
cdr_config/cdr_storefields szöveg kötelező Az elérhető változókat vesszővel elválasztva kell megadni (elérhető változókról lásd a cdr/list végpontra vonatkozó API-leírást)
smtp_config objektum opcionális Ha a program hibára fut, be lehet állítani megadott címre e-mail kiküldést, amelyekhez SMTP-adatok szükségesek
smtp_config/sendemail_iferror boolean opcionális, alapértelmezett false Küldjön-e e-mailt a program
smtp_config/sender_to szöveg kötelező Címzett e-mail címe
smtp_config/smtp_tls integer kötelező Titkosítás módja
smtp_config/smtp_host szöveg kötelező SMTP-host
smtp_config/sender_from szöveg kötelező Feladó e-mail címe
smtp_config/sender_username szöveg kötelező SMTP-user
smtp_config/sender_password szöveg kötelező SMTP-password
smtp_config/smtp_port integer kötelező SMTP-port

state.json

A fájlt a program írja automatikusan.

Példa:

  {
    "cdr_lastrunstate": 0,
    "cdr_lastcdrid": 1051021,
    "cdr_lastdate": "2023.10.25 19:42:16",
    "cdr_laststopped": "2023.10.25 23:19:33"
  }
Mező Típus Leírás
cdr_lastrunstate integer 0=összes lekért rekordot elmentette, 1=nem mentette el az összeset, de csak azért, mert folyamatban lévő beszélgetésbe futott, vagy 10 percen belül végetérthez, 2=Hibával ért véget a a letöltési folyamat
cdr_lastcdrid integer Ha cdr_lastrunstate=0, az utolsó elmentett hívás, ha cdr_lastrunstate>0, akkor az a rekord, amelynek a mentése már nem sikerült
cdr_lastdate időpont cdr_lastcdrid tartozó hívás kezdési ideje
cdr_laststopped időpont fájl mentési ideje

Mentési szerkezet

A program havi bontásban menti az adatokat, hanganyagokat. A mappákat yyyyMM formátumban hozzuk létre. A mappán belül két további almappa van:

  • cdrlists: naponként egy, tabbal szeparált txt-fájl található a mappában.
  • mp3: az adott hónap hanganyagai

  • 202310/cdrlists => cdrlist_20231001.txt, cdrlist_20231002.txt, cdrlist_20231003.txt ...

  • 202310/mp3 => 1000001_1000001_3611234567_20231001120720.mp3 ...

A program működése

A program a config.json és a state.json fájlok segítségével határozza meg, hogy milyen időintervallumban kéri le az adatokat. Mivel nem adatbázisba mentjük az adatokat, a naponkénti mentéssel biztosítjuk az adatok konzisztenciáját.

Alapvetően kétféleképpen történhet a futás:

1. Kezdő dátum config.json beállításai alapján: a program a beállított kezdő és végdátum intervallumban kéri le az adatokat, napokra osztva az intervallumot. Ha az adott napra már van cdr-lista mentve, akkor azt törli a program, és nulláról kezdi tölteni.

Példa: cdr_startdate="2023.10.01", cdr_enddate="2023.10.05"
1. intervallum: 2023.10.01 00:00:00-2023.10.02 00:00:00
2. intervallum: 2023.10.02 00:00:00-2023.10.03 00:00:00
3. intervallum: 2023.10.03 00:00:00-2023.10.04 00:00:00
4. intervallum: 2023.10.04 00:00:00-2023.10.05 00:00:00

2. Kezdő dátum state.json beállításai alapján: a program a cdr_lastdate és a konfig-végdátum intervallumban kéri le az adatokat. A nem teljes napra vonatkozó lekérés esetén a program nem törli az adott nap cdr-listáját, hanem hozzáírja a kapott hívások adatait.

Példa: cdr_startdate="2023.10.01", cdr_enddate="2023.10.05", cdr_lastdate="2023.10.03 15:01:15
1. intervallum: 2023.10.03 15:01:15-2023.10.04 00:00:00
2. intervallum: 2023.10.04 00:00:00-2023.10.05 00:00:00

A program futásának kimenetele

Hibás esetek:
1. Hiba lép fel a hívások letöltése előtt (pl. nincs config.json file, vagy nem elérhető a CapITris-API): ha kell, a program küld e-mailt a hibáról, de érdemben nem történik semmi
2. A program eljut a hanganyagok letöltéséig, de még az első rekord feldolgozása előtt hibára fut. Ez az eset az elsőhöz hasonló
Megfelelelő működés:
1. A program eljut a hanganyagok letöltéséig, rendben megy a folyamat, de elérkezik egy híváshoz, ami még folyamatban van, vagy a hívás vége 10 percen belül van.
Ez esetben a program kilép rendeltetésszerűen, és elmenti, hogy melyik volt ez a cdrid. Ebben az esetben a legközelebbi futáskor ezt a cdr-t is megpróbálja feldolgozni.
2. A program eljut a hanganyagok letöltéséig, rendben megy a folyamat, az összes hanganyagot fel tudja dolgozni. Ez esetben a program kilép rendeltetésszerűen, és elmenti, hogy melyik volt ez a cdrid. Csak ebben az esetben a legközelebbi futáskor (cdrid + 1)-gyel folytatja a letöltést.