Send private replies and rewards from Instagram comments
An Instagram comment campaign sends one private message to a person who comments a code word you publish. Use it to send information, offer a Shopify discount code, or invite someone to claim store credit. This is a dedicated campaign editor, separate from general automations.
How it works
Section titled “How it works”You publish an instruction such as “Comment GUIDE to receive the details.” You add GUIDE to the campaign’s code words and write the private reply. When a new eligible comment matches, omotto sends that reply privately from the campaign’s Instagram account.
If the person follows your Instagram account, the reply appears in their Instagram Inbox. Otherwise it appears in their message requests (the Request folder), not their main Inbox.
- Each person can receive one private reply per campaign. Repeating the word on another comment does not earn another reply or reward after a successful or unconfirmed send.
- One comment is handled by one campaign. If several active, in-date campaigns match, the oldest campaign wins. A newer campaign does not become a fallback just because the person already received the older one’s reply.
- The optional public reply is attempted only after Instagram accepts the private message. It is not a replacement for a failed private send.
- The private reply appears in the Inbox. It does not by itself open a ticket. The person’s answer can begin the normal conversation, subject to your bot settings and takeover.
Meta, the company behind Instagram, allows only one private response to a comment, within seven days of the comment on a post or reel. Further messages require the person to answer, and must be sent within 24 hours of that answer. Commenting or receiving your private reply does not give unrestricted permission for future messages. See Meta’s private-reply rules and messaging consent.
Where to find it
Section titled “Where to find it”Open Settings → Chat services → Instagram → Comment campaigns. On the Instagram connection screen, the Comment campaigns tab also opens it.
Set it up
Section titled “Set it up”Check availability first
Section titled “Check availability first”You need:
- A connected professional Instagram account with comment access approved. An older connection may need Reconnect Instagram, even if ordinary private messages already work. If you cannot reconnect, ask a teammate who manages chat connections.
- A plan that includes campaigns, with room in its campaign allowance. The Campaigns usage bar shows the allowance when displayed. Draft, active and paused campaigns count toward it; ended campaigns free their place.
- Triggers → Manage permission to create, edit, activate or remove campaigns. Triggers → View allows read-only access: you see Details rather than Edit. Campaigns share these permissions with message triggers; there is no separate campaign-management permission. Ask an owner to review your permissions if access is missing.
The Instagram connection screen currently says omotto is still under review by Meta. Access is restricted to accounts added in advance; connecting Instagram does not mean campaigns are available to every account. Contact hello@omotto.ai if access or comment delivery is unavailable. Never send your password.
For rewards, connect Shopify with access to the chosen reward type. Only currently available reward choices appear. A plain-message campaign needs no Shopify reward.
Create your campaign
Section titled “Create your campaign”- Choose New campaign.
- Enter Campaign name.
- Choose Instagram line if you have more than one.
- Under Post, turn off Any post and choose the intended post, or leave Any post on deliberately.
- Under Code words, add each word and press Enter after each entry.
- Write the Private reply.
- If needed, choose a Reward.
- Fill in its reward terms using the settings reference below.
- Choose its Reward budget.
- If you chose a discount code, choose Insert the reward code in the private reply.
- If the reward budget is limited, write Reply after the rewards run out.
- Optionally add language versions.
- Optionally write a Public reply under the comment.
- Set Starts if you want a delayed start.
- Set Ends if you want a scheduled end.
- Choose Status: keep Draft while preparing, or choose Active when ready.
- Choose Create campaign.
Skip the reward terms and budget steps if you kept No reward.
Publish the same code word and offer terms on Instagram. Test from a different Instagram account while the campaign is active. Do not use one of your connected Experts as the test commenter; Experts are not treated as campaign customers.
To change a campaign, choose Edit, make the changes, then choose Save campaign. Form changes are not saved automatically. The on/off switch on the campaign card, outside the editor, saves immediately: on means Active, off means Paused.
Settings
Section titled “Settings”Campaign, post and matching
Section titled “Campaign, post and matching”| Setting | What it does | Starting value |
|---|---|---|
| Campaign name | Required name for identifying the campaign in omotto. | Blank. |
| Instagram line | The account that receives the comment and sends the reply. Shown during creation when several lines exist; it cannot be changed on an existing campaign. Changing it while creating clears the selected post. | The default line if ready; otherwise the first ready line. |
| Post | Any post covers that account’s posts, not other Instagram accounts. Turn it off to choose one of Recent posts. Check the selected post before saving. | Any post on. |
| Code words | Required list of the exact spellings you publish. Add language variants yourself, such as GUIDE and מדריך. These are trigger words, not the discount codes customers receive. | Empty. |
| Advanced → Matching | Exact comment requires the whole comment to match a code word. Whole word also matches the code word among other words, but only on one selected post. | Exact comment; the advanced area starts closed. |
Matching ignores letter case, spaces at the beginning or end, and trailing punctuation or emoji. For example, guide! matches GUIDE. With Exact comment, “please send GUIDE” does not match GUIDE. With Whole word, it can match, but “guidebook” does not. A multi-word code must appear as the same consecutive words.
There is no guessing of typos, translations or synonyms. Add each different spelling explicitly. Do not add entries that become identical after case and trailing punctuation are ignored. Switching back to Any post resets matching to Exact comment.
Replies and language versions
Section titled “Replies and language versions”| Setting | What it does | Starting value |
|---|---|---|
| Private reply | Required text sent privately. For discount rewards, it must contain {{reward}}, which becomes the customer’s code. |
Blank. |
| Private reply versions | Optional language-specific private replies. Every discount version must also contain {{reward}}. |
No versions. |
| Reply after the rewards run out | Replaces the private reply when no reward can be offered. Required for a limited reward budget; hidden for unlimited budgets. Write an honest message without promising a reward. | Blank. |
| Exhausted reply versions | Optional language versions of that replacement reply. | No versions. |
| Public reply under the comment | Optional fixed text visible to everyone under the customer’s comment. It is attempted after the private send succeeds, including when the exhausted reply was sent. Do not put a reward code or private information here; {{reward}} is not allowed. |
Blank: no public reply. |
| Public reply versions | Optional language versions of the public text. | No versions. |
Use Add a language under the appropriate versions field, choose a language, and write its text. Remove a version with its Remove … control, or clear it, then save the campaign. omotto does not translate these texts for you.
The reply language comes from the language omotto has stored for that Instagram customer when known. Otherwise omotto uses the business’s configured customer language, falling back to English if none is set. If you wrote a version for that language, it is used; otherwise the main text is used. A code word in Hebrew does not itself select the Hebrew reply. See customer language settings.
Keep every reply short enough to fit one Instagram message. Saving refuses replies that are too long; it also checks the discount code’s space in the private reply. Public and replacement replies do not receive an automatically inserted reward.
Reward and reward budget
Section titled “Reward and reward budget”Reward starts at No reward. Choose it for an information-only campaign. When available, the other choices are Shopify discount code and Shopify store credit.
Campaign reward terms are your published offer. They are separate from allowance limits for ordinary conversations. The maximum shown beside a reward field still applies.
| Setting | What it does | Starting value |
|---|---|---|
| Reward budget → Limited | A positive total number of rewards, not a money amount or a daily allowance. Once used, new matches get the replacement reply. | No budget selected initially; choosing Limited fills 100 if the box was empty. You can change it. |
| Reward budget → Unlimited | No campaign-level limit on the number of rewards. This does not remove store, plan or sending limits. | Not selected. |
You must choose a budget mode when adding a reward. Pending credit offers reserve places before customers claim them. Expired, unclaimed credit offers stop using places. A created discount code normally uses a place even if the private send later fails, because the code remains valid in Shopify. Remaining codes or rewards are shown on the campaign card. Increasing the total budget allows more rewards; it does not reset earlier recipients.
Shopify discount-code terms
Section titled “Shopify discount-code terms”A separate single-use code is created for each eligible recipient. It is not restricted to a verified store customer, so treat it as a code that can be shared and used by whoever has it first.
| Setting | What it does | Default |
|---|---|---|
| Discount type | Percentage off, Fixed amount off, or Free shipping. | Percentage off. |
| Discount value | Percentage or fixed amount in the store’s currency, at least 1. Required except for Free shipping; leave it blank for that choice. | Blank. Percentage discounts have a displayed maximum of 90%. |
| Code valid for (days) | How long a newly created code lasts, starting when it is created, not when the campaign starts. Whole number from 1 to 365. | 30 days. |
| Minimum purchase | Minimum purchase subtotal in the store’s currency. | Blank or 0 means no minimum. |
| Code prefix | Beginning of the generated code, not a comment trigger. Up to 12 English letters or digits; no spaces. | FIX. |
Use Insert the reward code to add {{reward}} where the code should appear in Private reply. You must include it in every private language version too. Do not use it when No reward or Shopify store credit is selected.
Shopify store-credit terms
Section titled “Shopify store-credit terms”Store credit is a balance on a customer’s Shopify account, not a discount code. The private reply offers the reward; it does not add the balance immediately. Claiming requires identifying the customer and linking an existing store customer account. No new store account is created for the campaign, and the same store customer cannot claim twice from one campaign. See User identification and identity linking.
| Setting | What it does | Default |
|---|---|---|
| Credit amount | Amount to add after a successful claim. Minimum 1; the field shows a maximum of 100,000. | Blank; required. |
| Currency (blank = the store default) | Three-letter currency code, such as USD. It must be a currency the store can credit. | Blank uses the store default at the time of the offer. |
| Claimable for (days) | How long the offered reward can be claimed. Whole number from 1 to 365. It is not an expiry date for credit already added. | 30 days. |
Do not write that store credit is already in the account when the private message only invites a claim.
Before offering store credit, check that customers can use it at your Shopify checkout. They must sign in through Shopify customer accounts or use Shop Pay to spend the balance. Store credit is not available with legacy customer accounts, Shopify’s older account system. If your store uses those accounts, upgrade to customer accounts before relying on this reward. See Shopify’s store-credit guidance.
Schedule and status
Section titled “Schedule and status”| Setting | What it does | Default |
|---|---|---|
| Starts | Earliest time an active campaign accepts matching comments. Times use your browser’s local time zone. | Blank: no delayed start. |
| Ends | Stops matching new comments at this time. Must be after Starts when both are set. | Blank: no scheduled end. |
| Status → Draft | Saved for preparation; does not answer comments. | New campaigns start here. |
| Status → Active | Answers eligible new comments during the schedule, if the connection and plan allow it. | Must be selected or switched on. |
| Status → Paused | Stops new campaign replies without removing history. | Selected when switched off. |
A scheduled campaign must still be Active. Passing Ends stops new matching but does not automatically change the badge to Ended. The separate End campaign action is final; you cannot reactivate an ended campaign.
What happens when…
Section titled “What happens when…”Several campaigns use the same code word?
Section titled “Several campaigns use the same code word?”The oldest matching active campaign in its schedule handles the comment, whether it targets one post or any post. The card warns when an older campaign shares code words and overlapping post and date coverage. Use different words, posts or non-overlapping dates, or pause the older campaign. A more specific post does not automatically take priority.
Rewards run out or Shopify is disconnected?
Section titled “Rewards run out or Shopify is disconnected?”After a limited budget is exhausted, matches still get Reply after the rewards run out, without a reward. When the reward becomes unavailable, that replacement can also keep the campaign answering; without one, no private reply is sent.
Disconnecting or changing the store can make already-promised, unclaimed rewards impossible to fulfil. Reconnecting even the same store does not restore old promises automatically. Review the warning before disconnecting and arrange human follow-up for affected customers. Already-created codes may still exist in the old store.
You edit, pause or end a campaign after an offer?
Section titled “You edit, pause or end a campaign after an offer?”Editing reward terms does not rewrite rewards already reserved or promised. Pausing or ending stops new replies; it does not cancel valid codes already sent or unexpired credit offers already delivered. Keep the relevant store connected to honour those offers.
If the campaign has no recorded activity, its trash control offers Delete campaign and removes it. With recorded activity, it offers End campaign instead and retains history. Ended campaigns cannot restart; create a new campaign for a genuinely new offer.
You switch off the bot or reconnect another account?
Section titled “You switch off the bot or reconnect another account?”The campaign’s initial reply is separate from the bot’s ordinary conversation replies. Switching off ordinary bot replies or having a human hold the chat does not itself pause the campaign. To stop campaign replies, pause the campaign. Pausing new incoming messages on the Instagram line also prevents new comments from being accepted for campaigns.
If you reconnect the line to a different Instagram account, the old campaign does not move to that account. Create a new campaign for the new account.
You want to understand results?
Section titled “You want to understand results?”Choose Edit, or Details for read-only access. The activity figures appear above the settings; there is no separate Activity button.
- Comments seen: comments received for the campaign’s post coverage while it was eligible, not all comments shown by Instagram.
- Matched: comments selected for this campaign, including ones later skipped or failed.
- Replied: private sends accepted by Instagram, plus some unconfirmed sends that may have reached the person. An unconfirmed send recorded as failed after a discount code was created is excluded, even if the message may have arrived. It is not a read receipt.
- Rewards issued and Rewards claimed: rewards issued or offered, and successfully claimed credit rewards. Claimed is not a report of discount-code use at checkout.
- Conversations opened: new conversations created by the campaign.
- Customers who replied: campaign deliveries followed by a customer message in that conversation, not a general Instagram audience count.
- Tickets and Revenue: linked tickets and their realized revenue, shown separately by currency. They are not all sales from the Instagram post. See Analytics.
The screen also shows failed or skipped replies over the last 30 days, the 20 most recent reply records, and Open conversation links when available. Campaign managers can also see a warning listing codes created but never delivered. Check their current validity in Shopify before recovering them.
Troubleshooting
Section titled “Troubleshooting”| Symptom | What to check or do |
|---|---|
| New campaign is disabled or the page is unavailable. | Check the connection notice, plan allowance and your permissions. Ask an owner to review access rather than creating a duplicate connection. |
| A test commenter cannot find the private reply. | First check their Instagram Inbox if they follow your account, or their message requests (Request folder) if they do not. Then check the campaign’s activity and displayed delivery reason before reconnecting or contacting support. |
| Instagram messages work, but comments do nothing. | Use Reconnect Instagram when offered and approve comment access. Check that the campaign is Active, within its dates, on the correct post and account, and not shadowed by an older campaign. Check whether new messages on the line are paused. |
| The post list will not load. | Retry and check the Instagram connection. Do not switch to Any post just to bypass the error unless you really want replies across the account. Contact support if it persists. |
| A comment did not match. | Check its full text against Exact comment. Add the published spelling, or deliberately choose Whole word for one post. Extra words are not ignored in exact mode. |
| A repeat test gets no reply. | A successful or unconfirmed send uses that person’s campaign allowance. Test with a different eligible account. |
| Saving rejects the reply or reward. | Read the field error. Shorten every affected language version; insert {{reward}} for discount private replies; choose a budget; write the limited-budget replacement; check reward values and dates. |
| A reply says delivery unconfirmed. | Instagram may have received it. omotto does not automatically resend that uncertain private message. Check the conversation and contact support before attempting another send. |
| A code was created, but its message failed. | Review the valid-code warning and Open conversation. The code may still use budget. Check the store before manually sending or changing it. |
| The private message arrived but no public reply appeared. | Confirm public text was saved. A public failure does not undo the private reply, and public posting failures are not automatically retried. |
| A credit claim fails. | Check expiry, customer identification, the existing store account, currency and whether the same store remains connected. Do not promise a second credit while the result is uncertain. |
Failed or skipped reply reasons also identify disconnection, sending limits, opt-out, expired reply time and unavailable rewards. Respect opt-outs. For persistent failures, contact hello@omotto.ai with the campaign name, approximate comment time and displayed reason. Do not include passwords or customer verification codes.