English
English
Appearance
English
English
Appearance
A comprehensive guide to configuring content and account automation in Repliz.
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:
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.
| Automation Module | Threads | TikTok | YouTube | Scope | |||
|---|---|---|---|---|---|---|---|
| Delete | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Content & Account |
| Reply | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Content & Account |
| Like | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | Content & Account |
| Message | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | Content & Account |
| Story | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | Content & Account |
| Chat | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | Account Only |
urn:li:person:...) support content automation only.reply and message only when their isIncludeLiveComment is true. See Instagram Live comments.These rules apply to every keyword field (delete.keywords, keyword.values, condition.keywords, exception.keywords):
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.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.
| Field | Default | Effect |
|---|---|---|
reply.isIncludeLiveComment | false | Also reply to Live comments. The reply shows up among the Live's comments. |
message.isIncludeLiveComment | false | Also DM Live commenters. Instagram only accepts the DM while the Live is on air. |
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.delay short on message, because a DM that is due after the Live ends is rejected.reply.image isn't sent on Instagram, Live or not.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
| Field | Type | Required | Description |
|---|---|---|---|
isActive | boolean | Yes | Toggles the delete automation module. |
type | string | Yes | Moderation strategy: keyword or ai. |
keywords | string[] | Yes | Comments containing any of these words are deleted (used when type: "keyword"). |
prompt | string | Yes | Instructions 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.
{
"delete": {
"isActive": true,
"type": "keyword",
"keywords": ["spam", "scam", "promo", "crypto", "casino"],
"prompt": ""
}
}{
"delete": {
"isActive": true,
"type": "ai",
"keywords": [],
"prompt": "You are a content moderator. Automatically delete comments containing hate speech, offensive language, or unverified promotional links."
}
}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
| Field | Type | Required | Description |
|---|---|---|---|
isActive | boolean | Yes | Toggles public comment reply automation. |
type | string | Yes | Reply mode: text, keyword, or ai. |
text | string | Yes | Static reply message (when type: "text"). |
image | object | No | Image sent along with every reply (see image Object). |
prompt | string | Yes | AI instructions for generating responses (when type: "ai"). |
isIncludeContentContext | boolean | Yes | Include post caption/context in AI prompt for relevant answers. |
isIncludeLiveComment | boolean | No | Also reply to comments on an Instagram Live (see Instagram Live comments). |
keyword | object | Yes | Keyword mapping rules (when type: "keyword"). |
exception | object | Yes | Exception rules to exclude specific keywords from replying. |
condition | object | Yes | Filters determining when reply should trigger. |
delay | object | Yes | Artificial delay before replying to appear natural. |
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.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.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.
{
"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.
{
"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"
}
}
}{
"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"
}
}
}{
"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"
}
}
}The like object automatically likes incoming comments to increase user engagement.
Supported Platforms: Facebook TikTok LinkedIn
| Field | Type | Required | Description |
|---|---|---|---|
isActive | boolean | Yes | Toggles auto-liking of comments. |
{
"like": {
"isActive": true
}
}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
| Field | Type | Required | Description |
|---|---|---|---|
isActive | boolean | Yes | Toggles private DM automation. |
type | string | Yes | Message mode: ai, text, opening, or keyword. |
text | string | Yes | Static message text. |
prompt | string | Yes | AI instructions for generating messages. |
isIncludeLiveComment | boolean | No | Also DM commenters on an Instagram Live (see Instagram Live comments). |
opening | object | Yes | Rich opening message with postback, additional, or web URL buttons. |
keyword | object | Yes | Keyword mapping rules (same as Reply keyword). Each keyword can also answer with buttons, see Keyword with Buttons. |
condition | object | Yes | Trigger conditions (same as Reply condition). |
delay | object | Yes | Delay settings (same as Reply delay). |
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.
| Object | Dashboard name | Contains | Sent when |
|---|---|---|---|
opening.postback | First Message | text, optional image, one button | Right after the comment, if isActive is true |
opening.additional | Additional Message | text, optional image, one button | The person taps the First Message button |
opening.webUrl | Follow-up Message | text, optional image, up to 3 buttons, or a carousel of cards | The person taps the last button before it |
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.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).| Field | Type | Required | Description |
|---|---|---|---|
title | string | Yes | Card title. Repliz cuts it to 80 characters. |
subtitle | string | No | Text under the title. Repliz cuts it to 80 characters. |
image | string | No | Card image URL. Images fit best at a 1.91:1 ratio. |
url | string | No | URL opened when the card itself is tapped. |
buttons | array | Yes | Up 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.
{
"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": []
}
]
}
}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.
| Field | Type | Required | Description |
|---|---|---|---|
keyword | string | Yes | Trigger keyword. Leave it empty for the default reply, used when no other keyword matches. |
type | string | No | text (default) answers with text. opening answers with opening. |
text | string | When type is text | Reply text. Supports {name} and spintax. |
opening | object | When type is opening | Same structure as the opening object: postback, additional, and webUrl, including the carousel. |
id | string | No | Set by Repliz when a value with type: "opening" is saved. |
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.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.{
"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"
}
]
}
}
}
]
}
}{
"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"
}
}
}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
{
"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"
}
}
}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)
| Field | Type | Required | Description |
|---|---|---|---|
isActive | boolean | Yes | Toggles account-level chat automation. |
type | string | Yes | Chat response mode: ai, text, or keyword. |
text | string | Yes | Static response text (used when type: "text"). |
prompt | string | Yes | AI system prompt (used when type: "ai"). |
keyword | object | Yes | Keyword mapping rules (same as Reply keyword). On Facebook and Instagram, a keyword can also answer with buttons. |
delay | object | Yes | Response delay configuration (same as Reply delay). |
{
"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"
}
}
}Here is a full, ready-to-use config object containing all 6 modules matching the official Repliz DTO schema:
{
"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"
}
}
}