A D365 Contact Center Build: Voice & WhatsApp
Keeping it first-party wherever the platform reaches, and the two edges where it could not: a certified SBC in the voice path, and a relay so the outbound call leaves from an address that belongs to us.
Technical articles on D365 CE / CX, Dataverse, Power Platform, and AI
Ameed Sheikh - Solutions Architect based in Copenhagen.
25+ years of software development, architecture, and hands-on Dynamics 365, Power Platform, and Azure. Clear concepts and deep SaaS fundamentals mean blending other tech stacks with Microsoft services is rather a shallow curve for me. I build what I write about.
NordTek IT (website coming soon) · info@nordtekit.dk
Keeping it first-party wherever the platform reaches, and the two edges where it could not: a certified SBC in the voice path, and a relay so the outbound call leaves from an address that belongs to us.
Custom connectors are on Microsoft's Virtual Network supported list. I built the whole thing in my own tenant and measured what actually egresses through the NAT Gateway, and a cloud flow is not it.
Search POA Landscape now embeds an MCP server that lets AI agents query Dataverse record sharing in plain English. No cloud, no external services — just your XrmToolBox and any MCP-compliant client.
The XrmToolBox plugin for auditing Dataverse record sharing now embeds an MCP server, exposes nine POA tools to AI agents, and ships a server-side disambiguation rule that asks the user instead of guessing.
A major update to the Search POA Landscape XrmToolBox plugin — search by principal across all shared entity types, with tabbed results, owner filtering, and decoded access rights.
AI agents are only as good as the system underneath. Why a controlled API with transactional guarantees is the foundation that makes AI-driven operations work — not just a better prompt.
Same question. Same models. Same documents. I swapped the retrieval engine and every model stopped hallucinating. This isn't a story about model size — it's about chunk quality.
Same AI, same knowledge base, same question — different answers depending on who's asking. A hands-on walkthrough of building identity-aware RAG with Azure AI Search, Copilot Studio, and Power Automate.
AI agents are taking over software development. The challenge isn't making software anymore — it's deciding why it should exist and what is truly worth building.
Reviving an 11-year-old Dynamics CRM plugin framework — built from pure SDK study — and blending it with everything I've learned since. What survives a decade of platform evolution?
AI doesn't reduce work — it intensifies it. The 'Human I' keeps connecting dots while AI holds the context. That's both the gift and the challenge.
Default action names like Compose_2 and Get_items create silent technical debt. Here's how I built a custom governance layer using Dataverse plugins, a Custom API, and configurable detection rules.
How to wire a pre-export governance gate into Power Platform Pipelines — so solutions with non-compliant flow actions never reach higher environments.
Late-night weekend session building a custom governance layer for the Power Platform ecosystem. POC tonight, production tomorrow.
When you remove a field from a managed solution but it keeps coming back, you've hit the solution layer merge trap. Here's what's happening and how to fix it.
MCP is how tools expose capabilities. Agents are how AI decides what to do. They're complementary, not competing — the value is in knowing which combination fits which problem.
How an AI-augmented MCP tool turns Dataverse schema exploration from days of clicking into seconds of conversation.
When columns are deployed with the wrong publisher prefix in a managed solution, you can't just rename them. Here's the five-step recovery process.
How I built an AI-augmented workspace — and why 'design for continuity' changes everything when working with AI.
How professionals transitioning from .NET and Azure backgrounds can develop the right mental model for Power Platform, Dataverse, and Dynamics 365 CE.
HTTP trigger URLs are generated at runtime, not deploy time. Here's a pattern to resolve them automatically in your release pipeline.
Software architects don't build the car — they design the factory that builds the car. That distinction is where the real strategic value lies.
A low-code solution story — how Azure Data Factory, Power Automate, and Dataverse were used to build an asynchronous integration that reflects booking and contact data into CRM timelines.
A proof-of-concept for a dynamic calendar built in Canvas Apps Custom Pages, connecting to an external Node.js API via custom connector.
How to grant Microsoft Graph API permissions (like User.Read.All) to an Azure Managed Identity when the portal doesn't offer the option.
A practical breakdown of Unified Routing in D365 Customer Service Workspace — workstreams, intake rules, classification, queue routing, and diagnostics.
A two-pipeline approach integrating Power Platform's ALM pipelines with GitHub for solution versioning, automated builds, and controlled deployments across environments.
Building a custom Application Lifecycle Management solution for Power Platform integrated with GitHub Actions, PAC CLI, and Power Automate.
How to query Dataverse tables using SQL via the TDS endpoint from an Azure Function, using OAuth 2.0 with Service Principals.
An XrmToolBox plugin for querying the PrincipalObjectAccess (POA) entity — the central table where CRM maintains sharing and access permissions.
A comprehensive framework for detailed logging of plugin and custom workflow activity execution in Dynamics CRM/D365, solving the 'Ping-Pong' problem in complex implementations.