Microsoft Dynamics 365 Contact Center
De verwachtingen van je klanten veranderen razendsnel. Ze willen snelle, persoonlijke service, via het kanaal van hun keuze. Met Microsoft Dynamics 365 Contact Center speel je daar moeiteloos op in.
De groothandel staat onder druk. Klanten verwachten snelle service, correcte informatie en persoonlijke opvolging. Tegelijk is er intern nood aan betere samenwerking tussen sales, backoffice en logistiek. CRM-software voor de groothandel helpt je om klantrelaties gestructureerd te beheren, verkoopprocessen te versnellen en commerciële inzichten te verbeteren. Het resultaat? Meer efficiëntie, meer klantgerichtheid en meer groei.
CRM (Customer Relationship Management) voor groothandelsbedrijven is software die klantinformatie, verkoopkansen, communicatie en aftersales-processen centraal stelt in één platform. Van eerste contact tot herhaalaankoop, je hebt altijd een volledig overzicht van elke klant. Prijsafspraken, bestelhistoriek, openstaande offertes of servicetickets? Alles is direct beschikbaar voor je teams.
Een modern CRM-systeem vormt zo de ruggengraat van je commerciële werking.
Alle klantinformatie op één plek: contactpersonen, aankoopgeschiedenis, afspraken, prijzen en communicatie. Zo verhoog je de klantgerichtheid van elke medewerker.
Error executing template "Designs/Swift/Paragraph/Swift_Feature.cshtml" System.NullReferenceException: Object reference not set to an instance of an object. at CompiledRazorTemplates.Dynamic.RazorEngine_47767481e2c344cd842823c6c4caa489.ExecuteAsync() at RazorEngine.Templating.TemplateBase.Run(ExecuteContext context, TextWriter reader) at RazorEngine.Templating.RazorEngineCore.RunTemplate(ICompiledTemplate template, TextWriter writer, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.RazorEngineService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.DynamicWrapperService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass23_0.<Run>b__0(TextWriter writer) at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter) at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, Type modelType, Object model, DynamicViewBag viewBag) at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template) at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template) at Dynamicweb.Rendering.Template.RenderRazorTemplate()
1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel> 2 @using System.IO 3 4 @functions 5 { 6 private string RenderCustomCSS(IEnumerable<string> decorations) 7 { 8 var cssClasses = new List<string>(); 9 10 foreach (var itemId in decorations) 11 { 12 var item = Dynamicweb.Content.Services.Items.GetItem("Swift_Css", itemId); 13 item.TryGetValue("Class", out object classes); 14 15 if (classes is null) 16 { 17 continue; 18 } 19 20 var cssString = (string)classes; 21 22 if (cssString.StartsWith("[")) 23 { 24 var cssArray = Dynamicweb.Core.Converter.Deserialize<string[]>(cssString); 25 cssClasses.AddRange(cssArray); 26 } 27 else 28 { 29 cssClasses.Add(cssString.Replace(",", " ")); 30 } 31 } 32 33 return string.Join(" ", cssClasses).Trim(); 34 } 35 } 36 37 @{ 38 string layout = Model.Item.GetRawValueString("Layout", "icon-top"); 39 string contentPadding = Model.Item.GetRawValueString("ContentPadding", string.Empty); 40 contentPadding = contentPadding == "none" ? "" : contentPadding; 41 contentPadding = contentPadding == "small" ? "p-3 p-md-3" : contentPadding; 42 contentPadding = contentPadding == "large" ? "p-5 p-md-5" : contentPadding; 43 string theme = !string.IsNullOrWhiteSpace(Model.Item.GetRawValueString("Theme")) ? " theme " + Model.Item.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower() : string.Empty; 44 var decorations = Model.Item?.GetList("CssDecorations")?.GetRawValue().OfType<string>() ?? Enumerable.Empty<string>(); 45 string css = RenderCustomCSS(decorations); 46 47 string target = Pageview.AreaSettings.GetBoolean("OpenLinksInNewTab") && Model.Item.GetString("Link").Contains("http") ? "target=\"_blank\"" : string.Empty; 48 string rel = Pageview.AreaSettings.GetBoolean("OpenLinksInNewTab") && Model.Item.GetString("Link").Contains("http") ? "rel=\"noopener\"" : string.Empty; 49 string alignment = (!string.IsNullOrEmpty(Model.Item.GetString("Title")) && !Model.Item.GetBoolean("HideTitle")) && !string.IsNullOrEmpty(Model.Item.GetString("Text")) ? "align-items-stretch" : "align-items-center"; 50 51 string iconColor = Model.Item.GetString("iconColor", "text-inherit"); 52 string iconOpacity = Model.Item.GetString("IconOpacity", "opacity-100"); 53 54 string iconSize = Model.Item.GetRawValueString("IconSize", "2"); 55 string imageSrc = !string.IsNullOrEmpty(Model.Item.GetString("Image")) ? Model.Item.GetFile("Image").Path : string.Empty; 56 string flexGrowClass = string.Empty; 57 58 switch (layout) 59 { 60 case "icon-left": 61 case "icon-right": 62 flexGrowClass = "flex-grow-0"; 63 break; 64 } 65 66 string imagePath = imageSrc != string.Empty ? imageSrc : Model.Item.GetRawValueString("Icon", string.Empty); 67 imagePath = Path.GetExtension(imagePath).ToLower() != ".svg" ? "/Admin/Public/GetImage.ashx?image=" + imagePath + "&height=" + iconSize + "&width=" + iconSize + "&Crop=0&format=webp" : imagePath; 68 string imgAltText = Model.Item.GetRawValueString("FeatureAltText", string.Empty); 69 70 string titleFontSize = Model.Item.GetRawValueString("TitleFontSize", "h4"); 71 string titleColor = Model.Item.GetString("TitleColor", "text-inherit"); 72 string titleOpacity = Model.Item.GetString("TitleOpacity", "opacity-100"); 73 string headingLevel = Model.Item.GetString("HeadingLevel", "h2"); 74 string headingLevelStart = $"<{headingLevel} class=\"{titleFontSize} {titleColor} {titleOpacity} m-0\">"; 75 string headingLevelStop = $"</{headingLevel}>"; 76 77 string textColor = Model.Item.GetString("TextColor", "text-inherit"); 78 string textOpacity = Model.Item.GetString("TextOpacity", "opacity-100"); 79 } 80 81 <div class="h-100 @(contentPadding)@(theme) @(css) item_@Model.Item.SystemName.ToLower()"> 82 <div id="@Model.ID" class="user-select-none" style="scroll-margin-top:var(--header-height,150px)"></div> 83 @if (!string.IsNullOrEmpty(Model.Item.GetString("Link"))) 84 { 85 @:<a href="@Model.Item.GetString("Link")" class="text-decoration-none d-block h-100" @target @rel> 86 } 87 88 @switch (layout) 89 { 90 case "icon-top": 91 <div class="d-flex flex-column gap-3 text-center mb-0-last-child"> 92 @if (!string.IsNullOrEmpty(Model.Item.GetString("Image")) || !imagePath.ToLower().Contains("none") && imagePath != string.Empty) 93 {<div class="@flexGrowClass"> 94 @if (Path.GetExtension(imagePath).ToLower() == ".svg") 95 { 96 <div class="icon-auto @iconColor @iconOpacity" style="height: @(iconSize)px; width: @(iconSize)px;">@ReadFile(imagePath)</div> 97 } 98 else 99 { 100 <img loading="lazy" src="@imagePath" alt="@imgAltText" title="@Model.Item.GetString("Title")" style="height: @(iconSize)px; width: @(iconSize)px;"> 101 } 102 </div> 103 } 104 105 @if (!string.IsNullOrEmpty(Model.Item.GetString("Title")) && !Model.Item.GetBoolean("HideTitle") || !string.IsNullOrEmpty(Model.Item.GetString("Text"))) 106 { 107 <div class="mb-0-last-child"> 108 @if (!string.IsNullOrEmpty(Model.Item.GetString("Title")) && !Model.Item.GetBoolean("HideTitle")) 109 { 110 @headingLevelStart 111 @Model.Item.GetString("Title") 112 @headingLevelStop 113 } 114 115 @if (!string.IsNullOrEmpty(Model.Item.GetString("Text"))) 116 { 117 <p class="@textColor @textOpacity m-0">@Model.Item.GetString("Text")</p> 118 } 119 </div> 120 } 121 </div> 122 break; 123 case "icon-left": 124 <div class="d-flex flex-row gap-3 h-100 text-start @alignment"> 125 @if (!string.IsNullOrEmpty(Model.Item.GetString("Image")) || !imagePath.ToLower().Contains("none") && imagePath != string.Empty) 126 {<div class="@flexGrowClass"> 127 @if (Path.GetExtension(imagePath).ToLower() == ".svg") 128 { 129 <div class="icon-auto @iconColor @iconOpacity" style="height: @(iconSize)px; width: @(iconSize)px;">@ReadFile(imagePath)</div> 130 } 131 else 132 { 133 <img loading="lazy" src="@imagePath" alt="@imgAltText" title="@Model.Item.GetString("Title")" style="height: @(iconSize)px; width: @(iconSize)px;"> 134 } 135 </div> 136 } 137 138 @if (!string.IsNullOrEmpty(Model.Item.GetString("Title")) && !Model.Item.GetBoolean("HideTitle") || !string.IsNullOrEmpty(Model.Item.GetString("Text"))) 139 { 140 <div class="d-flex flex-column flex-grow-1"> 141 @if (!string.IsNullOrEmpty(Model.Item.GetString("Title")) && !Model.Item.GetBoolean("HideTitle")) 142 { 143 @headingLevelStart 144 @Model.Item.GetString("Title") 145 @headingLevelStop 146 } 147 148 @if (!string.IsNullOrEmpty(Model.Item.GetString("Text"))) 149 { 150 <p class="@textColor @textOpacity m-0">@Model.Item.GetString("Text")</p> 151 } 152 </div> 153 } 154 155 </div> 156 break; 157 case "icon-right": 158 <div class="d-flex flex-row gap-3 h-100 text-end @alignment"> 159 @if (!string.IsNullOrEmpty(Model.Item.GetString("Title")) && !Model.Item.GetBoolean("HideTitle") || !string.IsNullOrEmpty(Model.Item.GetString("Text"))) 160 { 161 <div class="d-flex flex-column flex-grow-1"> 162 @if (!string.IsNullOrEmpty(Model.Item.GetString("Title")) && !Model.Item.GetBoolean("HideTitle")) 163 { 164 @headingLevelStart 165 @Model.Item.GetString("Title") 166 @headingLevelStop 167 } 168 169 @if (!string.IsNullOrEmpty(Model.Item.GetString("Text"))) 170 { 171 <p class="@textColor @textOpacity m-0">@Model.Item.GetString("Text")</p> 172 } 173 </div> 174 } 175 176 @if (!string.IsNullOrEmpty(Model.Item.GetString("Image")) || !imagePath.ToLower().Contains("none") && imagePath != string.Empty) 177 {<div class="@flexGrowClass"> 178 @if (Path.GetExtension(imagePath).ToLower() == ".svg") 179 { 180 <div class="icon-auto @iconColor @iconOpacity" style="height: @(iconSize)px; width: @(iconSize)px;">@ReadFile(imagePath)</div> 181 } 182 else 183 { 184 <img loading="lazy" src="@imagePath" alt="@imgAltText" title="@Model.Item.GetString("Title")" style="height: @(iconSize)px; width: @(iconSize)px;"> 185 } 186 </div> 187 } 188 </div> 189 break; 190 } 191 192 @if (!string.IsNullOrEmpty(Model.Item.GetString("Link"))) 193 { 194 @:</a> 195 } 196 </div> 197
Sales, administratie en logistiek werken met dezelfde gegevens. Minder dubbel werk, snellere doorstroom en minder fouten.
Automatiseer herinneringen, follow-ups en meldingen. Geen enkele verkoopkans glipt nog door de mazen van het net.
Segmenteer klanten op basis van omzet, regio of producten, en richt je marketing of acties preciezer dan ooit.
Dashboards en rapporten geven je realtime inzicht in verkoopdoelen, conversiepercentages en klantwaarde.
Microsoft Dynamics 365 is meer dan een CRM. Het is een modulair platform dat CRM, sales, marketing, service én operations naadloos integreert. Voor groothandelbedrijven betekent dit: één omgeving voor klantbeheer én bedrijfsvoering. Zo verbind je sales met voorraad, orders met klantenservice, en marketing met concrete data.
Door alles realtime te centraliseren in één platform, werk je sneller, beslis je beter en voldoe je aan de verwachtingen van vandaag én morgen.
Toen de vraag naar onderhoud van zonne-installaties toenam, implementeerde GEN-I Sonce Microsoft Dynamics 365 Field Service om de operaties beter te beheren en de werkdruk van sleutelmedewerkers te verlagen. De oplossing vervangt een brede waaier aan tools en zorgt voor efficiëntere planning, uitvoering en opvolging van onderhoudstaken.
Het systeem werd geïmplementeerd door 9altitudes en integreert naadloos met de bestaande infrastructuur van GEN-I, met ondersteuning voor toekomstige groei. Dankzij verbeterde werkprocessen en tevreden gebruikers kan GEN-I Sonce zich nu volop richten op het opschalen van haar duurzame energiemissie.
Vul onze korte vragenlijst in (max 10 minuten) en krijg een snelle budgetindicatie, inclusief een schatting van de maandelijkse Microsoft-licenties. Investeer 5 tot 10 minuten van je tijd om ons een goed beeld te geven van je project en je bedrijf.
Op basis van jouw antwoorden ontvang je een gepersonaliseerde offerte en kom je te weten wat jouw CRM-project kan kosten.
9altitudes is een Europese digitale partner die bedrijfsprocessen end-to-end automatiseert, optimaliseert en continu verbetert. We helpen productie-, toeleverings- en dienstverlenende bedrijven nieuwe hoogtes te bereiken door gebruik te maken van Microsoft, PTC en Tulip software in combinatie met onze eigen sectorspecifieke oplossingen.
Met medewerkers uit 9 verschillende landen bestaat ons team uit 750 uitzonderlijk getalenteerde experts. Onze high-end consultants zijn onvermoeibaar in hun streven naar innovatie, toegewijd aan het creëren van uitzonderlijke klantervaringen en het leveren van impactvolle oplossingen.
Het kiezen voor een CRM-oplossing die specifiek op jouw sector is gericht, biedt talrijke voordelen. Een solide basis is daarbij cruciaal. Bij 9altitudes combineren we het beste van twee werelden: we integreren bewezen platformen zoals Microsoft Dynamics 365 Customer Service, Field Service, Sales en Customer Insights met de best practices uit jouw sector.
Ben je op zoek naar een assessment om te bepalen of Dynamics 365 bij jouw organisatie past? Heb je ondersteuning nodig bij de implementatie, of zoek je een nieuwe partner voor een bestaande oplossing?
Wij staan voor je klaar. Neem vandaag nog contact met ons op en ontdek hoe wij je kunnen ondersteunen. Samen tillen we jouw organisatie naar nieuwe hoogtes!