Decide how the conversation starts
There are two ways into an Instagram setter conversation. The person sends you a DM, or the person comments on a post and you answer with a private reply. Each is built differently, so pick one before you open the bot.
HighLevel's Instagram DM workflow action delivers a standard DM only when the contact has sent you an Instagram DM within the last 24 hours. A comment on a post doesn't open that window by itself, and an Instagram lead form submission doesn't either. A workflow can show as run while the person never receives the message.
HighLevel documents these delivery rules for Instagram. Don't assume Facebook Messenger behaves the same way; check its rules on their own. This isn't legal advice.
On Instagram, a lead form is not permission to DM. The person messages you first, or you answer their comment privately.
Build the entry workflow
The entry path you picked decides the trigger.
- Inbound DM. Start the workflow with Customer Replied and set Reply Channel to Instagram DM, so it only fires on Instagram messages.
- Comment on a post. Use Instagram Interactive Messenger and set Reply Type to Reply to Comment via DM. The other type, Reply to DM, answers a message rather than a comment.
- Keep Interactive Messenger behind an Instagram trigger. HighLevel doesn't offer the action without one, which is why it can be missing from a workflow that starts some other way.
- If you want tap-to-answer buttons, use Quick Replies on a message with no attachment. HighLevel doesn't allow both on one Interactive Messenger message.
Put the bot on the DM channels
The setter itself is a Conversation AI bot. Conversation AI's channel management covers Facebook and Instagram, and the bot's Deploy settings decide which channels it answers on. Building the bot doesn't put it on a channel. Deploy does.
Routing has an order of its own. A bot assigned directly to a contact takes priority over channel routing and tag routing. If a test contact gets the wrong bot, look for a direct assignment on that contact before you change any channel settings.
Ask once, save it, then book
Qualifying questions belong in the bot's goals. Map each answer to a contact field with Update Contact Field, so it lands on the contact record and not only in the chat history.
Turn on Skip if Already Filled for those goals. When the mapped field already holds a value, the bot doesn't collect it again. Someone who gave their email on a form shouldn't be asked for it a second time in the DM.
Booking runs through the Appointment Booking goal, which needs a calendar that already exists and is configured. Build the calendar first, then point the goal at it.
Rather have it set up for you?
We build the entry workflow, the setter bot and its booking calendar, then test each path from a real DM, starting with a 30-minute 1:1 with Rob.
How we write the setter prompt
HighLevel supplies the channels, goals and calendar. How the bot talks comes from its prompt, and these are conventions we write into our own setter prompts. They are not HighLevel settings:
- One question per message, then wait for the reply.
- Confirm the person's time zone before offering any times.
- Offer two times, each labeled with that time zone, so the answer can be a single pick.
Test every path before it goes live
A prompt line is an instruction, not a switch, and a workflow that ran is not a message that arrived. Walk through the bot from a test account:
- Send a DM and confirm the workflow fires and the reply arrives.
- Comment on a post and confirm the private reply arrives.
- Answer the qualifying questions, then open the contact record and check each value saved to the right field.
- Run the conversation again with those fields filled and confirm the bot skips them.
- Book a time and confirm the appointment is on the calendar.
