Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
8a57944
Add Contact Center module
MikeAlhayek Jun 29, 2026
a387652
Address feedback
MikeAlhayek Jun 29, 2026
f90a595
Add Contact Center agents, queues, reservations, assignment, and dial…
MikeAlhayek Jun 29, 2026
56602a7
fix NRE
MikeAlhayek Jun 29, 2026
7760740
Add Contact Center inbound voice routing and Telephony incoming-call …
MikeAlhayek Jun 29, 2026
fae2c01
Add phase 2
MikeAlhayek Jun 29, 2026
aca69af
[Refactor] Align Contact Center admin and voice routing
MikeAlhayek Jun 29, 2026
79bf91c
[Fix] Add Contact Center skills and presence cleanup
MikeAlhayek Jun 29, 2026
0b4dbc0
Use Soft Phone for agent workspace
MikeAlhayek Jun 30, 2026
de7113c
[Fix] Render contact center soft phone tab
MikeAlhayek Jun 30, 2026
2c0396d
Fix softphone
MikeAlhayek Jun 30, 2026
db2359d
Fix softphone
MikeAlhayek Jun 30, 2026
3035735
Close gaps
MikeAlhayek Jun 30, 2026
2e18a98
Close gaps
MikeAlhayek Jun 30, 2026
06ff84c
Contact Center: complete Phase 3 routing depth (G7) + land real-time/…
MikeAlhayek Jul 1, 2026
061c8af
Contact Center: signed provider voice webhook adapters + idempotency …
MikeAlhayek Jul 1, 2026
5cb4675
Contact Center: compare-and-set on reservation creation (G2/P0 #7)
MikeAlhayek Jul 1, 2026
7d351ed
Contact Center: transfer/conference taxonomy + orchestration (G1, com…
MikeAlhayek Jul 1, 2026
2bfe4b4
Contact Center: inbound entry points (Phase 8)
MikeAlhayek Jul 1, 2026
663060b
Contact Center: callback scheduling (Phases 5/10)
MikeAlhayek Jul 1, 2026
d613f33
Contact Center: daily event-metrics projection (Phase 12)
MikeAlhayek Jul 1, 2026
ba7ea94
Contact Center: recording + live-monitoring orchestration (Phase 9)
MikeAlhayek Jul 1, 2026
01bfc6a
Contact Center: optional OrchardCore Workflows bridge (Phase 11)
MikeAlhayek Jul 1, 2026
ee57213
Contact Center: interaction-event data retention (Phase 13)
MikeAlhayek Jul 1, 2026
fe87f6a
Contact Center: AI assist extensibility seam (Phase 14)
MikeAlhayek Jul 1, 2026
915422f
DialPad: complete inbound + outbound as the Contact Center phone prov…
MikeAlhayek Jul 1, 2026
18f2ad4
Finish core implementations
MikeAlhayek Jul 1, 2026
b9a5859
Finish core implementations
MikeAlhayek Jul 1, 2026
b50eb98
Merge origin/main into ma/add-contact-center
MikeAlhayek Jul 1, 2026
94f7cd4
[Security] Harden provider webhook logging
MikeAlhayek Jul 1, 2026
0420f36
Update Automatic workflow
MikeAlhayek Jul 1, 2026
526002f
[Feature] Align agent workspace and update resources
MikeAlhayek Jul 1, 2026
5b75a45
[Fix] Improve live dashboard agent status
MikeAlhayek Jul 1, 2026
03d5ff8
[Fix] Align select picker styling
MikeAlhayek Jul 1, 2026
518d953
Add Reporting Module
MikeAlhayek Jul 2, 2026
ecb83fe
Add activity loading
MikeAlhayek Jul 2, 2026
d8c2038
fix NRC
MikeAlhayek Jul 4, 2026
ca27a61
Merge branch 'main' into ma/add-contact-center
MikeAlhayek Jul 6, 2026
c363440
Use ai-chat-ui preview.98 in Resources
MikeAlhayek Jul 6, 2026
add5e71
cleanup
MikeAlhayek Jul 6, 2026
f9c2c5f
Add more function to activities bulk management
MikeAlhayek Jul 7, 2026
f7fbf86
fix activity batch
MikeAlhayek Jul 7, 2026
3a5d740
Add Asterisk
MikeAlhayek Jul 7, 2026
dba67ad
Merge branch 'main' into ma/add-contact-center
MikeAlhayek Jul 7, 2026
f7bf564
Improve SoftPhone and add Asterisk provider
MikeAlhayek Jul 9, 2026
2675ac7
Review hardening: fix CA1873 warnings, agent reserve guard, Asterisk …
MikeAlhayek Jul 10, 2026
1a6a0fc
fix call flow
MikeAlhayek Jul 10, 2026
38d5ffb
Harden telephony state synchronization
MikeAlhayek Jul 10, 2026
6290e3c
Fix provider-authoritative soft phone recovery
MikeAlhayek Jul 10, 2026
983f9ea
Harden real-time telephony recovery
MikeAlhayek Jul 10, 2026
22180ad
Fix inbound telephony release synchronization
MikeAlhayek Jul 10, 2026
9b9df60
Fix recurring inbound call synchronization
MikeAlhayek Jul 10, 2026
4014064
Self-heal zombie inbound offers via provider truth
MikeAlhayek Jul 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1,560 changes: 1,560 additions & 0 deletions .github/contact-center/PLAN.md

Large diffs are not rendered by default.

15 changes: 15 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,20 @@ CrestApps.OrchardCore is a collection of open-source modules for **Orchard Core
**Target Framework**: .NET 10.0 (net10.0)
**Architecture**: Modular, multi-tenant application framework

## Contact Center module (active, multi-phase project)

The **Contact Center** module set is a large, multi-phase orchestration layer being built between the CRM (Omnichannel) and Telephony modules. Before doing any Contact Center work (anything under `src/**/CrestApps.OrchardCore.ContactCenter*`), **ALWAYS read the durable plan first**:

- **Plan & progress:** [`.github/contact-center/PLAN.md`](contact-center/PLAN.md)

That document is the source of truth for the Contact Center architecture, phased scope, MVP definition, conceptual data model, event catalog, and current progress. Always read its **Progress status** section to see what is done and what is next, start at the lowest incomplete phase, and update that section after each meaningful change.

Key rules for this module set:

- Respect the layer boundary: **CRM (Omnichannel) owns business work data, Contact Center owns orchestration, Telephony owns media execution.** `OmnichannelActivity` remains the universal work item; `Interaction` is communication history for one attempt and never owns workflow or disposition.
- **Never** write competitor product names in code, comments, identifiers, or public docs. Adopt only the generic, industry-standard terminology defined in the plan's terminology/metrics section.
- Group related capabilities into separate, feature-gated Orchard modules/features (the plan's module breakdown), the way commercial platforms separate licensed capabilities.

## Working Effectively

### Prerequisites and Environment Setup
Expand Down Expand Up @@ -136,6 +150,7 @@ dotnet run
#### Documentation

* Keep public docs and comments accurate and aligned with the code.
* In Markdown docs, do not manually hard-wrap prose at a fixed column. Keep each paragraph or list item on a single line and let the editor/viewer wrap it visually.
* Always document:

* Every public method (including constructors) with XML `<summary>` and `<param>` tags.
Expand Down
9 changes: 9 additions & 0 deletions CrestApps.OrchardCore.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -17,21 +17,25 @@
<Folder Name="/src/" />
<Folder Name="/src/Abstractions/">
<Project Path="src/Abstractions/CrestApps.OrchardCore.Abstractions/CrestApps.OrchardCore.Abstractions.csproj" />
<Project Path="src/Abstractions/CrestApps.OrchardCore.ContactCenter.Abstractions/CrestApps.OrchardCore.ContactCenter.Abstractions.csproj" />
<Project Path="src/Abstractions/CrestApps.OrchardCore.ContentTransfer.Abstractions/CrestApps.OrchardCore.ContentTransfer.Abstractions.csproj" />
<Project Path="src/Abstractions/CrestApps.OrchardCore.DncRegistry.Abstractions/CrestApps.OrchardCore.DncRegistry.Abstractions.csproj" />
<Project Path="src/Abstractions/CrestApps.OrchardCore.PhoneNumbers.Abstractions/CrestApps.OrchardCore.PhoneNumbers.Abstractions.csproj" />
<Project Path="src/Abstractions/CrestApps.OrchardCore.Reports.Abstractions/CrestApps.OrchardCore.Reports.Abstractions.csproj" />
<Project Path="src/Abstractions/CrestApps.OrchardCore.Telephony.Abstractions/CrestApps.OrchardCore.Telephony.Abstractions.csproj" />
<Project Path="src/Abstractions/CrestApps.OrchardCore.Users.Abstractions/CrestApps.OrchardCore.Users.Abstractions.csproj" />
</Folder>
<Folder Name="/src/Core/">
<Project Path="src/Core/CrestApps.OrchardCore.AI.Chat.Core/CrestApps.OrchardCore.AI.Chat.Core.csproj" />
<Project Path="src/Core/CrestApps.OrchardCore.AI.Chat.Interactions.Core/CrestApps.OrchardCore.AI.Chat.Interactions.Core.csproj" />
<Project Path="src/Core/CrestApps.OrchardCore.AI.Core/CrestApps.OrchardCore.AI.Core.csproj" />
<Project Path="src/Core/CrestApps.OrchardCore.ContactCenter.Core/CrestApps.OrchardCore.ContactCenter.Core.csproj" />
<Project Path="src/Core/CrestApps.OrchardCore.ContentTransfer.Core/CrestApps.OrchardCore.ContentTransfer.Core.csproj" />
<Project Path="src/Core/CrestApps.OrchardCore.Core/CrestApps.OrchardCore.Core.csproj" />
<Project Path="src/Core/CrestApps.OrchardCore.Omnichannel.Core/CrestApps.OrchardCore.Omnichannel.Core.csproj" />
<Project Path="src/Core/CrestApps.OrchardCore.PhoneNumbers.Core/CrestApps.OrchardCore.PhoneNumbers.Core.csproj" />
<Project Path="src/Core/CrestApps.OrchardCore.Recipes.Core/CrestApps.OrchardCore.Recipes.Core.csproj" />
<Project Path="src/Core/CrestApps.OrchardCore.Reports.Core/CrestApps.OrchardCore.Reports.Core.csproj" />
<Project Path="src/Core/CrestApps.OrchardCore.Roles.Core/CrestApps.OrchardCore.Roles.Core.csproj" />
<Project Path="src/Core/CrestApps.OrchardCore.Users.Core/CrestApps.OrchardCore.Users.Core.csproj" />
<Project Path="src/Core/CrestApps.OrchardCore.YesSql.Core/CrestApps.OrchardCore.YesSql.Core.csproj" />
Expand Down Expand Up @@ -60,7 +64,9 @@
<Project Path="src/Modules/CrestApps.OrchardCore.AI.Memory/CrestApps.OrchardCore.AI.Memory.csproj" />
<Project Path="src/Modules/CrestApps.OrchardCore.AI.Prompting/CrestApps.OrchardCore.AI.Prompting.csproj" />
<Project Path="src/Modules/CrestApps.OrchardCore.AI/CrestApps.OrchardCore.AI.csproj" />
<Project Path="src/Modules/CrestApps.OrchardCore.Asterisk/CrestApps.OrchardCore.Asterisk.csproj" />
<Project Path="src/Modules/CrestApps.OrchardCore.AzureAIInference/CrestApps.OrchardCore.AzureAIInference.csproj" />
<Project Path="src/Modules/CrestApps.OrchardCore.ContactCenter/CrestApps.OrchardCore.ContactCenter.csproj" />
<Project Path="src/Modules/CrestApps.OrchardCore.ContentAccessControl/CrestApps.OrchardCore.ContentAccessControl.csproj" />
<Project Path="src/Modules/CrestApps.OrchardCore.ContentFields/CrestApps.OrchardCore.ContentFields.csproj" />
<Project Path="src/Modules/CrestApps.OrchardCore.ContentTransfer/CrestApps.OrchardCore.ContentTransfer.csproj" />
Expand All @@ -78,6 +84,8 @@
<Project Path="src/Modules/CrestApps.OrchardCore.PhoneNumbers/CrestApps.OrchardCore.PhoneNumbers.csproj" />
<Project Path="src/Modules/CrestApps.OrchardCore.PhoneNumbers.Verifications/CrestApps.OrchardCore.PhoneNumbers.Verifications.csproj" />
<Project Path="src/Modules/CrestApps.OrchardCore.Recipes/CrestApps.OrchardCore.Recipes.csproj" />
<Project Path="src/Modules/CrestApps.OrchardCore.Reports/CrestApps.OrchardCore.Reports.csproj" />
<Project Path="src/Modules/CrestApps.OrchardCore.Reports.OpenXml/CrestApps.OrchardCore.Reports.OpenXml.csproj" />
<Project Path="src/Modules/CrestApps.OrchardCore.Resources/CrestApps.OrchardCore.Resources.csproj" />
<Project Path="src/Modules/CrestApps.OrchardCore.Roles/CrestApps.OrchardCore.Roles.csproj" />
<Project Path="src/Modules/CrestApps.OrchardCore.SignalR/CrestApps.OrchardCore.SignalR.csproj" />
Expand All @@ -90,6 +98,7 @@
</Folder>
<Folder Name="/src/Startup/">
<Project Path="src/Startup/CrestApps.Aspire.AppHost/CrestApps.Aspire.AppHost.csproj" />
<Project Path="src/Startup/CrestApps.OrchardCore.Asterisk.Web/CrestApps.OrchardCore.Asterisk.Web.csproj" />
<Project Path="src/Startup/CrestApps.OrchardCore.Cms.Web/CrestApps.OrchardCore.Cms.Web.csproj" />
<Project Path="src/Startup/CrestApps.OrchardCore.Samples.A2AClient/CrestApps.OrchardCore.Samples.A2AClient.csproj" />
<Project Path="src/Startup/CrestApps.OrchardCore.Samples.McpClient/CrestApps.OrchardCore.Samples.McpClient.csproj" />
Expand Down
Loading
Loading