{"id":15423868,"url":"https://github.com/negativeeddy/customquestionansweringbotsample","last_synced_at":"2026-04-20T09:02:21.005Z","repository":{"id":72871868,"uuid":"540068604","full_name":"negativeeddy/CustomQuestionAnsweringBotSample","owner":"negativeeddy","description":null,"archived":false,"fork":false,"pushed_at":"2023-03-09T17:23:31.000Z","size":149,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-01T01:59:33.680Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/negativeeddy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-09-22T16:21:19.000Z","updated_at":"2022-10-14T19:21:21.000Z","dependencies_parsed_at":"2023-04-25T16:31:18.471Z","dependency_job_id":null,"html_url":"https://github.com/negativeeddy/CustomQuestionAnsweringBotSample","commit_stats":{"total_commits":19,"total_committers":2,"mean_commits":9.5,"dds":"0.26315789473684215","last_synced_commit":"c8a7918690ecc7532552721605a841fe96f6d014"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/negativeeddy/CustomQuestionAnsweringBotSample","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/negativeeddy%2FCustomQuestionAnsweringBotSample","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/negativeeddy%2FCustomQuestionAnsweringBotSample/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/negativeeddy%2FCustomQuestionAnsweringBotSample/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/negativeeddy%2FCustomQuestionAnsweringBotSample/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/negativeeddy","download_url":"https://codeload.github.com/negativeeddy/CustomQuestionAnsweringBotSample/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/negativeeddy%2FCustomQuestionAnsweringBotSample/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32040353,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T00:18:06.643Z","status":"online","status_checked_at":"2026-04-20T02:00:06.527Z","response_time":94,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-01T17:44:36.967Z","updated_at":"2026-04-20T09:02:20.985Z","avatar_url":"https://github.com/negativeeddy.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# **UPDATE:** The bot framework team has released Recognizers for CQA \u0026 CLU. \n- Nuget packages https://www.nuget.org/packages?q=Microsoft.Bot.Components.Recognizers\n- source https://github.com/microsoft/botframework-components/tree/main/packages/Recognizers\n\n# Composer sample using Azure Language service \n\n## Summary\nThis sample shows how to add a custom recognizer to a Bot Composer empty bot in order to use [Azure Question Answering](https://azure.microsoft.com/en-us/products/cognitive-services/question-answering/) (instead of using QnA Maker), Custom Conversation Understanding, or Orchestration Workflow instead of QnAMaker, LUIS and/or Bot Orchestrator. It has not been exhaustively tested but demonstrates how a custom trigger in Composer works and this solution may need additional refinement. (also see the limitations section below)\n\n## Quickstart\n1. Install the solution's nuget pacakge to Composer\n  - build the recognizer project you want to use and create a a nuget package (\"Right-Click Project -\u003e Pack\" in Visual Studio)\n  - Add a new source to Composer's package manager to point to the nuget directory\n  - Install the package to your Composer project\n2. Change the root dialog's recognizer type to custom\n4. Update the settings in the custom recognizer with your keys \n3. Use custom intent triggers or the built in QnAIntent trigger as usual in the root dialog\n\n## Settings\nFor Conversation Understanding or Orchestration use the CLU recognizer\n```\n{\n    \"$kind\": \"NegativeEddy.CluAdaptiveRecognizer\",\n    \"projectName\": \"\u003cyour project name\u003e\",\n    \"endpoint\": \"\u003cyour endpoint, including https://\u003e\",\n    \"endpointKey\": \"\u003cyour endpoint key\u003e\",\n    \"projectType\": \"\u003cCLU|Orchestration\u003e\",\n    \"deploymentName\": \"\u003cyour language deployment name\u003e\"\n}\n```\nprojectType defaults to “CLU” if not set, all other settings are required\n\nor if using the Question Answering recognizer use the following definition\n\n```\n{\n \"$kind\": \"NegativeEddy.CustomQuestionAnsweringRecognizer\",\n  \"hostname\": \"\u003cyour endpoint, including https://\u003e\",\n  \"projectName\": \"\u003cyour project name\u003e\",\n  \"endpointKey\": \"\u003cyour endpoint key\u003e\"\n}\n```\n\nBecause the Question Answering recognizer is a modified version of the existing QnAMaker recognizer, the workflow elements (such as multi turn) work the same. In addition the same QnAMaker events and telemetry are written out to the logs.\n\nThe CLU/Orchestration recognizer will emit events title \"CLU\" events.\n\nIf using both Question Answering and Language Understanding, build an Orchestration service and use the Orchestration servuce with the CLU trigger.\n\n## Limitations\n\n* Composer does not integrate natively with Question Answering or the Conversation Understanding, so managing the question/answer pairs and intents must be done in the language portal instead of Composer.\n* Testing must be done to check that the Question Answering score and Language scores are comparable to previous services. (There are some additional parameters that are used internally that might be useful exposed as configuration settings such as minimum scores, etc)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnegativeeddy%2Fcustomquestionansweringbotsample","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnegativeeddy%2Fcustomquestionansweringbotsample","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnegativeeddy%2Fcustomquestionansweringbotsample/lists"}