{"id":28921,"date":"2015-05-27T13:49:22","date_gmt":"2015-05-27T12:49:22","guid":{"rendered":"https:\/\/voipstudio.com\/blog\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti-2\/"},"modified":"2025-12-11T17:17:27","modified_gmt":"2025-12-11T17:17:27","slug":"kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti","status":"publish","type":"post","link":"https:\/\/voipstudio.com\/pl\/blog\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\/","title":{"rendered":"&#8222;Kliknij, aby zadzwoni\u0107&#8221; za pomoc\u0105 \u0142\u0105cznika JavaScript CTI"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Jaki\u015b czas temu wprowadzili\u015bmy funkcj\u0119&nbsp;Click to Call z API VoIPstudio, kt\u00f3ra pozwala na tworzenie prostych interfejs\u00f3w u\u017cytkownika typu \u201eclick2call\u201d. Rozwi\u0105zanie ewoluowa\u0142o od innego&nbsp;<a href=\"http:\/\/level7systems.co.uk\/en\/click_to_call_with_php_sip\/\" target=\"_blank\" rel=\"noreferrer noopener\">starszego wpisu na blogu<\/a>, kt\u00f3ry wprowadzi\u0142 \u201ec2c\u201d z klas\u0105 PHP-SIP. Dzi\u015b chc\u0119 Wam pokaza\u0107 kolejny etap ewolucji wdro\u017cenia c2c: JavaScript CTI Connector pozwalaj\u0105cy na integracj\u0119 telefonii komputerowej (CTI) strony internetowej lub aplikacji klienta oraz VoIPstudio Cloud PBX.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ta integracja nie wymaga ju\u017c PHP ani \u017cadnych innych komponent\u00f3w po stronie serwera. Ca\u0142a implementacja napisana jest w j\u0119zyku JavaScript i mo\u017cna j\u0105 w prosty spos\u00f3b zintegrowa\u0107 z dowoln\u0105 aplikacj\u0105 obs\u0142uguj\u0105c\u0105 JavaScript w przegl\u0105darce internetowej.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To og\u00f3lne z\u0142\u0105cze JavaScript CTI Connector opiera si\u0119 na najnowszych pracach, kt\u00f3re wykonali\u015bmy w celu integracji naszej&nbsp;<a href=\"https:\/\/appexchange.salesforce.com\/listingDetail?listingId=a0N3000000B5MTxEAN\" target=\"_blank\" rel=\"noreferrer noopener\">platformy Cloud PBX z Salesforce<\/a>&nbsp;i&nbsp;<a href=\"https:\/\/cloud.oracle.com\/marketplace\/listing\/3089596\/Level-7-Systems-Ltd\/VoIPstudio-CTI-Connector\" target=\"_blank\" rel=\"noreferrer noopener\">Oracle Sales Cloud<\/a>. Naszym g\u0142\u00f3wnym celem by\u0142o udost\u0119pnienie podobnej funkcjonalno\u015bci programistom pracuj\u0105cym nad dowolnymi aplikacjami internetowymi, kt\u00f3re mog\u0105 czerpa\u0107 korzy\u015bci z integracji VoIP (telefonii).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nasz CTI Connector jest w pewnym sensie podobny do&nbsp;<a href=\"http:\/\/www.webrtc.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">WebRTC<\/a>, poniewa\u017c oferuje bogat\u0105 komunikacj\u0119 w czasie rzeczywistym kontrolowan\u0105 przez przegl\u0105dark\u0119 internetow\u0105. Istnieje jednak kilka zasadniczych r\u00f3\u017cnic:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>dzia\u0142a we wszystkich przegl\u0105darkach internetowych (w chwili pisania tego tekstu WebRTC nie jest obs\u0142ugiwany przez przegl\u0105dark\u0119 Internet Explorer, co mo\u017ce ogranicza\u0107 jego wykorzystanie w aplikacjach biznesowych);<\/li><li>nie jest to technologia peer-to-peer i korzysta ze wszystkich zaawansowanych funkcjonalno\u015bci telefonicznych dost\u0119pnych w platformie VoIPstudio;<\/li><li>oferuje \u0142\u0105czno\u015b\u0107 z\/do sieci PSTN (tradycyjnego telefonu) \u201eod razu po wyj\u0119ciu z pude\u0142ka\u201d;<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">WYMAGANIA<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Strofa<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nasz Cti.Connector wymaga biblioteki XMPP dla JavaScript:&nbsp;<a href=\"http:\/\/strophe.im\/strophejs\" target=\"_blank\" rel=\"noreferrer noopener\">Strophe.js<\/a>&nbsp;\u2013 Strophe wykorzystuje BOSH (strumienie dwukierunkowe przez synchroniczny HTTP) do emulacji trwa\u0142ego, stanowego, dwukierunkowego po\u0142\u0105czenia z serwerem XMPP. Wi\u0119cej informacji o Strophe i XMPP mo\u017cna znale\u017a\u0107 w&nbsp;<a href=\"http:\/\/strophe.im\/strophejs\/doc\/1.2.0\/files\/strophe-js.html\" target=\"_blank\" rel=\"noreferrer noopener\">oficjalnej dokumentacji<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Konto Studio VoIP<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Aby m\u00f3c przetestowa\u0107 nasz Connector, musisz za\u0142o\u017cy\u0107&nbsp;<a href=\"https:\/\/voipstudio.pl\/rejestracja\/\" target=\"_blank\" rel=\"noreferrer noopener\">konto pr\u00f3bne<\/a>&nbsp;\u2013 je\u015bli jeszcze go nie masz. Konto to oferuje wszystkie dost\u0119pne funkcjonalno\u015bci bezp\u0142atnie przez miesi\u0105c.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">VoIPstudio og\u0142osi\u0142o tak\u017ce ograniczon\u0105 czasowo ofert\u0119 dla spo\u0142eczno\u015bci programist\u00f3w \u2013 aby umo\u017cliwi\u0107 \u0142atwe testowanie CTI Connector, zaoferuje dodatkowe 5 dolar\u00f3w darmowego kredytu na po\u0142\u0105czenia wychodz\u0105ce i bezp\u0142atny numer przychodz\u0105cy w dowolnym z ponad 5000 miast w 50 krajach.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Z\u0141\u0104CZE<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Zalecamy zapoznanie si\u0119 z nasz\u0105&nbsp;<a href=\"https:\/\/voipstudio.com\/en\/manual\/Admin_Integrations-CTI-Connector\" target=\"_blank\" rel=\"noreferrer noopener\">oficjaln\u0105 dokumentacj\u0105 Cti.Connector<\/a>&nbsp;w celu uzyskania szczeg\u00f3\u0142\u00f3w implementacji. W tym artykule chc\u0119 si\u0119 skupi\u0107 na wdro\u017ceniach i integracji.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Najpierw musisz pobra\u0107 Cti.Connector z naszego&nbsp;<a href=\"https:\/\/github.com\/level7systems\/cti-connector\" target=\"_blank\" rel=\"noreferrer noopener\">repozytorium<\/a>&nbsp;i jego zale\u017cno\u015bci (&nbsp;<a href=\"http:\/\/strophe.im\/strophejs\/\" target=\"_blank\" rel=\"noreferrer noopener\">Strophe.js<\/a>&nbsp;).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><p>Aby zainstalowa\u0107 Cti.Connector w swojej aplikacji, wystarczy skopiowa\u0107\/wklei\u0107 nast\u0119puj\u0105ce linie kodu:<\/p> <pre>&lt;script src=\"\u201dhttps:\/\/cdnjs.cloudflare.com\/ajax\/libs\/strophe.js\/1.1.3\/strophe.min.js\u201d\" type=\"\u201dtext\/javascript\u201d\">&lt;\/script> &lt;script src=\"\u201djs\/cti-connector.js\u201d\" type=\"\u201dtext\/javascript\u201d\">&lt;\/script> <\/pre><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I to wszystko, czego potrzeba do integracji.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Tworzenie \u0142\u0105cznika CTI<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Aby m\u00f3c komunikowa\u0107 si\u0119 z API VoIP Studio nale\u017cy utworzy\u0107 instancj\u0119 Cti.Connector z odpowiedni\u0105 konfiguracj\u0105, uwierzytelni\u0107 si\u0119 i po\u0142\u0105czy\u0107 z API XMPP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W tym celu nale\u017cy przekaza\u0107 tylko jeden parametr:&nbsp;<code>onMessage<\/code> do konstruktora Connectora. Ale przed wykonaniem tej&nbsp;<code>onMessage<\/code> funkcji wywo\u0142ania zwrotnego nale\u017cy zdefiniowa\u0107. Dla Ciebie i Twojej integracji jest to najwa\u017cniejsza cz\u0119\u015b\u0107, poniewa\u017c&nbsp;<code>onMessage<\/code> funkcja nas\u0142uchuje zdarze\u0144 Connector i mo\u017ce odpowiednio na nie reagowa\u0107.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/voipstudio.com\/en\/manual\/Admin_Integrations-CTI-Connector#Connector%27s-Events\" target=\"_blank\" rel=\"noreferrer noopener\">Tutaj<\/a>&nbsp;znajdziesz wszystkie niezb\u0119dne informacje o zdarzeniach, kt\u00f3re wysy\u0142a Connector.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><pre>var onMessage = function(event) {     if (event.name === Cti.EVENT.LOGGED_IN) {         \/\/ ...     }     if (event.name === Cti.EVENT.READY) {         \/\/ ...     }     if (event.name === Cti.EVENT.RINGING) {         \/\/ ...     }     if (event.name === Cti.EVENT.CONNECTED) {         \/\/ ...     }     if (event.name === Cti.EVENT.ON_HOLD) {         \/\/ ...     }     if (event.name === Cti.EVENT.HUNGUP) {         \/\/ ...     }      } var connector = new Cti.Connector({     onMessage: onMessage }); <\/pre><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Uwaga:<\/strong>&nbsp;Pami\u0119taj o dodaniu w\u0142asnej implementacji, kt\u00f3ra b\u0119dzie odpowiada\u0107 na wydarzenia, kt\u00f3rymi jeste\u015b zainteresowany.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Uwierzytelnianie<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Teraz, gdy Connector jest ustawiony, mo\u017cemy uwierzytelni\u0107 si\u0119 i po\u0142\u0105czy\u0107 z API VoIP Studio przy u\u017cyciu danych uwierzytelniaj\u0105cych VoIP Studio (nazwa u\u017cytkownika i has\u0142o). Jest to tak proste, jak wywo\u0142anie metody logowania w instancji Connector z parametrami:<\/p>\n\n\n<pre>var username = \u201ctest@example.com\u201d,\n    password = \u201csecretpassword\u201d;\n\nconnector.login(username, password);\n<\/pre>\n\n\n<p class=\"wp-block-paragraph\">Po pomy\u015blnym uwierzytelnieniu Connector powinien wys\u0142a\u0107 zdarzenia:<br>*&nbsp;<code>Cti.EVENT.LOGGED_IN<\/code> co oznacza, \u017ce \u200b\u200bu\u017cytkownik zosta\u0142 zalogowany;<br>*&nbsp;<code>Cti.EVENT.READY<\/code> co oznacza, \u017ce \u200b\u200bpo\u0142\u0105czenie zosta\u0142o nawi\u0105zane.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mo\u017cemy tak\u017ce sprawdzi\u0107 czy u\u017cytkownik jest zalogowany i czy nawi\u0105zano po\u0142\u0105czenie wywo\u0142uj\u0105c&nbsp;<code>isConnected<\/code> metod\u0119:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">connector.isConnected();\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Metoda ta mo\u017ce by\u0107 przydatna np. je\u015bli po od\u015bwie\u017ceniu strony chcesz sprawdzi\u0107 czy Connector jest pod\u0142\u0105czony.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aby wylogowa\u0107 si\u0119 i zamkn\u0105\u0107 metod\u0119 po\u0142\u0105czenia&nbsp;<code>logout<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">connector.logout();\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Po wylogowaniu Connector wy\u015ble&nbsp;<code>Cti.EVENT.LOGGED_OUT<\/code>\u200b\u200b zdarzenie.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Po\u0142\u0105czenia<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Wykonywanie po\u0142\u0105czenia<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Po otrzymaniu&nbsp;<code>Cti.EVENT.READY<\/code> zdarzenia jeste\u015bmy gotowi do wykonywania po\u0142\u0105cze\u0144. Aby wykona\u0107 nowe po\u0142\u0105czenie telefoniczne nale\u017cy wywo\u0142a\u0107&nbsp;<code>call<\/code> metod\u0119 z parametrem numeru docelowego w&nbsp;<a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc2916.txt\" target=\"_blank\" rel=\"noreferrer noopener\">formacie E164<\/a>&nbsp;.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">var miejsce docelowe = \"+123456789\";\n\nz\u0142\u0105cze.call(miejsce docelowe);\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Nast\u0119pnie przez Connector zostan\u0105 wys\u0142ane nast\u0119puj\u0105ce zdarzenia:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><code>Cti.EVENT.INITIAL<\/code>\u2013 inicjalizacja po\u0142\u0105czenia<\/li><li><code>Cti.EVENT.ACCEPTED<\/code>\u2013 aby powiadomi\u0107, \u017ce rozm\u00f3wca odbierze telefon;<\/li><li><code>Cti.EVENT.RINGING<\/code>\u2013 aby powiadomi\u0107, \u017ce po\u0142\u0105czenie jest nawi\u0105zywane i dzwoni telefon rozm\u00f3wcy;<\/li><li><code>Cti.EVENT.CONNECTED<\/code>\u2013 aby powiadomi\u0107, \u017ce odbiorca odebra\u0142 po\u0142\u0105czenie i po\u0142\u0105czenie zosta\u0142o nawi\u0105zane.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Uwaga:<\/strong>&nbsp;Ka\u017cde zdarzenie ma unikalny identyfikator wywo\u0142ania, kt\u00f3rego nale\u017cy u\u017cywa\u0107 do identyfikowania przysz\u0142ych zmian wywo\u0142a\u0144.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Przekazywanie po\u0142\u0105czenia<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Rozpocz\u0119te po\u0142\u0105czenie mo\u017cna przenie\u015b\u0107 lub zako\u0144czy\u0107. Aby przekierowa\u0107 po\u0142\u0105czenie do innego miejsca docelowego nale\u017cy wywo\u0142a\u0107&nbsp;<code>transfer<\/code> metod\u0119 na instancji Connector z&nbsp;<code>callId<\/code> parametrem (w celu okre\u015blenia kt\u00f3re po\u0142\u0105czenie ma zosta\u0107 przekazane) oraz parametrem numeru docelowego w formacie E164:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">var callId = \"1432549154470\",\n    miejsce docelowe = \"+987654321\";\n\nz\u0142\u0105cze.transfer(id po\u0142\u0105czenia, miejsce docelowe);\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Po przekazaniu po\u0142\u0105czenia Connector wy\u015ble&nbsp;<code>Cti.EVENT.HANGUP<\/code> \u200b\u200bzdarzenie z potwierdzeniem pomy\u015blnej operacji.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Zako\u0144czenie po\u0142\u0105czenia<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aby zako\u0144czy\u0107 dane wywo\u0142anie musimy wywo\u0142a\u0107&nbsp;<code>terminate<\/code> metod\u0119 z&nbsp;<code>callId<\/code> parametrem:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">var callId = \"1432549154470\",\n\nz\u0142\u0105cze.terminate(identyfikator po\u0142\u0105czenia);\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Po zako\u0144czeniu po\u0142\u0105czenia Connector wy\u015ble&nbsp;<code>Cti.EVENT.HANGUP<\/code>\u200b\u200b zdarzenie z potwierdzeniem pomy\u015blnej operacji.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Obs\u0142uga b\u0142\u0119d\u00f3w<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">W niekt\u00f3rych przypadkach Connector mo\u017ce wys\u0142a\u0107&nbsp;<code>Cti.EVENT.ERROR<\/code> zdarzenie, np. gdy podczas uwierzytelniania przeka\u017cemy b\u0142\u0119dn\u0105 nazw\u0119 u\u017cytkownika i has\u0142o lub gdy przeka\u017cemy do&nbsp;<code>call<\/code> metody nieprawid\u0142owy numer docelowy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Takie zdarzenia powinny by\u0107 obs\u0142ugiwane w wywo\u0142aniu zwrotnym funkcji onMessage:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">var onMessage = funkcja (zdarzenie) {\n\n    if (nazwa.zdarzenia === Cti.EVENT.ERROR) {\n        \/\/ ka\u017cde zdarzenie b\u0142\u0119du ma odpowiedni atrybut komunikatu\n        alert(zdarzenie.wiadomo\u015b\u0107);\n    }\n}\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Wszystkie szczeg\u00f3\u0142y wdro\u017cenia znajdziesz w naszej dokumentacji (https:\/\/voipstudio.com\/en\/manual\/Admin_Integrations-CTI-Connector).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">SZYBKI START PLATFORMY CTI.PLATFORM<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Zach\u0119camy do zapoznania si\u0119 z nasz\u0105 przyk\u0142adow\u0105 realizacj\u0105:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Zarejestruj konto na stronie&nbsp;<a href=\"https:\/\/voipstudio.com\/en\/register\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/voipstudio.pl\/rejestracja\/<\/a><\/li><li>Pobierz i uruchom softphone&nbsp;<a href=\"https:\/\/voipstudio.pl\/pobieranie\/\">https:\/\/voipstudio.pl\/pobieranie\/<\/a> (lub u\u017cyj dowolnego innego klienta SIP)<\/li><li>Wyci\u0105gnij z\u0142\u0105cze cti z&nbsp;<a href=\"https:\/\/github.com\/level7systems\/cti-connector\" target=\"_blank\" rel=\"noreferrer noopener\">Githuba<\/a>&nbsp;na sw\u00f3j komputer<\/li><li>Otw\u00f3rz plik example\/cti-connector.html w swojej przegl\u0105darce internetowej<\/li><li>Zaloguj si\u0119 za pomoc\u0105 adresu e-mail i has\u0142a VoIPstudio<\/li><li>Wpisz numer, pod kt\u00f3ry chcesz zadzwoni\u0107<\/li><\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">POMOC<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u015bli napotkasz jakiekolwiek problemy, znajdziesz b\u0142\u0105d lub masz pomys\u0142 na rozszerzenie funkcjonalno\u015bci CTI Connector, otw\u00f3rz zg\u0142oszenie&nbsp;<a href=\"https:\/\/github.com\/level7systems\/cti-connector\/issues\" target=\"_blank\" rel=\"noreferrer noopener\">na Githubie<\/a>, a jeden z naszych programist\u00f3w wkr\u00f3tce odpowie.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Powodzenia z integracj\u0105!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jaki\u015b czas temu wprowadzili\u015bmy funkcj\u0119&nbsp;Click to Call z API VoIPstudio, kt\u00f3ra pozwala na tworzenie prostych interfejs\u00f3w u\u017cytkownika typu \u201eclick2call\u201d. Rozwi\u0105zanie ewoluowa\u0142o od [&hellip;]<\/p>\n","protected":false},"author":16,"featured_media":37570,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[293],"tags":[],"class_list":["post-28921","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technologia-i-innowacje"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.8 (Yoast SEO v27.8) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>&quot;Kliknij, aby zadzwoni\u0107&quot; za pomoc\u0105 \u0142\u0105cznika JavaScript CTI &#183; VoIPstudio<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/voipstudio.com\/pl\/blog\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"&quot;Kliknij, aby zadzwoni\u0107&quot; za pomoc\u0105 \u0142\u0105cznika JavaScript CTI\" \/>\n<meta property=\"og:description\" content=\"Jaki\u015b czas temu wprowadzili\u015bmy funkcj\u0119&nbsp;Click to Call z API VoIPstudio, kt\u00f3ra pozwala na tworzenie prostych interfejs\u00f3w u\u017cytkownika typu \u201eclick2call\u201d. Rozwi\u0105zanie ewoluowa\u0142o od [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/voipstudio.com\/pl\/blog\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\/\" \/>\n<meta property=\"og:site_name\" content=\"VoIPstudio\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/voipstudio\" \/>\n<meta property=\"article:published_time\" content=\"2015-05-27T12:49:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-12-11T17:17:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/voipstudio.com\/wp-content\/uploads\/vanity-numbers.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Peter Stopyra\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@voipstudio\" \/>\n<meta name=\"twitter:site\" content=\"@voipstudio\" \/>\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"Peter Stopyra\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minuty\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/voipstudio.com\\\/pl\\\/blog\\\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/voipstudio.com\\\/pl\\\/blog\\\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\\\/\"},\"author\":{\"name\":\"Peter Stopyra\",\"@id\":\"https:\\\/\\\/voipstudio.com\\\/pl\\\/#\\\/schema\\\/person\\\/38695d7cddabffec3bdd0a4daebeeeaf\"},\"headline\":\"&#8222;Kliknij, aby zadzwoni\u0107&#8221; za pomoc\u0105 \u0142\u0105cznika JavaScript CTI\",\"datePublished\":\"2015-05-27T12:49:22+00:00\",\"dateModified\":\"2025-12-11T17:17:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/voipstudio.com\\\/pl\\\/blog\\\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\\\/\"},\"wordCount\":1117,\"publisher\":{\"@id\":\"https:\\\/\\\/voipstudio.com\\\/pl\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/voipstudio.com\\\/pl\\\/blog\\\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/voipstudio.com\\\/wp-content\\\/uploads\\\/vanity-numbers.png\",\"articleSection\":[\"Technologia i Innowacje\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/voipstudio.com\\\/pl\\\/blog\\\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\\\/\",\"url\":\"https:\\\/\\\/voipstudio.com\\\/pl\\\/blog\\\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\\\/\",\"name\":\"\\\"Kliknij, aby zadzwoni\u0107\\\" za pomoc\u0105 \u0142\u0105cznika JavaScript CTI &#183; VoIPstudio\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/voipstudio.com\\\/pl\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/voipstudio.com\\\/pl\\\/blog\\\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/voipstudio.com\\\/pl\\\/blog\\\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/voipstudio.com\\\/wp-content\\\/uploads\\\/vanity-numbers.png\",\"datePublished\":\"2015-05-27T12:49:22+00:00\",\"dateModified\":\"2025-12-11T17:17:27+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/voipstudio.com\\\/pl\\\/blog\\\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\\\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/voipstudio.com\\\/pl\\\/blog\\\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/voipstudio.com\\\/pl\\\/blog\\\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\\\/#primaryimage\",\"url\":\"https:\\\/\\\/voipstudio.com\\\/wp-content\\\/uploads\\\/vanity-numbers.png\",\"contentUrl\":\"https:\\\/\\\/voipstudio.com\\\/wp-content\\\/uploads\\\/vanity-numbers.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/voipstudio.com\\\/pl\\\/blog\\\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/voipstudio.com\\\/pl\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"&#8220;Kliknij, aby zadzwoni\u0107&#8221; za pomoc\u0105 \u0142\u0105cznika JavaScript CTI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/voipstudio.com\\\/pl\\\/#website\",\"url\":\"https:\\\/\\\/voipstudio.com\\\/pl\\\/\",\"name\":\"VoIPstudio\",\"description\":\"Business communications for modern teams\",\"publisher\":{\"@id\":\"https:\\\/\\\/voipstudio.com\\\/pl\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/voipstudio.com\\\/pl\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/voipstudio.com\\\/pl\\\/#organization\",\"name\":\"VoIPstudio\",\"url\":\"https:\\\/\\\/voipstudio.com\\\/pl\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/voipstudio.com\\\/pl\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/voipstudio.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/voipstudio_logo_black-1.png\",\"contentUrl\":\"https:\\\/\\\/voipstudio.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/voipstudio_logo_black-1.png\",\"width\":1961,\"height\":379,\"caption\":\"VoIPstudio\"},\"image\":{\"@id\":\"https:\\\/\\\/voipstudio.com\\\/pl\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/voipstudio\",\"https:\\\/\\\/x.com\\\/voipstudio\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/voipstudio-com\\\/\",\"https:\\\/\\\/www.youtube.com\\\/voipstudio\"],\"description\":\"A limited company registered in England under company number 6978512, whose registered address is Gable House, 18-24 Turnham Green Terrace, W4 1QP London, United Kingdom.\",\"email\":\"marketing@voipstudio.com\",\"telephone\":\"+44 203 432 9230\",\"legalName\":\"Level 7 Systems\",\"foundingDate\":\"2009-08-03\",\"vatID\":\"GB982288750\",\"taxID\":\"6978512\",\"iso6523Code\":\"A8087849\",\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"minValue\":\"11\",\"maxValue\":\"50\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/voipstudio.com\\\/pl\\\/#\\\/schema\\\/person\\\/38695d7cddabffec3bdd0a4daebeeeaf\",\"name\":\"Peter Stopyra\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6230f61c4301b873228209e2e380b4780329783024ee9f745be554762edc137a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6230f61c4301b873228209e2e380b4780329783024ee9f745be554762edc137a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6230f61c4301b873228209e2e380b4780329783024ee9f745be554762edc137a?s=96&d=mm&r=g\",\"caption\":\"Peter Stopyra\"},\"description\":\"Peter Stopyra is a VoIP engineer and expert with experience in VoIP support, telecoms compliance, and IT operations. He covers topics related to business phone systems, VoIP security, telecom regulations, and technical support best practices.\",\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/peter-stopyra-58b821222\\\/\"],\"knowsAbout\":[\"VoIP\",\"Compliance\",\"IT\",\"Security\"],\"knowsLanguage\":[\"English\",\"Polish\"],\"url\":\"https:\\\/\\\/voipstudio.com\\\/pl\\\/blog\\\/author\\\/peter\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\"Kliknij, aby zadzwoni\u0107\" za pomoc\u0105 \u0142\u0105cznika JavaScript CTI &#183; VoIPstudio","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/voipstudio.com\/pl\/blog\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\/","og_locale":"pl_PL","og_type":"article","og_title":"\"Kliknij, aby zadzwoni\u0107\" za pomoc\u0105 \u0142\u0105cznika JavaScript CTI","og_description":"Jaki\u015b czas temu wprowadzili\u015bmy funkcj\u0119&nbsp;Click to Call z API VoIPstudio, kt\u00f3ra pozwala na tworzenie prostych interfejs\u00f3w u\u017cytkownika typu \u201eclick2call\u201d. Rozwi\u0105zanie ewoluowa\u0142o od [&hellip;]","og_url":"https:\/\/voipstudio.com\/pl\/blog\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\/","og_site_name":"VoIPstudio","article_publisher":"https:\/\/www.facebook.com\/voipstudio","article_published_time":"2015-05-27T12:49:22+00:00","article_modified_time":"2025-12-11T17:17:27+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/voipstudio.com\/wp-content\/uploads\/vanity-numbers.png","type":"image\/png"}],"author":"Peter Stopyra","twitter_card":"summary_large_image","twitter_creator":"@voipstudio","twitter_site":"@voipstudio","twitter_misc":{"Napisane przez":"Peter Stopyra","Szacowany czas czytania":"4 minuty"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/voipstudio.com\/pl\/blog\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\/#article","isPartOf":{"@id":"https:\/\/voipstudio.com\/pl\/blog\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\/"},"author":{"name":"Peter Stopyra","@id":"https:\/\/voipstudio.com\/pl\/#\/schema\/person\/38695d7cddabffec3bdd0a4daebeeeaf"},"headline":"&#8222;Kliknij, aby zadzwoni\u0107&#8221; za pomoc\u0105 \u0142\u0105cznika JavaScript CTI","datePublished":"2015-05-27T12:49:22+00:00","dateModified":"2025-12-11T17:17:27+00:00","mainEntityOfPage":{"@id":"https:\/\/voipstudio.com\/pl\/blog\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\/"},"wordCount":1117,"publisher":{"@id":"https:\/\/voipstudio.com\/pl\/#organization"},"image":{"@id":"https:\/\/voipstudio.com\/pl\/blog\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\/#primaryimage"},"thumbnailUrl":"https:\/\/voipstudio.com\/wp-content\/uploads\/vanity-numbers.png","articleSection":["Technologia i Innowacje"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/voipstudio.com\/pl\/blog\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\/","url":"https:\/\/voipstudio.com\/pl\/blog\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\/","name":"\"Kliknij, aby zadzwoni\u0107\" za pomoc\u0105 \u0142\u0105cznika JavaScript CTI &#183; VoIPstudio","isPartOf":{"@id":"https:\/\/voipstudio.com\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/voipstudio.com\/pl\/blog\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\/#primaryimage"},"image":{"@id":"https:\/\/voipstudio.com\/pl\/blog\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\/#primaryimage"},"thumbnailUrl":"https:\/\/voipstudio.com\/wp-content\/uploads\/vanity-numbers.png","datePublished":"2015-05-27T12:49:22+00:00","dateModified":"2025-12-11T17:17:27+00:00","breadcrumb":{"@id":"https:\/\/voipstudio.com\/pl\/blog\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/voipstudio.com\/pl\/blog\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/voipstudio.com\/pl\/blog\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\/#primaryimage","url":"https:\/\/voipstudio.com\/wp-content\/uploads\/vanity-numbers.png","contentUrl":"https:\/\/voipstudio.com\/wp-content\/uploads\/vanity-numbers.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/voipstudio.com\/pl\/blog\/kliknij-aby-zadzwonic-za-pomoca-lacznika-javascript-cti\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/voipstudio.com\/pl\/"},{"@type":"ListItem","position":2,"name":"&#8220;Kliknij, aby zadzwoni\u0107&#8221; za pomoc\u0105 \u0142\u0105cznika JavaScript CTI"}]},{"@type":"WebSite","@id":"https:\/\/voipstudio.com\/pl\/#website","url":"https:\/\/voipstudio.com\/pl\/","name":"VoIPstudio","description":"Business communications for modern teams","publisher":{"@id":"https:\/\/voipstudio.com\/pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/voipstudio.com\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/voipstudio.com\/pl\/#organization","name":"VoIPstudio","url":"https:\/\/voipstudio.com\/pl\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/voipstudio.com\/pl\/#\/schema\/logo\/image\/","url":"https:\/\/voipstudio.com\/wp-content\/uploads\/2025\/07\/voipstudio_logo_black-1.png","contentUrl":"https:\/\/voipstudio.com\/wp-content\/uploads\/2025\/07\/voipstudio_logo_black-1.png","width":1961,"height":379,"caption":"VoIPstudio"},"image":{"@id":"https:\/\/voipstudio.com\/pl\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/voipstudio","https:\/\/x.com\/voipstudio","https:\/\/www.linkedin.com\/company\/voipstudio-com\/","https:\/\/www.youtube.com\/voipstudio"],"description":"A limited company registered in England under company number 6978512, whose registered address is Gable House, 18-24 Turnham Green Terrace, W4 1QP London, United Kingdom.","email":"marketing@voipstudio.com","telephone":"+44 203 432 9230","legalName":"Level 7 Systems","foundingDate":"2009-08-03","vatID":"GB982288750","taxID":"6978512","iso6523Code":"A8087849","numberOfEmployees":{"@type":"QuantitativeValue","minValue":"11","maxValue":"50"}},{"@type":"Person","@id":"https:\/\/voipstudio.com\/pl\/#\/schema\/person\/38695d7cddabffec3bdd0a4daebeeeaf","name":"Peter Stopyra","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/secure.gravatar.com\/avatar\/6230f61c4301b873228209e2e380b4780329783024ee9f745be554762edc137a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/6230f61c4301b873228209e2e380b4780329783024ee9f745be554762edc137a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6230f61c4301b873228209e2e380b4780329783024ee9f745be554762edc137a?s=96&d=mm&r=g","caption":"Peter Stopyra"},"description":"Peter Stopyra is a VoIP engineer and expert with experience in VoIP support, telecoms compliance, and IT operations. He covers topics related to business phone systems, VoIP security, telecom regulations, and technical support best practices.","sameAs":["https:\/\/www.linkedin.com\/in\/peter-stopyra-58b821222\/"],"knowsAbout":["VoIP","Compliance","IT","Security"],"knowsLanguage":["English","Polish"],"url":"https:\/\/voipstudio.com\/pl\/blog\/author\/peter\/"}]}},"_links":{"self":[{"href":"https:\/\/voipstudio.com\/pl\/wp-json\/wp\/v2\/posts\/28921","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/voipstudio.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/voipstudio.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/voipstudio.com\/pl\/wp-json\/wp\/v2\/users\/16"}],"replies":[{"embeddable":true,"href":"https:\/\/voipstudio.com\/pl\/wp-json\/wp\/v2\/comments?post=28921"}],"version-history":[{"count":1,"href":"https:\/\/voipstudio.com\/pl\/wp-json\/wp\/v2\/posts\/28921\/revisions"}],"predecessor-version":[{"id":29288,"href":"https:\/\/voipstudio.com\/pl\/wp-json\/wp\/v2\/posts\/28921\/revisions\/29288"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/voipstudio.com\/pl\/wp-json\/wp\/v2\/media\/37570"}],"wp:attachment":[{"href":"https:\/\/voipstudio.com\/pl\/wp-json\/wp\/v2\/media?parent=28921"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/voipstudio.com\/pl\/wp-json\/wp\/v2\/categories?post=28921"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/voipstudio.com\/pl\/wp-json\/wp\/v2\/tags?post=28921"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}