From 5b3aadd6ede7803ba5ee22e3f02ea7e4b94895a2 Mon Sep 17 00:00:00 2001 From: TamilRamGanesan-SF5080 Date: Wed, 1 Oct 2025 22:53:21 +0530 Subject: [PATCH] updated concerns in md file --- .../ai-integrations/gemini-integration.md | 8 +- .../ai-integrations/openai-integration.md | 10 +- .../ai-integrations/gemini-integration.md | 8 +- .../ai-integrations/openai-integration.md | 10 +- .../ai-assistview/images/gemini-ai.png | Bin 15448 -> 20312 bytes .../ai-assistview/images/open-ai.png | Bin 15696 -> 20312 bytes .../ai-integrations/gemini-integration.md | 86 ----------------- .../ai-integrations/openai-integration.md | 90 ------------------ .../integration-with-bot-framework.md | 16 ++-- .../integration-with-dialogflow.md | 18 ++-- .../ai-integrations/gemini-integration.md | 86 ----------------- .../ai-integrations/openai-integration.md | 89 ----------------- .../integration-with-bot-framework.md | 14 +-- .../integration-with-dialogflow.md | 16 ++-- ej2-asp-core-toc.html | 10 -- ej2-asp-mvc-toc.html | 10 -- 16 files changed, 50 insertions(+), 421 deletions(-) delete mode 100644 ej2-asp-core-mvc/chat-ui/EJ2_ASP.MVC/ai-integrations/gemini-integration.md delete mode 100644 ej2-asp-core-mvc/chat-ui/EJ2_ASP.MVC/ai-integrations/openai-integration.md delete mode 100644 ej2-asp-core-mvc/chat-ui/EJ2_ASP.NETCORE/ai-integrations/gemini-integration.md delete mode 100644 ej2-asp-core-mvc/chat-ui/EJ2_ASP.NETCORE/ai-integrations/openai-integration.md diff --git a/ej2-asp-core-mvc/ai-assistview/EJ2_ASP.MVC/ai-integrations/gemini-integration.md b/ej2-asp-core-mvc/ai-assistview/EJ2_ASP.MVC/ai-integrations/gemini-integration.md index 4850316d1d..6b998edc49 100644 --- a/ej2-asp-core-mvc/ai-assistview/EJ2_ASP.MVC/ai-integrations/gemini-integration.md +++ b/ej2-asp-core-mvc/ai-assistview/EJ2_ASP.MVC/ai-integrations/gemini-integration.md @@ -20,7 +20,7 @@ Before integrating Gemini AI, ensure that the Syncfusion AI AssistView control i ## Prerequisites -* Google account to generate API key on accessing `Gemini AI`. +* Google account to generate API key on accessing [Gemini](https://ai.google.dev/gemini-api/docs). * [System requirements for ASP.NET MVC controls](https://ej2.syncfusion.com/aspnetmvc/documentation/system-requirements) to create MVC application ## Install Packages @@ -43,7 +43,7 @@ NuGet\Install-Package Mscc.GenerativeAI ## Generate API Key -1. Go to [Google AI Studio](https://aistudio.google.com/app/apikey) and sign in with your Google account. If you don’t have one, create a new account. +1. Go to [Google AI Studio](https://aistudio.google.com/app/apikey) and sign in with your google account. If you don’t have one, create a new account. 2. Once logged in, click on `Get API Key` from the left-hand menu or the top-right corner of the dashboard. @@ -74,7 +74,7 @@ string apiKey = 'Place your API key here'; {% endhighlight %} {% endtabs %} -![Gemini AI](../../images/gemini-ai.png) +![Gemini AI](../images/gemini-ai.png) ## Run and Test @@ -82,4 +82,4 @@ Run the application in the browser using the following command. Build and run the app (Ctrl + F5). -Open `https://localhost:44321` to interact with your Gemini AI for dynamic response. \ No newline at end of file +Open the hosted link to interact with the Gemini AI for dynamic response \ No newline at end of file diff --git a/ej2-asp-core-mvc/ai-assistview/EJ2_ASP.MVC/ai-integrations/openai-integration.md b/ej2-asp-core-mvc/ai-assistview/EJ2_ASP.MVC/ai-integrations/openai-integration.md index 2d3b85a82c..4be3202b90 100644 --- a/ej2-asp-core-mvc/ai-assistview/EJ2_ASP.MVC/ai-integrations/openai-integration.md +++ b/ej2-asp-core-mvc/ai-assistview/EJ2_ASP.MVC/ai-integrations/openai-integration.md @@ -10,7 +10,7 @@ documentation: ug # Integration of Azure Open AI With AI AssistView control -The Syncfusion AI AssistView supports integration with [Azure Open AI](https://microsoft.github.io/PartnerResources/skilling/ai-ml-academy/resources/openai), enabling advanced conversational AI features in your Angular applications. +The Syncfusion AI AssistView supports integration with [Azure Open AI](https://microsoft.github.io/PartnerResources/skilling/ai-ml-academy/resources/openai), enabling advanced conversational AI features in your MVC applications. ## Getting Started With the AI AssistView control @@ -20,7 +20,7 @@ Before integrating Azure Open AI, ensure that the Syncfusion AI AssistView contr ## Prerequisites -* An Azure account with access to `Azure Open AI` services and a generated API key. +* An Azure account with access to [Azure Open AI](https://microsoft.github.io/PartnerResources/skilling/ai-ml-academy/resources/openai) services and a generated API key. * [System requirements for ASP.NET MVC controls](https://ej2.syncfusion.com/aspnetmvc/documentation/system-requirements) to create MVC application ## Install Packages @@ -49,7 +49,7 @@ NuGet\Install-Package Azure.Core 2. Under Resource Management, select Keys and Endpoint to retrieve your API key and endpoint URL. -3. Copy the API key, endpoint, and deployment name (e.g., gpt-4o-mini). Ensure the API version (e.g., 2024-07-01-preview) matches your resource configuration. +3. Copy the API key, endpoint, and deployment name (e.g., gpt-4o-mini). Ensure the API version matches your resource configuration. 4. Store these values securely, as they will be used in your application. @@ -78,7 +78,7 @@ string deploymentName = "Your_Deployment_Name"; {% endhighlight %} {% endtabs %} -![Azure Open AI](../../images/open-ai.png) +![Azure Open AI](../images/open-ai.png) ## Run and Test @@ -86,4 +86,4 @@ Run the application in the browser using the following command. Build and run the app (Ctrl + F5). -Open `https://localhost:44321` to interact with your Azure Open AI for dynamic response. \ No newline at end of file +Open the Hosted link to interact with your Azure Open AI for dynamic response. \ No newline at end of file diff --git a/ej2-asp-core-mvc/ai-assistview/EJ2_ASP.NETCORE/ai-integrations/gemini-integration.md b/ej2-asp-core-mvc/ai-assistview/EJ2_ASP.NETCORE/ai-integrations/gemini-integration.md index 8fbbe75041..6d541374ee 100644 --- a/ej2-asp-core-mvc/ai-assistview/EJ2_ASP.NETCORE/ai-integrations/gemini-integration.md +++ b/ej2-asp-core-mvc/ai-assistview/EJ2_ASP.NETCORE/ai-integrations/gemini-integration.md @@ -20,7 +20,7 @@ Before integrating Gemini AI, ensure that the Syncfusion AI AssistView control i ## Prerequisites -* Google account to generate API key on accessing `Gemini AI`. +* Google account to generate API key on accessing [Gemini](https://ai.google.dev/gemini-api/docs). * [System requirements for ASP.NET Core controls](https://ej2.syncfusion.com/aspnetmvc/documentation/system-requirements) to create Core application ## Install Packages @@ -43,7 +43,7 @@ NuGet\Install-Package Mscc.GenerativeAI ## Generate API Key -1. Go to [Google AI Studio](https://aistudio.google.com/app/apikey) and sign in with your Google account. If you don’t have one, create a new account. +1. Go to [Google AI Studio](https://aistudio.google.com/app/apikey) and sign in with your google account. If you don’t have one, create a new account. 2. Once logged in, click on `Get API Key` from the left-hand menu or the top-right corner of the dashboard. @@ -74,7 +74,7 @@ string apiKey = 'Place your API key here'; {% endhighlight %} {% endtabs %} -![Gemini AI](../../images/gemini-ai.png) +![Gemini AI](../images/gemini-ai.png) ## Run and Test @@ -82,4 +82,4 @@ Run the application in the browser using the following command. Build and run the app (Ctrl + F5). -Open `https://localhost:44321` to interact with your Gemini AI for dynamic response. \ No newline at end of file +Open the hosted link to interact with the Gemini AI for dynamic response \ No newline at end of file diff --git a/ej2-asp-core-mvc/ai-assistview/EJ2_ASP.NETCORE/ai-integrations/openai-integration.md b/ej2-asp-core-mvc/ai-assistview/EJ2_ASP.NETCORE/ai-integrations/openai-integration.md index bd7dab59db..80e73b0fed 100644 --- a/ej2-asp-core-mvc/ai-assistview/EJ2_ASP.NETCORE/ai-integrations/openai-integration.md +++ b/ej2-asp-core-mvc/ai-assistview/EJ2_ASP.NETCORE/ai-integrations/openai-integration.md @@ -10,7 +10,7 @@ documentation: ug # Integration of Azure Open AI With AI AssistView control -The Syncfusion AI AssistView supports integration with [Azure Open AI](https://microsoft.github.io/PartnerResources/skilling/ai-ml-academy/resources/openai), enabling advanced conversational AI features in your Angular applications. +The Syncfusion AI AssistView supports integration with [Azure Open AI](https://microsoft.github.io/PartnerResources/skilling/ai-ml-academy/resources/openai), enabling advanced conversational AI features in your Core applications. ## Getting Started With the AI AssistView control @@ -20,7 +20,7 @@ Before integrating Azure Open AI, ensure that the Syncfusion AI AssistView contr ## Prerequisites -* An Azure account with access to `Azure Open AI` services and a generated API key. +* An Azure account with access to [Azure Open AI](https://microsoft.github.io/PartnerResources/skilling/ai-ml-academy/resources/openai) services and a generated API key. * [System requirements for ASP.NET MVC controls](https://ej2.syncfusion.com/aspnetmvc/documentation/system-requirements) to create Core application ## Install Packages @@ -49,7 +49,7 @@ NuGet\Install-Package Azure.Core 2. Under Resource Management, select Keys and Endpoint to retrieve your API key and endpoint URL. -3. Copy the API key, endpoint, and deployment name (e.g., gpt-4o-mini). Ensure the API version (e.g., 2024-07-01-preview) matches your resource configuration. +3. Copy the API key, endpoint, and deployment name (e.g., gpt-4o-mini). Ensure the API version matches your resource configuration. 4. Store these values securely, as they will be used in your application. @@ -78,7 +78,7 @@ string deploymentName = "Your_Deployment_Name"; {% endhighlight %} {% endtabs %} -![Azure Open AI](../../images/open-ai.png) +![Azure Open AI](../images/open-ai.png) ## Run and Test @@ -86,4 +86,4 @@ Run the application in the browser using the following command. Build and run the app (Ctrl + F5). -Open `https://localhost:44321` to interact with your Azure Open AI for dynamic response. \ No newline at end of file +Open the hosted link to interact with your Azure Open AI for dynamic response. \ No newline at end of file diff --git a/ej2-asp-core-mvc/ai-assistview/images/gemini-ai.png b/ej2-asp-core-mvc/ai-assistview/images/gemini-ai.png index bbc60975ac91ef25be8fee60022647949f35ddbf..2e2a91dd08b5e46c3321bb93ba45c6c155d4cb71 100644 GIT binary patch literal 20312 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 literal 15448 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 diff --git a/ej2-asp-core-mvc/ai-assistview/images/open-ai.png b/ej2-asp-core-mvc/ai-assistview/images/open-ai.png index c30c78379fb5fcdaa809c7d90a5cd5e93057f98e..2e2a91dd08b5e46c3321bb93ba45c6c155d4cb71 100644 GIT binary patch literal 20312 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 literal 15696 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 Vn9jIo+9<9;R!Z?r*=s}p{|4> `Security Note`: Never commit the API key to version control. Use environment variables or a secret manager for production. - -## Integration Gemini AI with Chat UI - -You can add the below respective files in your application: - -* Add your generated `API Key` at the line - -```bash - -const geminiApiKey = 'Place your API key here'; - -``` - -{% tabs %} -{% highlight razor tabtitle="CSHTML" %} -{% include code-snippet/chat-ui/ai-integrations/Asp.net-MVC/gemini/razor %} -{% endhighlight %} -{% highlight c# tabtitle="gemini.cs" %} -{% include code-snippet/chat-ui/ai-integrations/Asp.net-MVC/gemini/gemini.cs %} -{% endhighlight %} -{% endtabs %} - -![gemini](../../images/gemini.png) - -## Run and Test - -Run the application in the browser using the following command. - -Build and run the app (Ctrl + F5). - -Open `https://localhost:44321` to interact with your Gemini AI for dynamic response. \ No newline at end of file diff --git a/ej2-asp-core-mvc/chat-ui/EJ2_ASP.MVC/ai-integrations/openai-integration.md b/ej2-asp-core-mvc/chat-ui/EJ2_ASP.MVC/ai-integrations/openai-integration.md deleted file mode 100644 index 7b03076dde..0000000000 --- a/ej2-asp-core-mvc/chat-ui/EJ2_ASP.MVC/ai-integrations/openai-integration.md +++ /dev/null @@ -1,90 +0,0 @@ ---- -layout: post -title: Azure Open AI in ##Platform_Name## Chat UI Control | Syncfusion -description: Checkout and learn about Integration of Azure Open AI in Syncfusion ##Platform_Name## Chat UI control of Syncfusion Essential JS 2 and more. -platform: ej2-asp-core-mvc -control: Azure Open AI -publishingplatform: ##Platform_Name## -documentation: ug ---- - -# Integration of Azure Open AI With Chat UI component - -The Syncfusion AI AssistView supports integration with [Azure Open AI](https://microsoft.github.io/PartnerResources/skilling/ai-ml-academy/resources/openai), enabling advanced conversational AI features in your MVC applications. - -## Getting Started With the Chat UI Component - -Before integrating Azure Open AI, ensure that the Syncfusion Chat UI control is correctly rendered in your MVC application: -[ MVC Getting Started Guide](../getting-started) - -## Prerequisites - -* An Azure account with access to `Azure Open AI` services and a generated API key. - -* Syncfusion Chat UI for MVC `Syncfusion.EJ2.MVC5` Install ASP.NET MVC package in the application. - -## Install Dependencies - -Install the Syncfusion ASP.NET MVC package in the application using the Package Manager Console. - -```bash - -NuGet\Install-Package Syncfusion.EJ2.MVC5 - -``` - -Install the Open AI and Azure Open AI package in the application using Package Manager Console. - -```bash - -NuGet\Install-Package OpenAI -NuGet\Install-Package Azure.AI.OpenAI -NuGet\Install-Package Azure.Core - -``` - - -## Generate API Key - -1. Log in to the [Azure Portal](https://portal.azure.com/#home) and navigate to your Azure Open AI resource. - -2. Under Resource Management, select Keys and Endpoint to retrieve your API key and endpoint URL. - -3. Copy the API key, endpoint, and deployment name (e.g., gpt-4o-mini). Ensure the API version (e.g., 2024-07-01-preview) matches your resource configuration. - -4. Store these values securely, as they will be used in your application. - -> `Security Note`: Never expose your API key in client-side code for production applications. Use a server-side proxy or environment variables to manage sensitive information securely - -## Integration Azure Open AI with Chat UI - -You can add the below respective files in your application: - -* Update the following configuration values with your Azure Open AI details: - -```bash - -string endpoint = "Your_Azure_OpenAI_Endpoint"; -string apiKey = "Your_Azure_OpenAI_API_Key"; -string deploymentName = "Your_Deployment_Name"; - -``` - -{% tabs %} -{% highlight razor tabtitle="CSHTML" %} -{% include code-snippet/chat-ui/ai-integrations/Asp.net-MVC/openai/razor %} -{% endhighlight %} -{% highlight c# tabtitle="openai.cs" %} -{% include code-snippet/chat-ui/ai-integrations/Asp.net-MVC/openai/openai.cs %} -{% endhighlight %} -{% endtabs %} - -![Azure Open AI](../../images/openai.png) - -## Run and Test - -Run the application in the browser using the following command. - -Build and run the app (Ctrl + F5). - -Open `https://localhost:44321` to interact with your Azure Open AI for dynamic response. \ No newline at end of file diff --git a/ej2-asp-core-mvc/chat-ui/EJ2_ASP.MVC/bot-integrations/integration-with-bot-framework.md b/ej2-asp-core-mvc/chat-ui/EJ2_ASP.MVC/bot-integrations/integration-with-bot-framework.md index 88006b3400..a1851ab8b4 100644 --- a/ej2-asp-core-mvc/chat-ui/EJ2_ASP.MVC/bot-integrations/integration-with-bot-framework.md +++ b/ej2-asp-core-mvc/chat-ui/EJ2_ASP.MVC/bot-integrations/integration-with-bot-framework.md @@ -10,7 +10,7 @@ documentation: ug # Microsoft Bot Framework With ASP.NET MVC Chat UI component -The Syncfusion ASP.NET MVC Chat UI supports integration with a Microsoft Bot Framework bot hosted on Azure, enabling a custom chat interface for seamless user interaction. The process involves setting up a secure backend token server, configuring the bot in Azure, and integrating the Syncfusion Chat UI in an ASP.NET MVC application. +The Syncfusion ASP.NET MVC Chat UI supports integration with a [Microsoft Bot Framework](https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-basics?view=azure-bot-service-4.0) bot hosted on Azure, enabling a custom chat interface for seamless user interaction. The process involves setting up a secure backend token server, configuring the bot in Azure, and integrating the Syncfusion Chat UI in an ASP.NET MVC application. ## Getting Started With the Chat UI Component @@ -20,7 +20,7 @@ Before integrating Microsoft Bot Framework, ensure that the Syncfusion Chat UI c ## Prerequisites -* `Microsoft Azure Account`: Required to create and host the bot. +* [Microsoft Azure Account](https://portal.azure.com/#home): Required to create and host the bot. * `Visual Studio`: With ASP.NET MVC development tools. * `Syncfusion EJ2 ASP.NET MVC`: Install Syncfusion.EJ2.MVC5 in your project. * `Deployed Azure Bot`: A bot should be created and published using the Bot Framework, accessible via an Azure App Service. Refer to [Microsoft's Bot Creation Guide](https://learn.microsoft.com/en-us/azure/bot-service/). @@ -48,17 +48,17 @@ Install-Package Syncfusion.EJ2.MVC5 1. In the [Azure Portal](https://portal.azure.com/#home), navigate to your bot resource. -2. Enable the Direct Line channel: +2. Enable the direct line channel: * Go to `Channels` > `Direct Line` > `Default-Site`. * Copy one of the displayed secret keys. -3. Verify the Messaging endpoint in the Configuration section (e.g., https://your-bot-service.azurewebsites.net/api/messages). +3. Verify the messaging endpoint in the configuration section (e.g., https://your-bot-service.azurewebsites.net/api/messages). > `Security Note`: Never expose the Direct Line secret key in frontend code. Use a backend token server to handle it securely. ## Set Up Token Server -Create a Web API controller in your ASP.NET MVC project to handle Direct Line token generation. Add `Controllers/TokenController.cs`: +Create a Web API controller in your ASP.NET MVC project to handle direct line token generation. Add `Controllers/TokenController.cs`: {% tabs %} {% highlight cs tabtitle="TokenController.cs" %} @@ -121,9 +121,9 @@ Add the Direct Line secret to `Web.config`: ## Integrate ChatUI in ASP.NET MVC -Use the Chat UI `messageSend` event to handle message exchanges. This event is triggered before a message is sent, allowing you to forward it to the bot via the Direct Line API. Use the `addMessage` method to programmatically add the bot's reply to the Chat UI. +Use the Chat UI `messageSend` event to handle message exchanges. This event is triggered before a message is sent, allowing you to forward it to the bot via the direct line API. Use the `addMessage` method to programmatically add the bot's reply to the Chat UI. -Create `Views/Home/Index.cshtml` to integrate the Syncfusion Chat UI with the Direct Line API: +Create `Views/Home/Index.cshtml` to integrate the Syncfusion Chat UI with the direct line API: {% tabs %} {% highlight Html tabtitle="Index.cshtml" %} @@ -232,7 +232,7 @@ To enable CORS for API requests, add to `Web.config` under ``: ### Start the Application: Run the project in Visual Studio or use IIS Express. -Open your app in the browser (e.g., `http://localhost:port`) to interact with your Microsoft Bot Framework chatbot. +Open your app in the browser Hosted link to interact with your Microsoft Bot Framework chatbot. ## Troubleshooting diff --git a/ej2-asp-core-mvc/chat-ui/EJ2_ASP.MVC/bot-integrations/integration-with-dialogflow.md b/ej2-asp-core-mvc/chat-ui/EJ2_ASP.MVC/bot-integrations/integration-with-dialogflow.md index 978274bffd..af7f45ae42 100644 --- a/ej2-asp-core-mvc/chat-ui/EJ2_ASP.MVC/bot-integrations/integration-with-dialogflow.md +++ b/ej2-asp-core-mvc/chat-ui/EJ2_ASP.MVC/bot-integrations/integration-with-dialogflow.md @@ -20,7 +20,7 @@ Before integrating Dialogflow, ensure that the Syncfusion Chat UI component is c ## Prerequisites -* Google account to access `Dialogflow` and `Google Cloud Console`. +* Google account to access [Google Dialogflow](https://cloud.google.com/dialogflow/docs) and [Google Cloud Console](https://console.cloud.google.com/). * Visual Studio with ASP.NET MVC development tools. * Syncfusion EJ2 ASP.NET MVC installed in your project. * Dialogflow Service Account with the `Dialogflow API Client` role and its JSON key file. @@ -45,11 +45,11 @@ Install-Package Syncfusion.EJ2.MVC5 ## Set Up the Dialogflow Agent -1. In the Dialogflow console, create an [agent](https://cloud.google.com/agent-assist/docs), set a name (e.g., `MyChatBot`), and configure the default language (e.g., English - `en`). +1. In the dialogflow console, create an [agent](https://cloud.google.com/agent-assist/docs), set a name (e.g., `MyChatBot`), and configure the default language (e.g., English - `en`). -2. Add intents with training phrases and responses (e.g., greetings, FAQs). Test using the Dialogflow simulator. +2. Add intents with training phrases and responses (e.g., greetings, FAQs). Test using the dialogflow simulator. -3. In the Google Cloud Console, go to `APIs & Services` > `Credentials`, create a Service Account with the Dialogflow API Client role, and download the JSON key file. +3. In the Google Cloud Console, go to `APIs & Services` > `Credentials`, create a Service Account with the dialogflow API client role, and download the JSON key file. > `Security Note`: Never commit the JSON key file to version control. Use environment variables or a secret manager (e.g., Google Cloud Secret Manager) for production. @@ -140,13 +140,13 @@ Use the Chat UI `messageSend` event to exchange messages. This event is triggere ### Forward Message to backend: -In the `messageSend` event handler, send a POST request to your backend API endpoint (`/api/chat/message`). The backend forwards the message to Dialogflow and returns the response. +In the `messageSend` event handler, send a POST request to your backend API endpoint (`/api/chat/message`). The backend forwards the message to dialogflow and returns the response. ### Displaying Bot response: Use the `addMessage` method to programmatically add the bot's reply to the Chat UI. -Create `Views/Home/Index.cshtml` to integrate the Syncfusion Chat UI with the Dialogflow backend: +Create `Views/Home/Index.cshtml` to integrate the Syncfusion Chat UI with the dialogflow backend: {% tabs %} {% highlight Html tabtitle="Index.cshtml" %} @@ -205,9 +205,9 @@ Create `Views/Home/Index.cshtml` to integrate the Syncfusion Chat UI with the Di Run the project in Visual Studio or use IIS Express. -Open your app in the browser and chat with your Dialogflow-powered bot. +Open your app in the browser and chat with your dialogflow-powered bot. -![ChatUI with Dialogflow](../../images/dialogflow.png) +![ChatUI with Dialogflow](../images/dialogflow.png) ## Troubleshooting: @@ -216,4 +216,4 @@ Open your app in the browser and chat with your Dialogflow-powered bot. * `No Response`: Test intents in the Dialogflow Console simulator to ensure they are configured correctly. * `Quota Exceeded`: Check Dialogflow API quotas in the Google Cloud Console. * `Network Issues`: Confirm the application is running and the frontend is pointing to the correct API URL. -* `Invalid Credentials`: Verify the service account JSON or configuration settings are correctly set up. +* `Invalid Credentials`: Verify the service account JSON or configuration settings are correctly set up. \ No newline at end of file diff --git a/ej2-asp-core-mvc/chat-ui/EJ2_ASP.NETCORE/ai-integrations/gemini-integration.md b/ej2-asp-core-mvc/chat-ui/EJ2_ASP.NETCORE/ai-integrations/gemini-integration.md deleted file mode 100644 index 33bed56777..0000000000 --- a/ej2-asp-core-mvc/chat-ui/EJ2_ASP.NETCORE/ai-integrations/gemini-integration.md +++ /dev/null @@ -1,86 +0,0 @@ ---- -layout: post -title: Gemini AI in ##Platform_Name## Chat UI Control | Syncfusion -description: Checkout and learn about Integration of Gemini AI in Syncfusion ##Platform_Name## Chat UI control of Syncfusion Essential JS 2 and more. -platform: ej2-asp-core-mvc -control: Gemini AI -publishingplatform: ##Platform_Name## -documentation: ug ---- - -# Integration of Gemini AI With Chat UI component - -The Syncfusion Chat UI supports integration with [Gemini](https://ai.google.dev/gemini-api/docs), enabling advanced conversational AI features in your Core applications. - -## Getting Started With the Chat UI Component - -Before integrating Gemini AI, ensure that the Syncfusion Chat UI control is correctly rendered in your Core application: - -[ core Getting Started Guide](../getting-started) - -## Prerequisites - -* Google account to generate API key on accessing `Gemini AI` - -* Syncfusion Chat UI for Core `Syncfusion.EJ2.AspNet.Core` Install ASP.NET Core package in the application. - -## Install Dependencies - -Install the Syncfusion ASP.NET Core package in the application using the Package Manager Console. - -```bash - -NuGet\Install-Package Syncfusion.EJ2.AspNet.Core - -``` - -Install the Open AI package in the application using the Package Manager Console. - -```bash - -NuGet\Install-Package Mscc.GenerativeAI - -``` - -## Generate API Key - -1. Go to [Google AI Studio](https://aistudio.google.com/app/apikey) and sign in with your Google account. If you don’t have one, create a new account. - -2. Once logged in, click on `Get API Key` from the left-hand menu or the top-right corner of the dashboard. - -3. Click the `Create API Key` button. You’ll be prompted to either select an existing Google Cloud project or create a new one. Choose the appropriate option and proceed. - -4. After selecting or creating a project, your API key will be generated and displayed. Copy the key and store it securely, as it will only be shown once. - -> `Security Note`: Never commit the API key to version control. Use environment variables or a secret manager for production. - -## Integration Gemini AI with Chat UI - -You can add the below respective files in your application: - -* Add your generated `API Key` at the line - -```bash - -const geminiApiKey = 'Place your API key here'; - -``` - -{% tabs %} -{% highlight tagHelper tabtitle="CSHTML" %} -{% include code-snippet/chat-ui/ai-integrations/Asp.net-core/gemini/tagHelper %} -{% endhighlight %} -{% highlight c# tabtitle="gemini.cs" %} -{% include code-snippet/chat-ui/ai-integrations/Asp.net-core/gemini/gemini.cs %} -{% endhighlight %} -{% endtabs %} - -![Open AI](../../images/gemini.png) - -## Run and Test - -Run the application in the browser using the following command. - -Build and run the app (Ctrl + F5). - -Open `https://localhost:44321` to interact with your Gemini AI for dynamic response. \ No newline at end of file diff --git a/ej2-asp-core-mvc/chat-ui/EJ2_ASP.NETCORE/ai-integrations/openai-integration.md b/ej2-asp-core-mvc/chat-ui/EJ2_ASP.NETCORE/ai-integrations/openai-integration.md deleted file mode 100644 index 11ec9b6d5f..0000000000 --- a/ej2-asp-core-mvc/chat-ui/EJ2_ASP.NETCORE/ai-integrations/openai-integration.md +++ /dev/null @@ -1,89 +0,0 @@ ---- -layout: post -title: Azure Open AI in ##Platform_Name## Chat UI Control | Syncfusion -description: Checkout and learn about Integration of Azure Open AI in Syncfusion ##Platform_Name## Chat UI control of Syncfusion Essential JS 2 and more. -platform: ej2-asp-core-mvc -control: Azure Open AI -publishingplatform: ##Platform_Name## -documentation: ug ---- - -# Integration of Azure Open AI With Chat UI component - -The Syncfusion AI AssistView supports integration with [Azure Open AI](https://microsoft.github.io/PartnerResources/skilling/ai-ml-academy/resources/openai), enabling advanced conversational AI features in your Core applications. - -## Getting Started With the Chat UI Component - -Before integrating Azure Open AI, ensure that the Syncfusion Chat UI control is correctly rendered in your core application: -[ Asp Core Getting Started Guide](../getting-started) - -## Prerequisites - -* An Azure account with access to `Azure Open AI` services and a generated API key. - -* Syncfusion Chat UI for Core `Syncfusion.EJ2.AspNet.Core` Install ASP.NET Core package in the application. - -## Install Dependencies - -Install the Syncfusion ASP.NET Core package in the application using the Package Manager Console. - -```bash - -NuGet\Install-Package Syncfusion.EJ2.AspNet.Core -``` - -Install the Open AI and Azure Open AI package in the application using Package Manager Console. - -```bash - -NuGet\Install-Package OpenAI -NuGet\Install-Package Azure.AI.OpenAI -NuGet\Install-Package Azure.Core - -``` - - -## Configure Azure Open AI - -1. Log in to the [Azure Portal](https://portal.azure.com/#home) and navigate to your Azure Open AI resource. - -2. Under Resource Management, select Keys and Endpoint to retrieve your API key and endpoint URL. - -3. Copy the API key, endpoint, and deployment name (e.g., gpt-4o-mini). Ensure the API version (e.g., 2024-07-01-preview) matches your resource configuration. - -4. Store these values securely, as they will be used in your application. - -> `Security Note`: Never expose your API key in client-side code for production applications. Use a server-side proxy or environment variables to manage sensitive information securely. - -## Integration Azure Open AI with Chat UI - -You can add the below respective files in your application: - -* Update the following configuration values with your Azure Open AI details: - -```bash - -string endpoint = "Your_Azure_OpenAI_Endpoint"; -string apiKey = "Your_Azure_OpenAI_API_Key"; -string deploymentName = "Your_Deployment_Name"; - -``` - -{% tabs %} -{% highlight tagHelper tabtitle="CSHTML" %} -{% include code-snippet/chat-ui/ai-integrations/Asp.net-core/openai/tagHelper %} -{% endhighlight %} -{% highlight c# tabtitle="openai.cs" %} -{% include code-snippet/chat-ui/ai-integrations/Asp.net-core/openai/openai.cs %} -{% endhighlight %} -{% endtabs %} - -![Azure Open AI](../../images/openai.png) - -## Run and Test - -Run the application in the browser using the following command. - -Build and run the app (Ctrl + F5). - -Open `https://localhost:44321` to interact with your Azure Open AI for dynamic response. \ No newline at end of file diff --git a/ej2-asp-core-mvc/chat-ui/EJ2_ASP.NETCORE/bot-integrations/integration-with-bot-framework.md b/ej2-asp-core-mvc/chat-ui/EJ2_ASP.NETCORE/bot-integrations/integration-with-bot-framework.md index 11910f2113..b752257335 100644 --- a/ej2-asp-core-mvc/chat-ui/EJ2_ASP.NETCORE/bot-integrations/integration-with-bot-framework.md +++ b/ej2-asp-core-mvc/chat-ui/EJ2_ASP.NETCORE/bot-integrations/integration-with-bot-framework.md @@ -10,7 +10,7 @@ documentation: ug # Microsoft Bot Framework With ASP.NET Core Chat UI component -The Syncfusion ASP.NET Core Chat UI supports integration with a Microsoft Bot Framework bot hosted on Azure, enabling a custom chat interface for seamless user interaction. The process involves setting up a secure backend token server, configuring the bot in Azure, and integrating the Syncfusion Chat UI in an ASP.NET Core application. +The Syncfusion ASP.NET MVC Chat UI supports integration with a [Microsoft Bot Framework](https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-basics?view=azure-bot-service-4.0) bot hosted on Azure, enabling a custom chat interface for seamless user interaction. The process involves setting up a secure backend token server, configuring the bot in Azure, and integrating the Syncfusion Chat UI in an ASP.NET Core application. ## Getting Started With the ChatUI Component @@ -19,7 +19,7 @@ Before integrating Microsoft Bot Framework, ensure that the Syncfusion Chat UI c ## Prerequisites -* `Microsoft Azure Account`: Required to create and host the bot. +* [Microsoft Azure Account](https://portal.azure.com/#home): Required to create and host the bot. * `.NET SDK`: Version 6.0 or higher for ASP.NET Core. * `Syncfusion EJ2 ASP.NET Core`: Install Syncfusion.EJ2.AspNet.Core in your project. * `Deployed Azure Bot`: A bot should be created and published using the Bot Framework, accessible via an Azure App Service. Refer to [Microsoft's Bot Creation Guide](https://learn.microsoft.com/en-us/azure/bot-service/). @@ -46,17 +46,17 @@ dotnet add package Syncfusion.EJ2.AspNet.Core 1. In the [Azure Portal](https://portal.azure.com/#home), navigate to your bot resource. -2. Enable the Direct Line channel: +2. Enable the direct line channel: * Go to `Channels` > `Direct Line` > `Default-Site`. * Copy one of the displayed secret keys. -3. Verify the Messaging endpoint in the Configuration section (e.g., https://your-bot-service.azurewebsites.net/api/messages). +3. Verify the messaging endpoint in the configuration section (e.g., https://your-bot-service.azurewebsites.net/api/messages). > `Security Note`: Never expose the Direct Line secret key in frontend code. Use a backend token server to handle it securely. ## Set Up Token Server -Create a controller in your ASP.NET Core project to handle Direct Line token generation. Add `Controllers/TokenController.cs`: +Create a controller in your ASP.NET Core project to handle direct line token generation. Add `Controllers/TokenController.cs`: {% tabs %} {% highlight cs tabtitle="TokenController.cs" %} @@ -262,7 +262,7 @@ dotnet run ``` -Open your app in the browser (e.g., `http://localhost:5000`) to interact with your Microsoft Bot Framework chatbot. +Open your app in the browser Hosted link to interact with your Microsoft Bot Framework chatbot. ## Troubleshooting @@ -272,4 +272,4 @@ Open your app in the browser (e.g., `http://localhost:5000`) to interact with yo - Test the bot in the Azure Portal using the `Test in Web Chat` feature to ensure it's running correctly. - Check the bot's `Messaging endpoint` in the Configuration section and ensure it is correct and accessible. * `Connection Fails on Load`: Verify the token controller is running and accessible. Check the browser console for network errors. -* `Token Expiration`: Direct Line tokens are short-lived. The Direct Line client typically handles token refresh, but if issues persist, restart the Direct Line connection. \ No newline at end of file +* `Token Expiration`: direct line tokens are short-lived. The direct line client typically handles token refresh, but if issues persist, restart the direct line connection. \ No newline at end of file diff --git a/ej2-asp-core-mvc/chat-ui/EJ2_ASP.NETCORE/bot-integrations/integration-with-dialogflow.md b/ej2-asp-core-mvc/chat-ui/EJ2_ASP.NETCORE/bot-integrations/integration-with-dialogflow.md index 15a02f6b7c..8d2d46feca 100644 --- a/ej2-asp-core-mvc/chat-ui/EJ2_ASP.NETCORE/bot-integrations/integration-with-dialogflow.md +++ b/ej2-asp-core-mvc/chat-ui/EJ2_ASP.NETCORE/bot-integrations/integration-with-dialogflow.md @@ -19,7 +19,7 @@ Before integrating Dialogflow, ensure that the Syncfusion Chat UI component is c ## Prerequisites -* Google account to access `Dialogflow` and `Google Cloud Console`. +* Google account to access [Google Dialogflow](https://cloud.google.com/dialogflow/docs) and [Google Cloud Console](https://console.cloud.google.com/). * .NET SDK (version 6.0 or higher) for ASP.NET Core. * Syncfusion EJ2 ASP.NET Core installed in your project. * Dialogflow Service Account with the Dialogflow API Client role and its JSON key file. @@ -42,11 +42,11 @@ dotnet add package Syncfusion.EJ2.AspNet.Core ``` ## Set Up the Dialogflow Agent -1. In the Dialogflow console, create an [agent](https://cloud.google.com/agent-assist/docs), set a name (e.g., `MyChatBot`), and configure the default language (e.g., English - `en`). +1. In the dialogflow console, create an [agent](https://cloud.google.com/agent-assist/docs), set a name (e.g., `MyChatBot`), and configure the default language (e.g., English - `en`). -2. Add intents with training phrases and responses (e.g., greetings, FAQs). Test using the Dialogflow simulator. +2. Add intents with training phrases and responses (e.g., greetings, FAQs). Test using the dialogflow simulator. -3. In the Google Cloud Console, go to `APIs & Services` > `Credentials`, create a Service Account with the Dialogflow API Client role, and download the JSON key file. +3. In the Google Cloud Console, go to `APIs & Services` > `Credentials`, create a Service Account with the dialogflow API client role, and download the JSON key file. > `Security Note`: Never commit the JSON key file to version control. Use environment variables or a secret manager (e.g., Google Cloud Secret Manager) for production. @@ -135,13 +135,13 @@ Use the Chat UI `messageSend` event to exchange messages. This event is triggere ### Forward Message to backend: -In the messageSend event handler, send a POST request to your backend API endpoint (`/api/chat/message`). The backend forwards the message to Dialogflow and returns the response. +In the `messageSend` event handler, send a POST request to your backend API endpoint (`/api/chat/message`). The backend forwards the message to dialogflow and returns the response. ### Displaying Bot response: Use the `addMessage` method to programmatically add the bot's reply to the Chat UI. -Create `Views/Home/Index.cshtml` (assuming MVC) to integrate the Syncfusion Chat UI with the Dialogflow backend: +Create `Views/Home/Index.cshtml` to integrate the Syncfusion Chat UI with the dialogflow backend: {% tabs %} {% highlight Html tabtitle="Index.cshtml" %} @@ -202,9 +202,9 @@ dotnet run ``` - Open your app and chat with your Dialogflow-powered bot. +Open your app in the browser and chat with your dialogflow-powered bot. -![ChatUI with Dialogflow](../../images/dialogflow.png) +![ChatUI with Dialogflow](../images/dialogflow.png) ## Troubleshooting: diff --git a/ej2-asp-core-toc.html b/ej2-asp-core-toc.html index 30b127dc34..84ab90075f 100644 --- a/ej2-asp-core-toc.html +++ b/ej2-asp-core-toc.html @@ -580,16 +580,6 @@ -
  • AI Integrations - -
  • Time break
  • Timestamp
  • Typing indicator
  • diff --git a/ej2-asp-mvc-toc.html b/ej2-asp-mvc-toc.html index 07e20f636e..f132eea9f9 100644 --- a/ej2-asp-mvc-toc.html +++ b/ej2-asp-mvc-toc.html @@ -583,16 +583,6 @@ -
  • AI Integrations - -
  • Time break
  • Timestamp
  • Typing indicator