Sonata - SIP-foarsjenningstsjinner

Ik wit net wat te fergelykjen foarsjenning mei. Miskien mei in kat? It liket mooglik sûnder it, mar mei it is in bytsje better. Foaral as it wurket))

Formulearring fan it probleem:

  1. Ik wol SIP-tillefoans fluch, maklik en feilich ynstelle. By it ynstallearjen fan in tillefoan, en noch mear by it opnij konfigurearjen.
  2. In protte leveransiers hawwe har eigen konfiguraasjeformaten, har eigen utilities foar it generearjen fan konfiguraasjes, en har eigen manieren om konfiguraasjes te beskermjen. En ik wol net echt mei elkenien omgean.
  3. In protte foarsjenningsoplossingen, a) binne rjochte op ien ferkeaper as ien telefoansysteem, b) binne frij omslachtig om te ymplementearjen, in protte skripts, parameters, brrr ...

Oangeande punt 3 sil ik in opmerking meitsje dat d'r poerbêste foarsjenningssystemen binne foar FreePBX, foar FusionPBX, foar Kazoo, dêr't sjabloanen foar tillefoans fan ferskate leveransiers iepenbier beskikber binne. D'r binne kommersjele oplossingen wêr't jo ek de wurking fan tillefoans fan ferskate fabrikanten yn 'e foarsjenningsmodule kinne konfigurearje, bygelyks Yeastar PBX.

Habré is ek fol mei resepten oer hoe't jo apparaten kinne ynstelle fan ferskate leveransiers: kearen, два. Mar sa't se sizze, alle systemen hawwe in fatale flater. Sa meitsje wy ús eigen fyts.

dyn eigen formaat

Lykas se sizze yn xkcd, as jo net wolle omgean mei 14 formaten - komme mei de 15e. Dêrom brûke wy algemiene ynstellings foar elke tillefoan en meitsje ús eigen json-konfiguraasjeformaat.

Soksawat:

{
   "key": "sdgjdeu9443908",
   "token": "590sfdsf8u984",
   "model": "gxp1620",
   "vendor": "grandstream",
   "mac": "001565113af8",
   "timezone_offset": "GMT+03",
   "ntp_server": "pool.ntp.org",
   "status": true,
   "accounts": [
      {
         "name": "Мобилон",
         "line": 1,
         "sip_register": "sip.mobilonsip.ru",
         "sip_name": "sip102",
         "sip_user": "sip102",
         "sip_password": "4321",
         "sip_auth": "sip102"
      }
   ]
}

Dus, yn elke tillefoan moatte jo lokale tiid en SIP-rigels konfigurearje. Alles is hjir ienfâldich. Jo kinne mear foarbylden sjen hjir.

jo eigen serverfoarsjenning

Yn 'e hânboeken fan' e fabrikant is d'r normaal in punt wêr't it seit: nim in csv, skriuw jo login-wachtwurd-mac-adres op, generearje bestannen mei ús proprietêre skript, set se ûnder de Apache-webserver en alles sil goed wêze.

De folgjende paragraaf fan 'e hantlieding fertelt jo normaal dat jo it generearre konfiguraasjetriem ek kinne fersiferje.

Mar dit binne allegear klassikers. De moderne oanpak mei smoothies en Twitter seit dat jo in klearmakke webserver meitsje moatte dy't net sa machtich wêze sil as Apache, mar mar ien lyts ding dwaan sil. Generearje en ferstjoere konfiguraasjes mei in keppeling.

Litte wy hjir stopje en ûnthâlde dat hast alle SIP-tillefoans no konfiguraasjes kinne ûntfange fia http/https, dus wy beskôgje gjin oare ymplemintaasjes (ftp, tftp, ftps). Dan wit elke tillefoan syn eigen MAC-adres. Dêrom sille wy twa keppelings meitsje: ien persoanlik - basearre op 'e apparaatkaai, de twadde algemiene, dy't wurket mei in kombinaasje fan in mienskiplike token en in MAC-adres.

Ek sil ik net stean op nul-config, d.w.s. it ynstellen fan de telefoan fanôf it begjin, d.w.s. jo pluggen it yn it netwurk en it begon te wurkjen. Nee, yn myn senario plug jo it yn it netwurk, dogge de foarriedige opset (set it op om de konfiguraasje fan 'e foarsjenningstsjinner te ûntfangen), en drink dan pina colada en konfigurearje de tillefoan as nedich troch de foarsjenning. Opsje 66 distribúsje is de ferantwurdlikens fan 'e DHCP-tsjinner.

Trouwens, ik bin folslein wurch fan it sizzen fan "foarsjenning", dus it wurd waard ynkoarte ta "foarsjenning", asjebleaft net skop my.

En noch ien ding: ús foarsjenningstsjinner hat gjin UI, d.w.s. brûkersynterface. Miskien, foar no, mar net wis, om't ... Ik haw it net nedich. Mar d'r is in API foar it bewarjen / wiskjen fan ynstellings, it krijen fan in list mei stipe leveransiers, modellen, alles wurdt beskreaun neffens de kanonnen fan 'e swagger-spesifikaasje.

Wêrom API en net UI? Omdat Ik haw al myn eigen telefoansysteem, dan haw ik in boarne fan bewiisbrieven, wêr't ik gewoan dizze gegevens moat nimme, de nedige json kompilearje en publisearje op 'e foarsjenningstsjinner. En de foarsjenningstsjinner, neffens de regels spesifisearre yn it json-bestân, sil it fereaske apparaat syn konfiguraasje jaan of sil it net jaan as it apparaat net korrekt is of net foldocht oan 'e kritearia ek spesifisearre yn dizze json.

Sonata - SIP-foarsjenningstsjinner

Dit is hoe't de foarsjenningsmikrotsjinst útkaam. Neamd sonata, de boarne koade is beskikber op GitHub, der is ek klear docker ôfbylding, foarbyld fan docker gebrûk hjir.

Key funksjes:

  • yn alle gefallen, beheinde tagong ta de konfiguraasje troch tiid, standert 10 minuten. As jo ​​de konfiguraasje wer beskikber meitsje wolle, publisearje de konfiguraasje opnij.

  • ien opmaak foar alle vendors, alle oanpassings wurde fuortsmiten yn sonata, jo stjoere standerdisearre json, konfigurearje alle beskikbere apparatuer.

  • alle konfiguraasjes útjûn oan apparaten wurde oanmeld, alle probleemgebieten kinne wurde besjoen yn it log en flaters kinne wurde sjoen

  • It is mooglik om ien mienskiplike keppeling te brûken mei in token; elke tillefoan krijt in eigen konfiguraasje troch it mac-adres op te jaan. Of in persoanlike keppeling fia kaai.

  • API's foar behear (behear) en foarsjenning fan konfiguraasjes nei tillefoans (foarsjenning) wurde ferdield troch havens

  • Tests. It wie foar my heul wichtich om it formaat fan 'e útjûne konfiguraasje te reparearjen en alle gewoane situaasjes te dekken fan it útjaan fan in konfiguraasje mei tests. Dat dit allegear dúdlik wurket.

Cons:

Oant no wurdt fersifering op gjin inkelde manier brûkt yn Sonata. Dy. jo kinne fansels begjinne mei it brûken fan https troch bygelyks nginx foar sonata te setten. Mar proprietêre metoaden binne noch net brûkt. Wêrom? It projekt is noch jong, it hat syn earste hûndert apparaten lansearre. En, fansels, sammelje ik ideeën en feedback. Fierder, om alles feilich te meitsjen, sadat de konfiguraasjes net op it netwurk kinne wurde snuffele, is it wierskynlik de muoite wurdich om fersiferingskaaien, tls en de egel mei har te bemuoien, mar dit sil in fuortsetting wêze.

Gebrek oan UI. Miskien is dit in signifikant neidiel foar de einbrûker, mar foar in systeembehearder is in konsole-hulpprogramma wichtiger as in folsleine applikaasje. D'r wiene plannen om in konsole-hulpprogramma te meitsjen, mar ik bin der net wis fan oft it nedich is?

Wat op it ein?

In lytse en ienfâldige webserver foar it foarsjen fan ferskate tillefoanmodellen mei in API foar behear.

Nochris, hoe moat dit wurkje?

  1. Ynstallaasje fan sonata.
  2. Wy meitsje in json-konfiguraasje en publisearje it yn sonata.
  3. Dan krije wy in foarsjenningslink fan sonata.
  4. Dan jouwe wy dizze keppeling oan yn de telefoan.
  5. It apparaat laden de konfiguraasje

Der binne mar twa stappen yn folgjende operaasje:

  1. Wy meitsje in json-konfiguraasje en publisearje it yn sonata
  2. It apparaat laden de konfiguraasje

Hokker tillefoans sille wurde befoardere?

Ferkeapers Grandstream, Fanvil, Yealink. De konfiguraasjes binnen de ferkeaper binne min of mear itselde, mar kinne ferskille ôfhinklik fan 'e firmware - it kin nedich wêze om ekstra te testen.

Hokker regels kinne jo ynstelle?

By tiid. Jo kinne de tiid opjaan wêr't de konfiguraasje beskikber sil wêze.
Troch mac adres. By it yntsjinjen fan de konfiguraasje fia de persoanlike keppeling fan it apparaat, sil it mac-adres ek wurde kontrolearre.
By ip. Troch IP-adres wêrfan it fersyk waard makke.

Hoe kinne jo ynteraksje mei Sonata?

Fia API, it meitsjen fan http-oanfragen. De API sil beskikber wêze yn jo ynstallaasje. Omdat De API stipet de swagger-spesifikaasje, jo kinne brûke online nut foar testoanfragen nei de API.

Ok moai. Cool spul, hoe sit it mei it besykjen?

De maklikste manier is om in docker-ôfbylding yn te setten basearre op in repository sonata-sample. De repository befettet ynstallaasje ynstruksjes.

Wat as ik node.js wit?

As jo ​​ûnderfining hawwe mei it brûken fan JavaScript, dan sille jo fluch útfine hoe't alles hjir wurket.

Sil d'r in Sonata-ûntwikkeling wêze?

Ik haw myn doelen foar in part berikt. Fierdere ûntwikkeling is in kwestje fan myn taken op it ûnderwerp fan it automatisearjen fan tillefoankonfiguraasje. D'r is ek in kâns om de konfiguraasjes út te wreidzjen om tillefoanknoppen te konfigurearjen, adresboekfoarsjenning ta te foegjen, miskien wat oars, skriuw yn 'e kommentaren.

Gearfetting en erkenningen

Ik sil bliid wêze mei konstruktive suggestjes / beswieren / opmerkings en fragen, om't ... It kin wol wêze dat er wat ûnbegryplik beskreaun hat.

Ik uterje ek myn tankberens oan al myn kollega's dy't holpen, advisearre, hifke en tillefoans levere / donearre foar testen. Yn 'e realiteit binne in protte minsken mei wa't ik op it wurk kommunisearre yn ferskate mjitte belutsen by it projekt, AsterConf'e, yn petearen en e-mails. Tank foar de ideeën en tinzen.

Boarne: www.habr.com

Add a comment