Preferences and channel inheritance
Global and workflow preferences combine to determine ordinary notification eligibility. Channel names depend on the operation, and critical workflow policy can bypass ordinary preference suppression.
Preference inheritance and critical workflows
| Setting | Effect |
|---|---|
| Global channel preference | Applies across notification workflows. |
| Per-workflow channel preference | Further restricts that workflow. Ordinary delivery requires both levels to allow the channel. |
global.enabled: false | Suppresses non-critical notifications under the preference policy. |
Workflow critical: true | Can bypass ordinary preference suppression. |
Explicit optional false | Preserves an opt-out where the field or map entry supports explicit presence. |
| Missing channel | Can mean unsupported or inherited; do not interpret every omission as an explicit opt-out. |
A critical workflow does not guarantee provider delivery or replace recipient authorization and business eligibility. Explain critical-notification policy in the preference UI.
Preference update semantics
| Operation | Update behavior |
|---|---|
| Update global preferences | Applies across workflows. Omitted channels retain their current values. |
| Update workflow preferences | Requires workflowId; omitted channels retain their values. Use the global operation for global changes. |
| Batch workflow preference update | Missing workflow IDs are skipped. Compare updatedCount with the number of submitted entries. |
Send only the settings the user changed; these operations patch preferences rather than replacing the entire set.
Channel names across operations
| API context | Channel vocabulary |
|---|---|
| Preference toggle keys | inApp, push, email, sms, chat |
| Registered channels | CHANNEL_* enum values |
| Activity filters | Provider strings such as in_app and push; see activity filter fields. |
Use the vocabulary defined by each operation.