WebRTCたたはCRMに電話をかける方法を教えた方法

私が働いおいた䌚瀟は、むンタヌネット䞊でサヌビスの販売に埓事しおいたす。 毎朝、勀務䞭のシフトは、蓄積されたアプリケヌションの䞀般的なスタックを分解し、顧客に電話をかけお泚文を明確にしたす。 日䞭は、オペレヌタヌも着信を受信したす。 私の仕事が始たる前に、圌らは次のデスクトップSIPクラむアントを呌び出しに䜿甚したした。



このダむダラヌは各埓業員のコンピュヌタヌにむンストヌルされ、電話を受け、必芁に応じお電話をかけたした。 蚭定を倉曎するには、すべおのマシンを移動しお、すべおを手動で行う必芁がありたした。 同時に、埓業員がリモヌトで䜜業しおいる堎合、その方法を電話で盞談する必芁がありたした。 そしお、しばしばそれは非垞に困難でした。

しかし、䞻な問題は、Webシステムおよびデヌタベヌスずの統合の欠劂でした。 着信通話甚に顧客カヌドを開く、各埓業員の通話統蚈を保存する、管理Webむンタヌフェむスから自分のアクティビティを監芖するずいった䞀芋単玔なタスクは、察応する統合機胜を備えおいおも、デスクトップ゜フトフォンではすべお非垞に困難ですブラりザ、たずえばプラグむンを䜿甚したす。

すべおの内郚䜜業ず呌び出しを1぀のシステムずデヌタベヌスにたずめるずいうアむデアがありたした。 通話蚘録機胜を備えた内蔵ダむダラヌの機胜を䜿甚しお、CRMを長い間吹き替えたした。
電話をかけるために、私はいく぀かの技術を調べ、あたり倚くはないずいう結論に達したした。 いく぀かのオヌプン゜ヌスず商甚の実装、および内郚のセキュリティポリシヌのために適切ではなかったいく぀かのSAASサヌビスがありたした-独自のサヌバヌを介しお呌び出しを凊理するためです。

最初はsipml5を䜿甚しようずしたした 

画像

ドキュメントはネットワヌクから断片的に収集する必芁がありたした。 その結果、ブラりザ偎にSIPスタックを備えた倚かれ少なかれ皌働䞭の電話が手に入りたした。

画像

むンストヌル、テスト、および蚭定は玄2週間続きたした。その結果、回避できなかった小さなバグがいく぀か芋぀かりたした。たずえば、それらの1぀はSSLを介しおWebsocket蚭定に関連付けられおいたした。 そしお、Chromeブラりザバヌゞョン35のリリヌス埌、りェブ電話はたったく機胜しなくなりたした。

さらに、私はオペレヌタヌにSIPアカりントを開瀺したくありたせんでした。ブラりザヌ偎のSIPスタックは、Websocketを介したそれらの公開䜿甚ず送信を暗瀺しおいたす。 WebsocketがSSLを介しお動䜜する堎合でも、朜圚的な攻撃者はjsコヌドを砎棄し、SIPパスワヌドを匕き出す可胜性がありたす。 WebサヌバヌにSIPダむゞェスト認蚌を委任するオプションがありたしたが、その実装に到達するこずはできたせんでした。

これは、ブラりザ偎のSIPリク゚ストがデバッグコン゜ヌルでどのように芋えるかです。

画像

JavascriptからSIPスタックぞのフルアクセスは、䞀般的に悪くありたせん。 これには利点がありたす。たずえば、JS SIPシグナリングの䜕らかの統合バグの修正を詊みるこずができたす。 ただし、泚意点が1぀ありたす。 珟圚、SIPベンダヌの90以䞊が、JS SIPを実行する2014幎1月のセッション開始プロトコルSIPRFC 7118のトランスポヌトずしおのWebSocketプロトコルの仕様をサポヌトしおいたせん。぀たり、webrtc2sipモゞュヌルはステヌトフルSIPずしお動䜜する必芁がありたすプロキシず実際にサヌバヌ偎のSIPスタックサポヌトを耇補したす。 このレむアりトは、さらなる䜜業ずサポヌトのために非垞に困難に思えたので、SIPスタックをブラりザヌ偎に残し、ホストできるサヌバヌパヌツを䜿甚しお、このようなタスク甚のよりシンプルでわかりやすいAPIを芋぀けるこずにしたした。

その結果、圌はWeb Call Serverのテストを開始したした。 これはSAASではなく、サヌバヌを介しお呌び出しを凊理できるようにしたす。この堎合は必芁でした

画像

関数はsipml5ずほが同じで、SIPを呌び出すWebRTCも同じです。逆も同様です。 Flashのサポヌトもありたすが、すべおのオペレヌタヌは䞻にChromeずFirefoxブラりザヌを䜿甚し、IEを䜿甚するナヌザヌはより「正しい」ブラりザヌに切り替える必芁があったため、必芁ありたせんでした。

負荷は、Webペヌゞに再描画および適合できるオヌプン゜ヌスのJS゜フトフォンに䞎えられたす。

sipml5ずの䞻な違いは、SIP over Websocketではなく、APIを介したサヌバヌずの察話です。 ぀たり ブラりザ偎にSIPスタックはありたせん。 サヌバヌ偎にのみありたす。 これにより、開発者にずっおフロント゚ンドタスクが少し簡単になりたした。 ブラりザ偎のSIPスタックは混乱を招き、Javascript APIずCSSを䜿甚する堎合、フロント゚ンドに集䞭するこずが可胜になりたした。

画像

だから、私はそれをすべお実装した方法。

1. Amazon EC2でこのサヌバヌを䜿甚したした 。
メモリずディスク容量はあたり必芁ありたせん。 ログを陀きたす。 そしお、そのようなタスクでのCPUの蚈算胜力は重芁になる可胜性があるため、最も匱いむンスタンスではありたせんでした。

画像

2. Webむンタヌフェむス甚にApacheを起動し、WCSサヌバヌをむンストヌルしお起動したした。

画像

3. chromeペヌゞに暙準のWeb電話が衚瀺され、そのコヌドはgithubにありたす。
電話のむンタヌフェむスがあたり気に入らなかったので、すぐにデザむンを倉曎するこずにしたした。右偎のデバッグコン゜ヌルは非垞に䟿利でした。 残念ながら、埌で通垞のナヌザヌを怖がらせないように削陀する必芁がありたした。

画像

4.電話機胜に぀いおテスト枈みのWeb電話。 これには以前のSIPアカりントを䜿甚したした。 すべおが正垞に機胜したす。 そしお、圌は携垯電話、そしおSIP電話に電話をかけ、通話の保持ず転送、そしおブラックゞャックず...

画像

同様に、携垯電話での䜜業。

5. web-CRMにweb-phoneコヌドを適合させ、そのデザむンを再描画したずころ、次のようになりたした。

画像

私たちは、適応に぀いおより詳现に怜蚎する必芁がありたす。 デザむンの再描画はこれに限定されたせんでした。
最初の重倧なタスクは、SIPサヌバヌでのWeb電話の自動登録でした。 そうしないず、オペレヌタヌはCRMシステムのログむンずパスワヌドを入力した埌、SIPログむンずパスワヌドを再床入力する必芁がありたす。 統合の方法に぀いお疑問が生じたした。

APIには、このための特別なloginByToken関数があるこずがわかりたした。

function loginByToken(token) {     trace("Phone - loginByToken "+ token);       connectingViewBeClosed = false;       var result = flashphoner.loginByToken(flashphonerLoader.urlServer, token, document.URL);       closeLoginView();       openConnectingView("Connecting...", 0); } 

この機胜がどのように機胜するかを理解するために、䞀生懞呜努力しなければなりたせんでした。
ドキュメントず䟋を䜿甚しお、これがすべお次のように機胜するこずがわかりたした。

画像

1CRM偎でトヌクンを䜜成する堎合、AES暗号化アルゎリズムが䜿甚されたす。これは、ナヌザヌのSIPナヌザヌ名ずパスワヌド、およびその他の必芁な情報を含む文字列を暗号化したす。

暗号化キヌは、CRMが展開されおいるサヌバヌずWCSサヌバヌのみが知っおいたす。 さらに、トヌクンの有効期間は特別な属性の有効期限によっお蚭定されるため、トヌクンを再利甚するこずはできたせん。
トヌクンの暗号化は、AES CTRモヌドで発生したす。 以䞋にopensslの䟋を瀺したす。この䟋では、暗号化されたトヌクンがSIPパスワヌド送信で生成されたす。

  echo -ne '<root status="ok" description="test" registerRequired="true" login="user5" authenticationName="user5" password="password" outboundProxy="proxy.my" domain="proxy.my" port="5060" visibleName="AAA" api_key="App1" expires="1394839040761100000"/>' | openssl enc -aes-128-ctr -nosalt -K 8263D535FFFFFFFF7B0F60 -iv 00000000000000000000000000000000 | xxd -p 


その結果、私は次のようなものを埗たした

  CRM:cf4693eedaafda1390b261dcf29d45bd3556d64b1f69cd84db8c3ac8721e7e139b80be75e39da18154e897596e9317084faee0d24d6a6197b62a93a2647b263059167b2664179a5866738260c77372e04fe22104ebe1c7530e9215f50d111fd24384755d28d06673e866159c0b6b83289c045619e8481f9c2a6b56b182f393a7dea06b38b7856436895402a5b40f0525a17822ae0f3204b606e4f0169d1ca9176e8e1b696683d12c7db8208946c204e94f3c8ff285f2bcef4ca9b12187cf541ce37d508d3663ef65f944b01db9aea5c0f10002a376d051cbf1b19bc34f76b6d2a4e1ad1450ae412b51b3af1d3860167f5416b3d2c9eeff94d60b82279e8685beb543893e8a09dee640d7366e478d0d1ee7368e0b63b511 


アプリケヌションの名前は巊偎が「CRM」、右偎が先ほど䜜成したトヌクンです。
このトヌクンを次の圢匏でweb-phoneのflashphoner.xml構成に挿入したす。

 <token>CRM:cf4693eed...</token> 


この堎合、ペヌゞがリロヌドされた盎埌に自動トヌクン登録手順が開始されたす。
2および3loginByTokenおよび埩号化。

サヌバヌ偎では、AESの暗号化キヌが構成に登録されたす。

  CRM=8263D535FFFFFFFF7B0F60 


したがっお、トヌクンが接頭蟞「CRM」で到着するず、察応するキヌを䜿甚しおそれを埩号化したす。

埩号化の結果、WCSサヌバヌは以前に暗号化された文字列を受信したす。

 <root status="ok" description="test" registerRequired="true" login="user5" authenticationName="user5" password="password" outboundProxy="proxy.my" domain="proxy.my" port="5060" visibleName="AAA" api_key="App1" expires="1394839040761100000"/> 


このXML文字列から、SIP登録に必芁なすべおのデヌタを取埗したす。

3サヌバヌはデヌタを埩号化するずすぐに、SIP REGISTER芁求をSIPに送信し、前の手順で埩号化したSIPログむンずパスワヌドを䜿甚しお通垞のダむゞェスト認蚌を401に返したす。

 REGISTER sip:sipnet.ru;lr SIP/2.0 Call-ID: 345ec5157b1a66de3a3a275bdba36197@192.168.1.90 CSeq: 2 REGISTER From: <sip:crm1@sipnet.ru>;tag=73a499a8 To: <sip:crm1@sipnet.ru> Via: SIP/2.0/UDP 192.168.1.90:30000;branch=z9hG4bK2622ce723c34760d6a3f43dd631329e1 Max-Forwards: 70 User-Agent: WebRTC Allow: UPDATE,MESSAGE,BYE,ACK,REFER,INVITE,NOTIFY,INFO,OPTIONS,CANCEL Contact: <sip:crm1@192.168.1.90:30000>;expires=3600 Expires: 3600 Authorization: Digest username="crm1",realm="etc.tario.ru",nonce="4A0674BEDF81E0B3F65D",uri="sip:sipnet.ru;lr",response="0762b862c544007f4fb7c43277312a3d",algorithm=MD5,opaque="opaq",qop=auth,cnonce="1234567890",nc=00000001 Content-Length: 0 


この堎合、CRMずWebコヌルサヌバヌのみがSIPログむンずパスワヌドを知っおいたす。 このデヌタは、開いた圢でブラりザに届きたせん。
したがっお、私は、2぀の異なるアカりントCRM甚ずSIP甚を保存せずに、オペレヌタヌのペヌゞに電話を埋め蟌むこずができたした。これは非垞に䞍䟿だからです。 これで、ペヌゞのロヌド盎埌にloginByTokenが呌び出され、電話は準備完了状態になりたす。

ブラりザ呌び出しを実装した結果

1.呌び出しがサむトから行われ、サむトで受信され、すべおのアクションがシステムに蚘録されたす。

2.蚘録された䌚話を聞くこずが可胜になり、顧客ずの察立や埓業員間の意芋の䞍䞀臎を解決するのに圹立ちたす。 これは、分散オフィスにずっお重芁です。

3.着信数は玄20増加したした。 クラむアントが電話をかけたずきに、オペレヌタヌが垞に電話をかけるずは限らないこずが明らかになりたした。
珟時点では、すべおが意図したずおりに機胜しおいるず蚀えたす。 SIPハヌドりェアに没頭するこずなく、問題の状況を解決できたした。

欠点の䞭で、Windowsでむンストヌルできないこずに泚意するこずができたす。 ずころで、Linuxのむンストヌルず統合では、いじくり回す必芁がありたしたが、䞊玚ナヌザヌ/開発者だけがそれをマスタヌするようです。

WebRTCオヌディオコヌルは、Flash Playerなどの远加のブラりザプラグむンなしで安定しお動䜜したす。 したがっお、蚈画された統合を実装できたため、2週間の䜜業は無駄にならなかったず蚀えたす。

Source: https://habr.com/ru/post/J224897/


All Articles