Close Menu
    DevStackTipsDevStackTips
    • Home
    • News & Updates
      1. Tech & Work
      2. View All

      Top 15 Enterprise Use Cases That Justify Hiring Node.js Developers in 2025

      July 31, 2025

      The Core Model: Start FROM The Answer, Not WITH The Solution

      July 31, 2025

      AI-Generated Code Poses Major Security Risks in Nearly Half of All Development Tasks, Veracode Research Reveals   

      July 31, 2025

      Understanding the code modernization conundrum

      July 31, 2025

      Not just YouTube: Google is using AI to guess your age based on your activity – everywhere

      July 31, 2025

      Malicious extensions can use ChatGPT to steal your personal data – here’s how

      July 31, 2025

      What Zuckerberg’s ‘personal superintelligence’ sales pitch leaves out

      July 31, 2025

      This handy NordVPN tool flags scam calls on Android – even before you answer

      July 31, 2025
    • Development
      1. Algorithms & Data Structures
      2. Artificial Intelligence
      3. Back-End Development
      4. Databases
      5. Front-End Development
      6. Libraries & Frameworks
      7. Machine Learning
      8. Security
      9. Software Engineering
      10. Tools & IDEs
      11. Web Design
      12. Web Development
      13. Web Security
      14. Programming Languages
        • PHP
        • JavaScript
      Featured

      Route Optimization through Laravel’s Shallow Resource Architecture

      July 31, 2025
      Recent

      Route Optimization through Laravel’s Shallow Resource Architecture

      July 31, 2025

      This Week in Laravel: Laracon News, Free Laravel Idea, and Claude Code Course

      July 31, 2025

      Everything We Know About Pest 4

      July 31, 2025
    • Operating Systems
      1. Windows
      2. Linux
      3. macOS
      Featured

      FOSS Weekly #25.31: Kernel 6.16, OpenMandriva Review, Conky Customization, System Monitoring and More

      July 31, 2025
      Recent

      FOSS Weekly #25.31: Kernel 6.16, OpenMandriva Review, Conky Customization, System Monitoring and More

      July 31, 2025

      Windows 11’s MSN Widgets board now opens in default browser, such as Chrome (EU only)

      July 31, 2025

      Microsoft’s new “move to Windows 11” campaign implies buying OneDrive paid plan

      July 31, 2025
    • Learning Resources
      • Books
      • Cheatsheets
      • Tutorials & Guides
    Home»Development»Natural Language Q&A in Optimizely CMS Using Azure OpenAI and AI Search

    Natural Language Q&A in Optimizely CMS Using Azure OpenAI and AI Search

    April 25, 2025

    In Part 2, we integrated Azure AI Search with Azure Personalizer to build a smarter, user-focused experience in Optimizely CMS. We used ServiceAPI to send CMS content to Azure AI Search. In Part 3, we’ll take things a step further: enabling users to ask natural language questions and get AI-powered answers. But here’s the twist: instead of using ServiceAPI, this time we’ll explore how to query indexed content directly using Azure AI Search’s REST API.

    Why Natural Language Q&A?

    Sometimes users don’t know the exact keywords. They ask things like:

    “How do I return a product?” “Can I book a demo?”

    With OpenAI on Azure and the semantic capabilities of Azure AI Search, your website can now understand those queries and provide helpful, contextual responses.

    Architecture Overview

    1. CMS content is indexed by Azure AI Search (via ServiceAPI or crawler).
    2. The search index is enriched with semantic settings.
    3. A user types a natural language query.
    4. Your backend uses Azure Search’s Semantic Search + Azure OpenAI (chat/completion API) to return a contextual answer.

    Using Azure Search API to Extract Content

    You can directly access indexed content using the Azure Search REST API. Here’s an example of how to fetch top 5 results:

    public async Task<List<string>> SearchAzureContentAsync(string query)
    {
        var searchServiceName = "<your-search-service-name>";
        var indexName = "<your-index-name>";
        var apiKey = "<your-api-key>";
    
        using var client = new HttpClient();
        client.DefaultRequestHeaders.Add("api-key", apiKey);
    
        var url = $"https://{searchServiceName}.search.windows.net/indexes/{indexName}/docs?api-version=2021-04-30-Preview&search={query}&$top=5";
        var result = await client.GetStringAsync(url);
        
        var json = JsonDocument.Parse(result);
        var docs = new List<string>();
    
        foreach (var item in json.RootElement.GetProperty("value").EnumerateArray())
        {
            docs.Add(item.GetProperty("content").GetString());
        }
    
        return docs;
    }

    Generate Answer Using Azure OpenAI

    Once we retrieve relevant documents, we’ll pass them into Azure OpenAI to generate a contextual answer:

    public async Task<string> AskOpenAiAsync(string question, List<string> context)
    {
        var prompt = $"""
    You are a helpful assistant. Based on the following content, answer the question:
    
    {string.Join("nn", context)}
    
    Question: {question}
    Answer:
    """;
    
        var openAiKey = "<your-openai-key>";
        var endpoint = "https://<your-openai-endpoint>.openai.azure.com/openai/deployments/<deployment-name>/completions?api-version=2022-12-01";
    
        var payload = new
        {
            prompt = prompt,
            temperature = 0.7,
            max_tokens = 200
        };
    
        using var client = new HttpClient();
        client.DefaultRequestHeaders.Add("api-key", openAiKey);
        var response = await client.PostAsync(endpoint, new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"));
    
        var result = JsonDocument.Parse(await response.Content.ReadAsStringAsync());
        return result.RootElement.GetProperty("choices")[0].GetProperty("text").GetString();
    }

    Integrate with Optimizely CMS

    You can create a controller like this:

    public class QnAController : Controller
    {
        [HttpPost]
        public async Task<ActionResult> Ask(string question)
        {
            var docs = await SearchAzureContentAsync(question);
            var answer = await AskOpenAiAsync(question, docs);
            return Json(new { answer });
        }
    }

    And on your view:

    <form method="post" id="qnaForm">
      <input type="text" name="question" placeholder="Ask a question..." />
      <button type="submit">Ask</button>
    </form>
    <div id="answer"></div>
    
    <script>
      $('#qnaForm').submit(function(e) {
        e.preventDefault();
        const question = $('input[name=question]').val();
        fetch('/QnA/Ask', {
          method: 'POST',
          headers: {'Content-Type': 'application/json'},
          body: JSON.stringify({ question })
        })
        .then(r => r.json())
        .then(data => $('#answer').text(data.answer));
      });
    </script>

    Summary

    This wraps up the final puzzle piece: letting users speak freely with your Optimizely site, while AI interprets and responds in real-time. From content indexing to re-ranking to full-on Q&A, your CMS is now intelligent, conversational, and user-first. Want to see this in action? Stay tuned for the sample repo and video walkthrough!

    The blog is also published here Natural Language Q&A in Optimizely CMS Using Azure OpenAI and AI Search

    Source: Read More 

    Facebook Twitter Reddit Email Copy Link
    Previous ArticleHow to use chatgpt4o to redesign your website
    Next Article Perficient Included in IDC Market Glance: Healthcare Provider Operational IT Solutions, 1Q25

    Related Posts

    Development

    Route Optimization through Laravel’s Shallow Resource Architecture

    July 31, 2025
    Development

    This Week in Laravel: Laracon News, Free Laravel Idea, and Claude Code Course

    July 31, 2025
    Leave A Reply Cancel Reply

    For security, use of Google's reCAPTCHA service is required which is subject to the Google Privacy Policy and Terms of Use.

    Continue Reading

    Winning the Talent War: Fixing Staffing Challenges in Tech Teams

    Web Development

    How to Use PostgreSQL in Django

    Development

    Your Meta Ray-Bans just got a big update for free – and it feels like science fiction

    News & Updates

    CVE-2025-35008 – Microhard BulletLTE-NA2/IPn4Gii-NA2 Command Injection Vulnerability

    Common Vulnerabilities and Exposures (CVEs)

    Highlights

    CVE-2025-46707 – VMware ESXi Firmware Privilege Escalation

    June 27, 2025

    CVE ID : CVE-2025-46707

    Published : June 27, 2025, 5:15 p.m. | 1 hour, 57 minutes ago

    Description : Software installed and running inside a Guest VM may override Firmware’s state and gain access to the GPU.

    Severity: 0.0 | NA

    Visit the link for more details, such as CVSS details, affected products, timeline, and more…

    La rivoluzione architetturale di AerynOS: Non solo una distribuzione GNU/Linux

    May 25, 2025

    This 85-inch Toshiba TV dropped to just $600 for Prime Day

    July 7, 2025

    Google DeepMind’s latest research at ICML 2023

    May 13, 2025
    © DevStackTips 2025. All rights reserved.
    • Contact
    • Privacy Policy

    Type above and press Enter to search. Press Esc to cancel.