Umělá inteligence našim zákazníkům pomáhá, aby byli úspěšnější

1. 7. 2024

Sdílet

Jacob Ringler, Vendavo
Autor: Vendavo
Jacob Ringler, Vendavo
Nadpoloviční většina firem dnes při cenotvorbě už – alespoň částečně – využívá umělou inteligenci. Zodpovědnost za tvorbu cen se také v rámci firem pomalu přesouvá z oddělení financí na prodej a marketing. Vyplývá to z nedávné studie společnosti Vendavo, která poskytuje řešení pro správu a optimalizaci cen pro výrobní a obchodní společnosti. O tom, proč tomu tak je a jak může umělá inteligence (AI) pomoci firmám růst, jsme hovořili s šéfem vývoje a zároveň ředitelem českého zastoupení této společnosti Jacobem Ringlerem.

Proč si myslíte, že je přesun zodpovědnosti za cenotvorbu na prodejní a marketingové týmy výhodný?

Hlavním důvodem je, že firmy tak mohou lépe sladit cenové strategie s potřebami zákazníků a trendy trhu. Obchodní a marketingové týmy jsou totiž v přímém kontaktu se zákazníky a mají znalosti o jejich preferencích a konkurenčním prostředí. A tyto znalosti pak mohou využít ke stanovení cen, které jsou konkurenceschopné a zároveň ziskové. Naše systémy jim při tom mohou výrazně pomoci.

Pro koho jsou vaše systémy prioritně určeny?

Primárně pro firmy, které chtějí maximalizovat své zisky, aniž si znepřátelí zákazníky. A tak potřebují najít zlatou střední cestu mezi tím, kdy je třeba účtovat dostatečně vysoké ceny, aby se dosáhlo zisku, ale ne tak vysoké, aby klienti začali hledat alternativy. Tím, že těmto firmám pomůžeme zjistit optimální nastavení cen a zároveň jim poskytneme na datech založený přehled o chování jejich zákazníků a o trendech na trhu, jim umožníme zvýšit jejich příjmy, zajistit lepší ziskové marže a efektivnější provoz.

Kdo je vaším typickým zákazníkem?

K našim zákazníkům patří nejčastěji výrobci a distributoři. Právě pro ně je totiž zvlášť důležité dokázat nastavit ceny tak, aby byly současně konkurenceschopné i ziskové. Jde přitom o společnosti všech velikostí, od malých či střední firem až po nadnárodní organizace.

Můžete uvést konkrétní příklad, jaké výhody a výsledky vaše systémy firmám přinášejí? 

Samozřejmě. Například jedna pivovarnická společnost používá náš systém ke snížení rizika chyb a nekonzistencí v cenách. Jiná firma, která se zabývá prodejem autopříslušenství, zase náš systém používá ke stanovování cen na základě historických dat. Firmy také často nasazují naše nástroje k tomu, aby zvýšily rychlost tvorby cenových nabídek.

Hitem poslední doby je AI. Víme, že některé vaše systémy už ji využívají. Jak a v čem vám pomáhá? 

Naše systémy pro tvorbu cen jsou opravdu založeny na umělé inteligenci. Kromě vlastní tvorby cen pak AI pomáhá i v dalších ohledech. Dokáže například předvídat poptávku zákazníků, podle čehož pak lze upravit výrobu a úroveň zásob nebo oslovit správné klienty správnými produkty ve správný čas.

A v čem je podle vás největší přínos AI ve vaší firmě? 

Přínosy jsou skutečně velké, a to už proto, že umělou inteligenci používáme v technologických produktech už dlouho, dávno předtím, než se kolem ní strhlo současné šílenství. To je pro nás také velká výhoda, protože zatímco ostatní společnosti se nyní snaží dostat do hry, my jsme v této oblasti již experti. Například nástroj VSO (Vendavo Sales Optimizer) pomáhá organizacím řešit problémy v oblasti cenotvorby, předpovídání poptávky a prodeje a marketingu tím, že pomocí AI poskytuje pro tyto úlohy kompletní životní cyklus. A konkrétní výsledek? Toto řešení například pomohlo jednomu velkému distributorovi získat 3,7 milionu dolarů v příjmech z křížového prodeje již čtyři měsíce po uvedení do provozu.

Vaší funkcí je kromě ředitele české pobočky i funkce viceprezidenta pro vývoj. Vývoj je součástí české pobočky, nebo sídlí i v jiných zemích? 

Cyber25

Vendavo má v ČR tři pobočky – v Praze, Ostravě a Hradci Králové. Jejich týmy jsou zodpovědné za vývoj produktů pro některé z našich největších klientů. V rámci své globální role mám však k dispozici také další vývojové kapacity Vendavo, a to v USA, Švédsku a Indii.

Děkujeme za rozhovor.

'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }
OSZAR »