Skip to content

Black Friday:

60% off

Cliedesk Pro

Every plan, every site count. Ends Cyber Monday.

00 days 00 hrs 00 min 00 sec
Claim 60% off

Developers

Cliedesk hooks and filters

Generated by npm run docs:hooks from the PHPDoc in cliedesk/src. Do not edit by hand.

Rules: filters that touch permissions may only narrow; hooks never receive secrets; hooks fire for every actor (people, rules, API, CLI); heavy listeners should queue a job. With WP_DEBUG on, Settings → Health → Hooks lists the callbacks attached to each hook.

73 actions, 187 filters.

cliedesk_2fa_adapter (filter)

The 2FA plugin Cliedesk can ask (null = none).

  • string|null $found Adapter name.

Fired in: src/Modules/Security/TwoFactor.php

cliedesk_2fa_static_checks (filter)

Static 2FA checks [class, method] called with the user id (plugin classes are looked up by name: none of them is a dependency).

Fired in: src/Modules/Security/TwoFactor.php

cliedesk_account_verification_sender (filter)

Sender of the account verification email. WordPress and WooCommerce have none; a plugin that verifies account emails returns a callable fn( WP_User $user ): true|WP_Error that sends its email again.

  • callable|null $sender Sender.

Fired in: src/Modules/Commerce/Account/AccountActions.php

cliedesk_action_executed (action)

Fires after an Action committed.

  • string $name Action name.
  • Actor $actor Actor.
  • array $input Input.
  • array<mixed> $data Result data.

Fired in: src/Actions/ActionRegistry.php

cliedesk_action_gate (filter)

Gate an Action run (Pro: AI autonomy, approvals, capability ceilings). Return an ActionError to stop.

  • ActionError|null $error Null to continue.
  • Action $action Action.
  • Actor $actor Actor.

Fired in: src/Actions/ActionRegistry.php

cliedesk_action_result (filter)

Adjust an Action’s result for the actor (PII masking for people without cliedesk_view_pii).

  • array<mixed> $data Result data.
  • Action $action Action.
  • Actor $actor Actor.

Fired in: src/Actions/ActionRegistry.php

cliedesk_admin_bar_alert (filter)

A short alert about the open conversations assigned to a person, shown as a dot with this text for screen readers (Pro: “an SLA target is at risk”); ‘’ for none. Do not read tables the background install creates before Plugin::installed().

  • string $alert Alert text.
  • int $user User.

Fired in: src/Modules/Inbox/AdminBar.php

cliedesk_agent_schedules (filter)

The schedules of an agent’s working hours (open while any is open); Free: the default schedule.

  • int $user User.

Fired in: src/Modules/Sla/Schedules.php

cliedesk_agent_status (filter)

A user’s status as the API shows it (Pro: custom status, label, end time, automatic flag, channels).

  • int $user User.

Fired in: src/Modules/Team/AgentStatuses.php

cliedesk_agent_status_changed (action)

An agent’s status changed: routing, automation and Pro listen.

  • int $user User.
  • AgentStatus $status New status.

Fired in: src/Modules/Team/AgentStatuses.php

cliedesk_agent_understands (filter)

Whether an agent reads a language without translation.

  • bool $understands From the profile.
  • int $user Agent.
  • string $language Language.

Fired in: src/Modules/Team/Profiles.php

cliedesk_app_allowed_handles (filter)

Extra script/style handles kept on app routes.

  • string[] $handles Handles.

Fired in: src/App/Shell.php

cliedesk_app_enqueue (action)

Enqueue Pro (or extension) bundles after the app (handles must start with cliedesk).

  • string $path App path.

Fired in: src/App/Assets.php

cliedesk_app_manifest (filter)

The agent app’s web manifest: name, colours, icons.

Fired in: src/App/Pwa.php

cliedesk_app_replace_csp (filter)

Whether the /desk page replaces other Content-Security-Policy headers with its own (return false to keep them).

  • bool $replace Replace.

Fired in: src/App/Shell.php

cliedesk_app_shell (action)

Fires when an app response is being prepared.

  • string $path App path.

Fired in: src/App/Shell.php

cliedesk_app_slug (filter)

Last-chance override of the app slug (agency setups). Must pass the slug format.

  • string $slug Slug.

Fired in: src/App/Urls.php

cliedesk_app_worker (filter)

More service worker code (Web Push for agents).

  • string $code JavaScript.

Fired in: src/App/Pwa.php

cliedesk_article_changed (action)

An article’s content or visibility changed.

  • int $post Post id.

Fired in: src/Modules/Knowledge/Articles.php

cliedesk_article_feedback_negative (action)

A reader said an article did not help: rules, owner tasks.

  • int $post Article.
  • string $reason Reason key or ‘’.

Fired in: src/Modules/Knowledge/Feedback.php

cliedesk_article_listable (filter)

Visibility levels the current visitor may see in lists and search. Cliedesk Pro adds logged_in for signed-in visitors.

  • string[] $out Levels.

Fired in: src/Modules/Knowledge/Articles.php

cliedesk_article_visibilities (filter)

Visibility levels of help articles, from the least to the most strict. Cliedesk Pro adds unlisted (link: opens by its link, never listed) and logged_in (sign_in: customers sign in to read it). A stored level missing from this list counts as internal.

Fired in: src/Modules/Knowledge/Articles.php

cliedesk_ask_block_html (filter)

The Ask block’s HTML: Cliedesk Pro renders it; Free renders nothing for customers.

  • string $html HTML (‘’ without Pro).

Fired in: src/Modules/Knowledge/Authoring.php

cliedesk_automation_actions (filter)

Actions rules may run: name => [label, conversation id input key, fixed input, customer-visible].

Fired in: src/Modules/Automation/Catalog.php

cliedesk_automation_contact_actions (filter)

Actions contact rules may run: name => [label, contact id input key, fixed input, customer-visible].

Fired in: src/Modules/Automation/Catalog.php

cliedesk_automation_default_recipes (filter)

First-run default recipes (keys). Pro adds the inactivity ladder.

  • string[] $keys Recipe keys.

Fired in: src/Modules/Automation/Recipes.php

cliedesk_automation_event_name (filter)

Trigger event name for other timeline events (null: none).

  • string|null $name Event name.
  • string $type Timeline type.

Fired in: src/Modules/Automation/Catalog.php

cliedesk_automation_recipes (filter)

Recipes: key => [name, description, rules [[name, definition]]]. Pro adds recipes with its steps.

Fired in: src/Modules/Automation/Recipes.php

cliedesk_automation_run_failed (action)

A rule run failed.

  • int $run Run id.
  • string $error Message.

Fired in: src/Modules/Automation/Engine.php

cliedesk_automation_subscribed (filter)

Whether a live workflow subscribes to an automation event (the automation module answers).

  • bool $subscribed Subscribed.
  • string $name Event name.

Fired in: src/Actions/ActionContext.php

cliedesk_automation_triggers (filter)

Automation triggers: event name => [label, group]. Modules and Pro add theirs (Pro: time, schedule, WordPress hook and widget script triggers).

Fired in: src/Modules/Automation/Catalog.php

cliedesk_boot_data (filter)

Extend the boot payload. Never add secrets: the result is re-validated and refused when it contains credential-like values.

Fired in: src/App/Boot.php

cliedesk_brand_identity (filter)

Identity values of a product before they are formatted (Pro: the product’s overrides).

  • array $base Identity values (snake_case keys) and overridden (the field names a product overrides).
  • array $product Product row.

Fired in: src/Modules/Workspace/Brands.php

cliedesk_browser_storage (filter)

What Cliedesk keeps in the visitor’s browser, for cookie-policy plugins. Cliedesk sets no cookies of its own; signed-in customers use the WordPress login cookies.

Fired in: src/Modules/Widget/CustomerSessions.php

cliedesk_bulk_job_purging (action)

A bulk job is about to be deleted (handlers remove result files).

Fired in: src/Infrastructure/Bulk/BulkJobs.php

cliedesk_card_attributes (filter)

Built-in card attributes (extensions add theirs, e.g. Woo lifetime value or LMS courses).

  • string $context contact | organization.

Fired in: src/Modules/Crm/CardLayout.php

cliedesk_checklist_verify (filter)

Whether a verifiable checklist fact holds for a conversation (e.g. woo_refund_exists).

  • bool $holds Holds.
  • string $verify_key Verification key.

Fired in: src/Modules/Conversations/Checklists.php

cliedesk_collision_pause (filter)

Whether this user’s sends pause when something new arrived while composing.

  • bool $pause Workspace default.
  • int $user_id User.

Fired in: src/Modules/Conversations/ConversationActions.php

cliedesk_commerce_step_actions (filter)

Commerce Actions that macros and rules may run as steps: name => label. Pro adds refund, cancel, reship, coupon and subscription actions; their guardrails and approvals still apply when they run.

Fired in: src/Modules/Commerce/Library/CommerceActions.php

cliedesk_contact_block_changed (action)

A contact was blocked or unblocked: the blocked list keeps who, when and why.

  • int $contact Contact.
  • bool $blocked Blocked.
  • int|null $user Who.

Fired in: src/Modules/Contacts/ContactActions.php

cliedesk_contact_chat_available (filter)

Is chat offered now (business hours, agents online, closures, the widget’s audience)?

  • bool $available Available.
  • int|null $product Product whose hours apply (its help center or the block’s product), or null.

Fired in: src/Modules/Knowledge/Authoring.php

cliedesk_contact_condition (filter)

Compile a contact condition from an extension (Woo metrics, WordPress meta, Pro). Return an SQL fragment over contacts ct built only from escaped values, or null when the field is not yours.

  • string|null $sql SQL.
  • Actor $actor Actor.

Fired in: src/Modules/Crm/ContactFilter.php

cliedesk_contact_created (action)

A contact was created (user policy, duplicate checks).

  • int $id Contact.
  • string $source inbound | manual.

Fired in: src/Modules/Contacts/Contacts.php

cliedesk_contact_erased (action)

A person’s data was erased (webhooks send contact.erased, Pro erases AI data).

  • int[] $contacts Contacts.
  • string $what conversations | contact.
  • bool $delete Delete mode.

Fired in: src/Modules/Security/Privacy.php

cliedesk_contact_external_notes (filter)

Read-only notes about a contact from other plugins (notes customers left on their WooCommerce orders). Each: source, id, title, text, date.

  • int $contact Contact id.
  • Actor $actor Viewer.

Fired in: src/Modules/Contacts/NoteActions.php

cliedesk_contact_is_presales (filter)

Whether a contact is pre-sales (shows the qualification block). Commerce modules return false for buyers.

  • bool $presales Default: guests (no WordPress account).

Fired in: src/Modules/Crm/Qualification.php

cliedesk_contact_profile (filter)

Extra profile sections (Woo LTV and orders, subscriptions, memberships, courses, device, UTM). Each section: {key, label, items: [{label, value}]}. A section whose key matches a card attribute added through cliedesk_card_attributes is shown on the customer card for that attribute.

  • Actor $a Viewer.

Fired in: src/Modules/Crm/ProfileActions.php

cliedesk_contact_value (filter)

A customer’s value (e.g. lifetime spend from a commerce integration) for feature-request demand.

  • float|null $value Value, or null when unknown.
  • int $contact Contact id.

Fired in: src/Modules/Inbox/FeatureRequests.php

cliedesk_conversation_assigned (action)

A conversation got a new assignee (notifications).

  • Actor $actor Who assigned.

Fired in: src/Modules/Conversations/Conversations.php

cliedesk_conversation_created (action)

A conversation was created (inside its transaction): modules add what belongs to it from the start, e.g. inherited tags.

  • Actor $actor Actor.

Fired in: src/Modules/Conversations/Conversations.php

cliedesk_conversation_form (action)

A new conversation’s type form values: the Fields module checks and saves them; an ActionError rolls the create back.

  • Actor $a Actor.

Fired in: src/Modules/Conversations/ConversationActions.php

cliedesk_conversation_purging (action)

A conversation is about to be deleted for good (attachments, Pro data and other modules clean up).

Fired in: src/Modules/Conversations/Conversations.php

cliedesk_conversation_scope (filter)

Conversation scope of a user: all, teams, mine_unassigned, mine or participant. The team module answers from the user’s roles and per-user override.

  • string $scope Scope.
  • int $user_id User.

Fired in: src/Modules/Conversations/ConversationScope.php

cliedesk_conversation_screen (filter)

Screen a new inbound conversation before it is created. Return null to let it in unchanged, or {action, reason, detail, set} where action is quarantine, drop (refuse it), group (add the message to conversation into) or sort (set only: queueId, teamId, priority, productId, tagIds, fields).

Fired in: src/Modules/Conversations/Conversations.php

cliedesk_conversation_sorted (action)

Arrival rules sorted a new conversation: modules apply what they own (tags, fields).

  • Actor $actor Actor.

Fired in: src/Modules/Conversations/Conversations.php

cliedesk_conversation_type_changed (action)

The type of a conversation changed (checklists attach, SLA re-evaluates).

  • Actor $actor Actor.

Fired in: src/Modules/Conversations/Types.php

cliedesk_conversation_type_created (action)

A conversation type (request form) was added.

  • int $id Type.
  • string $name Name.

Fired in: src/Modules/Conversations/Types.php

cliedesk_csat_attribution (filter)

Who a survey answer counts for: {primary, users, ai}.

  • int $episode Episode.

Fired in: src/Modules/Csat/Surveys.php

cliedesk_csat_exclude (filter)

Whether an eligible episode is excluded from CSAT (tags, segments, brands, contacts…).

  • string|null $reason Reason, or null to keep it.
  • int $episode Episode.

Fired in: src/Modules/Csat/Surveys.php

cliedesk_csat_for_conversation (filter)

CSAT for this conversation from its channel (channel matrix): true, false, or null for the product’s setting.

  • bool|null $on On.
  • int $conversation Conversation.

Fired in: src/Modules/Csat/Surveys.php

cliedesk_csp_sources (filter)

Extra CSP sources per directive (connect-src, img-src, frame-src, script-src, form-action, media-src).

Fired in: src/App/Shell.php

cliedesk_customer_alias (filter)

A customer-facing name and picture for a person in a product’s conversations (Pro: per brand).

  • array|null $alias Name and avatar (picture URL), null for the person’s own alias.
  • int $user User.
  • int|null $product Product of the conversation.

Fired in: src/Modules/Conversations/Assistant.php

cliedesk_customer_notice (filter)

Deliver a customer notice on the contact’s preferred channel (browser push in Free, WhatsApp or SMS with Pro). Return true when delivered; email is the fallback.

  • bool $sent Delivered already.
  • string $text Notice.

Fired in: src/Modules/Email/StatusNotices.php

cliedesk_customer_sessions_ended (action)

All widget and portal sessions of a customer were ended, e.g. so an add-on can end its own.

  • int $contact Contact.

Fired in: src/Modules/Widget/CustomerSessions.php

cliedesk_customer_timeline_types (filter)

Event namespaces shown in the customer timeline.

  • string[] $namespaces Namespaces (a type matches “ns” exactly or starts with “ns.”).

Fired in: src/Modules/Crm/CustomerEvents.php

cliedesk_dash_request (action)

Fires for each /desk page request of a signed-in user with access (auth.dash_login).

  • int $user_id User.

Fired in: src/App/AppRouter.php

cliedesk_deactivate (action)

Fires on deactivation before rewrite rules are flushed.

Fired in: src/Core/Installer.php

cliedesk_default_post_send (filter)

The workspace’s default choice of the send button when no team sets one.

  • string $default send | resolve | wait | snooze.

Fired in: src/Modules/Composer/Drafts.php

cliedesk_dns_lookup (filter)

Answer a DNS lookup instead of dns_get_record() (tests; hosts with their own resolver).

  • string[]|null|false $records False to do the real lookup.
  • string $name Name.
  • string $type TXT | MX.

Fired in: src/Modules/Email/Deliverability.php

cliedesk_duplicate_candidates (filter)

More duplicate candidates for a contact (Woo order email, Pro AI fuzzy matching).

  • array $row Contact row.

Fired in: src/Modules/Contacts/Duplicates.php

cliedesk_email_before_send (filter)

The email as it leaves, after the suppression check (not in redirect mode). Pro adds the hidden archive copy. Changes are not stored with the row.

  • OutboundMessage $message Message.

Fired in: src/Modules/Email/Outbox.php

cliedesk_email_from_email (filter)

The sender address of the test email: the sender address in the email settings, like replies.

  • string $email Email.

Fired in: src/Modules/Email/EmailActions.php

cliedesk_email_settled (action)

An outbox row was sent, failed, held or cancelled.

Fired in: src/Modules/Email/Outbox.php

cliedesk_email_template (filter)

A customer email wrapped in its brand layout: change the HTML or the text part.

  • int|null $brand Brand.

Fired in: src/Modules/Email/EmailLayouts.php

cliedesk_enrich_conversation (action)

Enrich a conversation before any rule runs: Pro writes AI triage values here.

  • int $conversation Conversation.
  • string $text Text read.
  • bool $created New conversation.

Fired in: src/Modules/Fields/Enrichment.php

cliedesk_entity_record (filter)

Link an entity value to its record: return the value to store instead (e.g. a record reference {source, id} for a record field), or null to store the text.

  • mixed $record Null.
  • string $entity Entity key.
  • string $value Value found.
  • int $conversation Conversation.

Fired in: src/Modules/Fields/Entities.php

cliedesk_event_{type} (action)

After an event is committed, one action per event type: dots and other signs become underscores (cliedesk_event_conversation_status_changed).

  • int $id Event id.
  • array<string, mixed> $row Event row.

Fired in: src/Infrastructure/EventRecorder.php

cliedesk_event_recorded (action)

Fires after an event is committed (webhooks, notifications, Pro listeners).

  • int $id Event id.
  • string $type Event type.

Fired in: src/Infrastructure/EventRecorder.php

cliedesk_event_written (action)

An event was written, inside the change’s transaction (automation outbox). Listeners do DB work only.

  • int $id Event id.
  • string $type Event type.

Fired in: src/Infrastructure/EventRecorder.php

cliedesk_field_mode (filter)

What a person may do with a field (Pro: hidden or read-only per role or team). Never called for system and rule actors, people who manage settings, or fields Free already hides from the person; an unknown answer counts as edit.

  • string $mode edit | readonly | hidden.
  • Actor $actor Actor.

Fired in: src/Modules/Fields/FieldAccess.php

cliedesk_field_option_tags (action)

Option tags to add and remove on an entity.

  • EntityType $scope Entity type.
  • int $entity Entity id.
  • int[] $add Tag ids to add.
  • int[] $remove Tag ids to remove.
  • int|null $user Who changed the field.

Fired in: src/Modules/Fields/Fields.php

cliedesk_field_references (filter)

References to a field (rules, views, forms, macros).

  • int $id Field id.

Fired in: src/Modules/Fields/Fields.php

cliedesk_field_settings_schema (filter)

Extra field settings an extension stores in settings (Pro: access, hidden and read-only per role or team): name => JSON schema. Free’s own settings cannot be replaced. Added before the fields module registers its Actions.

Fired in: src/Modules/Fields/FieldActions.php

cliedesk_field_values_changed (action)

Field values changed (inside the caller’s change). The computed priority follows urgency and sentiment.

  • EntityType $scope Scope.
  • int $entity_id Entity.
  • int $source Source.

Fired in: src/Modules/Fields/Fields.php

cliedesk_fields_changed (action)

Field definitions changed (record sources built from them refresh).

Fired in: src/Modules/Fields/Fields.php

cliedesk_file_can_download (filter)

Whether a signed-in user may download a private file (attachments add conversation access checks).

  • bool $allowed Allowed.
  • int $user User.

Fired in: src/Infrastructure/Files/FileLinks.php

cliedesk_file_contents (filter)

The bytes of a stored file whose local copy is gone (kept by another storage). Null when unknown.

  • string|null $contents Bytes.

Fired in: src/Infrastructure/Files/PrivateFiles.php

cliedesk_file_deleted (action)

A file was deleted (its local copy removed and its row marked deleted). Other storage removes its copy.

Fired in: src/Infrastructure/Files/PrivateFiles.php

cliedesk_file_quarantined (action)

A file was quarantined.

  • int $id Attachment.
  • string $signature Malware name.

Fired in: src/Modules/Conversations/MessageFiles.php

cliedesk_file_stored (action)

A file’s bytes were written to the private directory (a new file, or a file rewritten in place such as a redacted text file). Other storage may copy it.

Fired in: src/Infrastructure/Files/PrivateFiles.php

cliedesk_file_stream (filter)

Serve a file from other storage after the signature and access checks: return true once the answer (the file, a redirect to a short-lived link or an error) was sent. False lets Cliedesk stream its local copy.

  • bool $handled Whether the answer was sent.
  • string|null $path Local path.

Fired in: src/Infrastructure/Files/FileLinks.php

cliedesk_focus_next (filter)

The conversation number an agent in focus mode opens next, or null (Pro: Get next).

  • int|null $number Conversation number.
  • \Cliedesk\Actions\Actor $actor Agent.

Fired in: src/Modules/Inbox/InboxModule.php

cliedesk_freemail_domains (filter)

Free-mail domains that never map to an organization.

  • string[] $domains Domains.

Fired in: src/Modules/Contacts/Organizations.php

cliedesk_help_category_ids (filter)

Categories this page may show (Pro: a product’s help center), null for all.

  • int[]|null $ids Category ids.

Fired in: src/Modules/Knowledge/HelpCenter.php

cliedesk_help_center_open (filter)

Whether the current visitor may use the help center. Free: always; Cliedesk Pro answers it for a private help center (signed-in visitors, some roles or a shared password).

  • bool $open Open.

Fired in: src/Modules/Knowledge/HelpCenter.php

cliedesk_help_center_public (filter)

Whether the help center is open to everyone, guests and search engines included. Free: always; false makes every help-center page noindex and leaves it out of the sitemap (Cliedesk Pro).

  • bool $public Public.

Fired in: src/Modules/Knowledge/HelpCenter.php

cliedesk_help_page_product (filter)

The product of the help-center page or article being shown (Pro), null for none.

  • int|null $product Product.

Fired in: src/Modules/Knowledge/Authoring.php

cliedesk_help_product_categories (filter)

Help-center categories a product’s search covers (Pro); null for every category.

  • int[]|null $categories Category ids.
  • int $product Product.

Fired in: src/Modules/Knowledge/KnowledgeModule.php

cliedesk_help_search_action (filter)

Where the help-center search goes (Pro: a product’s help center searches itself).

  • string $url Help-center home.

Fired in: src/Modules/Knowledge/HelpCenter.php

cliedesk_help_suggestions (filter)

Article suggestions for what a customer types, best first: articles of matching URL rules, then keyword matches. Not called when the text has a suppress word. A filter may rank them again, add others or return none (to suppress); only published articles the visitor may read are kept, at most 3. Each item keeps the extra keys the filter adds; Free sets its title and address.

  • array[] $items Suggestions (id, title, url).
  • string $text The typed text.
  • string $page The page address.
  • int[] $rules Article ids of the URL rules that match the page.

Fired in: src/Modules/Knowledge/KnowledgeModule.php

cliedesk_help_template_markup (filter)

Block markup of a help-center template (Site Editor changes to block templates still win).

  • string $markup Block markup.
  • string $kind home | category | article.

Fired in: src/Modules/Knowledge/HelpCenter.php

cliedesk_identity_added (action)

An identity was added to a contact (organization domain mapping).

  • int $contact_id Contact.
  • IdentityType $type Type.
  • string $norm Normalised value.

Fired in: src/Modules/Contacts/Contacts.php

cliedesk_inbox_items (filter)

List items of the inbox and search results (Pro: the SLA state and next due time for the badge). Items and conversation rows have the same keys.

Fired in: src/Modules/Inbox/Inbox.php

cliedesk_inbox_sorts (filter)

More list sorts: key => [direction ASC|DESC, columns of conversations ending with id, read from a lane index]. Built-in keys cannot be replaced. Added before the inbox module registers (its Actions list the sorts).

Fired in: src/Modules/Inbox/Keyset.php

cliedesk_is_uploaded_file (filter)

Accept a file path as an upload (tests only).

  • bool $is Whether it is an upload.
  • string $tmp Path.

Fired in: src/Modules/Requests/RequestApi.php

cliedesk_kb_seo_plugin_active (filter)

Whether an SEO plugin outputs help-center meta (Cliedesk then outputs none).

  • bool $active Detected.

Fired in: src/Modules/Knowledge/Seo.php

cliedesk_knowledge_search_results (filter)

Results of a help article search, best first: the public help search (surface help) and the agents’ knowledge.search Action (surface agent). A filter may rank them again or add hits of the same shape; it must keep to what the searcher may read (the levels in the context).

  • array[] $found Hits (id, source, ref, title, url, excerpt, visibility, …).
  • string $query The search words.
  • array $context surface (help or agent), audience (customer or agent), levels (visibility levels the searcher may read), product (id or null), lang, limit, actor (agent surface only).

Fired in: src/Modules/Knowledge/HelpCenter.php, src/Modules/Knowledge/KnowledgeModule.php

cliedesk_knowledge_search_sources (filter)

Index sources a keyword search covers (WooCommerce adds product).

  • string $audience agent (knowledge panel) or customer (help search).

Fired in: src/Modules/Knowledge/KnowledgeModule.php

cliedesk_language_coverage (filter)

Content missing a language, per surface (help center articles, email templates, widget texts …).

  • string $code Language code.

Fired in: src/Modules/Workspace/Languages.php

cliedesk_lockdown_changed (action)

Lockdown changed: pause or resume webhooks, Public API writes, AI autonomy and the widget.

  • bool $on On.

Fired in: src/Modules/Security/Lockdown.php

cliedesk_login_protection (filter)

Whether a plugin limits failed logins and enforces password strength.

  • bool $found Found.

Fired in: src/Modules/Security/Score.php

cliedesk_login_protection_classes (filter)

Class names of login-protection plugins to look for.

  • string[] $classes Class names.

Fired in: src/Modules/Security/Score.php

cliedesk_macro_step (filter)

The Action of an extension’s macro step type (see cliedesk_macro_step_types): [action name, input] or null.

  • int $conversation Conversation.
  • Actor $actor Agent.

Fired in: src/Modules/Macros/Runner.php

cliedesk_macro_step_types (filter)

Extra macro step types (lower snake case), e.g. Pro’s “Send a CSAT survey”.

  • string[] $types Types.

Fired in: src/Modules/Conversations/ConversationActions.php

cliedesk_malware_scan (filter)

Scan with another engine: return {status, signature} to skip ClamAV, or null.

  • string $content Bytes.

Fired in: src/Infrastructure/Files/MalwareScanner.php

Marketing consent known to other plugins (read-only in the helpdesk).

  • string $email Primary email.

Fired in: src/Modules/Crm/Preferences.php

cliedesk_mentioned (action)

People were mentioned in a note (each once per message). The notification centre delivers it.

  • int[] $users Recipients.
  • Actor $actor Author.

Fired in: src/Modules/Composer/Mentions.php

cliedesk_message_added (action)

A message was written (inside the transaction). The composer turns @mentions into participants.

  • Actor $actor Author.

Fired in: src/Modules/Conversations/Conversations.php

cliedesk_message_adding (action)

A message is about to be written (inside the transaction). Throw an ActionError to refuse it (blocked links).

  • Actor $actor Actor.

Fired in: src/Modules/Conversations/Conversations.php

cliedesk_message_file_content (filter)

The content of a message attachment just before it is stored privately: Cliedesk redacts personal data in text files (txt, csv, log, …) by the “redact” PII rules. Return the bytes to store.

  • string $content Bytes.
  • string $name File name.
  • string $mime Sniffed MIME type.

Fired in: src/Modules/Conversations/MessageFiles.php

cliedesk_message_files (action)

Files uploaded for this message (MessageFiles binds them; an unknown id rolls the message back).

  • int $message Message id.
  • int[] $ids Attachment ids.

Fired in: src/Modules/Conversations/ConversationActions.php

cliedesk_message_items (filter)

API messages of a page (message files add their attachments).

Fired in: src/Modules/Conversations/Conversations.php

cliedesk_message_queued (action)

A reply left the undo window or its schedule and is queued for delivery (the outbound transport, picks it up).

Fired in: src/Modules/Conversations/Conversations.php

cliedesk_message_store (filter)

A message’s body and meta just before they are stored: Cliedesk redacts card numbers and other PII here, Cliedesk adds the spam score of customer messages. Return the same keys.

Fired in: src/Modules/Conversations/Conversations.php

cliedesk_message_withdrawn (action)

A held reply was taken back; the composer puts its text back into the author’s draft.

  • string $reason Reason.

Fired in: src/Modules/Conversations/Conversations.php

cliedesk_modules_registered (action)

Fires after all modules are registered.

  • string[] $active Ids of active modules.

Fired in: src/Core/ModuleRegistry.php

cliedesk_my_status (filter)

My status for the header menu (Pro: the custom statuses I may pick, Away reasons, idle minutes, channels).

  • int $user User.

Fired in: src/Modules/Team/StatusActions.php

cliedesk_note_body (filter)

The text of a stored note as people read it (the reverse of cliedesk_note_store).

  • string $body Stored text.

Fired in: src/Modules/Contacts/Notes.php

cliedesk_note_store (filter)

The text of a note as it is stored (for example encrypted and bound to the note). cliedesk_note_body turns it back on read.

  • string $body Clean text.
  • int $note Note id.

Fired in: src/Modules/Contacts/Notes.php

cliedesk_notice_promotional (filter)

Whether a transactional notice’s text is promotional; promotional notices are rejected.

  • bool $hit Built-in verdict.
  • string $text Subject and text.

Fired in: src/Modules/Commerce/Woo/OrderNotices.php

cliedesk_notices_showing (filter)

The service notices showing now on a surface (NTC): rows from the Notices module, plus any a plugin adds.

  • string $surface widget, portal or app.
  • int|null $product Product, or null for all.

Fired in: src/Modules/Portal/PortalApi.php, src/Modules/Widget/WidgetApi.php

cliedesk_notification_content (filter)

The content of a notification before it is stored and emailed. Return an empty array to send nothing.

  • string $kind Kind.
  • int $user Recipient.

Fired in: src/Modules/Notifications/Notifications.php

cliedesk_notification_created (action)

An in-app notification was stored (Web Push to the person’s devices).

  • int $id Notification.
  • int $user User.
  • string $kind Kind.

Fired in: src/Modules/Notifications/Notifications.php

cliedesk_notification_email_reply (filter)

The reply address and hint of a notification email (Pro: the agent answers the email and the answer goes to the conversation). Free: none, the agent answers in Cliedesk.

  • \WP_User $person Recipient.

Fired in: src/Modules/Notifications/Notifications.php

cliedesk_notify (action)

Notify a user (delivers in-app, push and email notifications).

  • int $user User.
  • string $type Notification type.

Fired in: src/Modules/Conversations/Conversations.php, src/Modules/Conversations/ParticipantActions.php, src/Modules/Crm/CrmModule.php, src/Modules/Crm/OwnerAlerts.php, src/Modules/Fields/RiskSignals.php, src/Modules/Knowledge/Editorial.php

cliedesk_order_help_topics (filter)

Topics customers pick when they ask for help with an order.

Fired in: src/Modules/Commerce/Woo/PortalOrders.php

cliedesk_order_issue_scenarios (filter)

Issue scenarios customers can report on an order in the portal.

Fired in: src/Modules/Commerce/Woo/PortalOrders.php

cliedesk_order_tracking (filter)

The tracking of an order for tokens and notices: number, url (http/https) and eta (text). Tracking plugins answer here.

  • \WC_Order $order Order.

Fired in: src/Modules/Commerce/Woo/OrderTokens.php

cliedesk_org_health (filter)

Organization page figures; the CSAT module fills csat (0–100) and commerce fills revenue ({total, currency, orders}).

  • int $org Organization.
  • Actor $actor Viewer.

Fired in: src/Modules/Crm/OrgHealth.php

cliedesk_organization_list_where (filter)

More conditions on the organization list (alias o), e.g. Cliedesk hides organizations of a deactivated B2B plugin.

  • string[] $where SQL conditions.

Fired in: src/Modules/Contacts/Organizations.php

cliedesk_organization_saved (action)

An organization was created or changed (committed).

  • int $id Organization.

Fired in: src/Modules/Contacts/Organizations.php

cliedesk_organization_sources (filter)

Organization sources: key => {label, active, companies}. companies returns a list of {id, name, users (WordPress user ids)}.

Fired in: src/Modules/Contacts/OrgSources.php

cliedesk_page_viewed (action)

A known customer viewed a page (owner alerts for watched pages).

  • int $contact Contact.
  • string $url Page address.

Fired in: src/Modules/Widget/Visitors.php

cliedesk_panel_adaptive (filter)

Whether an adaptive mode (Pro) picks and expands cards by itself.

  • bool $adaptive Adaptive.

Fired in: src/Modules/Inbox/ContextRules.php

cliedesk_pii_redact (filter)

Text about to be stored that may hold personal data: Cliedesk applies the “redact” PII rules (card numbers keep their last 4 digits). Here: a new conversation’s subject.

  • string $text Text.
  • string $where What it is: subject, field, email_subject.

Fired in: src/Modules/Conversations/Conversations.php, src/Modules/Requests/Intake.php

cliedesk_policy_can (filter)

Narrow a capability decision. May only return false for an allowed decision; a true return for a denied decision is ignored.

  • bool $allowed Decision.
  • Actor $actor Actor.
  • string $capability Capability.

Fired in: src/Actions/Policy.php

cliedesk_policy_flushed (action)

Roles, teams or grants changed: per-request caches built from them must be rebuilt.

Fired in: src/Actions/Policy.php

cliedesk_poll_after (filter)

Seconds the client should wait before the next poll.

  • int $seconds Seconds.

Fired in: src/Rest/RestServer.php

cliedesk_portal_config (filter)

The portal page’s script configuration (WooCommerce adds the order hub as orders).

  • string $product Product slug the portal is limited to (‘’ = all).

Fired in: src/Modules/Portal/PortalModule.php

cliedesk_priority_inputs (filter)

More priority inputs: customer value, order risk, Pro’s SLA proximity … as [points, reason].

  • int $conversation Conversation.

Fired in: src/Modules/Fields/PriorityScore.php

cliedesk_pro_state (filter)

Pro reports its state here (installed, active, compatible, licensed, status, …). Frozen contract.

Fired in: src/Extension/ProState.php

cliedesk_processing_records (filter)

Rows of the record of processing (modules and Pro add their data).

Fired in: src/Modules/Security/Compliance.php

cliedesk_product_brand (filter)

The brand a product uses (Pro): the default brand unless an extension knows better.

  • int|null $id Default brand id.
  • int|null $brand_id The product’s brand_id column (set by Pro).

Fired in: src/Modules/Workspace/Brands.php

cliedesk_product_created (action)

A product was created (Pro: “copy settings from” another product).

  • int $id Product.

Fired in: src/Modules/Workspace/Actions/ProductCreate.php

cliedesk_product_detail (filter)

The full form of a product (Pro adds its per-product setups: brand overrides, help scope, schedule).

Fired in: src/Modules/Workspace/Products.php

cliedesk_product_input (filter)

Columns, settings and field errors from the input keys an extension added (Pro’s per-product setups).

  • array $parsed So far: columns, settings and errors (field => message).
  • array $input Validated input.

Fired in: src/Modules/Workspace/ProductFields.php

cliedesk_product_merge_tables (filter)

Add tables with a product_id that must follow a product merge (e.g. Pro access records). Each entry: short table name => [‘pk’ => columns, ‘unique’ => other columns of a unique key with product_id].

Fired in: src/Modules/Workspace/ProductMerge.php

cliedesk_product_properties (filter)

Product input properties (Pro: brand, identity overrides, help scope, schedule, copy settings). Read while the product Actions register, so an extension adds it before Free’s modules register.

  • string $mode create | update.

Fired in: src/Modules/Workspace/ProductFields.php

cliedesk_protected_attribute_blocked (action)

An unsigned attempt to change a protected attribute was ignored.

  • string $key Field key.
  • EntityType $scope Scope.
  • int $entity_id Entity.

Fired in: src/Modules/Fields/Fields.php

cliedesk_push_hide_content (filter)

Whether a push notification hides the message text (the person’s own choice by default).

  • bool $hide Hide.
  • int $user User.

Fired in: src/Modules/Notifications/Push.php

cliedesk_queue_concurrency (filter)

Concurrency per queue (Cliedesk-enforced, shared by Free and Pro jobs).

  • int $cap Slots.
  • string $queue Queue.

Fired in: src/Infrastructure/Jobs/Jobs.php

cliedesk_queue_orders (filter)

Queue orders: order => list sort (a key of Keyset::sorts()); the first one is the default. Added before the inbox module registers (the queue Actions list them).

Fired in: src/Modules/Inbox/Queues.php

cliedesk_reassign_open_conversations (filter)

Move a leaving agent’s open conversations (the conversations module does it).

  • int $moved Moved so far.
  • int $user Leaving agent.
  • Actor $a Who deactivates.

Fired in: src/Modules/Team/PeopleActions.php

cliedesk_reconcile (action)

Fires every 5 minutes in the reconciler (modules recover expired leases here).

Fired in: src/Infrastructure/Jobs/CoreJobs.php

cliedesk_record_exists (filter)

Whether a record of a record source exists (record sources answer).

  • bool $exists Exists.
  • string $source Source key, e.g. woo_order.
  • int $id Record id.

Fired in: src/Modules/Fields/Fields.php

cliedesk_record_linked (action)

A record was linked: timelines, automations and the AI context can react.

  • string $entity Entity key.
  • int $id Entity id.
  • string $source Source key.
  • string $record Record id.
  • Actor $actor Actor.

Fired in: src/Modules/Commerce/Woo/OrderNotices.php, src/Modules/Crm/RecordLinks.php

cliedesk_record_unlinked (action)

A record (order, licence…) was unlinked from a contact, organization or conversation.

  • string $entity contact, organization or conversation.
  • int $entity_id Entity id.
  • string $source Record source key.
  • string $record_id Record id.
  • Actor $actor Actor.

Fired in: src/Modules/Crm/RecordLinks.php

cliedesk_register_capabilities (filter)

Register capabilities (Pro registers its AI group, “Answer approvals” and “Preview permissions” here). Each entry: capability => {area, label, description, protected}. Existing entries cannot be replaced.

Fired in: src/Modules/Team/Capabilities.php

cliedesk_register_cli (action)

Register more wp cliedesk commands (modules, Pro).

Fired in: src/Cli/Commands.php

cliedesk_register_core_services (action)

Fires after the core services are registered (Free internals; not part of the extension API).

  • Container $c Container.

Fired in: src/Core/Plugin.php

cliedesk_register_email_providers (action)

Register more email providers (Pro, third parties).

  • EmailProviderRegistry $registry Registry.

Fired in: src/Modules/Email/EmailModule.php

cliedesk_register_health_checks (action)

Register more Setup Health checks.

  • Health $health Health registry.

Fired in: src/Core/Plugin.php

cliedesk_register_modules (action)

Register modules (extension API, frozen across majors). Pro boots its modules here.

  • ModuleRegistry $registry Module registry.

Fired in: src/Core/Plugin.php

cliedesk_register_record_sources (action)

Register record sources here with cliedesk_register_record_source().

Fired in: src/Modules/Crm/CrmModule.php

cliedesk_register_routes (action)

Register more internal routes through the RouteRegistry (never register_rest_route directly).

  • RouteRegistry $routes Registry.

Fired in: src/Rest/RestServer.php

Related articles of an article, best first: manual picks, then the same categories, then shared keywords. A filter may rank them again or add others; only published articles the visitor may read are kept (never the article itself), at most the limit.

  • int[] $ids Article ids.
  • int $post The article.
  • int $limit Most shown.

Fired in: src/Modules/Knowledge/Discovery.php

cliedesk_reopen_same_episode (filter)

Whether a reopen continues the current episode instead of starting a new one.

  • bool $same Continue the current episode (default false: a new episode).
  • Actor $actor Who reopens it.
  • string $reason manual, customer_reply, first_reply, snooze_end or reminder.

Fired in: src/Modules/Conversations/Conversations.php

cliedesk_reply_channels (filter)

The channels a reply to this conversation can use (Pro messaging channels add theirs) and the ones whose messaging window has closed (e.g. WhatsApp after 24 hours: only an approved template may go out there).

Fired in: src/Modules/Conversations/ConversationActions.php

cliedesk_reply_email_body (filter)

Body of a reply email before the layout (a portal link; secure-link mode sends only the link). Return history => false to leave out the quoted history and files => false to send no files.

Fired in: src/Modules/Email/ReplyMailer.php

cliedesk_reply_email_parts (filter)

How a reply (or, with a null message, a notice) email goes out: sender address, sending connection (null: the product’s or workspace default), copies, the reply-above line and a hint under notices. Pro answers it while a mailbox receives the customers’ answers.

Fired in: src/Modules/Email/ReplyMailer.php

cliedesk_reply_message (filter)

An agent’s reply or note before it is saved and sent.

  • Actor $a Actor.

Fired in: src/Modules/Conversations/ConversationActions.php

cliedesk_reply_promise (filter)

The reply promise of an open conversation (Pro: the due time of its running reply clock).

  • int $conversation Conversation id.

Fired in: src/Modules/Sla/Promise.php

cliedesk_reply_promise_estimate (filter)

The reply promise for a new conversation of a product (Pro: from the catch-all SLA policy).

  • int $product Product id.

Fired in: src/Modules/Sla/Promise.php

cliedesk_reply_requires_review (filter)

Whether the actor must save the reply as a draft for review instead of sending it (team draft mode).

  • bool $blocked Blocked.
  • Actor $actor Actor.

Fired in: src/Modules/Conversations/ConversationActions.php

cliedesk_report_breakdown (filter)

The rows of a split (Pro: the period before and the change, a topic’s group, values corrected by people).

  • string $by Dimension.
  • Actor $a Actor.

Fired in: src/Modules/Reports/Reports.php

cliedesk_report_dimension (filter)

How to split by a dimension Free does not know (Pro: agent, team, queue, tags, fields). Return null or {join: SQL JOIN on the conversations c (‘’ for none), key: SQL group key, replies (optional): the key replies count for, labels (optional): fn( array $keys ): array<string, string>}. May throw an ActionError (400).

  • string $by Dimension.

Fired in: src/Modules/Reports/Reports.php

cliedesk_report_dimensions (filter)

More splits, key => label (Pro: agent, team, queue, tag, message_tag, field:topic …). A key starting with field: also allows every other field:<key>. Each needs an answer of cliedesk_report_dimension.

Fired in: src/Modules/Reports/Reports.php

cliedesk_report_filters (filter)

More report input every report Action takes (Pro: compare, the period before). Read while the report Actions are built.

Fired in: src/Modules/Reports/ReportsModule.php

cliedesk_report_overview (filter)

The overview of a period (Pro: the period before and the targets).

  • Actor $a Actor.

Fired in: src/Modules/Reports/Reports.php

cliedesk_request_created (action)

A request was created from the form (WooCommerce links the order the customer picked, when it is theirs).

  • \WP_REST_Request $request The form request.
  • int $contact Requester contact.

Fired in: src/Modules/Requests/RequestApi.php

cliedesk_request_submitting (action)

A request is about to be created (the portal refuses guests unless anyone may send requests). Throw an ActionError to refuse it.

  • string $source Where the form is (portal, widget, page).

Fired in: src/Modules/Requests/RequestApi.php

cliedesk_reroute (action)

The chat continues by email; routing runs again with the email queue rules.

  • int $id Conversation.
  • string $reason chat_unanswered or chat_ended.

Fired in: src/Modules/Conversations/Conversations.php, src/Modules/Widget/ChatHandover.php

cliedesk_resolve_blockers (filter)

Reasons a conversation cannot be resolved (required fields, blocking checklists). The same check runs for agents, rules, the AI agent and the API, so every actor gets the same error.

Fired in: src/Modules/Conversations/Conversations.php, src/Modules/Conversations/TypeActions.php

cliedesk_rest_gate (filter)

Access gate for internal requests after authentication (security §4.4: lockdown, session limits, 2FA, new-location check). Return an ActionError to refuse the request.

  • ActionError|null $gate Null to continue.
  • int $user_id User.
  • \WP_REST_Request $request Request.

Fired in: src/Rest/RestServer.php

cliedesk_rich_choice (action)

A customer chose an option of a rich message.

  • string $label Option.
  • int $message Customer message.
  • int $conversation Conversation.

Fired in: src/Modules/Conversations/RichMessages.php

cliedesk_rich_order_card (filter)

An order card of a rich message: fill title, text (status, total, date) and url for an order of the conversation’s customer, or return null to leave the card out (unknown order or another customer’s).

  • int $order Order id.

Fired in: src/Modules/Conversations/RichMessages.php

cliedesk_role_defaults (filter)

Extra default capabilities of the default roles (e.g. Pro’s “Answer approvals” for Supervisors and Collaborators): role key => capabilities. Only unprotected catalogue capabilities are kept.

Fired in: src/Modules/Team/Roles.php

cliedesk_role_reset (action)

A default role was reset to its defaults (Pro resets the role’s conversation scope).

  • string $key Role key.

Fired in: src/Modules/Team/Actions/RoleReset.php

cliedesk_role_view (filter)

A role as the API shows it (Pro: its conversation scope, and whether it can be edited or deleted).

Fired in: src/Modules/Team/Services.php

cliedesk_routing_excluded (filter)

Agents who may not get this conversation (Pro: agents who do not take its channel).

  • int[] $excluded Users.

Fired in: src/Modules/Inbox/Router.php

cliedesk_routing_handover (filter)

Whether a module hands the chosen agent the conversation another way (Pro: a chat offer the agent accepts). Return true when handled; routing then assigns nothing.

  • bool $handled Handled.
  • int $agent Chosen agent.

Fired in: src/Modules/Inbox/Router.php

cliedesk_routing_held (filter)

Whether routing leaves this unassigned conversation alone for now (Pro: a chat offer is waiting for an answer).

  • bool $held Held.

Fired in: src/Modules/Inbox/Router.php

cliedesk_routing_pick (filter)

An agent chosen before round robin (Pro: the customer’s last agent), or null.

Fired in: src/Modules/Inbox/Router.php

cliedesk_routing_queue (filter)

The queue of a conversation that is routed (new, or routed again), before an agent is picked. Pro: queue entry rules move the conversation and explain it. Return the (moved) conversation row.

Fired in: src/Modules/Inbox/Router.php

cliedesk_rule_warnings (filter)

Warnings for a rule: [{kind, message, ruleIds}]. Pro adds loops, flip-flops and conditions that never match.

  • int $id Rule id (0 for a new one).
  • string $name Rule name.

Fired in: src/Modules/Automation/RuleChecks.php

cliedesk_safe_mode_park (filter)

Whether an outbound job waits while staging safe mode is on. Email returns false when a test address is set: the email goes there instead.

  • bool $park Park the job.
  • string $hook Job hook.

Fired in: src/Infrastructure/Jobs/Jobs.php

cliedesk_saved_reply_files (filter)

Files of the applied saved replies (copied onto the message when it is written).

  • int[] $ids Saved replies.

Fired in: src/Modules/Macros/MacroActions.php

cliedesk_saved_reply_references (filter)

References to a saved reply that must be confirmed before it is deleted.

  • int $id Saved reply.

Fired in: src/Modules/Macros/SavedReplies.php

cliedesk_saved_reply_token (filter)

Value of a plugin token (null when unknown or empty).

  • string|null $value Value.
  • string $name Token name.
  • Actor $actor Agent.

Fired in: src/Modules/Macros/Renderer.php

cliedesk_saved_reply_tokens (filter)

Tokens plugins add to the saved reply autocomplete (e.g. order.number).

  • string[] $tokens Token names without braces.

Fired in: src/Modules/Macros/Renderer.php

cliedesk_schedule_changed (action)

A schedule’s hours or holidays changed.

  • int $schedule Schedule id.

Fired in: src/Modules/Sla/Holidays.php, src/Modules/Sla/Schedules.php

cliedesk_schedule_for_conversation (filter)

The schedule a conversation follows instead of the default one (Pro: the one set on the conversation, its queue’s, team’s, channel’s, else its product’s). Return a schedules row or null.

Fired in: src/Modules/Sla/Schedules.php

cliedesk_schedules_changed (action)

Business hours, holidays or closures changed (SLA timers are recomputed).

Fired in: src/Modules/Sla/Closure.php

cliedesk_secret_usage (filter)

Where a stored credential is used, e.g. an add-on’s connection. Text only; never the value.

  • list<string> $uses Uses.
  • string $name Credential name.

Fired in: src/Modules/Security/Credentials.php

cliedesk_segment_entered (action)

A contact entered a segment.

  • int $contact Contact.
  • int $segment Segment.

Fired in: src/Modules/Crm/Segments.php

cliedesk_segment_left (action)

A contact left a segment.

  • int $contact Contact.
  • int $segment Segment.

Fired in: src/Modules/Crm/Segments.php

cliedesk_setting_{…} (filter)

Filter a setting’s effective value. The result is validated against the setting schema.

  • mixed $value Effective value.
  • int|null $product_id Product.
  • int|null $brand_id Brand.

Fired in: src/Core/Settings/Settings.php

cliedesk_setting_layers (filter)

Layers a setting can be set on: workspace always; brand and product when an extension supports them.

  • string[] $layers Declared layers.
  • string $id Setting id module.key.

Fired in: src/Core/Settings/Settings.php

cliedesk_settings_saved (action)

Fires after module settings are saved.

  • string $module Module.

Fired in: src/Core/Settings/Settings.php

cliedesk_setup_checklist (filter)

The setup checklist on the admin home: [key, label, done, path] per step (Pro: connect a support mailbox instead of the test email).

Fired in: src/Modules/Core/AdminHome.php

cliedesk_shipment_adapters (filter)

Shipment-tracking adapters: add one for another tracking plugin. Each implements Cliedesk\Modules\Commerce\Woo\Tracking\TrackingAdapter and reads only data stored on the order.

Fired in: src/Modules/Commerce/Woo/Tracking/Shipments.php

cliedesk_shortcut_defaults (filter)

The team’s default keyboard shortcut map; each person’s own remapping goes on top.

  • int $user User.

Fired in: src/Modules/Team/Prefs.php

cliedesk_site_product (filter)

Product of a site or embedding origin (Pro).

  • int|null $product Product id, null for the first product.
  • string $host Host or URL.

Fired in: src/Modules/Workspace/Products.php

cliedesk_spam_feedback (action)

Spam feedback for the spam filter (Pro learns from corrections).

  • bool $spam True for “Spam”, false for “Not spam”.
  • Actor $actor Who decided.

Fired in: src/Modules/Conversations/Conversations.php

cliedesk_spam_score (filter)

A message’s spam score. Pro’s classifier and add-ons may change it.

Fired in: src/Modules/Security/SpamScore.php

cliedesk_ssrf_allow (filter)

Narrow the SSRF guard: return false to block a validated target. Cannot allow a blocked target.

  • bool $allow Whether the request may proceed.
  • string $host Host.
  • array $ips Resolved addresses.

Fired in: src/Infrastructure/Http/UrlGuard.php

cliedesk_status_input (filter)

The status change to make (Pro: a custom status sets its base status, key and end time; Away may need a reason). Throw an ActionError to refuse.

  • int $user User.

Fired in: src/Modules/Team/StatusActions.php

cliedesk_status_properties (filter)

Input of status.set (Pro: a custom status and channel groups). Added before the team module registers.

Fired in: src/Modules/Team/StatusActions.php

cliedesk_strict_mode_switches (filter)

Extra strict-mode switches (Pro: AI masking, compliant AI providers only, read-access log, field encryption).

  • bool $active Whether strict mode is on.

Fired in: src/Modules/Security/StrictMode.php

cliedesk_subprocessors (filter)

Services this site sends support data to (each enabled integration, email or AI provider adds itself).

Fired in: src/Modules/Security/Compliance.php

cliedesk_sudo_active (filter)

Whether recent authentication is satisfied (SSO plugins can confirm their own re-login).

  • bool $active Active.
  • int $user User.

Fired in: src/Modules/Security/Sessions.php

cliedesk_survey_response (action)

A survey response was recorded or changed.

  • bool $changed The customer changed an earlier answer.

Fired in: src/Modules/Csat/Surveys.php

cliedesk_survey_texts (filter)

The question, scale and reasons a survey response shows (Cliedesk Pro: “How was this reply?” for a reply rating, the question in the conversation’s language).

Fired in: src/Modules/Csat/CsatApi.php

cliedesk_system_emails (filter)

System emails listed in Settings > Email > System emails (Pro adds the acknowledgement of incoming email). Read when the email Actions are built.

Fired in: src/Modules/Email/SystemEmails.php

cliedesk_system_views (filter)

System views, in sidebar order (Pro: At risk and Breached after Needs reply, which then sorts by the next SLA breach): key => [title, conditions, sort]. Keys are [a-z_]; Free’s views cannot be removed.

Fired in: src/Modules/Inbox/Views.php

cliedesk_tag_references (filter)

References to a tag held by other modules (rules, macros, views), shown before a delete.

  • int $tag Tag id.

Fired in: src/Modules/Conversations/Tags.php

cliedesk_tags_merged (action)

Tags were merged: modules re-point their own references (rules, macros, views) from the sources to the target.

  • int[] $sources Source tag ids.
  • int $target Target tag id.
  • int $merge Merge id.

Fired in: src/Modules/Conversations/Tags.php

cliedesk_tags_unmerged (action)

A tag merge was undone: modules point their references back to the sources.

  • int[] $sources Source tag ids.
  • int $target Target tag id.
  • int $merge Merge id.

Fired in: src/Modules/Conversations/Tags.php

cliedesk_timeline_items (filter)

Timeline items for a viewer (e.g. Cliedesk hides ratings from agents).

  • Actor $a Viewer.

Fired in: src/Modules/Conversations/ConversationActions.php

cliedesk_today_groups (filter)

More groups of a person’s day (Pro: SLA deadlines due today, approvals waiting for them): key => {count, items} (items: id, number, subject, dueAt, lastAt). An item without a conversation number may carry an app path to open instead. Label each group with cliedesk_today_labels.

  • int $user User.

Fired in: src/Modules/Notifications/Today.php

cliedesk_today_labels (filter)

Labels of the groups, in display order (Pro adds its groups here).

Fired in: src/Modules/Notifications/Today.php

cliedesk_topic_preset (filter)

The topic preset a new install starts with.

  • string $preset woocommerce, vendor, membership or services.

Fired in: src/Modules/Fields/TopicPresets.php

cliedesk_track_event (action)

Record a customer event for a contact id, WordPress user or email address.

  • int|\WP_User|string $who Contact id, user or email.
  • string $type Event type, e.g. order.paid.

Fired in: src/Modules/Commerce/Woo/OrderCustomerEvents.php

cliedesk_trigger_errors (filter)

Field errors for the options of a trigger that a module or Pro adds (path => message, e.g. definition.trigger.options.duration).

Fired in: src/Modules/Automation/TriggerOptions.php

cliedesk_trigger_matches (filter)

Whether an event matches the options of a trigger that a module or Pro adds.

  • bool $matches Matches (default true).
  • string $name Trigger.

Fired in: src/Modules/Automation/TriggerOptions.php

cliedesk_trigger_options (filter)

Normalized options of a trigger that a module or Pro adds (none by default).

  • string $event Trigger.

Fired in: src/Modules/Automation/TriggerOptions.php

cliedesk_usage_report (filter)

The health and usage numbers (Settings → Health → Usage). Pro adds its incoming mailboxes.

Fired in: src/Core/Health/Usage.php

cliedesk_user_has_2fa (filter)

Whether the user has 2FA configured (null = unknown).

  • bool|null $has Answer so far.
  • int $user User.

Fired in: src/Modules/Security/TwoFactor.php

cliedesk_user_two_factor (filter)

Whether the user has two-factor authentication on (answered by the 2FA feature); null = unknown.

  • bool|null $on On.
  • int $user User.

Fired in: src/Modules/Team/Agents.php

cliedesk_view_as_target (filter)

The person a “View as” token previews for this signed-in actor, or null when it is not valid.

  • int|null $target Target user.
  • string $token Token from the X-Cliedesk-View-As header.
  • Actor $actor Signed-in actor.

Fired in: src/Rest/RestServer.php

cliedesk_view_condition (filter)

Compile a view condition no core leaf handles (e.g. segment from the CRM module). Return an SQL fragment over conversations c, built only from escaped values, or null for unknown conditions.

  • string|null $sql SQL fragment.
  • Actor $actor Viewer.

Fired in: src/Modules/Inbox/ViewCompiler.php

cliedesk_view_vocabulary (filter)

The view vocabulary (conditions, columns, sorts); modules add theirs (e.g. CRM: contact, organization, segment, record; Pro: SLA state and next SLA due, the SLA column).

  • Actor $actor Person.

Fired in: src/Modules/Inbox/ViewVocabulary.php

cliedesk_web_page_html (filter)

The HTML of a web page read as knowledge, before its main text is taken. A filter may return the page as a browser builds it (for pages whose text is built by JavaScript); an empty result keeps the page as sent.

  • string $html The page as the server sent it.
  • string $url Its address.

Fired in: src/Modules/Knowledge/WebSources.php

cliedesk_widget_checkout_step (filter)

The WooCommerce checkout step of this page.

  • string $step checkout, thank_you or empty.

Fired in: src/Modules/Widget/WidgetModule.php

cliedesk_widget_config (filter)

The widget configuration sent to the visitor’s browser. Never add secrets: it is public.

  • int $product Product id.
  • string $locale Locale.

Fired in: src/Modules/Widget/WidgetModule.php

cliedesk_widget_identity (filter)

Proof of the signed-in user for the widget session (empty for guests).

  • string $identity Proof.
  • int $product Product.

Fired in: src/Modules/Widget/WidgetModule.php

cliedesk_widget_messages (filter)

The answer of a widget poll (the visitor’s own conversation): messages after the widget’s last id and the conversation’s live state. A filter may add keys the widget reads, such as freeText true when the widget hides its text field for a button question (asks) and free text is allowed again; Free sends none. Keep it free when asks is false: every open chat polls every few seconds. The items, the open state and the email flag stay Free’s.

  • int $conversation Conversation id.
  • int|null $product Product of the conversation.
  • bool $asks The widget hides its text field for a button question.

Fired in: src/Modules/Widget/WidgetApi.php

cliedesk_widget_run_workflow (filter)

Cliedesk.runWorkflow( id ) from the widget: return true when a workflow started (Pro’s widget script trigger; nobody answers in Free).

  • bool|null $started Started (null: nobody handled it).
  • int $workflow Workflow id.
  • int $conversation The visitor’s open conversation.

Fired in: src/Modules/Widget/WidgetApi.php

cliedesk_workflow_delete (filter)

Keep a rule instead of deleting it for good (Pro moves it to the trash). Return true when handled.

  • bool $handled Handled.

Fired in: src/Modules/Automation/Workflows.php

cliedesk_workflow_step_types (filter)

Step types besides “action” (wait, branch, AI, approval …) that a module registers; Free has none.

  • string[] $types Step types.

Fired in: src/Modules/Automation/WorkflowActions.php