Skip to content

Automation Configuration Guide ​

A comprehensive guide to configuring content and account automation in Repliz.

Overview ​

Repliz Automation allows you to automatically interact with your audience across social media platforms. Automation rules are powered by a flexible config JSON object divided into modular automation actions:

  • Delete: Automatically remove unwanted or spam comments.
  • Reply: Automatically reply to comments with text, keyword rules, or AI.
  • Like: Automatically like incoming comments.
  • Message: Automatically send a Direct Message (DM) to commenters.
  • Story: Automatically respond to story mentions and interactions.
  • Chat: Automatically respond to incoming chat conversations at the account level.

YouTube

YouTube doesn't notify apps about new comments, so Repliz checks each channel for new top-level comments every 1 to 2 minutes when it has automation. YouTube automations run after that check, not instantly, and replies inside a comment thread aren't processed.

Platform Support Matrix ​

Automation ModuleFacebookInstagramThreadsTikTokLinkedInYouTubeScope
Delete✅✅✅✅✅✅Content & Account
Reply✅✅✅✅✅✅Content & Account
Like✅❌❌✅✅❌Content & Account
Message✅✅❌❌❌❌Content & Account
Story❌✅❌❌❌❌Content & Account
Chat✅✅❌✅❌❌Account Only
  • Shopee and X (Twitter) accounts don't support automation.
  • LinkedIn personal accounts (urn:li:person:...) support content automation only.
  • When a content has its own automation, Repliz uses only that one for the content and ignores the account automation. The two are never merged.
  • Automation runs on new comments and messages only, and ignores those sent by the account itself.
  • On Instagram, comments on a Live get reply and message only when their isIncludeLiveComment is true. See Instagram Live comments.

Keyword matching rules ​

These rules apply to every keyword field (delete.keywords, keyword.values, condition.keywords, exception.keywords):

  • Matching is case-insensitive.
  • With isExactMatch: false, a keyword matches when the text contains it. With isExactMatch: true, the whole text must equal the keyword.
  • delete.keywords has no exact-match option and always matches when the text contains the keyword.

Instagram Live comments ​

Comments made on an Instagram Live come in while the Live is on air. The account automation (PUT /public/account/{accountId}/automation), or a template applied to it, handles them, because a Live has no post to set a content automation on in advance.

FieldDefaultEffect
reply.isIncludeLiveCommentfalseAlso reply to Live comments. The reply shows up among the Live's comments.
message.isIncludeLiveCommentfalseAlso DM Live commenters. Instagram only accepts the DM while the Live is on air.
  • Leaving the field out is the same as false, so Live comments get no reply and no DM until you turn it on.
  • delete handles Live comments the same way as other comments.
  • Keep delay short on message, because a DM that is due after the Live ends is rejected.
  • The image in reply.image isn't sent on Instagram, Live or not.

1. Delete Module ​

The delete object controls automatic deletion of comments. It supports two modes: Keyword matching and AI sentiment/intent detection.

Supported Platforms: Facebook Instagram Threads TikTok LinkedIn YouTube

Schema ​

FieldTypeRequiredDescription
isActivebooleanYesToggles the delete automation module.
typestringYesModeration strategy: keyword or ai.
keywordsstring[]YesComments containing any of these words are deleted (used when type: "keyword").
promptstringYesInstructions for AI to evaluate comments (used when type: "ai").

On Threads, TikTok, and YouTube, other people's comments are hidden instead of deleted, because those platforms don't allow apps to delete them. On YouTube, the comment is rejected with the moderation status rejected.

Examples ​

json
{
  "delete": {
    "isActive": true,
    "type": "keyword",
    "keywords": ["spam", "scam", "promo", "crypto", "casino"],
    "prompt": ""
  }
}
json
{
  "delete": {
    "isActive": true,
    "type": "ai",
    "keywords": [],
    "prompt": "You are a content moderator. Automatically delete comments containing hate speech, offensive language, or unverified promotional links."
  }
}

2. Reply Module ​

The reply object configures automated public comment replies. Replies can be static text, keyword-based, or AI-generated.

Supported Platforms: Facebook Instagram Threads TikTok LinkedIn YouTube

Schema ​

FieldTypeRequiredDescription
isActivebooleanYesToggles public comment reply automation.
typestringYesReply mode: text, keyword, or ai.
textstringYesStatic reply message (when type: "text").
imageobjectNoImage sent along with every reply (see image Object).
promptstringYesAI instructions for generating responses (when type: "ai").
isIncludeContentContextbooleanYesInclude post caption/context in AI prompt for relevant answers.
isIncludeLiveCommentbooleanNoAlso reply to comments on an Instagram Live (see Instagram Live comments).
keywordobjectYesKeyword mapping rules (when type: "keyword").
exceptionobjectYesException rules to exclude specific keywords from replying.
conditionobjectYesFilters determining when reply should trigger.
delayobjectYesArtificial delay before replying to appear natural.

Sub-Objects ​

keyword Object ​

  • isExactMatch: Strict keyword match if true, partial match if false.
  • values: Array of { keyword: string, text: string } pairs. The first pair whose keyword matches is used. A pair with an empty keyword is the default reply, used when no other pair matches. Without a default pair, comments that match nothing get no reply.

exception Object ​

  • isActive: Toggles exception rules.
  • isExactMatch: Strict keyword match if true, partial match if false.
  • keywords: Array of keywords that prevent automated replies when detected in comments.
  • Checked before condition. Only the reply module has exception.

condition Object ​

  • isActive: Toggles trigger conditions.
  • isExactMatch: Keyword matching precision.
  • keywords: Trigger keywords that must be present in the comment.
  • Ignored when type is keyword, because the keyword pairs already decide when to reply.

delay Object ​

  • isActive: Toggles delay.
  • value: Delay in seconds (e.g. 10). The dashboard offers 10 to 60.
  • type: Use "second". The value is always treated as seconds.

image Object ​

An optional image posted together with the reply text. It works with every reply type (text, keyword, and ai), and with keyword, the same image goes with every keyword's reply. Leave it out, or set it to null, to reply with text only.

  • url: Public URL of the image file. The platform downloads the image from it, so host it somewhere public, like Repliz Storage.
  • mimetype: MIME type of the image, like image/jpeg or image/png.
  • thumbnail (optional): Smaller preview shown in Repliz.

Sent on Facebook Threads TikTok LinkedIn. On Instagram and YouTube, the image is ignored and only the text is sent. TikTok takes JPG, PNG, or WebP up to 5 MB, from 360×360 up to 1080×1920 (portrait) or 1920×1080 (landscape) pixels.

json
{
  "reply": {
    "isActive": true,
    "type": "text",
    "text": "Thank you for commenting, {name}! 🙏",
    "image": {
      "url": "https://storage.repliz.com/automations/repliz-thank-you.png",
      "thumbnail": "https://storage.repliz.com/automations/repliz-thank-you.png",
      "mimetype": "image/png"
    }
  }
}

The example shows only the fields that matter here, the other reply fields are still required.

Examples ​

json
{
  "reply": {
    "isActive": true,
    "type": "text",
    "text": "Thank you for commenting! We appreciate your feedback. 🙏",
    "prompt": "",
    "isIncludeContentContext": false,
    "keyword": {
      "isExactMatch": false,
      "values": []
    },
    "exception": {
      "isActive": false,
      "isExactMatch": false,
      "keywords": []
    },
    "condition": {
      "isActive": false,
      "isExactMatch": false,
      "keywords": []
    },
    "delay": {
      "isActive": false,
      "value": 10,
      "type": "second"
    }
  }
}
json
{
  "reply": {
    "isActive": true,
    "type": "keyword",
    "text": "",
    "prompt": "",
    "isIncludeContentContext": false,
    "keyword": {
      "isExactMatch": false,
      "values": [
        {
          "keyword": "price",
          "text": "Our pricing starts at $10/month! Check out our website for full details."
        },
        {
          "keyword": "location",
          "text": "We are located at Central Street No. 45, Jakarta."
        }
      ]
    },
    "exception": {
      "isActive": false,
      "isExactMatch": false,
      "keywords": []
    },
    "condition": {
      "isActive": false,
      "isExactMatch": false,
      "keywords": []
    },
    "delay": {
      "isActive": false,
      "value": 10,
      "type": "second"
    }
  }
}
json
{
  "reply": {
    "isActive": true,
    "type": "ai",
    "text": "",
    "prompt": "You are a customer service assistant. Answer user questions politely based on our product guide.",
    "isIncludeContentContext": true,
    "keyword": {
      "isExactMatch": false,
      "values": []
    },
    "exception": {
      "isActive": false,
      "isExactMatch": false,
      "keywords": []
    },
    "condition": {
      "isActive": false,
      "isExactMatch": false,
      "keywords": []
    },
    "delay": {
      "isActive": true,
      "value": 5,
      "type": "second"
    }
  }
}

3. Like Module ​

The like object automatically likes incoming comments to increase user engagement.

Supported Platforms: Facebook TikTok LinkedIn

Schema ​

FieldTypeRequiredDescription
isActivebooleanYesToggles auto-liking of comments.
json
{
  "like": {
    "isActive": true
  }
}

4. Message (DM) Module ​

The message object sends a private Direct Message (DM) to users who comment on your post. This is ideal for sending lead magnets, purchase links, or private discount codes.

Supported Platforms: Facebook Instagram

Schema ​

FieldTypeRequiredDescription
isActivebooleanYesToggles private DM automation.
typestringYesMessage mode: ai, text, opening, or keyword.
textstringYesStatic message text.
promptstringYesAI instructions for generating messages.
isIncludeLiveCommentbooleanNoAlso DM commenters on an Instagram Live (see Instagram Live comments).
openingobjectYesRich opening message with postback, additional, or web URL buttons.
keywordobjectYesKeyword mapping rules (same as Reply keyword). Each keyword can also answer with buttons, see Keyword with Buttons.
conditionobjectYesTrigger conditions (same as Reply condition).
delayobjectYesDelay settings (same as Reply delay).

Opening Flow ​

With type: "opening", Repliz sends a message with a button first and sends your links only after the person taps it. Meta lets a business send one message to a commenter until that person replies, and a button tap counts as a reply.

ObjectDashboard nameContainsSent when
opening.postbackFirst Messagetext, optional image, one buttonRight after the comment, if isActive is true
opening.additionalAdditional Messagetext, optional image, one buttonThe person taps the First Message button
opening.webUrlFollow-up Messagetext, optional image, up to 3 buttons, or a carousel of cardsThe person taps the last button before it
  • If postback.isActive is false, the flow starts with additional. If both are inactive, webUrl is sent right away.
  • additional.isPreventBeforeFollow (Instagram only): the person must follow the account before they get webUrl. Until then, tapping the button sends additional again.
  • text in every message, and the title and subtitle of carousel cards, support {name} and {Hi|Hello} spintax.

Button Structure ​

  • type: "postback" for the postback and additional buttons, "web_url" for the webUrl buttons.
  • title: Button label text (e.g. "Click Me").
  • payload: Set by Repliz when the automation is saved. Any value you send is replaced.
  • url: Destination URL, used by web_url buttons.

webUrl.type picks what the Follow-up Message looks like:

  • "button" (default, also used when type is left out): text, optional image, and up to 3 buttons.
  • "element": a carousel of 1 to 10 cards from webUrl.elements, which people swipe sideways. text, image, and buttons aren't sent, but text and buttons must still be present ("" and [] are fine).
FieldTypeRequiredDescription
titlestringYesCard title. Repliz cuts it to 80 characters.
subtitlestringNoText under the title. Repliz cuts it to 80 characters.
imagestringNoCard image URL. Images fit best at a 1.91:1 ratio.
urlstringNoURL opened when the card itself is tapped.
buttonsarrayYesUp to 3 link buttons, each { "type": "web_url", "title", "url" }. Can be empty.

Card buttons only open links, so type is always "web_url". The first card's title is what Repliz records as the reply text in reports.

json
{
  "webUrl": {
    "type": "element",
    "text": "",
    "image": "",
    "buttons": [],
    "elements": [
      {
        "title": "Hi {name}, meet Repliz Premium",
        "subtitle": "Every feature, for professionals",
        "image": "https://storage.repliz.com/automations/sample.png",
        "url": "https://repliz.com/pricing",
        "buttons": [
          {
            "type": "web_url",
            "title": "See pricing",
            "url": "https://repliz.com/pricing"
          }
        ]
      },
      {
        "title": "Repliz Gold",
        "subtitle": "Full API access for agencies and teams",
        "image": "https://storage.repliz.com/automations/sample.png",
        "url": "https://repliz.com/pricing",
        "buttons": []
      }
    ]
  }
}

Keyword with Buttons ​

With type: "keyword", each item in keyword.values can answer with its own Opening flow instead of a text. A comment with "promo" can get one set of buttons and a comment with "price" another, each with its own First Message, Additional Message, isPreventBeforeFollow, and Follow-up Message.

FieldTypeRequiredDescription
keywordstringYesTrigger keyword. Leave it empty for the default reply, used when no other keyword matches.
typestringNotext (default) answers with text. opening answers with opening.
textstringWhen type is textReply text. Supports {name} and spintax.
openingobjectWhen type is openingSame structure as the opening object: postback, additional, and webUrl, including the carousel.
idstringNoSet by Repliz when a value with type: "opening" is saved.
  • Repliz sets the payload of every button in a keyword's opening from its id when the automation is saved. Send id back unchanged when you update the automation, so the buttons in DMs already sent keep working. A missing id, one that isn't a UUID, or one used twice in the same list is replaced with a new one, and the buttons sent before it stop responding.
  • opening on a value with type: "text" is dropped when the automation is saved.
  • Works in message and story, and in chat on Facebook and Instagram. Other platforms skip values with type: "opening".
  • isPreventBeforeFollow only applies on Instagram. On Facebook, tapping the Additional Message button always sends the Follow-up Message.
json
{
  "keyword": {
    "isExactMatch": false,
    "values": [
      {
        "keyword": "price",
        "type": "text",
        "text": "Hi {name}, it starts at $9 per month."
      },
      {
        "id": "0b6f7c1e-4f0a-4c2b-9d3e-8a1f2b3c4d5e",
        "keyword": "promo",
        "type": "opening",
        "text": "",
        "opening": {
          "postback": {
            "isActive": true,
            "text": "Hi {name}! Tap below to get the promo 👇",
            "image": "",
            "button": { "type": "postback", "title": "Send me the promo" }
          },
          "additional": {
            "isActive": true,
            "isPreventBeforeFollow": true,
            "text": "Follow us first, then tap again 🙏",
            "image": "",
            "button": { "type": "postback", "title": "I've followed" }
          },
          "webUrl": {
            "type": "button",
            "text": "Here is your promo!",
            "image": "",
            "buttons": [
              {
                "type": "web_url",
                "title": "Get 50% off",
                "url": "https://repliz.com/pricing"
              }
            ]
          }
        }
      }
    ]
  }
}

Example ​

json
{
  "message": {
    "isActive": true,
    "type": "ai",
    "text": "Hello",
    "prompt": "You are a helpful sales assistant.",
    "opening": {
      "postback": {
        "isActive": false,
        "text": "Want to know more?",
        "image": "https://storage.repliz.com/automations/sample.png",
        "button": {
          "type": "postback",
          "title": "Click Me",
          "payload": "payloadcustompostback",
          "url": "https://repliz.com"
        }
      },
      "additional": {
        "isActive": false,
        "isPreventBeforeFollow": false,
        "text": "Want to know more?",
        "image": "https://storage.repliz.com/automations/sample.png",
        "button": {
          "type": "postback",
          "title": "Click Me",
          "payload": "payloadcustompostback",
          "url": "https://repliz.com"
        }
      },
      "webUrl": {
        "text": "Want to know more?",
        "image": "https://storage.repliz.com/automations/sample.png",
        "buttons": [
          {
            "type": "web_url",
            "title": "Click Me",
            "url": "https://repliz.com"
          }
        ]
      }
    },
    "keyword": {
      "isExactMatch": false,
      "values": [
        {
          "keyword": "Hello",
          "text": "Hi! Check your DM."
        }
      ]
    },
    "condition": {
      "isActive": false,
      "isExactMatch": false,
      "keywords": ["hello"]
    },
    "delay": {
      "isActive": false,
      "value": 10,
      "type": "second"
    }
  }
}

5. Story Module ​

The story object sends a DM to people who reply to an Instagram Story by DM. Story mentions and reactions without text don't trigger it. Its schema is identical to the Message Module, including Keyword with Buttons.

Set it on the account to cover all stories, or on a story's content to cover that story only. A story's own automation is used instead of the account's.

Supported Platforms: Instagram

json
{
  "story": {
    "isActive": true,
    "type": "ai",
    "text": "Hello",
    "prompt": "You are a friendly assistant. Reply to story mentions.",
    "opening": {
      "postback": {
        "isActive": false,
        "text": "Want to know more?",
        "image": "https://storage.repliz.com/automations/sample.png",
        "button": {
          "type": "postback",
          "title": "Click Me",
          "payload": "payloadcustompostback",
          "url": "https://repliz.com"
        }
      },
      "additional": {
        "isActive": false,
        "isPreventBeforeFollow": false,
        "text": "Want to know more?",
        "image": "https://storage.repliz.com/automations/sample.png",
        "button": {
          "type": "postback",
          "title": "Click Me",
          "payload": "payloadcustompostback",
          "url": "https://repliz.com"
        }
      },
      "webUrl": {
        "text": "Want to know more?",
        "image": "https://storage.repliz.com/automations/sample.png",
        "buttons": [
          {
            "type": "web_url",
            "title": "Click Me",
            "url": "https://repliz.com"
          }
        ]
      }
    },
    "keyword": {
      "isExactMatch": false,
      "values": [
        {
          "keyword": "Hello",
          "text": "Hi! Thanks for the mention."
        }
      ]
    },
    "condition": {
      "isActive": false,
      "isExactMatch": false,
      "keywords": ["hello"]
    },
    "delay": {
      "isActive": false,
      "value": 10,
      "type": "second"
    }
  }
}

6. Chat Module ​

The chat object automates responses to direct chat messages at the account level (PUT /public/account/{accountId}/automation). It supports ai, text, and keyword response modes. On Facebook and Instagram, a keyword can also answer with buttons, see Keyword with Buttons.

It replies to every incoming message, not only the first one in a conversation. Instagram replies to a Story are handled by the story module instead.

Supported Platforms: Facebook Instagram TikTok (Account-Level Automation Only)

Schema ​

FieldTypeRequiredDescription
isActivebooleanYesToggles account-level chat automation.
typestringYesChat response mode: ai, text, or keyword.
textstringYesStatic response text (used when type: "text").
promptstringYesAI system prompt (used when type: "ai").
keywordobjectYesKeyword mapping rules (same as Reply keyword). On Facebook and Instagram, a keyword can also answer with buttons.
delayobjectYesResponse delay configuration (same as Reply delay).

Example ​

json
{
  "chat": {
    "isActive": true,
    "type": "ai",
    "text": "Hello! How can we help you today?",
    "prompt": "You are a customer support agent. Answer user questions politely.",
    "keyword": {
      "isExactMatch": false,
      "values": [
        {
          "keyword": "help",
          "text": "Sure, let us know what you need help with!"
        }
      ]
    },
    "delay": {
      "isActive": false,
      "value": 10,
      "type": "second"
    }
  }
}

Complete Configuration Example ​

Here is a full, ready-to-use config object containing all 6 modules matching the official Repliz DTO schema:

json
{
  "delete": {
    "isActive": true,
    "type": "ai",
    "keywords": ["baca", "oke"],
    "prompt": "You are a content moderator."
  },
  "reply": {
    "isActive": true,
    "type": "ai",
    "text": "Hello",
    "prompt": "You are a social media assistant.",
    "isIncludeContentContext": false,
    "keyword": {
      "isExactMatch": false,
      "values": [
        {
          "keyword": "Hello",
          "text": "Text to reply message"
        }
      ]
    },
    "exception": {
      "isActive": false,
      "isExactMatch": false,
      "keywords": []
    },
    "condition": {
      "isActive": false,
      "isExactMatch": false,
      "keywords": ["hello"]
    },
    "delay": {
      "isActive": false,
      "value": 10,
      "type": "second"
    }
  },
  "like": {
    "isActive": true
  },
  "message": {
    "isActive": true,
    "type": "ai",
    "text": "Hello",
    "prompt": "You are a sales assistant.",
    "opening": {
      "postback": {
        "isActive": false,
        "text": "Want to know?",
        "image": "https://storage.repliz.com/automations/sample.png",
        "button": {
          "type": "postback",
          "title": "Click Me",
          "payload": "payloadcustompostback",
          "url": "https://repliz.com"
        }
      },
      "additional": {
        "isActive": false,
        "isPreventBeforeFollow": false,
        "text": "Want to know?",
        "image": "https://storage.repliz.com/automations/sample.png",
        "button": {
          "type": "postback",
          "title": "Click Me",
          "payload": "payloadcustompostback",
          "url": "https://repliz.com"
        }
      },
      "webUrl": {
        "text": "Want to know?",
        "image": "https://storage.repliz.com/automations/sample.png",
        "buttons": [
          {
            "type": "web_url",
            "title": "Click Me",
            "url": "https://repliz.com"
          }
        ]
      }
    },
    "keyword": {
      "isExactMatch": false,
      "values": [
        {
          "keyword": "Hello",
          "text": "Text to reply message"
        }
      ]
    },
    "condition": {
      "isActive": false,
      "isExactMatch": false,
      "keywords": ["hello"]
    },
    "delay": {
      "isActive": false,
      "value": 10,
      "type": "second"
    }
  },
  "chat": {
    "isActive": true,
    "type": "ai",
    "text": "Hello",
    "prompt": "You are a customer support agent.",
    "keyword": {
      "isExactMatch": false,
      "values": [
        {
          "keyword": "Hello",
          "text": "Text to reply message"
        }
      ]
    },
    "delay": {
      "isActive": false,
      "value": 10,
      "type": "second"
    }
  },
  "story": {
    "isActive": true,
    "type": "ai",
    "text": "Hello",
    "prompt": "You are a friendly assistant.",
    "opening": {
      "postback": {
        "isActive": false,
        "text": "Want to know?",
        "image": "https://storage.repliz.com/automations/sample.png",
        "button": {
          "type": "postback",
          "title": "Click Me",
          "payload": "payloadcustompostback",
          "url": "https://repliz.com"
        }
      },
      "additional": {
        "isActive": false,
        "isPreventBeforeFollow": false,
        "text": "Want to know?",
        "image": "https://storage.repliz.com/automations/sample.png",
        "button": {
          "type": "postback",
          "title": "Click Me",
          "payload": "payloadcustompostback",
          "url": "https://repliz.com"
        }
      },
      "webUrl": {
        "text": "Want to know?",
        "image": "https://storage.repliz.com/automations/sample.png",
        "buttons": [
          {
            "type": "web_url",
            "title": "Click Me",
            "url": "https://repliz.com"
          }
        ]
      }
    },
    "keyword": {
      "isExactMatch": false,
      "values": [
        {
          "keyword": "Hello",
          "text": "Text to reply message"
        }
      ]
    },
    "condition": {
      "isActive": false,
      "isExactMatch": false,
      "keywords": ["hello"]
    },
    "delay": {
      "isActive": false,
      "value": 10,
      "type": "second"
    }
  }
}