<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog Martina Humpolce</title>
	<atom:link href="https://martinhumpolec.cz/feed/" rel="self" type="application/rss+xml" />
	<link>https://martinhumpolec.cz/</link>
	<description>o všem co mě zajímá</description>
	<lastBuildDate>Tue, 21 Apr 2026 08:20:21 +0000</lastBuildDate>
	<language>cs</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.5</generator>
<site xmlns="com-wordpress:feed-additions:1">81363914</site>	<item>
		<title>How to connect Claude with Salesforce</title>
		<link>https://martinhumpolec.cz/how-to-connect-claude-with-salesforce/</link>
					<comments>https://martinhumpolec.cz/how-to-connect-claude-with-salesforce/#respond</comments>
		
		<dc:creator><![CDATA[Martin Humpolec]]></dc:creator>
		<pubDate>Tue, 28 Apr 2026 07:25:48 +0000</pubDate>
				<category><![CDATA[Salesforce]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Claude]]></category>
		<category><![CDATA[LLM]]></category>
		<guid isPermaLink="false">https://martinhumpolec.cz/?p=6991</guid>

					<description><![CDATA[AI here, AI there, AI everywhere. A&#160;while back Salesforce announce their integration with ChatGPT, a&#160;week ago a&#160;customer asked about report creation they will import into Claude which will do its magic, two weeks ago a&#160;CEO of a&#160;customer asked me to setup integration with Claude Code because he has some spare time and want to play<span class="read-more"><a href="https://martinhumpolec.cz/how-to-connect-claude-with-salesforce/">Read More...</a></span>]]></description>
										<content:encoded><![CDATA[
<p>AI here, AI there, AI everywhere. A&nbsp;while back Salesforce announce their <a href="https://www.salesforce.com/news/stories/agentforce-sales-chatgpt-announcement/">integration with ChatGPT</a>, a&nbsp;week ago a&nbsp;customer asked about report creation they will import into Claude which will do its magic, two weeks ago a&nbsp;CEO of a&nbsp;customer asked me to setup integration with Claude Code because he has some spare time and want to play with it.</p>



<p>And while I&nbsp;do use AIs and LLMs for some tasks (like podcast summaries) I&#8217;m not really a&nbsp;super heavy user who would understand what they really want to do with that. Meaning it didn&#8217;t really have a&nbsp;high priority on my tasks list, but eventually I&nbsp;got to it.</p>



<p>I hoped that <a href="https://www.youtube.com/watch?v=gZGAJlSQ8m0">Sally would show me everything</a> in her video, but it was just first part, developer heavy and I&nbsp;didn&#8217;t get much out of it.</p>



<p>Luckily there is a&nbsp;documentation &#8211; which I&nbsp;found before &#8211; and I&nbsp;went through that, did all the settings and failed. Hence this article, where I&nbsp;will share the updates I&nbsp;found and maybe explain why I&nbsp;feel it makes sense for regular users to connect it as well.</p>



<h2 class="wp-block-heading">Step 1 &#8211; Enable MCP server</h2>



<p>When you google how to connect Claude with Salesforce you <a href="https://developer.salesforce.com/docs/platform/hosted-mcp-servers/guide/activate-mcp-servers.html">won&#8217;t find this article</a>, but without it the authentication will fail with super weird error 405 method not allowed.</p>



<p>Let&#8217;s&nbsp;start with that and enable MCP servers in Salesforce.</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69f061b3ca893&quot;}" data-wp-interactive="core/image" class="wp-block-image size-medium wp-lightbox-container"><img data-recalc-dims="1" fetchpriority="high" decoding="async" width="640" height="323" data-attachment-id="6992" data-permalink="https://martinhumpolec.cz/how-to-connect-claude-with-salesforce/image-183/" data-orig-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image-1.png?fit=1252%2C632&amp;ssl=1" data-orig-size="1252,632" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image-1.png?fit=700%2C353&amp;ssl=1" data-large-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image-1.png?fit=640%2C323&amp;ssl=1" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on-async--click="actions.showLightbox" data-wp-on-async--load="callbacks.setButtonStyles" data-wp-on-async-window--resize="callbacks.setButtonStyles" src="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image-1.png?resize=640%2C323&#038;ssl=1" alt="Enable MCP servers" class="wp-image-6992" srcset="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image-1.png?resize=700%2C353&amp;ssl=1 700w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image-1.png?resize=1024%2C517&amp;ssl=1 1024w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image-1.png?resize=250%2C126&amp;ssl=1 250w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image-1.png?resize=768%2C388&amp;ssl=1 768w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image-1.png?w=1252&amp;ssl=1 1252w" sizes="(max-width: 640px) 100vw, 640px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="Zvětšit"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on-async--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<p>If that sounds like some mambo jumbo to you I&#8217;m not surprised, but somehow behind the scene when AI asks Salesforce when it can find something or what fields are available it will give it the answers. As you can see on the screen and in the <a href="https://developer.salesforce.com/docs/platform/hosted-mcp-servers/references/reference/servers-reference.html">relevant article</a>, there are plenty of different servers/end points and you enable the ones you like. I&nbsp;especially like the sobject-reads which will give you read only access, no worries AI will mess anything in your org.</p>



<p>Open the record you like and hit the Activate button and step 1 is completed.</p>



<h2 class="wp-block-heading">Step 2 &#8211; External Client App</h2>



<p>The relevant article is easy to follow, but when you set it as specified it won&#8217;t work &#8211; some scope is missing. After some googling around I&nbsp;found out which one &#8211; the mcp_api is crucial one!</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69f061b3cac02&quot;}" data-wp-interactive="core/image" class="wp-block-image size-medium wp-lightbox-container"><img data-recalc-dims="1" decoding="async" width="640" height="349" data-attachment-id="6993" data-permalink="https://martinhumpolec.cz/how-to-connect-claude-with-salesforce/image-184/" data-orig-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image-2.png?fit=750%2C409&amp;ssl=1" data-orig-size="750,409" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image-2.png?fit=700%2C382&amp;ssl=1" data-large-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image-2.png?fit=640%2C349&amp;ssl=1" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on-async--click="actions.showLightbox" data-wp-on-async--load="callbacks.setButtonStyles" data-wp-on-async-window--resize="callbacks.setButtonStyles" src="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image-2.png?resize=640%2C349&#038;ssl=1" alt="External Client App" class="wp-image-6993" srcset="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image-2.png?resize=700%2C382&amp;ssl=1 700w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image-2.png?resize=250%2C136&amp;ssl=1 250w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image-2.png?w=750&amp;ssl=1 750w" sizes="(max-width: 640px) 100vw, 640px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="Zvětšit"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on-async--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<p>Save, wait some time to propagate everything across servers and get the Consumer Key, you will need to add into Claude.</p>



<h2 class="wp-block-heading">Step 3 &#8211; Connect Claude</h2>



<p>Surprisingly or even maybe shockingly, Claude doesn&#8217;t have a&nbsp;dedicated Salesforce connector, so you need to add it manually. Good news for bigger companies &#8211; the Claude Owner/Admin can add it on the org level and users will just connect it with their own credentials.</p>



<p>If you want to do it manually just follow the <a href="https://help.salesforce.com/s/articleView?id=platform.claude_with_connectors.htm&amp;language=en_US&amp;type=5">respective article</a>, this one works. Actually it might be better to copy the URL from the Step 1 as it is listed there clearly (and have different URL at the same time).</p>



<p>Settings, Connectors, Custom Connector, ugly looking URL at the of which you will add the server you like and enabled in Step 1 (no need if you copy the URL from the Step 1). In the OAuth Client ID you will paste the Consumer Key from previous step.</p>



<p>Success, hopefully. If not pay attention to the URL of the error page, most likely at the end you can spot what is wrong:</p>



<ul class="wp-block-list">
<li>app doesn&#8217;t exist means wait a&nbsp;bit longer/double check the Consumer Key</li>



<li>invalid Scope &#8211; most likely you didn&#8217;t add all the scopes, including mcp_api</li>



<li>405 method not allowed &#8211; most likely the MCP server is not enabled.</li>
</ul>



<h2 class="wp-block-heading">Step 4 &#8211; Use it</h2>



<p>I suppose you might struggle how to use it and I&nbsp;was the same. But then I&nbsp;came with simple use cases, it gave me some data which looks relevant and save some time.</p>



<p>For CzechDreamin I&nbsp;wanted to analyze who are our top speakers &#8211; meaning they spoke the most. We have every single one as a&nbsp;lead in our Salesforce. As a&nbsp;lead for every single year they submitted a&nbsp;topic/spoke. When Data <s>Cloud </s>360 came we tried to unify them and while it kind of worked it needed some admin work for setup and wasn&#8217;t really user friendly to get this statistic. Running a&nbsp;report might work but it is a&nbsp;lot of clicks -> Claude to save me!</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Can you analyze all our leads of type Speaker and tell me which email address is the most common one (top 10). Make them unique by year (count only once per year). Count only those accepted (or in working status), basically anything besides declined. Can you also parse https://czechdreamin.com/2024/ and https://czechdreamin.com/2025 and extend it with speakers from these years (map them across the years also by name in its fuzzy form)</p>
</blockquote>



<p>I can imagine you will not want to get my requirements in such form, but Claude managed. A&nbsp;lot of thinking from its side, a&nbsp;few clicks to approve their approach and what they will query from Salesforce and we are done. I&nbsp;must admit this conversational analysis is super cool thing!</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><strong>Key findings after adding 2025:</strong></p>



<ul class="wp-block-list">
<li><strong>Aaron Crear</strong> remains #1 — now confirmed across 5 years (2019, 2020, 2023, 2024, 2025)</li>



<li><strong>Melissa Shepard</strong>, <strong>Katka Vokrinkova</strong>, <strong>Mark Jones</strong>, <strong>George Avilov</strong>, <strong>Pei Mun Lim</strong>, <strong>Todd Halfpenny</strong>, <strong>Hanna Nimchuk</strong>, <strong>Lukas Vavrin</strong>, <strong>David Fernandez Rivero</strong> all gained a&nbsp;2025 year, jumping to 3–4 total appearances</li>



<li>Several 2025 speakers (like <strong>Andrew Fawcett</strong>, <strong>Markus Fröhler</strong>) appear website-only with no SF Lead record — worth checking if they should be created</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>I must admit that I&nbsp;start seeing the value and maybe being braver and allow the write access as well so it can create tasks for me, update opportunities etc would be worth it.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Check my salesforce and tell me how many opportunities we have for this year</p>
</blockquote>



<p>You have <strong>3 opportunities</strong> for 2026, all currently in the <strong>&#8222;Invoice sent&#8220;</strong> stage with a&nbsp;95% probability. Here&#8217;s&nbsp;the breakdown:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Opportunity</th><th>Amount</th><th>Close Date</th></tr></thead><tbody><tr><td>XXXX 2026 (Silver)</td><td>$1,100</td><td>Jan 31, 2026</td></tr><tr><td>YYYY 2026 (Gold + DemoJam)</td><td>$5,700</td><td>Jan 31, 2026</td></tr><tr><td>ZZZZ 2026 (Silver)</td><td>$4,400</td><td>Feb 28, 2026</td></tr></tbody></table></figure>



<p><strong>Total pipeline value: $11,200</strong> — and since all three are at 95% probability, you&#8217;re in great shape to close them. Would you like to dig into any of these further?</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>can you mark all the opportunities you listed above as Closed Won?</p>
</blockquote>



<p>I have the 3 opportunity IDs from earlier. Let me update all three simultaneously.All 3 opportunities have been marked as <strong>Closed Won</strong> <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Total closed: $11,200.</strong> Nice work! <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f389.png" alt="🎉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>actually create a&nbsp;follow-up task for me in a&nbsp;week time to check whether they have all information for each of those opps.</p>
</blockquote>



<p>Good, got your user ID. Now creating 3 tasks — one per opportunity — due in a&nbsp;week (April 28).All 3 tasks created and linked to their respective opportunities, due <strong>April 28</strong> <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>They&#8217;re assigned to you (Martin Humpolec) and will show up in your SF task list and activity timeline on each opp.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>I always have a&nbsp;feeling it takes for ever, but it is probably quicker than open Salesforce and go one by one or even mass update from a&nbsp;list view. Yes, they all have been updated to Closed Won a&nbsp;few seconds later and tasks have been created.</p>



<p>And I&#8217;m probably sold, this conversational work &#8211; which compared to my previous experience is really spot on and doesn&#8217;t need to constantly confirm that it found the right records and everything &#8211; makes it easy to work, maybe instead of typing use voice and much more. </p>



<p>I&#8217;m pretty sure I&#8217;m just scratching the surface of what is possible and you do on daily basis &#8211; will you share some example how you utilize it or what you feel it will allow you to do?</p>
]]></content:encoded>
					
					<wfw:commentRss>https://martinhumpolec.cz/how-to-connect-claude-with-salesforce/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6991</post-id>	</item>
		<item>
		<title>With Leanne Botwright about Business Analyst live</title>
		<link>https://martinhumpolec.cz/with-leanne-botwright-about-business-analyst-live/</link>
					<comments>https://martinhumpolec.cz/with-leanne-botwright-about-business-analyst-live/#respond</comments>
		
		<dc:creator><![CDATA[Martin Humpolec]]></dc:creator>
		<pubDate>Thu, 23 Apr 2026 16:55:03 +0000</pubDate>
				<category><![CDATA[Salesforce]]></category>
		<category><![CDATA[analyst]]></category>
		<category><![CDATA[CzechDreamin]]></category>
		<category><![CDATA[Shirtforce]]></category>
		<category><![CDATA[User group]]></category>
		<guid isPermaLink="false">https://martinhumpolec.cz/?p=6980</guid>

					<description><![CDATA[Another great user group (actually it happened a&#160;month ago already :-)), this time we spoke with Leanne about what it takes to be a&#160;business analyst. It might surprise some people that you aren&#8217;t (should not be) just a&#160;transcriber, that you are and should be curious and understand the requirements fully as only then you can<span class="read-more"><a href="https://martinhumpolec.cz/with-leanne-botwright-about-business-analyst-live/">Read More...</a></span>]]></description>
										<content:encoded><![CDATA[
<p>Another great <a href="https://trailblazercommunitygroups.com/salesforce-user-group-prague-czechia/">user group</a> (actually it happened a&nbsp;month ago already :-)), this time we spoke with <a href="https://www.linkedin.com/in/leanne-botwright/">Leanne</a> about what it takes to be a&nbsp;business analyst. It might surprise some people that you aren&#8217;t (should not be) just a&nbsp;transcriber, that you are and should be curious and understand the requirements fully as only then you can design solution which would fit your need and probably solve also the need you didn&#8217;t realize you really have.</p>



<h2 class="wp-block-heading">A few of my notes:</h2>



<ul class="wp-block-list">
<li><strong>“Accidental admin” is the norm</strong><br>Many people don’t plan a&nbsp;career in Salesforce — they grow into it by solving real business problems, which leads to a&nbsp;very practical mindset.</li>



<li><strong>Hands-on experience builds credibility</strong><br>Deep, practical knowledge helps you:
<ul class="wp-block-list">
<li>understand system behavior</li>



<li>speak confidently with tech teams</li>



<li>avoid being purely theoretical</li>
</ul>
</li>



<li><strong>End-to-end thinking &gt; platform thinking</strong><br>A strong BA looks beyond Salesforce:
<ul class="wp-block-list">
<li>understands integrations (e.g. SAP)</li>



<li>sees the full business process</li>



<li>avoids siloed responsibility</li>
</ul>
</li>



<li><strong>Users don’t care about systems — only outcomes</strong><br>They interact with one interface, but expect everything behind it to work seamlessly.</li>



<li><strong>Delivery often fails before it starts</strong><br>The real issues are:
<ul class="wp-block-list">
<li>poor data</li>



<li>unclear processes</li>



<li>missing ownership</li>
</ul>
</li>



<li><strong>“You can’t automate what you can’t trust”</strong><br>Bad data = unreliable automation → validate data readiness early.</li>



<li><strong>AI / buzzwords must be translated into outcomes</strong><br>“We want AI” → define:
<ul class="wp-block-list">
<li>measurable goals</li>



<li>specific capabilities</li>
</ul>
</li>



<li><strong>Start with enablers, not shiny features</strong><br>Before advanced solutions:
<ul class="wp-block-list">
<li>fix data</li>



<li>clarify processes</li>



<li>ensure visibility</li>
</ul>
</li>



<li><strong>Success metrics are often missing</strong><br>Teams build and move on without checking impact → no learning loop.</li>



<li><strong>Curiosity builds trust, not resistance</strong><br>Asking thoughtful questions (instead of pushing back directly) leads to better collaboration and better solutions.</li>



<li><strong>Stakeholders must co-own solutions</strong><br>Involving them early → stronger adoption, better outcomes, and internal champions.</li>
</ul>



<p>Check the <a href="https://youtu.be/YrADWjwXR1I?si=QdfXTXzs2AInMDOR">recording</a> on your own! And <a href="https://drive.google.com/drive/folders/1U6FLAp1pynHctnHkYEd5Yl_vRUE2aHiT?usp=sharing">presentation</a> if you wish to just quickly skim through.</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69f061b3d06f4&quot;}" data-wp-interactive="core/image" class="wp-block-image size-full wp-lightbox-container"><img data-recalc-dims="1" decoding="async" width="640" height="353" data-attachment-id="6981" data-permalink="https://martinhumpolec.cz/with-leanne-botwright-about-business-analyst-live/image-182/" data-orig-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-6.png?fit=722%2C398&amp;ssl=1" data-orig-size="722,398" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-6.png?fit=700%2C386&amp;ssl=1" data-large-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-6.png?fit=640%2C353&amp;ssl=1" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on-async--click="actions.showLightbox" data-wp-on-async--load="callbacks.setButtonStyles" data-wp-on-async-window--resize="callbacks.setButtonStyles" src="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-6.png?resize=640%2C353&#038;ssl=1" alt="" class="wp-image-6981" srcset="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-6.png?w=722&amp;ssl=1 722w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-6.png?resize=700%2C386&amp;ssl=1 700w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-6.png?resize=250%2C138&amp;ssl=1 250w" sizes="(max-width: 640px) 100vw, 640px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="Zvětšit"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on-async--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://martinhumpolec.cz/with-leanne-botwright-about-business-analyst-live/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6980</post-id>	</item>
		<item>
		<title>O Salesforce v&#160;nezisku</title>
		<link>https://martinhumpolec.cz/o-salesforce-v-nezisku/</link>
					<comments>https://martinhumpolec.cz/o-salesforce-v-nezisku/#respond</comments>
		
		<dc:creator><![CDATA[Martin Humpolec]]></dc:creator>
		<pubDate>Tue, 07 Apr 2026 06:58:00 +0000</pubDate>
				<category><![CDATA[Podcast]]></category>
		<category><![CDATA[fundraising]]></category>
		<category><![CDATA[neziskovky]]></category>
		<category><![CDATA[podcast]]></category>
		<guid isPermaLink="false">https://martinhumpolec.cz/?p=6971</guid>

					<description><![CDATA[Neziskovým organizacím Salesforce poskytuje v&#160;rámci své Pledge 1% aktivity 10 licencí zdarma a&#160;v&#160;Česku (i&#160;ve světě) to hodně organizací využívá. Ať už pak ke své činnosti používají AFN (Agentforce Nonprofit), NPSP (NonProfit Success Pack) nebo čistý Sales Cloud případně rozšířený o&#160;balíček FPack, který zajišťuje napojení na okolní systémy, které se typicky v&#160;Česku používají (banky, Darujme.cz). Tentokrát<span class="read-more"><a href="https://martinhumpolec.cz/o-salesforce-v-nezisku/">Read More...</a></span>]]></description>
										<content:encoded><![CDATA[
<p>Neziskovým organizacím Salesforce poskytuje v&nbsp;rámci své <a href="https://www.pledge1percent.org/">Pledge 1%</a> aktivity 10 licencí zdarma a&nbsp;v&nbsp;Česku (i&nbsp;ve světě) to hodně organizací využívá. Ať už pak ke své činnosti používají AFN (Agentforce Nonprofit), NPSP (NonProfit Success Pack) nebo čistý Sales Cloud případně rozšířený o&nbsp;<a href="https://crmproneziskovky.cz/reseni/fundraising/">balíček FPack</a>, který zajišťuje napojení na okolní systémy, které se typicky v&nbsp;Česku používají (banky, <a href="https://www.darujme.cz/">Darujme.cz</a>).</p>



<p>Tentokrát jsem si pozval <a href="https://www.linkedin.com/in/jan-stan%C4%9Bk-852001109/">Honzu Staňka</a> z&nbsp;<a href="https://www.domovsvatehojosefa.cz/">Domova svatého Josefa</a> a&nbsp;<a href="https://www.linkedin.com/in/alena-novotn%C3%A1-27982217/">Alenu Novotnou</a> z&nbsp;<a href="https://www.lekari-bez-hranic.cz/">Lékařů bez hranic</a>. Dvě různé implementace, dva různé systémy, dvě různě dlouhé zkušenosti.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="640" height="375" data-attachment-id="6972" data-permalink="https://martinhumpolec.cz/o-salesforce-v-nezisku/image-180/" data-orig-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-5.png?fit=1617%2C948&amp;ssl=1" data-orig-size="1617,948" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-5.png?fit=700%2C410&amp;ssl=1" data-large-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-5.png?fit=640%2C375&amp;ssl=1" src="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-5.png?resize=640%2C375&#038;ssl=1" alt="" class="wp-image-6972" srcset="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-5.png?resize=1024%2C600&amp;ssl=1 1024w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-5.png?resize=700%2C410&amp;ssl=1 700w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-5.png?resize=250%2C147&amp;ssl=1 250w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-5.png?resize=768%2C450&amp;ssl=1 768w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-5.png?resize=1536%2C901&amp;ssl=1 1536w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-5.png?w=1617&amp;ssl=1 1617w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-5.png?w=1280&amp;ssl=1 1280w" sizes="auto, (max-width: 640px) 100vw, 640px" /></figure>



<iframe data-testid="embed-iframe" style="border-radius:12px" src="https://open.spotify.com/embed/episode/10yrzPQqUgLVr4lItcCRJS?utm_source=generator" width="100%" height="152" frameBorder="0" allowfullscreen="" allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy"></iframe>



<h2 class="wp-block-heading">Zápisky:</h2>



<ul class="wp-block-list">
<li>Salesforce v&nbsp;nezisku není jen CRM – je to nástroj, který umožňuje šetřit čas, peníze a&nbsp;posouvat fundraising dopředu.</li>



<li>Neziskovky často pracují efektivněji než byznys – mají méně lidí, méně času a&nbsp;musí víc automatizovat.</li>



<li>Výběr nové databáze je strategické rozhodnutí – musí vydržet roky, být podporovaná a&nbsp;rozvíjená.</li>



<li>Příprava před implementací je klíčová – vědět, co chceme, proč to chceme a&nbsp;jak to budeme používat.</li>



<li>Salesforce pomáhá s&nbsp;datovou kulturou – umožňuje pracovat s&nbsp;daty, analyzovat je a&nbsp;dělat fundraising data‑driven.</li>
</ul>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69f061b3d205f&quot;}" data-wp-interactive="core/image" class="wp-block-image size-medium wp-lightbox-container"><img data-recalc-dims="1" loading="lazy" decoding="async" width="640" height="153" data-attachment-id="6977" data-permalink="https://martinhumpolec.cz/o-salesforce-v-nezisku/image_1/" data-orig-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image_1.png?fit=1568%2C374&amp;ssl=1" data-orig-size="1568,374" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image_1" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image_1.png?fit=700%2C167&amp;ssl=1" data-large-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image_1.png?fit=640%2C153&amp;ssl=1" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on-async--click="actions.showLightbox" data-wp-on-async--load="callbacks.setButtonStyles" data-wp-on-async-window--resize="callbacks.setButtonStyles" src="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image_1.png?resize=640%2C153&#038;ssl=1" alt="Ukázka reportu s plánem prací" class="wp-image-6977" srcset="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image_1.png?resize=700%2C167&amp;ssl=1 700w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image_1.png?resize=1024%2C244&amp;ssl=1 1024w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image_1.png?resize=250%2C60&amp;ssl=1 250w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image_1.png?resize=768%2C183&amp;ssl=1 768w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image_1.png?resize=1536%2C366&amp;ssl=1 1536w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image_1.png?w=1568&amp;ssl=1 1568w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image_1.png?w=1280&amp;ssl=1 1280w" sizes="auto, (max-width: 640px) 100vw, 640px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="Zvětšit"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on-async--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<ul class="wp-block-list">
<li>10 licencí zdarma je výhoda – ale implementace, údržba a&nbsp;rozvoj stojí čas i&nbsp;peníze, které je potřeba realisticky plánovat.</li>



<li>Komunita je obrovská přidaná hodnota – neziskovky se učí jedna od druhé, sdílí postupy a&nbsp;inspirují se.</li>



<li>Implementace může být bolestivá – první měsíce jsou často „údolí smrti“, než si lidé zvyknou a&nbsp;systém se usadí.</li>



<li>Salesforce je jako lego – dá se postavit téměř cokoliv, ale je potřeba mít hranice, aby se organizace neutopila v&nbsp;možnostech.</li>



<li>Automatizace šetří nejvíc času – import darů, děkování, kampaně, telefonní scénáře, mailing.</li>
</ul>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69f061b3d2387&quot;}" data-wp-interactive="core/image" class="wp-block-image size-medium wp-lightbox-container"><img data-recalc-dims="1" loading="lazy" decoding="async" width="640" height="162" data-attachment-id="6976" data-permalink="https://martinhumpolec.cz/o-salesforce-v-nezisku/image-181/" data-orig-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image.png?fit=1894%2C479&amp;ssl=1" data-orig-size="1894,479" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image.png?fit=700%2C177&amp;ssl=1" data-large-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image.png?fit=640%2C162&amp;ssl=1" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on-async--click="actions.showLightbox" data-wp-on-async--load="callbacks.setButtonStyles" data-wp-on-async-window--resize="callbacks.setButtonStyles" src="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image.png?resize=640%2C162&#038;ssl=1" alt="Vzhled dashboardu pro fundraisera" class="wp-image-6976" srcset="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image.png?resize=700%2C177&amp;ssl=1 700w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image.png?resize=1024%2C259&amp;ssl=1 1024w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image.png?resize=250%2C63&amp;ssl=1 250w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image.png?resize=768%2C194&amp;ssl=1 768w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image.png?resize=1536%2C388&amp;ssl=1 1536w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image.png?w=1894&amp;ssl=1 1894w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/04/image.png?w=1280&amp;ssl=1 1280w" sizes="auto, (max-width: 640px) 100vw, 640px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="Zvětšit"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on-async--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<ul class="wp-block-list">
<li>Rychlé poděkování dárcům je zásadní – automatizace umožní reagovat okamžitě, což zvyšuje loajalitu i&nbsp;výnosy.</li>



<li>Uživatelská přívětivost je kritická – neziskovky nemají armádu adminů, systém musí být jednoduchý pro běžné uživatele.</li>



<li>Salesforce pomáhá zvednout fundraising – méně času na administrativu znamená víc času na dárce a&nbsp;kampaně.</li>



<li>CRM není o&nbsp;datech, ale o&nbsp;vztazích – fundraising je budování vztahů a&nbsp;Salesforce pomáhá řídit je ve velkém.</li>



<li>Hotové balíčky pro neziskovky jsou velká výhoda – integrace na banky, darujme, kampaně a&nbsp;další věci zjednodušují start.</li>
</ul>



<a href="https://podcasts.apple.com/us/podcast/salesforce-v-%C4%8Desku/id1550600947?itsct=podcast_box&amp;itscg=30200"><img decoding="async" src="https://martinhumpolec.cz/apple/" alt="Listen on Apple Podcasts" style="height: 83px; float: left"></a> <a href="https://open.spotify.com/show/07uhT5EsoHZcc3J4e384wg"><img decoding="async" src="https://martinhumpolec.cz/spotify/" alt="Listen on Spotify" style="height: 83px; float: left; padding-left: 50px"></a><br><br>
]]></content:encoded>
					
					<wfw:commentRss>https://martinhumpolec.cz/o-salesforce-v-nezisku/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6971</post-id>	</item>
		<item>
		<title>Middleware &#8211; yes or no?</title>
		<link>https://martinhumpolec.cz/middleware-yes-or-no/</link>
					<comments>https://martinhumpolec.cz/middleware-yes-or-no/#respond</comments>
		
		<dc:creator><![CDATA[Martin Humpolec]]></dc:creator>
		<pubDate>Thu, 02 Apr 2026 12:07:17 +0000</pubDate>
				<category><![CDATA[Salesforce]]></category>
		<category><![CDATA[ESB]]></category>
		<category><![CDATA[integration]]></category>
		<category><![CDATA[middleware]]></category>
		<category><![CDATA[MuleSoft]]></category>
		<category><![CDATA[Pentaho]]></category>
		<guid isPermaLink="false">https://martinhumpolec.cz/?p=6973</guid>

					<description><![CDATA[Interesting question every then and now &#8211; do we need to purchase a&#160;middleware or do a&#160;point-to-point integration? When I&#160;recall all the CTA related scenarios, there probably wasn&#8217;t any, where we wouldn&#8217;t propose ESB in the picture. But worth to know that these solutions don&#8217;t have any budget constrains which makes real life decision a&#160;bit different.<span class="read-more"><a href="https://martinhumpolec.cz/middleware-yes-or-no/">Read More...</a></span>]]></description>
										<content:encoded><![CDATA[
<p>Interesting question every then and now &#8211; do we need to purchase a&nbsp;middleware or do a&nbsp;point-to-point integration?</p>



<p>When I&nbsp;recall all the CTA related scenarios, there probably wasn&#8217;t any, where we wouldn&#8217;t propose ESB in the picture. But worth to know that these solutions don&#8217;t have any budget constrains which makes real life decision a&nbsp;bit different.</p>



<p>A <a href="https://www.salesforceben.com/is-middleware-right-for-your-salesforce-integration/">great article has been published on SalesforceBen</a> related to this and this exact article was the reason for my blog post.</p>



<p>All the points in the article are valid, but the real life might be different, like on our last project.</p>



<p>Imagine a&nbsp;company, which has existing Salesforce implementation, connected to their DWH via <a href="https://pentaho.com/">Pentaho</a>, because that&#8217;s&nbsp;a&nbsp;tool they know and use for everything. Now they are entering phase 2 with 8 more integrations and the question is obviously on the table.</p>



<p>The answer is not that clear anymore, once you describe the integrations:</p>



<ol class="wp-block-list">
<li>Company register, when they are creating a&nbsp;new account in SF they want to just enter its identification number and get all the details from the government run register &#8211; no typing, no extra clicks, load also relevant contacts;</li>



<li>Being able to check the company health via a&nbsp;dedicated provider &#8211; click on a&nbsp;link, it will open the website with already filtered out the respective company. There is no write back of data into the system, just visual check how it looks now and whether we can proceed with doing business with the company;</li>



<li>eSignature of orders (think DocuSign or similar);</li>



<li>LinkedIn integration as additional source of contacts;</li>



<li>Sending SMS based on activities done in the system and as a&nbsp;reminder for meetings;</li>



<li>Integration with mass mail sending system;</li>
</ol>



<p>And the list goes on. What might have look pretty clear at the beginning &#8211; 8 separate systems to integrate with obviously might be a&nbsp;great reason for purchasing ESB solution.</p>



<p>But when you describe the system and use cases it isn&#8217;t so clear to me anymore.</p>



<h2 class="wp-block-heading"><strong>You ask why?</strong></h2>



<p>Let&#8217;s&nbsp;go one by one:</p>



<ol class="wp-block-list">
<li>You will need to develop the custom LWC component which would wrap the logic and user interaction. You can call the end system directly from here or call ESB which would call the system. Added value? When you will change the data provider you can just change the mapping on the ESB level and not touch the SF side at all. But how often that would happen and is it really easier than change the logic in the Apex controller or Flow? Because we would not use any other benefit of ESB &#8211; such as retry, load balancing, etc. We might still use it to store the debug or track the usage off-platform, but we can probably do it easily on SF side as well;</li>



<li>This is just a&nbsp;URL link with some identifier &#8211; most likely the company identification number &#8211; at the end, no added benefit of opening the URL via ESB which would just redirect elsewhere;</li>



<li>eSignature and all the following share one main reason &#8211; most likely there is already an existing AppExchange app, which handles that, you can just install and configure it and be up and running. Do you really want to develop your own LinkedIn integration (impossible) or integrate the emailing system from scratch? There is no point and the ESB doesn&#8217;t provide any value here.</li>
</ol>



<h2 class="wp-block-heading"><strong>When does it make sense?</strong></h2>



<p>To me the use cases are pretty clear when typically looking in the mirror as the typical company slowly evolves and add additional systems in the landscape. What made sense to do point-to-point at the beginning (like connecting SF to DWH directly) suddenly doesn&#8217;t make much sense as you need to develop each integration on its own, update all the data mapping on multiple places if new tables are added, etc.</p>



<p>Once you have complex integration where you need to query one system, based on results query another one, transform data and then act on them &#8211; that might be great use case.</p>



<p>When you have a&nbsp;lot of calls going here and there and you might be able to use ESB as some kind of cache to save on the SF calls.</p>



<p>When you need to update data during night based on external system it makes sense to run it off-platform and don&#8217;t waste scheduled job development on SF side.</p>



<p>When it is happening in the background and you need to have a&nbsp;way to retry failed operations &#8211; it might be easier to do on ESB side rather than develop on SF side.</p>



<p>When you need to connect to on-prem systems and IT isn&#8217;t willing to open a&nbsp;firewall to you &#8211; you will most likely want to run this operation from inside and just call out to Salesforce.</p>



<h2 class="wp-block-heading"><strong>Not the easiest decision</strong></h2>



<p>What looked like an easy choice at the beginning isn&#8217;t that easy at the end. You rarely have all the information at start, the fixed system landscape, understanding of the complete data flow. Starting point-to-point might be easier and then, a&nbsp;few years down the road, you will realize it wasn&#8217;t the best choice and you should redo everything. Sad, but probably no one should be blamed, that&#8217;s&nbsp;life.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://martinhumpolec.cz/middleware-yes-or-no/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6973</post-id>	</item>
		<item>
		<title>Can you calculate follow-up time for us?</title>
		<link>https://martinhumpolec.cz/can-you-calculate-follow-up-time-for-us/</link>
					<comments>https://martinhumpolec.cz/can-you-calculate-follow-up-time-for-us/#respond</comments>
		
		<dc:creator><![CDATA[Martin Humpolec]]></dc:creator>
		<pubDate>Tue, 24 Mar 2026 12:18:01 +0000</pubDate>
				<category><![CDATA[Salesforce]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[flow]]></category>
		<category><![CDATA[KPI]]></category>
		<category><![CDATA[Slack]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[UnofficialSF]]></category>
		<guid isPermaLink="false">https://martinhumpolec.cz/?p=6967</guid>

					<description><![CDATA[I feel like this might nicely fit into the &#8222;How I&#160;solved it&#8220; series, which Jen is running. A customer came the other day that they have a&#160;new process, where they need to follow-up with a&#160;new lead in 2 hours and notify owner and their supervisor if there is a&#160;delay. My initial reaction was &#8222;damn, cases<span class="read-more"><a href="https://martinhumpolec.cz/can-you-calculate-follow-up-time-for-us/">Read More...</a></span>]]></description>
										<content:encoded><![CDATA[
<p>I feel like this might nicely fit into the &#8222;<a href="https://www.youtube.com/playlist?list=PLrC_ei2_Pv0HmlK-nmLkKnyiIe7bSWWLH">How I&nbsp;solved it</a>&#8220; series, which Jen is running.</p>



<p>A customer came the other day that they have a&nbsp;new process, where they need to follow-up with a&nbsp;new lead in 2 hours and notify owner and their supervisor if there is a&nbsp;delay.</p>



<p>My initial reaction was &#8222;damn, cases have it out-of-the-box but that&#8217;s&nbsp;not a&nbsp;reason to change leads to cases and it is really pity&#8220;</p>



<p>The next thought was pretty simple &#8211; 2 hours, it is just a&nbsp;simple flow which would set a&nbsp;date/time field and put extra two hours there and then scheduled path with email/Slack message.</p>



<p>Obviously it turned out to be a&nbsp;bit more complex:</p>



<ul class="wp-block-list">
<li>2 hours only during business hours</li>



<li>operating in multiple timezones</li>
</ul>



<p>In Apex we can use the <a href="https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_classes_businesshours.htm">BusinessHours class</a>, which would solve the check whether we are already after hours or weekend or ban holiday, but do I&nbsp;want to develop this thing? And how to handle the timezones?</p>



<p>And how can I&nbsp;solve it in Flow? Add two hours and check whether it is already after working hours or weekend?&nbsp; That would be complex and ugly to configure.</p>



<p>Invocable classes and community solution to my rescue, I&#8217;m so glad that I&nbsp;know <a href="https://unofficialsf.com/">UnOfficialSF.com</a>.</p>



<h2 class="wp-block-heading"><strong>The Solution</strong></h2>



<p>There are actually two great solutions on the UnOfficialSF, which I&nbsp;combined.</p>



<p>The first is <a href="https://unofficialsf.com/flow-datetime-methods/">more complex</a> and can solve almost anything, except using specified business hours to run the calculation (it takes the default one)</p>



<p>The <a href="https://unofficialsf.com/from-renato-oliveira-new-business-hours-actions/">second one</a> can take specific business hours into account, but there is no way how to figure out which of them.</p>



<ol class="wp-block-list">
<li>Create a&nbsp;business hours for &#8222;each&#8220; timezone &#8211; I&nbsp;didn&#8217;t really create for each, but only for the timezones (or rather timeshifts?) where present employees are based. What I&nbsp;mean by &#8222;timeshifts&#8220;? If there are two people, one located in Prague and one in Berlin (both are GMT+1) I&nbsp;would create just one record (e.g. BusinessHours1), where the number means the offset. The potential downside are cities, which typically have the same time shift but sometime to the switch to summer/winter time at different time of the year (or not at all &#8211; I&nbsp;still remember some states in Australia have it differently)</li>



<li>As all times in Salesforce are stored in UTC/GMT the first thing the flow does is to calculate the offset of the owner of the record &#8211; the timezone field on user record doesn&#8217;t specify the numeric value, but the real city, so we cannot just get it from the record but the Apex can tell me the difference</li>



<li>We will find the respective business hours record (remember the number in the name) and if there is none we would take the default one</li>



<li>Calculate the offset via calling the respective method and passing the business hours Id</li>



<li>Have a&nbsp;second after-save flow with scheduled path &#8211; the assumption is that there aren&#8217;t that many records created on daily basis to hit the limits of scheduled interviews. The reason for second flow was, that when you update the &#8222;Follow-up till&#8220; value in the same flow, the scheduled path is not recalculated. Crucial detail when designing these two flows was also the order of their execution &#8211; don&#8217;t forget to set it right otherwise it might work just on second save or never</li>
</ol>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69f061b3d5fab&quot;}" data-wp-interactive="core/image" class="wp-block-image size-full wp-lightbox-container"><img data-recalc-dims="1" loading="lazy" decoding="async" width="505" height="676" data-attachment-id="6968" data-permalink="https://martinhumpolec.cz/can-you-calculate-follow-up-time-for-us/image-179/" data-orig-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-4.png?fit=505%2C676&amp;ssl=1" data-orig-size="505,676" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-4.png?fit=505%2C676&amp;ssl=1" data-large-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-4.png?fit=505%2C676&amp;ssl=1" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on-async--click="actions.showLightbox" data-wp-on-async--load="callbacks.setButtonStyles" data-wp-on-async-window--resize="callbacks.setButtonStyles" src="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-4.png?resize=505%2C676&#038;ssl=1" alt="Flow picture" class="wp-image-6968" srcset="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-4.png?w=505&amp;ssl=1 505w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-4.png?resize=250%2C335&amp;ssl=1 250w" sizes="auto, (max-width: 505px) 100vw, 505px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="Zvětšit"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on-async--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<h2 class="wp-block-heading"><strong>Done!</strong></h2>



<p>That would be too quick, right? One of my biggest fear was how to post the message to Slack, especially as I&nbsp;want to mention the respective user. Turned out that when you <a href="https://slack.com/intl/en-gb/help/articles/30754346665747-Connect-Salesforce-and-Slack">setup the Slack integration</a> it automatically syncs the Slack user ids (or you can map it manually), so it was simple matter of lookup the user id (and their superior) and add the id into the Slack message &#8211; the format of &lt;@Id> has been luckily easy to find on the internet.</p>



<h2 class="wp-block-heading"><strong>Take away</strong></h2>



<p>Customer happy and one crucial fact discovered as well &#8211; to surprise of everyone, most of the leads could wait till the next day for processing (meaning the 2 hours deadline will be only the next day). </p>



<p>While the intention of assigning the person from the respective region was generally good and made sense, turned out that customers have been typically registering rather at the end of the day/after hours and it might be better to assign them to someone from other region, to really get in touch in those 2 hours. Obviously they might have done it as the last task of their day and be already out of office, but who knows and we don&#8217;t have data to confirm that.</p>



<p>What about you, do you have some KPIs to track and automation to help you keep up with them?</p>
]]></content:encoded>
					
					<wfw:commentRss>https://martinhumpolec.cz/can-you-calculate-follow-up-time-for-us/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6967</post-id>	</item>
		<item>
		<title>Free Salesforce License in your org, can you believe it?</title>
		<link>https://martinhumpolec.cz/free-salesforce-license-in-your-org-can-you-believe-it/</link>
					<comments>https://martinhumpolec.cz/free-salesforce-license-in-your-org-can-you-believe-it/#respond</comments>
		
		<dc:creator><![CDATA[Martin Humpolec]]></dc:creator>
		<pubDate>Wed, 18 Mar 2026 20:41:24 +0000</pubDate>
				<category><![CDATA[Salesforce]]></category>
		<category><![CDATA[Experience Cloud]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[licence]]></category>
		<category><![CDATA[Salesforce Foundations]]></category>
		<category><![CDATA[Salesforce Platform]]></category>
		<guid isPermaLink="false">https://martinhumpolec.cz/?p=6963</guid>

					<description><![CDATA[Sometimes Salesforce surprises, like a&#160;few years back when they introduced the Integration license and gave 5 of them for free in every org. Now &#8211; I&#160;mean it is for some time already, but I&#160;finally really used it at one client &#8211; you can get Platform licenses for free as well. As SalesforceBen listed in their<span class="read-more"><a href="https://martinhumpolec.cz/free-salesforce-license-in-your-org-can-you-believe-it/">Read More...</a></span>]]></description>
										<content:encoded><![CDATA[
<p>Sometimes Salesforce surprises, like a&nbsp;few years back when they introduced the <a href="https://martinhumpolec.cz/integration-user/">Integration license</a> and gave 5 of them for free in every org.</p>



<p>Now &#8211; I&nbsp;mean it is for some time already, but I&nbsp;finally really used it at one client &#8211; you can get Platform licenses for free as well.</p>



<p>As <a href="https://www.salesforceben.com/the-ultimate-guide-to-salesforce-foundations/">SalesforceBen listed in their article</a>, you get 600 Platform Login Licenses when you enable <a href="https://www.salesforce.com/crm/foundations/">Salesforce Foundations</a>. </p>



<p>But here is the catch, as the license is not available immediately after activating Foundations. The only one you will see is 601 of Einstein Agent and 20&nbsp;200 of External Apps Login.</p>



<p>You need to reach out to your AE and ask them to add the &#8218;Agentforce 360 Platform — Login and Dev Provisioning&#8216; SKU into your contract, which is free of charge. Once signed and a&nbsp;bit of wait you will get Platform Logins into your org. Surprisingly we got 12&nbsp;000 of them, when I&nbsp;expected only 600, maybe it is somehow linked to the related information in the article &#8211; &#8222;600 annual logins with 30,000 credits&#8220; but I&#8217;m still not able to do the math.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="349" height="69" data-attachment-id="6964" data-permalink="https://martinhumpolec.cz/free-salesforce-license-in-your-org-can-you-believe-it/image-178/" data-orig-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-3.png?fit=349%2C69&amp;ssl=1" data-orig-size="349,69" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-3.png?fit=349%2C69&amp;ssl=1" data-large-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-3.png?fit=349%2C69&amp;ssl=1" src="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-3.png?resize=349%2C69&#038;ssl=1" alt="Licenses in our org" class="wp-image-6964" srcset="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-3.png?w=349&amp;ssl=1 349w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-3.png?resize=250%2C49&amp;ssl=1 250w" sizes="auto, (max-width: 349px) 100vw, 349px" /></figure>



<h2 class="wp-block-heading">What do to with that?</h2>



<p>Login license is not like a&nbsp;regular license, you pay/use it for every login by those users, but counting only once for each user during 24 hours. Meaning if the user will login every working day (let&#8217;s&nbsp;say 200 days per year) you have enough for 60 people &#8211; wow! </p>



<p>Platform license works almost like any other license, there are just a&nbsp;few objects it cannot access such as Leads or Opportunities. But Accounts, Contacts, Tasks, Events, custom objects, etc are available and can be used.</p>



<p>You will also notice why Salesforce has been pushing for Permission Sets for a&nbsp;while &#8211; you need to have a&nbsp;different profile for Login users and it is quiet annoying to setup everything twice. Minimum profile extended with relevant permission sets will save you a&nbsp;lot of work.</p>



<h2 class="wp-block-heading">External Apps Login</h2>



<p>Actually what about the other license you get as well? Again, these licenses are used per login, as the name suggest you can use it only for external users (not internal) and they will be able to access Salesforce only via Experience Cloud. Generally they behave as <a href="https://help.salesforce.com/s/articleView?id=platform.users_license_types_communities.htm&amp;type=5">Customer Community license</a> which means  less possibilities to share data, managing users via accounts &amp; contacts and a&nbsp;few other things. And they have access only to CRM objects (meaning NO access to leads, cases, opportunities primarily) but you can probably still find some use-case for what to use it.</p>



<h2 class="wp-block-heading">All those tricky flex-credits</h2>



<p>Yes, to enable Foundations you need to enable Data Cloud and we all heard the story about pay-as-you-go, consumption credits, etc. A&nbsp;lot of people are super scared about this, even though Salesforce tried to minimize the risk with all the extra reporting. </p>



<p>From my experience when you just enable these things it doesn&#8217;t consume any credits and you are still getting the benefits mentioned above. Already 2 of mine customers are using extra licenses they&#8217;ve got for free and so far don&#8217;t complain.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://martinhumpolec.cz/free-salesforce-license-in-your-org-can-you-believe-it/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6963</post-id>	</item>
		<item>
		<title>O Salesforce s&#160;business analytiky</title>
		<link>https://martinhumpolec.cz/o-salesforce-s-business-analytiky/</link>
					<comments>https://martinhumpolec.cz/o-salesforce-s-business-analytiky/#respond</comments>
		
		<dc:creator><![CDATA[Martin Humpolec]]></dc:creator>
		<pubDate>Tue, 10 Mar 2026 07:00:00 +0000</pubDate>
				<category><![CDATA[Podcast]]></category>
		<category><![CDATA[analyst]]></category>
		<category><![CDATA[podcast]]></category>
		<category><![CDATA[Salesforce]]></category>
		<guid isPermaLink="false">https://martinhumpolec.cz/?p=6956</guid>

					<description><![CDATA[Volné pokračování mé série o&#160;rolích lidí v&#160;Salesforce/IT ecosystému. Už jsme mluvili o&#160;testování, projektovém řízení, s&#160;obchodníky, administrátory, head hunterem, s&#160;konzultanty i&#160;success architektem. Tak teď jsme chytili ten &#8222;začátek&#8220; projektu, kde se říká co se bude dělat, proč a&#160;případně jak. Připojila se ke mě Nhan Anička Nguyenová a&#160;Anna Michutová, které si roli business analytika užívají už hezkých<span class="read-more"><a href="https://martinhumpolec.cz/o-salesforce-s-business-analytiky/">Read More...</a></span>]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-medium"><img data-recalc-dims="1" loading="lazy" decoding="async" width="640" height="360" data-attachment-id="6959" data-permalink="https://martinhumpolec.cz/o-salesforce-s-business-analytiky/image-177/" data-orig-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-2.png?fit=1024%2C577&amp;ssl=1" data-orig-size="1024,577" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-2.png?fit=700%2C394&amp;ssl=1" data-large-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-2.png?fit=640%2C361&amp;ssl=1" src="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-2.png?resize=640%2C360&#038;ssl=1" alt="S analytiky" class="wp-image-6959" srcset="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-2.png?resize=700%2C394&amp;ssl=1 700w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-2.png?resize=250%2C141&amp;ssl=1 250w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-2.png?resize=768%2C433&amp;ssl=1 768w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-2.png?w=1024&amp;ssl=1 1024w" sizes="auto, (max-width: 640px) 100vw, 640px" /></figure>



<p>Volné pokračování mé série o&nbsp;rolích lidí v&nbsp;Salesforce/IT ecosystému. Už jsme mluvili o&nbsp;testování, projektovém řízení, s&nbsp;obchodníky, administrátory, head hunterem, s&nbsp;konzultanty i&nbsp;success architektem. Tak teď jsme chytili ten &#8222;začátek&#8220; projektu, kde se říká co se bude dělat, proč a&nbsp;případně jak. Připojila se ke mě <a href="https://www.linkedin.com/in/nhan-nguyenova/?locale=en_US">Nhan Anička Nguyenová</a> a&nbsp;<a href="https://www.linkedin.com/in/anna-michutova/">Anna Michutová</a>, které si roli business analytika užívají už hezkých pár pátků a&nbsp;současně se dívají dopředu, takže jsme mohli mluvit i&nbsp;o&nbsp;technických dovednostech a&nbsp;jejich přínosu.</p>



<iframe data-testid="embed-iframe" style="border-radius:12px" src="https://open.spotify.com/embed/episode/0tQ3949JS1Ry2qRT3isw4z?utm_source=generator" width="100%" height="152" frameBorder="0" allowfullscreen="" allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy"></iframe>



<h2 class="wp-block-heading">Zápisky:</h2>



<ul class="wp-block-list">
<li>Analytik není univerzál – role se specializují a&nbsp;málokdo pokrývá vše od byznysu po data.</li>



<li>Obor pomáhá, ale není nutný – znalost terminologie a&nbsp;regulací zrychlí onboarding, ale řemeslo je přenositelné.</li>



<li>Analytik není zapisovatel – skutečná hodnota je ve schopnosti interpretovat a&nbsp;syntetizovat informace.</li>



<li>Klient očekává vedení – analytik má být partner, který upozorní na rizika, regulace i&nbsp;slepé uličky.</li>



<li>Naslouchání je klíčová dovednost – technické věci se dají doučit, ale schopnost ptát se a&nbsp;mlčet je zásadní.</li>



<li>Nehledat řešení na místě – rychlé závěry často vycházejí z&nbsp;domněnek a&nbsp;vedou špatným směrem.</li>



<li>Challengovat je nutnost – analytik musí umět říct, že něco nedává smysl byznysově, technicky ani finančně.</li>



<li>Technické povědomí je výhoda – není nutné být vývojář, ale rozumět datovým modelům a&nbsp;API výrazně pomáhá.</li>



<li>Analýza není jen o&nbsp;funkcích – je nutné chápat architekturu firmy, kulturu i&nbsp;rozhodovací struktury.</li>



<li>Stakeholdeři rozhodují o&nbsp;úspěchu – je důležité identifikovat skutečné decision makery, i&nbsp;ty skryté.</li>



<li>Velikost projektu mění způsob práce – malé projekty dávají flexibilitu, korporáty mají pevné rituály.</li>



<li>Příprava workshopu je zásadní – bez ní se meetingy mění v&nbsp;chaos a&nbsp;ztrátu času.</li>



<li>AI mění roli analytika – neohrožuje ji, ale posouvá směrem k&nbsp;vyšší přidané hodnotě.</li>



<li>AI pomáhá se sumarizací a&nbsp;kontrolou kvality – transkripty, next actions, kontrola user stories.</li>



<li>Analýza je skvělá škola komunikace – naučí vyjednávat, říkat ne, vystupovat a&nbsp;přemýšlet za chodu.</li>
</ul>



<a href="https://podcasts.apple.com/us/podcast/salesforce-v-%C4%8Desku/id1550600947?itsct=podcast_box&amp;itscg=30200"><img decoding="async" src="https://martinhumpolec.cz/apple/" alt="Listen on Apple Podcasts" style="height: 83px; float: left"></a> <a href="https://open.spotify.com/show/07uhT5EsoHZcc3J4e384wg"><img decoding="async" src="https://martinhumpolec.cz/spotify/" alt="Listen on Spotify" style="height: 83px; float: left; padding-left: 50px"></a><br><br>
]]></content:encoded>
					
					<wfw:commentRss>https://martinhumpolec.cz/o-salesforce-s-business-analytiky/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6956</post-id>	</item>
		<item>
		<title>You know how to make your customers loyal?</title>
		<link>https://martinhumpolec.cz/you-know-how-to-make-your-customers-loyal/</link>
					<comments>https://martinhumpolec.cz/you-know-how-to-make-your-customers-loyal/#respond</comments>
		
		<dc:creator><![CDATA[Martin Humpolec]]></dc:creator>
		<pubDate>Wed, 04 Mar 2026 13:31:02 +0000</pubDate>
				<category><![CDATA[Salesforce]]></category>
		<category><![CDATA[brand]]></category>
		<category><![CDATA[Loyalty Management]]></category>
		<category><![CDATA[User group]]></category>
		<guid isPermaLink="false">https://martinhumpolec.cz/?p=6950</guid>

					<description><![CDATA[Another great user group in the books, this time about Loyalty Management. Flo hosted us again in their beautiful offices and what originally looked like a&#160;small gathering of a&#160;few interested one at the end became one of the biggest meetups with close to 100% attendance rate, wow, this topic really resonates! Justinas started with a&#160;general<span class="read-more"><a href="https://martinhumpolec.cz/you-know-how-to-make-your-customers-loyal/">Read More...</a></span>]]></description>
										<content:encoded><![CDATA[
<p>Another <a href="https://trailblazercommunitygroups.com/salesforce-user-group-prague-czechia/">great user group</a> in the books, this time about <a href="https://www.salesforce.com/marketing/loyalty-management/">Loyalty Management</a>. Flo hosted us again in their beautiful offices and what originally looked like a&nbsp;small gathering of a&nbsp;few interested one at the end became one of the biggest meetups with close to 100% attendance rate, wow, this topic really resonates!</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69f061b3da09c&quot;}" data-wp-interactive="core/image" class="wp-block-image size-medium wp-lightbox-container"><img data-recalc-dims="1" loading="lazy" decoding="async" width="640" height="359" data-attachment-id="6952" data-permalink="https://martinhumpolec.cz/you-know-how-to-make-your-customers-loyal/image-176/" data-orig-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-1.png?fit=1592%2C893&amp;ssl=1" data-orig-size="1592,893" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-1.png?fit=700%2C393&amp;ssl=1" data-large-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-1.png?fit=640%2C359&amp;ssl=1" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on-async--click="actions.showLightbox" data-wp-on-async--load="callbacks.setButtonStyles" data-wp-on-async-window--resize="callbacks.setButtonStyles" src="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-1.png?resize=640%2C359&#038;ssl=1" alt="Loyalty Management landscape" class="wp-image-6952" srcset="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-1.png?resize=700%2C393&amp;ssl=1 700w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-1.png?resize=1024%2C574&amp;ssl=1 1024w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-1.png?resize=250%2C140&amp;ssl=1 250w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-1.png?resize=768%2C431&amp;ssl=1 768w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-1.png?resize=1536%2C862&amp;ssl=1 1536w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-1.png?w=1592&amp;ssl=1 1592w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image-1.png?w=1280&amp;ssl=1 1280w" sizes="auto, (max-width: 640px) 100vw, 640px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="Zvětšit"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on-async--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<p>Justinas started with a&nbsp;general intro and question whether loyalty isn&#8217;t just a&nbsp;discount in disguise? How the brand promises and excellent service can create such customers and why moving beyond single transaction and build a&nbsp;habit to buy from a&nbsp;specific brand.</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69f061b3da385&quot;}" data-wp-interactive="core/image" class="wp-block-image size-medium wp-lightbox-container"><img data-recalc-dims="1" loading="lazy" decoding="async" width="640" height="427" data-attachment-id="6953" data-permalink="https://martinhumpolec.cz/you-know-how-to-make-your-customers-loyal/2026-flo-loyalty-trailheads-23/" data-orig-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/2026-FLO-Loyalty-Trailheads-23.jpg?fit=2454%2C1636&amp;ssl=1" data-orig-size="2454,1636" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;4&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;Canon EOS 5D Mark II&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1772160555&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;65&quot;,&quot;iso&quot;:&quot;1600&quot;,&quot;shutter_speed&quot;:&quot;0.016666666666667&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="2026 FLO Loyalty Trailheads-23" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/2026-FLO-Loyalty-Trailheads-23.jpg?fit=700%2C467&amp;ssl=1" data-large-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/2026-FLO-Loyalty-Trailheads-23.jpg?fit=640%2C427&amp;ssl=1" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on-async--click="actions.showLightbox" data-wp-on-async--load="callbacks.setButtonStyles" data-wp-on-async-window--resize="callbacks.setButtonStyles" src="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/2026-FLO-Loyalty-Trailheads-23.jpg?resize=640%2C427&#038;ssl=1" alt="Evolution of Loyalty" class="wp-image-6953" srcset="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/2026-FLO-Loyalty-Trailheads-23.jpg?resize=700%2C467&amp;ssl=1 700w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/2026-FLO-Loyalty-Trailheads-23.jpg?resize=1024%2C683&amp;ssl=1 1024w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/2026-FLO-Loyalty-Trailheads-23.jpg?resize=250%2C167&amp;ssl=1 250w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/2026-FLO-Loyalty-Trailheads-23.jpg?resize=768%2C512&amp;ssl=1 768w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/2026-FLO-Loyalty-Trailheads-23.jpg?resize=1536%2C1024&amp;ssl=1 1536w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/2026-FLO-Loyalty-Trailheads-23.jpg?resize=2048%2C1365&amp;ssl=1 2048w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/2026-FLO-Loyalty-Trailheads-23.jpg?w=1280&amp;ssl=1 1280w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/2026-FLO-Loyalty-Trailheads-23.jpg?w=1920&amp;ssl=1 1920w" sizes="auto, (max-width: 640px) 100vw, 640px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="Zvětšit"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on-async--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<p>But where is space for technology, if it is &#8222;just&#8220; about brand promises and excellent service? Actually there is a&nbsp;big role, as the technology allows you the &#8222;360&#8220; unified view of customer and allows you to trigger key conversations timely &#8211; imagine all the emails which came just in time when you run out of something or which reminded you about something you should buy next as it will be time soon. Diapers, car seats, food for your animals &#8211; it is all pretty easy to time when the next will be needed, send me an email and small discount and I&#8217;m hooked.</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69f061b3da650&quot;}" data-wp-interactive="core/image" class="wp-block-image size-medium wp-lightbox-container"><img data-recalc-dims="1" loading="lazy" decoding="async" width="640" height="427" data-attachment-id="6954" data-permalink="https://martinhumpolec.cz/you-know-how-to-make-your-customers-loyal/2026-flo-loyalty-trailheads-14/" data-orig-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/2026-FLO-Loyalty-Trailheads-14.jpg?fit=2491%2C1661&amp;ssl=1" data-orig-size="2491,1661" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;4&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;Canon EOS 5D Mark II&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1772161099&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;84&quot;,&quot;iso&quot;:&quot;800&quot;,&quot;shutter_speed&quot;:&quot;0.0125&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="2026 FLO Loyalty Trailheads-14" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/2026-FLO-Loyalty-Trailheads-14.jpg?fit=700%2C467&amp;ssl=1" data-large-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/2026-FLO-Loyalty-Trailheads-14.jpg?fit=640%2C427&amp;ssl=1" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on-async--click="actions.showLightbox" data-wp-on-async--load="callbacks.setButtonStyles" data-wp-on-async-window--resize="callbacks.setButtonStyles" src="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/2026-FLO-Loyalty-Trailheads-14.jpg?resize=640%2C427&#038;ssl=1" alt="Michal delivering his part of presentation" class="wp-image-6954" srcset="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/2026-FLO-Loyalty-Trailheads-14.jpg?resize=700%2C467&amp;ssl=1 700w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/2026-FLO-Loyalty-Trailheads-14.jpg?resize=1024%2C683&amp;ssl=1 1024w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/2026-FLO-Loyalty-Trailheads-14.jpg?resize=250%2C167&amp;ssl=1 250w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/2026-FLO-Loyalty-Trailheads-14.jpg?resize=768%2C512&amp;ssl=1 768w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/2026-FLO-Loyalty-Trailheads-14.jpg?resize=1536%2C1024&amp;ssl=1 1536w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/2026-FLO-Loyalty-Trailheads-14.jpg?resize=2048%2C1366&amp;ssl=1 2048w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/2026-FLO-Loyalty-Trailheads-14.jpg?w=1280&amp;ssl=1 1280w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/2026-FLO-Loyalty-Trailheads-14.jpg?w=1920&amp;ssl=1 1920w" sizes="auto, (max-width: 640px) 100vw, 640px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="Zvětšit"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on-async--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<p>Michal followed with more practical talk about the Salesforce Loyalty Management solution, with its super complex data model, which is at times surprising as well and bring additional challenges &#8211; like voucher which needs to be always connected to individual and if you have a&nbsp;general voucher you need to create a&nbsp;&#8222;general&#8220; individual as well. Or about all the large data volumes it will end up in as their is a&nbsp;junction record for every individual and currency of loyalty program. Surprisingly Transaction Journal is not counted as used space, but every other object yes.</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69f061b3da8f3&quot;}" data-wp-interactive="core/image" class="wp-block-image size-full wp-lightbox-container"><img data-recalc-dims="1" loading="lazy" decoding="async" width="625" height="642" data-attachment-id="6951" data-permalink="https://martinhumpolec.cz/you-know-how-to-make-your-customers-loyal/image-175/" data-orig-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image.png?fit=625%2C642&amp;ssl=1" data-orig-size="625,642" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image.png?fit=625%2C642&amp;ssl=1" data-large-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image.png?fit=625%2C642&amp;ssl=1" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on-async--click="actions.showLightbox" data-wp-on-async--load="callbacks.setButtonStyles" data-wp-on-async-window--resize="callbacks.setButtonStyles" src="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image.png?resize=625%2C642&#038;ssl=1" alt="Loyalty Programs Data Mode" class="wp-image-6951" srcset="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image.png?w=625&amp;ssl=1 625w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/03/image.png?resize=250%2C257&amp;ssl=1 250w" sizes="auto, (max-width: 625px) 100vw, 625px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="Zvětšit"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on-async--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<p>Practical demo followed and when we run out of question and intense discussion and networking among all attendees. It was a&nbsp;long evening but fully worth it!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://martinhumpolec.cz/you-know-how-to-make-your-customers-loyal/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6950</post-id>	</item>
		<item>
		<title>How I&#160;vibecoded notification about changes in Salesforce</title>
		<link>https://martinhumpolec.cz/how-i-vibecoded-notification-about-changes-in-salesforce/</link>
					<comments>https://martinhumpolec.cz/how-i-vibecoded-notification-about-changes-in-salesforce/#respond</comments>
		
		<dc:creator><![CDATA[Martin Humpolec]]></dc:creator>
		<pubDate>Thu, 26 Feb 2026 14:49:26 +0000</pubDate>
				<category><![CDATA[Salesforce]]></category>
		<category><![CDATA[Bitbucket]]></category>
		<category><![CDATA[ChatGPT]]></category>
		<category><![CDATA[Copilot]]></category>
		<category><![CDATA[metadata]]></category>
		<category><![CDATA[Microsoft Copilot]]></category>
		<category><![CDATA[pipeline]]></category>
		<category><![CDATA[Slack]]></category>
		<category><![CDATA[vibe coding]]></category>
		<guid isPermaLink="false">https://martinhumpolec.cz/?p=6944</guid>

					<description><![CDATA[Ahh, this super popular topic of vibecoding when everyone will be able to develop anything in matter of minutes and there won&#8217;t be any need for developers anymore. Challenge accepted and I&#160;ate my own dog food. The Task On daily basis send me a&#160;notification about all changes in Salesforce metadata to Slack as we want<span class="read-more"><a href="https://martinhumpolec.cz/how-i-vibecoded-notification-about-changes-in-salesforce/">Read More...</a></span>]]></description>
										<content:encoded><![CDATA[
<p>Ahh, this super popular topic of vibecoding when everyone will be able to develop anything in matter of minutes and there won&#8217;t be any need for developers anymore. Challenge accepted and I&nbsp;ate my own dog food.</p>



<h2 class="wp-block-heading">The Task</h2>



<p>On daily basis send me a&nbsp;notification about all changes in Salesforce metadata to Slack as we want to track what has been changed.</p>



<h2 class="wp-block-heading">First Iteration: Flow</h2>



<p>Well, I&#8217;m great admin so flow can be the answer for anything, why not for this? The FieldDefinition objects contain information about all fields and I&nbsp;can filter based on last modified date. The downside is that I&nbsp;can query only for entities I&nbsp;specify, but they are in the EntityDefinition object so no big deal, I&nbsp;just need to query all their ids.</p>



<p>Deleted fields? Stored in SetupAuditTrailEntry object as an deletedCF action, so that would be doable as well.</p>



<p>At the end I&nbsp;ended up with a&nbsp;slightly complex flow which was sending changes for fields on a&nbsp;few crucial objects, but didn&#8217;t track any other entity. There must be better approach.</p>



<h2 class="wp-block-heading">Second Iteration: Bitbucket Pipeline</h2>



<p>Actually I&nbsp;have all the metadata stored in my Bitbucket repository already, where I&nbsp;track everything I&nbsp;did in  metadata which needs to be deployed. Admins still update everything in production.</p>



<p>The pipeline can run on daily basis, retrieve all metadata, compare them to what is in repository and post the differences in Slack.</p>



<p>That&#8217;s&nbsp;where my fun with ChatGPT/Copilot started. </p>



<p>I originally started with ChatGPT and quickly got first draft of working code including what to set up in Bitbucket to safely store my oAuth tokens or how to create the Slack app so I&nbsp;have the webhook where I&nbsp;can easily post the message.</p>



<h3 class="wp-block-heading">bitbucket-pipelines.yml</h3>



<p>The Bitbucket pipeline looks super simple and I&nbsp;can read what it does</p>



<pre class="wp-block-code"><code>image: node:20
     
pipelines:
  schedules:
    - cron: "0 6 * * *"
      enabled: true
      branches:
        - master
      pipeline: metadata-monitor
      
  custom:
    metadata-monitor:
      - step:
          name: Salesforce Metadata Monitor
          script:
            - npm install --global @salesforce/cli
            - sf --version

            - git fetch origin master
            - git checkout master
            - git reset --hard origin/master

            - bash scripts/retrieve.sh
            - bash scripts/diff.sh
</code></pre>



<p>Runs at 6am but can be run at any time as well (hence the &#8222;custom&#8220;), originally it run after every commit but that&#8217;s&nbsp;something we quickly solved with ChatGPT. We also quickly fixed the code to use the right image, the first one wasn&#8217;t working for long time already, but it didn&#8217;t tell it to me upfront.</p>



<p>It installs the Salesforce CLI, checkout master branch, retrieve metadata and then compare them.</p>



<h3 class="wp-block-heading">retrieve.sh</h3>



<p>The retrieve.sh is easy to read for me as well</p>



<pre class="wp-block-code"><code>
#!/bin/bash
set -e

echo "&#x1f510; Authenticating to Salesforce"

echo "$SF_AUTH_URL" > authfile.txt
sf org login sfdx-url \
  --sfdx-url-file authfile.txt \
  --alias ci-org \
  --set-default

rm authfile.txt

echo "&#x1f4e5; Retrieving metadata"

rm -rf metadata
mkdir -p metadata

sf project retrieve start \
  --manifest packageSlackInfo.xml \
  --target-org ci-org \
</code></pre>



<p>Takes the authentication token from Bitbucket variable and save it to file, login, retrieve metadata specified in packageSlackInfo.xml as we don&#8217;t really care about ALL changes but only about the crucial subset admins typically modify.</p>



<h3 class="wp-block-heading">diff.sh</h3>



<p>Here the real fun started and it took a&nbsp;lot of weeks to finish &#8211; mostly because I&nbsp;originally waited for the daily runs and just after its failure I&nbsp;asked ChatGPT/Copilot to fix it. I&nbsp;got so many assurances that &#8222;it will work now and I&nbsp;understand why you are concerned&#8220; that I&nbsp;stopped counting. Midway I&nbsp;also changed from ChatGPT to Copilot as I&#8217;ve been told it works better for code generation.</p>



<pre class="wp-block-code"><code>#!/bin/bash
set -e

# Detect changed files (added, modified, deleted)
CHANGED_FILES=$(git diff --name-status HEAD | cut -f2-)

if &#91; -z "$CHANGED_FILES" ]; then
  echo "&#x2139; No metadata changes"
  exit 0
fi

DETAILS=""

# Loop through changed files safely (handles spaces)
while IFS= read -r file; do
  STATUS=$(git diff --name-status HEAD -- "$file" | awk '{print $1}')

  case "$STATUS" in
    A|??) ICON="&#x2795; Added" ;;
    D)    ICON="&#x274c; Deleted" ;;
    M)    ICON="&#x270f; Modified" ;;
    *)    ICON="&#x1f504; Changed" ;;
  esac

  # Append with REAL newlines
  DETAILS+="&#x1f4c4; $file
  $ICON

"

  # Only show line-level details for modified XML files
  if &#91;&#91; "$STATUS" == "M" &amp;&amp; "$file" == *.xml ]]; then
    XML_DIFF=$(git diff --unified=0 -- "$file" \
      | grep -E '^\+&#91;&#91;:space:]]*&lt;|^\-&#91;&#91;:space:]]*&lt;' \
      | grep -vE '^\+\+\+|^\-\-\-' \
      | head -n 20)

    if &#91; -n "$XML_DIFF" ]; then
      DETAILS+="    Changes:
"
      while IFS= read -r line; do
        DETAILS+="      $line
"
      done &lt;&lt;&lt; "$XML_DIFF"
    fi
  fi

done &lt;&lt;&lt; "$CHANGED_FILES"

# Clean control characters and escape XML brackets
CLEAN_DETAILS=$(printf "%s" "$DETAILS" \
  | tr -d '\r' \
  | tr -d '\000' \
  | sed 's/&lt;/\&amp;lt;/g; s/>/\&amp;gt;/g')

# --- Chunking for Slack (avoid 3000-char block limit) ---

# Write CLEAN_DETAILS to a temp file
printf "%s" "$CLEAN_DETAILS" > details.txt

# Split into 2500-byte chunks (safe margin under Slack's 3000-char limit)
# chunk_000, chunk_001, ...
split -b 2500 -a 3 -d details.txt chunk_

# Build Slack payload in Python
python3 &lt;&lt; 'PY' > payload.json
import json, glob

blocks = &#91;{
    "type": "section",
    "text": {"type": "mrkdwn", "text": "*&#x1f6a8; Salesforce Metadata Changes Detected*"}
}]

for filename in sorted(glob.glob("chunk_*")):
    with open(filename, "r", encoding="utf-8") as f:
        text = f.read()
        if text.strip():
            blocks.append({
                "type": "section",
                "text": {"type": "mrkdwn", "text": text}
            })

print(json.dumps({"blocks": blocks}, ensure_ascii=False))
PY

# Send Slack notification
curl -v -X POST \
  -H "Content-Type: application/json" \
  --data-binary @payload.json \
  "$SLACK_WEBHOOK_URL"

# Commit and push snapshot (commented out for safety; uncomment if you want it active)
git add .
git commit -m "chore(metadata): automated snapshot from Salesforce org" || true
echo "&#x1f680; Pushing changes to master"
git push origin master</code></pre>



<p>I must admit that I&nbsp;would NEVER be able to put this code together on my own, so I&nbsp;don&#8217;t really blame the AI. Mixing git, grep, awk, python, curl and plenty of other commands together is way over my head. It works at the end and we get a&nbsp;daily update in Slack what has been change (as file) but also including the changes, which is probably too many details, which we can cut.</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69f061b3dd69f&quot;}" data-wp-interactive="core/image" class="wp-block-image size-full is-resized wp-lightbox-container"><img data-recalc-dims="1" loading="lazy" decoding="async" width="640" height="393" data-attachment-id="6945" data-permalink="https://martinhumpolec.cz/how-i-vibecoded-notification-about-changes-in-salesforce/image-174/" data-orig-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/02/image.png?fit=696%2C427&amp;ssl=1" data-orig-size="696,427" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/02/image.png?fit=696%2C427&amp;ssl=1" data-large-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/02/image.png?fit=640%2C393&amp;ssl=1" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on-async--click="actions.showLightbox" data-wp-on-async--load="callbacks.setButtonStyles" data-wp-on-async-window--resize="callbacks.setButtonStyles" src="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/02/image.png?resize=640%2C393&#038;ssl=1" alt="Output of the code" class="wp-image-6945" style="width:840px;height:auto" srcset="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/02/image.png?w=696&amp;ssl=1 696w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/02/image.png?resize=250%2C153&amp;ssl=1 250w" sizes="auto, (max-width: 640px) 100vw, 640px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="Zvětšit"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on-async--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<p>It took maybe 6 turns to find out why the values from $STATUS never make it into the final json. At the beginning it didn&#8217;t even realize it doesn&#8217;t list new files at all, only changes to those already commited.</p>



<h2 class="wp-block-heading">The Best Sentences from AI</h2>



<p>It was depressing journey but hillarious at the same time. I&nbsp;really enjoyed the excuses time to time and the only difference to normal coworker was its speed when inventing why it didn&#8217;t work but will now. </p>



<ul class="wp-block-list">
<li>You’ve got a&nbsp;classic Bash parsing failure: your &#8222;for&#8220; loop is never closed, so the script reaches the end of the file still expecting a&nbsp;&#8222;done&#8220;.</li>



<li>Your script is almost correct now, but there’s still one subtle but important issue: your backslashes inside the XML_DIFF command are broken.</li>



<li>Let’s walk through this carefully, Martin — because the symptoms you’re describing point to one very specific root cause:</li>



<li>Martin, this output finally reveals the real root cause of why your Slack payload is empty: <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f7e5.png" alt="🟥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Your script is truncating filenames at spaces.</li>



<li>Slack collapses all text after the first line break when using the &#8222;text&#8220; field in a&nbsp;JSON payload <em>(well, actually it wasn&#8217;t the problem at all)</em></li>



<li>FINAL WORKING SCRIPT (copy/paste safe)</li>



<li>I get why you’re asking — after all the back‑and‑forth, you want confidence, not another guess. So here’s the straight, engineering‑level answer: <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Yes — this version will work, because it fixes the actual root cause Slack reported</li>



<li>Martin, now that we have full debug output, the situation is finally 100% clear: <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f7e5.png" alt="🟥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Your Slack payload is empty because your variable never contains real newlines</li>



<li>I get why you’re asking, Martin. When a&nbsp;pipeline keeps throwing curveballs after you’ve already been told “this should work,” it’s natural to wonder whether you’re about to get burned again. You’re not being dramatic — you’re being a&nbsp;good engineer who wants a&nbsp;stable, predictable system. Yesterday, the script <strong>was </strong>correct for the problem we were solving then. Today, you uncovered a&nbsp;<strong>different </strong>failure mode</li>



<li>I’m going to give you the clearest, most grounded explanation yet — because your latest logs finally reveal the true failure mode, and it’s not what either of us expected.</li>



<li>Martin, thank you for pasting the exact script. And yes — I&nbsp;see the problem immediately now, and it’s not where you’ve been looking.</li>



<li>This explains EVERYTHING you’ve seen</li>



<li>The errors you’re seeing aren’t Slack errors. They’re because the chunking snippet I&nbsp;gave you used a&nbsp;Bash trick that Bitbucket’s shell doesn’t support, and the Python block expected a&nbsp;list that wasn’t constructed correctly. So let’s stop fighting the shell and give you a&nbsp;clean, robust, production‑ready solution that will solve it.</li>
</ul>



<p>It was a&nbsp;journey, longer than I&nbsp;expected. But truth to be told &#8211; something I&nbsp;would never invent on my own. At the same time I&nbsp;realized that during the journey I&nbsp;relied on AI only, I&nbsp;didn&#8217;t try to Google, I&nbsp;didn&#8217;t try to understand, I&nbsp;just copy and paste everything, without blinking my eye twice. </p>



<p>Learnings from the exercise about coding? Absolute zero, I&#8217;m not even sure I&nbsp;can better challenge AI now to get to the result quicker. </p>



<p>Will I&nbsp;use AI for next task? Most likely. Will I&nbsp;leave as stupid from the exercise as I&nbsp;started it? Most likely as well. </p>



<p>Saying that I&nbsp;can see the value of AI and how it will enable me to achieve things I&nbsp;would not achieve otherwise, at the same time I&nbsp;cannot really say it is for benefits of all of us, it really will make us probably more stupid. </p>



<p>At the same time AI did give me a&nbsp;lot of explanation why something doesn&#8217;t work or will work, where to pay attention, etc. I&nbsp;just didn&#8217;t bother with reading it, I&nbsp;went from code to code. Would I&nbsp;slow down and properly read everything it told me, I&nbsp;would learn a&nbsp;lot actually. So it is really about your style of work/learning.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://martinhumpolec.cz/how-i-vibecoded-notification-about-changes-in-salesforce/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6944</post-id>	</item>
		<item>
		<title>O Salesforce s&#160;Traskem</title>
		<link>https://martinhumpolec.cz/o-salesforce-s-traskem/</link>
					<comments>https://martinhumpolec.cz/o-salesforce-s-traskem/#respond</comments>
		
		<dc:creator><![CDATA[Martin Humpolec]]></dc:creator>
		<pubDate>Wed, 11 Feb 2026 07:02:00 +0000</pubDate>
				<category><![CDATA[Podcast]]></category>
		<category><![CDATA[manufacturing]]></category>
		<category><![CDATA[podcast]]></category>
		<category><![CDATA[Salesforce]]></category>
		<category><![CDATA[Trask]]></category>
		<guid isPermaLink="false">https://martinhumpolec.cz/?p=6939</guid>

					<description><![CDATA[Trask, firma, která je na trhu přes 30 let, dělá spoustu věcí v&#160;IT, ale překvapivě Salesforce mezi nimi nebyl. Respektive se chvíli zdálo že ano, pak zase ne a&#160;nyní jsme zase ve fázi, kdy ano. Tak jsem si sednul s&#160;Jardou Lucem a&#160;povídali jsme o&#160;tom, kde tedy jsou a&#160;kam směřují. Zápisky]]></description>
										<content:encoded><![CDATA[<div class="wp-block-image">
<figure class="alignright size-thumbnail"><a href="https://www.thetrask.com/"><img data-recalc-dims="1" loading="lazy" decoding="async" width="250" height="81" data-attachment-id="6940" data-permalink="https://martinhumpolec.cz/o-salesforce-s-traskem/images/" data-orig-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/01/images.png?fit=394%2C128&amp;ssl=1" data-orig-size="394,128" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="images" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/01/images.png?fit=394%2C128&amp;ssl=1" data-large-file="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/01/images.png?fit=394%2C128&amp;ssl=1" src="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/01/images.png?resize=250%2C81&#038;ssl=1" alt="Logo trask" class="wp-image-6940" srcset="https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/01/images.png?resize=250%2C81&amp;ssl=1 250w, https://i0.wp.com/martinhumpolec.cz/wp-content/uploads/2026/01/images.png?w=394&amp;ssl=1 394w" sizes="auto, (max-width: 250px) 100vw, 250px" /></a></figure></div>


<p><a href="https://www.thetrask.com/">Trask</a>, firma, která je na trhu přes 30 let, dělá spoustu věcí v&nbsp;IT, ale překvapivě Salesforce mezi nimi nebyl. Respektive se chvíli zdálo že ano, pak zase ne a&nbsp;nyní jsme zase ve fázi, kdy ano. Tak jsem si sednul s&nbsp;<a href="https://www.linkedin.com/in/jaroslav-luc/">Jardou Lucem</a> a&nbsp;povídali jsme o&nbsp;tom, kde tedy jsou a&nbsp;kam směřují.</p>



<iframe data-testid="embed-iframe" style="border-radius:12px" src="https://open.spotify.com/embed/episode/5s20hIi1Wig6IHkve6EAjF?utm_source=generator" width="100%" height="152" frameBorder="0" allowfullscreen="" allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy"></iframe>



<h2 class="wp-block-heading">Zápisky</h2>



<ul class="wp-block-list">
<li>Trask byl vždy technologicky silná, inženýrská firma – Salesforce má tuhle DNA doplnit, ne přepsat.</li>



<li>Salesforce v&nbsp;Trasku není experiment. Je to vědomé rozhodnutí reagovat na změnu trhu.</li>



<li>Manufacturing je naše přirozené hřiště – Salesforce řeší všechno &#8222;okolo&#8220; výrobní haly, stávající řešení od nás zase to co je &#8222;uvnitř&#8220; haly -&gt; ERP řídí výrobu. Salesforce řídí vztah se zákazníkem. A&nbsp;dohromady to dává smysl.</li>



<li>Nejde o&nbsp;migraci všeho na Salesforce. Jde o&nbsp;chytré doplnění toho, co už funguje.</li>



<li>Manufacturing Cloud není pro každého. Zkratka v&nbsp;názvu neznamená správné řešení.</li>



<li>Nechceme armádu rolí. Chceme silné Salesforce konzultanty s&nbsp;přesahem. Ideální konzultant rozumí byznysu, architektuře i&nbsp;dodávce. A&nbsp;stojí si za svým řešením.</li>



<li>Menší, agilnější týmy doručí Salesforce projekty efektivněji než těžký waterfall.</li>



<li>Dlouhodobé projekty dávají stabilitu. Krátké agilní projekty dávají energii. Salesforce projekty nejsou na 6 let. Jsou o&nbsp;rychlé hodnotě a&nbsp;postupném růstu.</li>



<li>Salesforce kompetence otevírá dveře – i&nbsp;tam, kde bychom se dřív nedostali.</li>
</ul>



<a href="https://podcasts.apple.com/us/podcast/salesforce-v-%C4%8Desku/id1550600947?itsct=podcast_box&amp;itscg=30200"><img decoding="async" src="https://martinhumpolec.cz/apple/" alt="Listen on Apple Podcasts" style="height: 83px; float: left"></a> <a href="https://open.spotify.com/show/07uhT5EsoHZcc3J4e384wg"><img decoding="async" src="https://martinhumpolec.cz/spotify/" alt="Listen on Spotify" style="height: 83px; float: left; padding-left: 50px"></a><br><br>
]]></content:encoded>
					
					<wfw:commentRss>https://martinhumpolec.cz/o-salesforce-s-traskem/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6939</post-id>	</item>
	</channel>
</rss>
