Skip to main content
Altcraft Docs LogoAltcraft Docs Logo
User guide iconUser guide
Developer guide iconDeveloper guide
Admin guide iconAdmin guide
English
  • Русский
  • English
Login
    Getting StartedAdministrator documentationFunctional characteristics
      Technology descriptionarrow
    • Architecture OverviewComponent Description
        Deployment schemesarrow
      • Basic schemeFail-safe schemeTypical Placement in Infrastructure
    System requirements
      Admin Panelarrow
      • Account areaarrow
        • Accountsarrow
        • Account UsersAccount Virtual SendersAccount Database Indexes
        TariffsExternal data configurationLDAPTasksSchedule JobsGlobal Stop ListsWebversion Store Policies
        Settingsarrow
      • Databases
          Accessarrow
        • AdminsAPI tokens
        Notifiers
          MTAarrow
        • Default rulesRetry rulesLock rulesBounce patternsStrategiesKeysISPsPools
      Nodes
        Sendersarrow
      • EmailSMSEvent generatorIntegration with Altcraft Cloud SMTPIntegration with Sendsay
        Reportsarrow
      • Audit JournalData Usage
        Toolsarrow
      • ARF decoderURL decoderSMID decoderLicense
      Platform installationarrow
    • Automatic installationManual installationRunning the platform in a Docker container
      Platform configurationarrow
    • Configuration fileDomain settingsLDAP access configurationSending Email via SMTP relayPixel and push domain configurationCluster and Replication SetupSystem notifications configurationProcesses UNIX sockets configurationHTTPS ConfigurationMigrating from MongoDB Community Edition to Percona Server for MongoDBAdding sender IP addressesDeduplication request settingsPostgreSQL database for Market dataProxy server settingsKeycloak Integration with AltcraftGetting HTTP service statusesConfiguring MongoDB log rotation
        Configuration of system constants and directoriesarrow
      • Filtering bot actionsDirectory of gender markers
      Custom Channelsarrow
    • Creating a Channel
        Pipelinesarrow
      • MessageScheduleListenerModerateStop
          Pipesarrow
        • HTTP RequestPackUnpackEventerSchedulerSelectorSQLStore SetStore GetLogResultError
      External Objects (Entities)Templating LanguageSending FilesPresets (Field Sets)DebuggingTechnical Limitations
      Platform maintenancearrow
    • Personnel requirementsPlatform maintenance processesPlatform updatingBackup and recoveryTransferring the platform to a new serverCreating, deleting, and populating tables for statistics in ClickHouseUsing the aktool utilityUsers and directories engaged by the platformPlatform service monitoringProcess and mailing monitoring via Prometheus
      Extraarrow
    • System page customizationSend Message IDClickHouse History Migration GuideInstructions for migrating history to ClickHouseUtility for importing push subscriptions to Firebase projectUtility for importing push subscriptions to Firebase projectENS: настройка интеграции
    Processing HTTP/HTTPS traffic
      Administrator APIarrow
      • Accounts admin apiarrow
        • Restricted accessarrow
        • Account Activation and DeactivationAccount Freeze and Unfreeze
        Get accounts listAdd a new accountDelete the account
        Account usersarrow
      • Update an Existing AccountAdd a new userDelete a userGet a list of usersSending a Welcome Email
        Nodesarrow
      • Synchronize node MTA configurationGet nodes listGet node MTA statusActivate node MTADeactivate node MTA
        Senders admin apiarrow
      • Create or update AKMTA senderGet AKMTA sender informationAssign account to senderGet senders listDelete senderRestore sender
          Sender queuearrow
        • Get sender queue informationHold sender queueRelease sender queueClear sender queue
        Virtual sendersarrow
      • Get virtual senders listGet virtual sender informationCreate virtual senderUpdate virtual senderClone virtual senderDelete virtual sender
    Documentation Archive
  • Custom Channels
  • Presets (Field Sets)

Presets (Field Sets)

Preset is a set of fields corresponding to a specific message type in a custom channel. Presets allow a single channel to support multiple content types: text message, photo, video, document, etc. The user in the platform interface selects one preset and sees only the fields of that preset.

Presets are configured by the administrator on the Object Fields tab — Template subsection when setting up a channel.

Why presets are needed​

Without presets, all Template fields are displayed simultaneously, which is inconvenient if the channel supports different content types. For example, a Telegram channel can send text messages, photos, and videos — but each type requires different fields:

  • Text: "Message text" field
  • Photo: "Image" field + "Caption" field
  • Video: "Video file" field + "Description" field

With presets, the user selects a content type and sees only the relevant fields.

Creating a preset​

In the Template subsection on the Object Fields tab, the Presets block is available. To create a preset, click the Add button.

A modal window will open with the following fields:

FieldDescription
ShortnameUnique identifier for reference in the pipeline (e.g., text, photo, video). Must contain only letters a-z, digits 0-9, and underscores. Cannot be changed after creation
TitlePreset name displayed in the platform interface (e.g., "Text message")
IconPreset icon displayed on the card in the platform interface
DescriptionPreset description displayed below the icon

After creation, presets are displayed as cards. The order is determined by position — rearrange presets using drag-and-drop.

Each preset has management buttons:

ActionDescription
EditEdit the preset name, icon, and description. Shortname cannot be changed
Purge presetClear bindings — all fields are unbound from this preset
DeleteDelete the preset. Template fields are not deleted

Binding fields to a preset​

After creating a preset, you need to bind Template fields to it. Binding is done when editing each field: open the field via the Edit button and in the Presets dropdown, select one or more presets.

A field can be bound to multiple presets simultaneously.

caution

Fields not bound to any preset will not be displayed in the user interface when a preset is selected. If a field should be available, make sure to bind it to a preset.

Presets in the platform interface​

When creating a template, the user sees preset cards with icons and descriptions. Selecting a preset determines which fields are available for filling.

slide-0
slide-1

Template Preview​

You can configure how the data that the user uploads to the template is displayed using Template Preview fields. Here you set up the template preview that the user sees when filling in the fields.

For example, if you use a preset with image upload, you can configure the preview as follows:

slide-0
slide-1

In the preview template, Template fields are accessed via {ccfield.<shortname>}. For example, {ccfield.text} will substitute the value from the field with shortname text.

Accessing preset in the pipeline​

Template field data is available in the pipeline via the templating language with the syntax:

$template.<field_shortname>

Where <field_shortname> is the field's shortname (e.g., message, image, caption).

The currently selected preset is available via the system field:

$template._presets_ids

This is an array of preset shortnames (e.g., ["text"] or ["photo"]).

caution

In the pipeline, only fields corresponding to the selected preset are available. If the user selected the photo preset, fields bound only to the text preset will be empty. Use $template._presets_ids to determine the current preset and implement conditional logic.

Example: Telegram channel​

Consider a Telegram channel with three presets: text, photo, video.

Presets​

NameShortnameIconDescription
Text messagetext💬Simple text message
Photophoto🖼️Message with an image
Videovideo🎬Message with a video file

Template Fields​

TitleShortnameTypePreset binding
Message textmessagetexttext
Imageimageimage_uploadphoto
Photo captioncaptionstringphoto
Video filefilefilevideo
Video descriptiondescriptionstringvideo
Webhook URLwebhookstringtext, photo, video

Message Pipeline​

Depending on the selected preset, the Pack pipe forms different JSON:

{
"id": 1,
"type": "pack",
"params": {
"type": "JSON",
"template": {
"preset": "$template._presets_ids",
"chat_id": "$subscription.chat_id",
"text": "$template.message",
"photo": "$template.image",
"photo_caption": "$template.caption",
"video": "$template.file",
"video_description": "$template.description",
"webhook": "$template.webhook"
}
},
"outs": {
"success": 2,
"error": 99
}
}

The external service (Telegram bot) determines which API method to call based on the preset field: sendMessage for text, sendPhoto for photo, sendVideo for video. Fields not related to the selected preset will be empty.

Last updated on Jul 21, 2026
Previous
Sending Files
Next
Debugging
  • Why presets are needed
  • Creating a preset
  • Binding fields to a preset
  • Presets in the platform interface
    • Template Preview
  • Accessing preset in the pipeline
  • Example: Telegram channel
    • Presets
    • Template Fields
    • Message Pipeline
© 2015 - 2026 Altcraft, LLC. All rights reserved.