Vlastní Asterisk - propojení telefonie s Vaší aplikací

Podrobnější technické novinky a vůbec novinky a postřehy z VoIP.
Uživatelský avatar
xsouku04
Administrátor
Příspěvky: 8146
Registrován: pát 15. říj 2010 11:11:44
Bydliště: Brno
Kontaktovat uživatele:

Vlastní Asterisk - propojení telefonie s Vaší aplikací

Příspěvek od xsouku04 »

Obrázek
Obrázek


Snažíme se, aby všechny základní funkce běžné pobočkové ústředny byly součástí přímo služeb Odorik.cz, a zákazníci tak byli ušetřeni tomu si pořídit, konfigurovat, zabezpečovat, zálohovat a udržovat vlastní pobočkovou ústřednu. Výhody a nevýhody vlastní pobočkové ústředny jsou probrány v článku na naší wiki.

Několikrát jsem se setkal se zákazníky, nadšenými z projektů https://www.twilio.com/, https://www.plivo.com/, https://www.nexmo.com/ , přestože naprostou většinu funkcionality, kterou potřebovali, bylo možné dosáhnout i s Odorik.cz. Tyto služby prý nabízejí navíc možnost řídit logiku směrování hovorů a IVR pomocí nezávislého API, které si může naprogramovat zdatný programátor v libovolném jazyce, aniž by znal detaily ohledně toho, jak volání přes internet vlastně funguje. Projekty twilio a plivo účtují relativně nízké poplatky, na druhou stranu ale skoro a doslova za vše. Za příchozí hovory, za odchozí hovory, za nahrávání hovorů, za telefonní číslo, za šifrování hovoru, za slušnou podporu... A vypadá to, že vše zaokrouhlují na celé minuty... Pokud rostete a ceny se stávají neúnosné nezbývá než se potupně bez možného pozitivního výsledku hádat se s jejich obchodníkem, aby vám např. konečně začali účtovat po vteřině.

Řešení na podobném principu, kdy by příchozí hovory bylo možné řídit pomocí aktivního API, Odorik.cz zatím nenabízí. Nebyla po něm zatím dostatečná poptávka. Otázka zní, je to ale potřebné? Do jaké míry?

Jsou nějaké chyby a nedokonalosti, které mají tyto "mračna" a kterých by se měl/mohl Odorik vyvarovat či to udělat lépe?

Pokud mátě někdo již zkušenost se službami typu Twilio či Plivo, podělte se. Jde mi o o nějakou zpětnou vazbu. Pokud si procházím stránky Twilia, je pro mne těžké rozlišit, co je opravdu dobrá věc a co jen příliš abstraktní marketingová mlha či bublina. Příliš abstraktní mi připadá leccos. Také je samozřejmě možné některou funkcionalitu vylepšit a převzít. Využije to ale dostatečné množství zákazníků nebo je množství zákazníků schopných využít tyto výhody poměrně malé a Twilio a Plivo nás stejně převálcuje svými PR články, marketingem a všeobecnou známostí na trhu bez ohledu na skutečnou kvalitu produktu?

V každém případě je možné služby Odorik.cz a těchto "mračen" kombinovat. "Mračna" nabízí telefonní čísla z celého světa za relativně rozumný měsíční paušální poplatek,, pravda s poplatkem za každou minutu příchozího hovoru.

Odorik vám už nyní podobné řešení může také nabídnout, i když na jiném principu.

Abych nemluvil příliš abstraktně, uvedu příklad ukázkové aplikace pro realitní kancelář napsanou v jazyce ruby. Aplikace si vyžádá zadání čísla nemovitosti. Poté o nemovitosti přečte příslušné informace. Dále aplikace může zaslat kontakty či informace pomocí SMS jak volajícímu tak majiteli nemovitosti.
Aplikace je jen mnou napsaná kostra, se kterou programátoři z realitní kanceláře neměli žádné potíže, třebaže programovací jazyk ruby ani Asterisk předtím nikdy nepoužívali.
Velká výhoda tohoto přístupu je v tom, že skript je spuštěn s novým hovorem, načte si všechny potřebné informace, hovor řídí po celý "jeho život" a skončí spolu s hovorem.
Veškeré informace a stavy hovoru je tak možné ukládat do lokálních proměnných, samozřejmě je možné je logovat nebo číst či ukládat i do databáze. Lokální proměnné ve scriptu mají stejnou životnost jako celý hovor. Větvení možností či cykly hovorů např. v IVR jsou velmi přirozené, hovor běží tak, jak interpret čte jednotlivé řádky zdrojového kódu. Programátor má k dispozici veškeré nástroje a knihovny, co jsou v daném programovacím jazyku k dispozici, místo toho, aby byl nucen zkoumat neznámé a často nelogické zvyklosti konfiguračních souborů Asterisku.

Čitelnější verze se zvýrazněním syntaxe.

Kód: Vybrat vše

#!/usr/bin/ruby
load "/var/lib/asterisk/agi-bin/agi.rb"
 
#
 
begin
   begin
    agi=Agi.new
    volajici=agi.av.callerid
    volany=agi.av.extension
    agi.exec("exec answer")
    # příklad generování zvukového souboru
    # cd /var/lib/asterisk/sounds
    # ./texty.sh zadejte_prosim_kod_nemovitosti "Dovolali jste se do MojeReality. Zadejte prosím kód nemovitosti, o kterou máte zájem."
 
   cislo_nemovitosti=agi.exec("GET DATA zadejte_prosim_kod_nemovitosti 15000 4").result
    agi.verbose("uzivatel zadal nasledujici cislo nemovitosti: #{cislo_nemovitosti}")
    if cislo_nemovitosti!="9999" then
       # ./texty.sh chybny_kod_nemovitosti "Zadali jste chybný kód nemovitosti."
      agi.exec("STREAM FILE chybny_kod_nemovitosti ''")
      cislo_nemovitosti=agi.exec("GET DATA zadejte_prosim_kod_nemovitosti 15000 4").result
    end  
    # zjistim informace o nemovitosti z api a přečtu
    # ./texty.sh 9999 "Je to Byt 3 plus 1 Nové sady Brno."
    agi.exec("STREAM FILE dev/#{cislo_nemovitosti} ''")
    # pošlu SMS
    agi.close
   rescue StandardError
    Agi.logException($!)
    agi.close
   end 
rescue SignalException
    agi.close
end
Aplikace předpokládá využití TTS (text to speech) enginu (počítačový nástroj na převod psaného textu na mluvené slovo) speechtech.cz, který představíme v jiné novince během několika dní. Již v tuhle chvíli by měl být dostupný každému za kredit na Odorik.cz přes Odorik API, nebo přímo ve webovém rozhraní.
Denní náklady na provoz virtuálu jsou cca 1,5 Kč/den, při vyšším počtu hovorů rostou náklady jen mírně. Možné je využít veškerou funkcionalitu, co Asterisk nabízí, ale vyhnout se obtížím s tradičně nepřehlednou konfigurací Asterisku a možným problémům se zabezpečením - asterisk neběží na veřejné adrese. Programovat agi scripty je možné v libovolném programovací jazyce a to pro programátory přehledným a přirozeným způsobem bez zbytečné abstrakce. Viz dokumentace možností agi scriptů - http://www.voip-info.org/wiki/view/Aste ... GIcommands. Virtuál na 4smart může obsahovat rovnou databázi i web, nebo je možné k databázi přistupovat vzdáleně, či si potřebné informace načítat přes k tomu vytvořené API.

Přestože Odorik.cz běžně asistenci s konfigurací vlastních pobočkových ústředen nenabízí, podobná konfigurace je výjimkou. Vše je totiž jednoduché, krátké a přehledné, záhadné potíže se prostě nekonají. Tedy v případě potřeby můžeme asistovat a se zkušeností se podělit.
Uživatelský avatar
xsouku04
Administrátor
Příspěvky: 8146
Registrován: pát 15. říj 2010 11:11:44
Bydliště: Brno
Kontaktovat uživatele:

Re: Vlastní Asterisk - propojení telefonie s Vaší aplikací

Příspěvek od xsouku04 »

Tak jsem studoval nějaké příklady na jednoduchých hlasových aplikací na plivo.
Co jsem pochopil, tak hlavní výhoda je v tom, že webový vývojáři mohou psát hlasová menu a VoIP aplikace způsobem na který jsou již zvyklí při psaní webu. Není to tak, že by věc najednou byla zázračně jednodušší, jen je převedena do podoby na kterou jsou zvyklí vývojáři webu. A odsud pramení to obrovské nadšení. Stav hovoru - tedy informace o konkrétním hovoru je možné přenášet z cloudu pomocí URL a metod GET či POST případně mohou též simulovat cookies. Na základě těchto údajů, které webová aplikace obdrží, vygeneruje další pokyny pomocí speciální XML na jehož pohodlné generování je poskytnuta zvláštní knihovna, součástí odpovědi je následující URL.

Pokud bychom chtěli udělat něco podobného:
Při příchozím hovoru bychom také zavolali předem definové URL a informaci o hovoru předali pomocí GET či POST. Web by ale nemusel vracet nějaký příkaz v uměle vytvořeném jazyce XML, ale mohl by vrátit obyčejný již zdokumentovaný příkaz AGI scriptu, který bychom jen zkontrolovali a nechali provést. Místo cesty ke zvukovým souborům by se poskytovalo URL zvukových souborů nebo id zvukové hlášky, která je na Odorik.cz již uložena (rychlejší). Kromě přikazu AGI, by skript mohl vrátil též URL, které má být zavoláno poté co bude příkaz hotov. Byl by o tohle zájem?


Jiná možnost jak na dálku řídit hovory by bylo něco na způsob fastagi. Kdy by Asterisk (dost možná dedikovaný) by běžel u nás, ale agi script v libovolném jazyce u našeho zákazníka. Výsledný program by byl o poznání přehlednější - stejný jako ukázka výše. Komunikace by probíhala pomocí TCP spojení stejně jako kdyby skript běžel lokálně. Nevýhoda je, že na podobné věci nejsou vývojáři webu zvyklí a pravděpodobně nemají ani svůj virtuál na kterém by mohla aplikace běžet. Protože používají jen obyčejný webhosting. Přestože by asi výsledný program byl přehlednější a elegantnější, webový vývojáři který je naprostá většina by to neocenili. Asi je tedy lepší mít virtuál i s vlastním asteriskem u nás a skript nahrát přimo na něj, aby běžel lokálně. Tedy možnost demonstrována výše.
RadimK
Příspěvky: 70
Registrován: pát 27. pro 2013 17:29:30

Re: Vlastní Asterisk - propojení telefonie s Vaší aplikací

Příspěvek od RadimK »

Ano je to přesně jak píšete, zjednodušeně řečeno info o konkrétním hovoru je možné přenášet z cloudu pomocí URL a metod GET či POST, není na tom nic zázračného a pro každého sotva průměrného webaře dostačující.
Trošku mě překvapuje, jak píšete, že se zde najdou lidi, který by to rádi využívali, myslim v ČR končinách.
K tomu, když se připočte práce webaře, nějaký support. Né, že by o to nebyl zájem, ale když se podíváte na pricing list, tak se firma může dostat do slušných cenových relací :-)
Uživatelský avatar
xsouku04
Administrátor
Příspěvky: 8146
Registrován: pát 15. říj 2010 11:11:44
Bydliště: Brno
Kontaktovat uživatele:

Re: Vlastní Asterisk - propojení telefonie s Vaší aplikací

Příspěvek od xsouku04 »

Když se podívám do ceníku twilio.
Tak za číslo se platí 1 USD/měsíc, za to že z něj lze volat tísňové linky je poplatek další 1 USD/měsíc a funguje to navíc jen v USA a Kanadě, za minutu hovoru na číslo zaplatíte 0,0075 USD/min, za to že hovor přijmete na SIPu zaplatíte 0,005 USD/min, za nahrávání hovoru zaplatíte 0,0025 USD/min, za uložení nahrávky u nich platíte 0,0005 USD/min/měsíc, za šifrování hovoru (pokud chcete) zaplatíte 0,0001 USD/min . Pak jsem objevil ještě položku za data 0,40 USD za 1 GB, ale vůbec nevím kdy se účtuje ... A taky je tam ceník něčeho co vypadá jako ceny za přístup k API. A to možná ještě nějaké podstatné informace, jako např. účtování 60+60 zamlčují.
Tedy vypadá to, že minuta příchozího hovoru, který jinak bývá zdarma, vás přijde na cca 0,50 Kč/min ...
Přitom myslím, že dodělat funkci web API u Odoriku by nemuselo být něco extra pracného ani zdlouhavého. Škálovatelnost díky tomu jak využíváme sip proxy u nás není problém. Konkurovat cenou, spolehlivostí ani kvalitou podpory by problém být neměl.

Co by to ale chtělo je mít telefonní čísla i z jiných zemí. Zde je problém, protože firmy co se přeprodáváním čísel zabývají jsou buď moc drahé a arogantní (viz. např. neznámější https://www.voxbone.com/coverage/voip-coverage - nebudou se bavit s někým kdo nehodlá utrácet alespoň 500 EUR/měsíc a tomu navíc dají naprosto nehorázné ceny) - navíc si účtují nejen za čísla ale i každý otevřený hlasový kanál. Cenovou politiku obecně tají a obchodníkovi trvá až týden než se ozve a pak handlovat jako na arabském tržišti. Nezbývá tedy, než místo s voxbone komunikovat s nějakým potencionálně nespolehlivým voxbone překupníkem, který se dostal už na rozumné ceny. Větším zákazníkům dávají voxbone a podobní ceny několikanásobně nižší (zjevně mají obavy, aby se bez nich neobešli) i když i jim účtují za kanál. Proto jsou Twilio a Plivo nuceni účtovat tak vysokou cenu za příchozí hovory na číslo - aby pokryly tyto poplatky. (Twilio má čísla od voxbone, tedy alespoň v ČR kde to mohu ověřit)
A druhá množina operátorů jsou sice levnější, ke každému číslu dají alespoň dva kanály v ceně, ale jsou nezodpovědní a potencionálně nespolehliví. Fungovat může přestat i operátor od kterého mají ona čísla v dané zemi. Číslo nelze přenést a teoreticky může přestat fungovat. Např. klidně Vám prodají číslo pevné linky v Rusku nebo ve Vietnamu za velké peníze a úplně zapomenou zmínit, že je to vlastně neoficiální a číslo může kdykoli přestat fungovat. Samozřejmě poruchou nebo nefunkčností mohou trpět i čísla z relativně "bezpečných" zemí a zde riskujeme, že něčí nezodpovědnost by padla na naše bedra ...
A všichni mají společné to, že fungují hrozně těžkopádně ... A do toho ještě vstupují různé místní úřady se svými nesmyslnými regulacemi a omezeními jako ověřování adresy a šmírováním komu vlastně číslo patří.

Tedy vlastně naši zákazníci mají na výběr. Buď zahraniční číslo drahé, kde se navíc platí i za příchozí hovory či kanál (nebo o to musíme dále navýšit paušál), nebo číslo potencionálně nespolehlivé. Nebo si místního operátora najít a prověřit jeho spolehlivost sami na vlastní zodpovědnost.



Fakt je, že podobné využití VoIP má stále velký nevyužitý potenciál, např. více jak polovina eshopů by si mohla fungujícím telefonním kontaktem zdvojnásobit konverze ... Řešením rozhodně není tam dát na někoho mobil ...
martv
Příspěvky: 44
Registrován: úte 22. led 2013 1:26:57

Re: Vlastní Asterisk - propojení telefonie s Vaší aplikací

Příspěvek od martv »

xsouku04 píše: Jiná možnost jak na dálku řídit hovory by bylo něco na způsob fastagi. Kdy by Asterisk (dost možná dedikovaný) by běžel u nás, ale agi script v libovolném jazyce u našeho zákazníka. Výsledný program by byl o poznání přehlednější - stejný jako ukázka výše. Komunikace by probíhala pomocí TCP spojení stejně jako kdyby skript běžel lokálně. Nevýhoda je, že na podobné věci nejsou vývojáři webu zvyklí a pravděpodobně nemají ani svůj virtuál na kterém by mohla aplikace běžet. Protože používají jen obyčejný webhosting. Přestože by asi výsledný program byl přehlednější a elegantnější, webový vývojáři který je naprostá většina by to neocenili. Asi je tedy lepší mít virtuál i s vlastním asteriskem u nás a skript nahrát přimo na něj, aby běžel lokálně. Tedy možnost demonstrována výše.
To je obecně super nápad! Chtěl bych udělat nějaké vlastní rozhraní, ale nechci řešit Asterisk, který sice nainstalovat umím, ale proč si přidělávat práci, když potřebuji "jen" toto.

Příklad: chceme umožnit dálkový restart zařízení pomocí telefonu. Náš klient zavolá na vyhrazené číslo, přehraje se hláška o zadání PINu, ten se ověří oproti DB, přehraje se nabídka customizovaná pro daného klienta a ten pak pokračuje dál akcí, kterou chce provést. Aktuálně neřešitelné bez vlastního asterisku nebo uvedených služeb :(
Uživatelský avatar
xsouku04
Administrátor
Příspěvky: 8146
Registrován: pát 15. říj 2010 11:11:44
Bydliště: Brno
Kontaktovat uživatele:

Re: Vlastní Asterisk - propojení telefonie s Vaší aplikací

Příspěvek od xsouku04 »

Máme zde nyní možnost řízení hovoru vlastní webovou stránkou.

http://forum.odorik.cz/viewtopic.php?f=14&p=31573
butrus
Příspěvky: 62
Registrován: sob 18. kvě 2013 18:25:32

Re: Vlastní Asterisk - propojení telefonie s Vaší aplikací

Příspěvek od butrus »

xsouku04 píše:Máme zde nyní možnost řízení hovoru vlastní webovou stránkou.

http://forum.odorik.cz/viewtopic.php?f=14&p=31573
A v čem je to lepší než mít doma nainstalován vlastní asterisk, se kterým si mohu dělat, co se mi zlíbí? (A pokud by mi linka do internetu nestačila na moje potřeby, koupím si nějakýho virtuálního hosta a přesunu asterisk tam...)
Uživatelský avatar
xsouku04
Administrátor
Příspěvky: 8146
Registrován: pát 15. říj 2010 11:11:44
Bydliště: Brno
Kontaktovat uživatele:

Re: Vlastní Asterisk - propojení telefonie s Vaší aplikací

Příspěvek od xsouku04 »

butrus píše:
xsouku04 píše:Máme zde nyní možnost řízení hovoru vlastní webovou stránkou.

http://forum.odorik.cz/viewtopic.php?f=14&p=31573
A v čem je to lepší než mít doma nainstalován vlastní asterisk, se kterým si mohu dělat, co se mi zlíbí? (A pokud by mi linka do internetu nestačila na moje potřeby, koupím si nějakýho virtuálního hosta a přesunu asterisk tam...)
Není to lepší, pokud umíte Asterisk nakonfigurovat. Většina IT expertů to ale neumí a učit se jim to nechce. Vývojáři webu, kterých je většina, mohou s oněmi cloudovými službami hovory ovládat způsobem, na který jsou zvyklí při vývoji webu.
Tedy hlavní přínos těchto cloudů je v tom, aby se vývojář webových aplikací nemuseli učit výrazně odlišné věci od těch, které již znají. Musí se učit ono API rozhraní, oněch cloudových řešení, což ale lépe zapadá do jeho vidění světa, a proto je to pro něj snadnější.
Vše ostatní je reklamština a marketingová mlha, typicky stoupající kolem cloudů a cloudových služeb. Veškerému popisu chybí jasně definované omezení a možné nevýhody. O tom se prostě jen mlží, na to člověk musí narazit sám a postupně.

Na druhé straně nastavit Asterisk lze obvykle mnoha různými způsoby a konfiguráky Asterisku mohou být nepříjemná džungle, zvláště když člověk nemá k dispozici nějaké jednoduché příklady. Tedy že má spousta lidí nechuť se do toho vrhat, není překvapivé. Na druhé straně vlastní aplikace využívající Asterisk AGI rozhraní může být i výrazně jednodušší než aplikace s twilio či pliwo, protože jeden skript může ovládat jeden hovor od začátku do konce a stav hovoru lze uchovávat třeba i v lokálních proměnných. Tedy lze dosáhnout maximální přehlednosti a minimum abstrakce. Viz příklad. http://www.odorik.cz/w/vyhody_a_nevyhod ... ane_reseni
butrus
Příspěvky: 62
Registrován: sob 18. kvě 2013 18:25:32

Re: Vlastní Asterisk - propojení telefonie s Vaší aplikací

Příspěvek od butrus »

xsouku04 píše:Většina IT expertů to ale neumí a učit se jim to nechce.
Ale no ták, pane Soukupe. IT expert si Asterisk naštuduje za jedno dopoledne, nijak zvlášť náročné to není a dokumentace se na webu válí spousta.

Navíc skutečný IT expert si bude vědom, že ovládat (cizí) Asterisk z php přes nějaké pofiderní API je z bezpečnostního hlediska dost nerozumný přístup.
Uživatelský avatar
xsouku04
Administrátor
Příspěvky: 8146
Registrován: pát 15. říj 2010 11:11:44
Bydliště: Brno
Kontaktovat uživatele:

Re: Vlastní Asterisk - propojení telefonie s Vaší aplikací

Příspěvek od xsouku04 »

butrus píše:
xsouku04 píše:Většina IT expertů to ale neumí a učit se jim to nechce.
Ale no ták, pane Soukupe. IT expert si Asterisk naštuduje za jedno dopoledne, nijak zvlášť náročné to není a dokumentace se na webu válí spousta.

Navíc skutečný IT expert si bude vědom, že ovládat (cizí) Asterisk z php přes nějaké pofiderní API je z bezpečnostního hlediska dost nerozumný přístup.
Osobně bych twilio ani plivo nepoužíval, ale znám také lidi, co na něj nedají dopustit. Je to trochu hipe, kdy ona věc v cloudu se schovává za marketingovou mlhu, protože je to prostě cool a ony služby se tváří, jako že zákazník nepotřebuje znát žádné technikcé detaily a omezení, protože je to přece tak jednoduché a dobré, že to svět neviděl.

Myslím, že Twilio nebo plivo nepoužívají Asterisk ale freeswitch. Jinak souhlas.


Pokud Asterisk naštudujete a nastavíte za jedno dopoledne, tak gratuluji. Ale já se mnohem více setkávám s těmi, co mají pořád nějaké problémy, s kterými si neví rady. Jak nastavit SIP trunk pro odorik podle návodu řeší třeba několik dní.
A nebo když někomu hacknou Asterisk a provolají z něj kredit, tak mu musím volat a vysvětlovat, jak je to možné a co má proti tomu udělat, aby se to neopakovalo.

A také se setkávám s novými hrozně pomalými webovými aplikacemi. Viz třeba nové webové rozhraní FIO banky. Je sice moderní a hrozně cool, ale podstatně pomalejší a pro nás méně přehledné než to staré... Prostě s IT lidma to může být hodně těžké pořízení, čest výjimkám.
Odpovědět