{"id":4034,"date":"2026-10-05T12:43:44","date_gmt":"2026-10-05T19:43:44","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/azure-sdk\/?p=4034"},"modified":"2026-10-05T12:43:44","modified_gmt":"2026-10-05T19:43:44","slug":"connect-azure-functions-to-more-services-with-managed-connectors","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/azure-sdk\/connect-azure-functions-to-more-services-with-managed-connectors\/","title":{"rendered":"Connect Azure Functions to more services with managed connectors"},"content":{"rendered":"<p>Azure Functions can already connect to many Azure services through <a href=\"https:\/\/learn.microsoft.com\/azure\/azure-functions\/functions-triggers-bindings#supported-bindings\">triggers and bindings<\/a>. With managed connectors, your functions can access about 1,700 connectors across services such as Microsoft 365, Microsoft Teams, Dataverse, SharePoint, OneDrive, and third-party systems.<\/p>\n<p>Connector triggers deliver events from these services to your function, while typed connector clients let your code take actions against them. You get this broader integration surface without writing the webhook registration code or managing the OAuth tokens required to connect to each service, so you can focus on your function&#8217;s business logic and let <a href=\"https:\/\/learn.microsoft.com\/azure\/connector-namespace\/connector-namespace-overview\">Azure Connector Namespace<\/a> handle the connection.<\/p>\n<p>Azure Functions integration with Connector Namespace is currently in <em>public preview<\/em>. It supports .NET isolated, Python, and Node.js. Review the <a href=\"https:\/\/learn.microsoft.com\/azure\/azure-functions\/functions-connectors-overview\">managed connectors overview<\/a> for current language, hosting plan, and regional availability.<\/p>\n<p>To demonstrate how connector triggers and actions work together, this article follows a .NET sample that automates RFP intake across SharePoint, Azure Content Understanding, and Teams.<\/p>\n<h2>From an uploaded RFP to Teams notification<\/h2>\n<p>Consider an organization that receives requests for proposals (RFPs) in a shared SharePoint document library. Someone must read each document, identify the requested capabilities, determine which subject-matter experts should respond, and notify the right team.<\/p>\n<p>The <a href=\"https:\/\/github.com\/Azure-Samples\/functions-connectors-net-rfp-intake-sharepoint-teams\">automated RFP intake sample<\/a> turns that process into an event-driven workflow:<\/p>\n<ul>\n<li>A customer uploads an RFP to a SharePoint document library.<\/li>\n<li>A SharePoint connector trigger invokes an Azure Function when the file is created.<\/li>\n<li>The function uses a typed SharePoint connector client to retrieve the file contents.<\/li>\n<li>Azure Content Understanding extracts the document&#8217;s text and layout.<\/li>\n<li>The function applies deterministic rules to identify the customer, required capabilities, and recommended subject-matter experts.<\/li>\n<li>The function uses a typed Teams connector client to post the results as an Adaptive Card in a channel.<\/li>\n<\/ul>\n<p>Connector Namespace manages the SharePoint and Teams connections. The function controls file processing, document analysis, routing rules, error handling, and notification content.<\/p>\n<h2>How the sample works<\/h2>\n<p>The .NET sample demonstrates both parts of the connector programming model: a connector trigger receives an event from SharePoint, and typed connector clients provided by the Connector SDKs perform actions against SharePoint and Teams.<\/p>\n<p>The function starts when the SharePoint <strong>When a file is created<\/strong> trigger detects a new RFP. It declares the trigger using the <code>ConnectorTrigger<\/code> attribute and receives a typed payload containing the file&#8217;s properties:<\/p>\n<pre><code class=\"language-csharp\">[Function(\"OnNewFile\")]\r\npublic async Task OnNewFile(\r\n    [ConnectorTrigger] SharePointOnlineOnNewFileItemsTriggerPayload payload,\r\n    CancellationToken cancellationToken)\r\n{\r\n    \/\/ Process the newly uploaded file.\r\n}<\/code><\/pre>\n<p>Because the trigger provides file properties rather than its contents, the function uses a typed SharePoint client to retrieve the document:<\/p>\n<pre><code class=\"language-csharp\">byte[] response = await _sharePoint.GetFileContentAsync(\r\n    Uri.EscapeDataString(siteAddress),\r\n    fileIdentifier,\r\n    cancellationToken: cancellationToken);\r\n\r\nbyte[] document = SharePointFileContent.Decode(response);<\/code><\/pre>\n<p>The sample registers the SharePoint and Teams clients through dependency injection. Each client uses the runtime URL of its Connector Namespace connection and authenticates with <code>DefaultAzureCredential<\/code>:<\/p>\n<pre><code class=\"language-csharp\">services.AddSingleton(\r\n    new SharePointOnlineClient(\r\n        new Uri(sharePointRuntimeUrl),\r\n        credential));\r\n\r\nservices.AddSingleton(\r\n    new TeamsClient(\r\n        new Uri(teamsRuntimeUrl),\r\n        credential));<\/code><\/pre>\n<p>The function sends the document to Content Understanding\u2019s prebuilt-layout analyzer, which extracts the document\u2019s text and structure. It then applies deterministic C# rules to identify the customer and required capabilities and map those capabilities to predefined subject-matter expert roles.<\/p>\n<p>Finally, the function creates an Adaptive Card containing the results and posts it to the configured Teams channel with the typed Teams client:<\/p>\n<pre><code class=\"language-csharp\">await _teams.PostCardToConversationAsync(\r\n    postAs,\r\n    postIn,\r\n    request,\r\n    cancellationToken);<\/code><\/pre>\n<p>Connector Namespace handles the SharePoint and Teams connections, while the function controls the document analysis, routing logic, error handling, and notification content.<\/p>\n<h3>Try the sample<\/h3>\n<p>The <a href=\"https:\/\/github.com\/Azure-Samples\/functions-connectors-net-rfp-intake-sharepoint-teams\">RFP intake sample<\/a> includes the function code, Bicep infrastructure, Azure Developer CLI configuration, and supporting scripts. Its README explains how to test the workflow locally and deploy it to Azure.<\/p>\n<h2>Common connector patterns<\/h2>\n<p>Managed connectors are useful when a function must react to events or perform operations in external systems. Common patterns include:<\/p>\n<ul>\n<li><strong>Event to action:<\/strong> React to an event in one service and take an action in another.<\/li>\n<li><strong>Event to enrich to action:<\/strong> Retrieve additional information related to an event before acting.<\/li>\n<li><strong>Event to document analysis to action:<\/strong> Extract text and structure from a document, apply application rules, and send the result through another connector.<\/li>\n<li><strong>Event to AI to action:<\/strong> Analyze event data with an AI service and write the result back through a connector.<\/li>\n<li><strong>Extend an existing function app:<\/strong> Add connector-based integrations alongside HTTP, timer, queue, Service Bus, Event Grid, or Durable Functions workloads.<\/li>\n<\/ul>\n<p>The RFP sample combines several of these patterns. A SharePoint event starts the workflow, a SharePoint action retrieves the document, Content Understanding extracts its contents, application code enriches the result, and a Teams action sends the notification.<\/p>\n<h2>Closing thoughts<\/h2>\n<p>Managed connectors extend the external systems that can trigger your functions and the services your function code can act on. This brings services such as SharePoint, Teams, Microsoft 365, Dataverse, and many third-party systems into the Azure Functions programming model without requiring you to build the underlying webhook and OAuth infrastructure.<\/p>\n<p>Choose Azure Functions with managed connectors when you want this broader integration surface in a code-first application and need custom branching, application libraries and SDKs, other Functions bindings, document or AI processing, or application-specific logic between the trigger and action.<\/p>\n<p>If the workload primarily orchestrates connector operations, involves little custom code, and would benefit from a visual designer, Azure Logic Apps is usually the simpler choice.<\/p>\n<h2>Resources<\/h2>\n<h3>Documentation<\/h3>\n<ul>\n<li><a href=\"https:\/\/learn.microsoft.com\/azure\/azure-functions\/functions-connectors-overview?pivots=programming-language-csharp\">Overview of managed connectors in Azure Functions<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Azure-Samples\/functions-connectors\">Azure Functions connector samples<\/a><\/li>\n<li><a href=\"https:\/\/learn.microsoft.com\/azure\/connector-namespace\/connector-namespace-overview\">Azure Connector Namespace overview<\/a><\/li>\n<li><a href=\"https:\/\/learn.microsoft.com\/azure\/ai-services\/content-understanding\/concepts\/prebuilt-analyzers#prebuilt-layout\">Content Understanding prebuilt-layout analyzer<\/a><\/li>\n<\/ul>\n<h3>Connector SDK GitHub repositories<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/Azure\/Connectors-NET-SDK\">.NET SDK<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Azure\/Connectors-python-sdk\">Python SDK<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Azure\/connectors-nodejs-sdk\">Node.js SDK<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Learn how Azure Functions managed connectors provide access to 1,700 services, with triggers and typed clients available for supported service connectors, and walk through a sample that automates RFP intake across SharePoint, Azure Content Understanding, and Teams.<\/p>\n","protected":false},"author":42940,"featured_media":4036,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[701,765,990,992,960,993,994],"class_list":["post-4034","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-azure-sdk","tag-net","tag-azure-functions","tag-connector-namespace","tag-managed-connectors","tag-serverless","tag-sharepoint","tag-teams"],"acf":[],"blog_post_summary":"<p>Learn how Azure Functions managed connectors provide access to 1,700 services, with triggers and typed clients available for supported service connectors, and walk through a sample that automates RFP intake across SharePoint, Azure Content Understanding, and Teams.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/azure-sdk\/wp-json\/wp\/v2\/posts\/4034","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/azure-sdk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/azure-sdk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sdk\/wp-json\/wp\/v2\/users\/42940"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sdk\/wp-json\/wp\/v2\/comments?post=4034"}],"version-history":[{"count":1,"href":"https:\/\/devblogs.microsoft.com\/azure-sdk\/wp-json\/wp\/v2\/posts\/4034\/revisions"}],"predecessor-version":[{"id":4037,"href":"https:\/\/devblogs.microsoft.com\/azure-sdk\/wp-json\/wp\/v2\/posts\/4034\/revisions\/4037"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sdk\/wp-json\/wp\/v2\/media\/4036"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/azure-sdk\/wp-json\/wp\/v2\/media?parent=4034"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sdk\/wp-json\/wp\/v2\/categories?post=4034"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sdk\/wp-json\/wp\/v2\/tags?post=4034"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}