Developer Guide
Actions

Direktt Resources
Get Support
Direktt Actions let you instruct the Direktt mobile app to perform specific operations when a user taps a button in an interactive message, or when a QR code is scanned.
You will most often use Direktt Actions to:
Opens a URL when the user taps the button or scans the QR.
Required
Triggers a callback to your WordPress instance via the Direktt plugin. Use it for any custom logic (check-in, coupon redemption, loyalty updates, etc.).
Required
Opens a chat with a specific user (used in admin flows and admin-only buttons).
Required
Opens a user’s Direktt profile (admin-only context).
Required
retVars are custom variables bundled with the action. They are sent back to your WordPress instance as:
Example: Link Action with
Example: API Action with
The Special
There is a built‑in / “hidden” Built‑in Taxonomy Management via
Certain What Happens When an
When a user triggers an
- Open a link in the app or browser.
- Call back into your WordPress instance to run custom logic.
- Open a chat with a user (admin only).
- Open a user profile (admin only).
- How Direktt Actions are structured.
- The supported action types and their parameters.
- How
retVarswork (including automatic taxonomy updates). - How to handle
apiactions in your WordPress plugin.
How Direktt Actions Work (Conceptual Overview)
A Direktt Action is a small JSON object that tells the app what to do next. It is usually embedded in:- An action QR code (e.g. “scan this to check in”).
- A button inside a rich (interactive) Direktt message.
- An admin scans a user’s Membership ID in the Direktt app.
- The QR code contains a profile action with the user’s subscriptionId.
- The Direktt app opens that user’s profile screen.
- The admin can then:
- Invalidate a ticket.
- Assign/remove user categories/tags.
- Update loyalty fields (via your custom extensions).
- Issue rewards, etc.
{
"type": "profile",
"params": {
"subscriptionId": "XXXXXXXXXXXX"
},
"retVars": {}
}
Action JSON Structure
All Direktt Actions share the same basic JSON structure:{
"type": "<String>",
"params": { /* Object */ },
"retVars": { /* Object */ }
}
typeThe type of action (what the app should do).paramsType-specific parameters for this action.retVarsCustom key–value data that will be sent back to your WordPress instance when the action is executed.- For
linkactions: sent as query parameters. - For
apiactions: sent in the payload to your WordPress handler.
- For
Supported Action Types
Direktt currently supports the following action types:"link"– Open a URL (in-app WebView or device browser)."api"– Call your WordPress instance for custom server-side handling."chat"– Open a chat (admin only)."profile"– Open a user profile (admin only).
link Action
Opens a URL when the user taps the button or scans the QR.
Required params:
url(string) – The full URL to open.target(string) – Where to open the link:"app"– Inside the Direktt app (WebView)."browser"– In the device’s default browser.
{
"type": "link",
"params": {
"url": "https://hexxu.dev",
"target": "app"
},
"retVars": {}
}
api Action
Triggers a callback to your WordPress instance via the Direktt plugin. Use it for any custom logic (check-in, coupon redemption, loyalty updates, etc.).
Required params:
actionType(string) – A key that identifies which WordPress hook should handle this action.successMessage(string, optional) – A short message shown to the user in the app after success.
{
"type": "api",
"params": {
"actionType": "apply_ticket",
"successMessage": "Your application has been recorded"
},
"retVars": {}
}
In this example, the WordPress plugin will fire:
do_action( 'direktt/action/apply_ticket', $params );
So your code should hook into direktt/action/apply_ticket.
chat Action
Opens a chat with a specific user (used in admin flows and admin-only buttons).
Required params:
subscriptionId(string) – Direktt subscription ID of the user whose chat should be opened.
{
"type": "chat",
"params": {
"subscriptionId": "XXXXXXXXXXXX"
},
"retVars": {}
}
profile Action
Opens a user’s Direktt profile (admin-only context).
Required params:
subscriptionId(string) – Direktt subscription ID of the user whose profile should be opened.
{
"type": "profile",
"params": {
"subscriptionId": "XXXXXXXXXXXX"
},
"retVars": {}
}
Using Actions for Event Check‑in (Example)
A common use case is event check‑in via QR code:- User arrives at event and scans a QR code using Direktt mobile app.
- The app sends an
apiaction back to your WordPress site. - Your code:
- Marks the user as checked in.
- Optionally assigns a user category/tag (e.g.
registered). - Optionally sends a confirmation message.
api Check-in Action
{
"type": "api",
"params": {
"actionType": "entry_checkin"
},
"retVars": {}
}
Adding Context with retVars
To link the check-in to a specific event (for example, a WordPress post ID), you can pass custom data via retVars:
{
"type": "api",
"params": {
"actionType": "entry_checkin"
},
"retVars": {
"eventId": "12345"
}
}
On the WordPress side, your handler will receive:
{
"eventId": "12345"
}
(Along with other internal fields like subscriptionId, see below.)
retVars for Custom Data (Link & API)
retVars are custom variables bundled with the action. They are sent back to your WordPress instance as:
- Extra query parameters (for
linkactions). - Extra payload properties (for
apiactions).
- Pass event IDs, campaign codes, or any other context.
- Trigger different logic per button or per QR code.
- Avoid encoding logic into the URL itself.
Example: Link Action with retVars
{
"action": {
"type": "link",
"params": {
"url": "https://example.com/sample-page/?sampleVar=1",
"target": "app"
},
"retVars": {
"eventId": "XXXXXXX"
}
}
}
Resulting URL in the app:
https://example.com/sample-page/?sampleVar=1&eventId=XXXXXXX
Keep in mind that the retVars values have to be strings, so if you want to pass a JSON object, you need to stringify / wp_json_encode it
Example: API Action with retVars
{
"action": {
"type": "api",
"params": {
"actionType": "entry_checkin"
},
"retVars": {
"eventId": "XXXXXXX"
}
}
}
On the WordPress side, the $params passed to your action hook will include:
array(
'eventId' => 'XXXXXXX',
// ... plus other fields added by the plugin
)
The Special messageId retVar
There is a built‑in / “hidden” retVar automatically added to every link and api action that originates from an interactive message button:
messageId– The ID of the message that triggered this action.
messageId to update the original message after the action is processed, for example to:
- Mark it as “used”.
- Change its text to “Ticket validated”.
- Disable buttons.
Direktt_Message::update_message() method:
Direktt_Message::update_message( $subscription_uid, $message_uid, $content );
$subscription_uid– User’s subscription ID.$message_uid– The message ID (messageId retVar).$content– New content for the message (message object / content parts).
Built‑in Taxonomy Management via retVars
Certain retVars keys are reserved and understood by the Direktt WordPress plugin. They enable you to assign or remove user taxonomies automatically after a link or api action – without writing any custom taxonomy code.
Supported keys:
addDirekttUserCategoryremoveDirekttUserCategoryaddDirekttUserTagremoveDirekttUserTag
- Term slugs (strings), or
- Term IDs (ints)
- Fetches the calling user (
$direktt_user). - Adds or removes the given terms on that Direktt user.
Example: Auto‑assign “registered” Category on Check‑in
{
"action": {
"type": "api",
"params": {
"actionType": "entry_checkin"
},
"retVars": {
"eventId": "XXXXXXX",
"addDirekttUserCategory": "["registered"]",
"removeDirekttUserTag": "[3]"
}
}
}
When this action is executed:
- Your
entry_checkinhandler runs. - The plugin automatically adds the registered category to the current Direktt user (no extra code needed).
- Any other
retVars(eventId, etc.) are passed to your handler.
What Happens When an api Action Is Triggered
When a user triggers an api action (via button tap or QR scan), the flow is:
- The Direktt app sends the action (with
paramsandretVars) to the Direktt server. - Direktt forwards this to your connected WordPress instance using the plugin’s API endpoint.
- The Direktt plugin:
- Authenticates the request and sets
$direktt_user. - Merges:
params,retVars,- and internal values like
subscriptionIdandmessageId(if present), into one$paramsarray. - Fires a WordPress action hook:
do_action( 'direktt/action/' . $actionType, $params );
- Authenticates the request and sets
- Your custom handler runs and can:
- Inspect
$direktt_user. - Use
$params(eventId,messageId, etc.). - Send messages, update meta, run business logic, etc.
- Inspect
- If
successMessagewas provided inparams, that text is displayed back to the user in the app.
Handling Custom API Actions in WordPress
To handle your custom api actions, register a hook that matches the actionType defined in your action. For example, for:{
"type": "api",
"params": {
"actionType": "entry_checkin"
},
"retVars": {
"eventId": "XXXXXXX"
}
}
Your WordPress code:
add_action( 'direktt/action/entry_checkin', 'on_entry_checkin' );
function on_entry_checkin( $params ) {
// $params includes:
// - Any retVars (e.g. 'eventId')
// - messageId (if triggered from interactive message), etc.
// Example: just notify the channel admin with the received params.
$message_to_admin = array(
'type' => 'text',
'content' => 'API call received. Params are: ' . wp_json_encode( $params ),
);
Direktt_Message::send_message_to_admin( $message_to_admin );
// Optionally:
// - Use $params['eventId'] to look up event data.
// - Use $params['messageId'] with Direktt_Message::update_message().
}
If you also include taxonomy retVars like addDirekttUserCategory, the plugin will automatically update the user’s categories/tags after your handler runs.
Summary
- Direktt Actions are small JSON objects that tell the app what to do:
link,api,chat, orprofile.
paramsdefine the action behavior,retVarscarry extra context back to WordPress.messageIdis automatically sent for interactive-message actions, allowing you to update the original message.- Special
retVars(addDirekttUserCategory,addDirekttUserTag, etc.) let you manage user taxonomies without writing taxonomy code. - For
apiactions, the Direktt plugin triggersdirektt/action/<actionType>with a$paramsarray. You hook into it and implement your business logic.


