# Change WhatsApp Group Participant Source: https://help.goghl.ai/automation/actions/change-whatsapp-group-participant The Change WhatsApp Group Participant action lets you add or remove a member from a WhatsApp group automatically from inside your CRM workflows — no manual group management required. > Why it matters: Keeping WhatsApp groups up to date by hand is slow and error-prone. With this action you can automatically add new customers to a group when they convert, or remove them when they churn, cancel, or opt out — all triggered by any CRM event. *** ## Key Benefits[​](#key-benefits "Direct link to Key Benefits") **Automated Membership** - Add or remove members based on CRM events **No Manual Group Management** - Stop adding and removing people by hand **Workflow Integration** - Combine with any CRM trigger for powerful automation **Dynamic Participants** - Use contact variables to target the right person every time *** ## Who Should Use It[​](#who-should-use-it "Direct link to Who Should Use It") **Sales Teams** - Add new customers to a VIP group the moment they convert **Support Teams** - Remove members from a group once their case is closed **Agencies** - Keep client community groups in sync with your CRM automatically **Course Creators** - Add students to a cohort group on enrollment, remove on completion *** ## How to Set Up[​](#how-to-set-up "Direct link to How to Set Up") ### Step 1: Add the Action[​](#step-1-add-the-action "Direct link to Step 1: Add the Action") Go to **Automation → Workflows** Create a new workflow or edit an existing one Add your desired trigger (Form Submitted, Tag Added, Appointment Booked, etc.) Click **+** to add a new action, then select **Change WhatsApp Group Participant** ### Step 2: Configure the Action[​](#step-2-configure-the-action "Direct link to Step 2: Configure the Action") | Field | Required | Description | | --------------- | -------- | -------------------------------------------------------------------------------------------------------------------- | | **Action Name** | No | A label for this step in your workflow | | **Action** | Yes | Choose **Add** or **Remove** | | **Group** | Yes | Select a WhatsApp group, or use the Custom Value Picker. You can add new groups from the WhatsApp settings dashboard | | **Participant** | Yes | The phone number of the member to add or remove | Change WhatsApp Group Participant action configuration **The Participant number must include the country code.** Always enter the phone number in full international format with the country code (for example, `+14155552671`), or insert the `{{contact.raw_phone}}` custom value using the tag icon. A number without a country code — or a formatted field like `{{contact.phone}}` that may drop it — will fail to match a WhatsApp user, and the participant will not be added or removed. ### Step 3: Save and Publish[​](#step-3-save-and-publish "Direct link to Step 3: Save and Publish") Click **Save action** Review your complete workflow Toggle from **Draft** to **Published** *** ## Action Fields Explained[​](#action-fields-explained "Direct link to Action Fields Explained") ### Action Field[​](#action-field "Direct link to Action Field") Choose what should happen to the participant: * **Add** - Adds the participant to the selected group * **Remove** - Removes the participant from the selected group ### Group Field[​](#group-field "Direct link to Group Field") Select the destination group from the dropdown, or use the Custom Value Picker to set it dynamically. If your group isn't listed, add it from the **WhatsApp settings dashboard** first. ### Participant Field[​](#participant-field "Direct link to Participant Field") Enter the phone number of the person to add or remove. This must be a **valid WhatsApp number in full international format**, including the country code. **Recommended values:** * A full number with country code, e.g. `+14155552671` * The `{{contact.raw_phone}}` custom value — this stores the number in raw international format, including the country code Do not enter a local number without the country code. WhatsApp identifies users by their full international number, so a missing country code means the action cannot find the person and silently does nothing. *** ## Action Output & Filters[​](#action-output-and-filters "Direct link to Action Output & Filters") After the action runs, it returns the following values. You can reference them in later steps or branch on them with an **If/Else** step to build reliable automations. | Filter | Type | Description | | ------------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------- | | **Action's Status Code** | Number | The result code returned by WhatsApp (see the table below). Use this to branch your workflow — for example, send an invite link on `408` | | **Is Member Added?** | Boolean | `true` or `false` — whether the member ended up added to the group | | **Member's Phone Number** | Text | The participant number the action operated on | | **Message** | Text | A human-readable description of the result | ### Action Status Codes[​](#action-status-codes "Direct link to Action Status Codes") Use **Action's Status Code** in an If/Else filter to react to each outcome. | Status Code | Meaning | Message (Add) | Message (Remove) | What it means / what to do | | ----------- | ------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **200** | Success | Added successfully | Removed successfully | Done. | | **403** | Forbidden | Not allowed — user may have blocked this account or is not reachable | Not allowed — insufficient permissions to remove this participant | **Add:** the target user has blocked the sender or has strict privacy — try an invite link. **Remove:** usually means the target is an admin/creator and can't be removed by a non-creator. | | **404** | Number not on WhatsApp | Phone number is not on WhatsApp | Phone number is not on WhatsApp | Verify the number. This is a hard fail — no retry will help. | | **408** | Privacy restrictions | Can't be added directly due to privacy settings — send an invite link instead | *(n/a — only occurs on add)* | The contact can't be added directly. Send them a **WhatsApp message containing the group invite link** so they can join themselves. | | **409** | Already in / not in group | Already in the group | Not in the group | Idempotency signal — safe to treat as success in most workflows. | ### Handling privacy-restricted adds (invite links)[​](#handling-privacy-restricted-adds-invite-links "Direct link to Handling privacy-restricted adds (invite links)") Some contacts can't be added to a group directly because of their WhatsApp privacy settings. When this happens the action returns **`408`** (or **`403`** on an add). Rather than treating this as a failure, branch on the status code and send them a WhatsApp message with the group invite link so they can join themselves: Add an **If/Else** step after this action and check whether **Action's Status Code** is `408` (or `403`). On that branch, add a **Send WhatsApp Message** action and send the contact a message that includes your group's **invite link**, so they can tap it and join on their own. Optionally, tag the contact (e.g. `invite-sent`) so you can follow up later. *** ## Limitations[​](#limitations "Direct link to Limitations") Keep the following constraints in mind when using this action: * **Add and remove only.** This action cannot promote or demote a participant to admin — it only handles adding and removing members. * **Community containers are rejected.** Communities are meta-containers. Add/remove operates on the linked subgroups (the announcement or discussion group), not on the community itself. * **Announce-only groups are supported.** Participants can still be added and removed by admins normally. The announce flag only restricts *who can send messages* — it does not restrict membership management. * **Rate limits.** WhatsApp may throttle repeated participant operations on the same group. Space out bulk changes . *** ## Example Use Cases[​](#example-use-cases "Direct link to Example Use Cases") ### Use Case 1: Add New Customers to a VIP Group[​](#use-case-1 "Direct link to Use Case 1: Add New Customers to a VIP Group") **Trigger:** Tag Added — `customer` **Action:** Change WhatsApp Group Participant * **Action:** Add * **Group:** VIP Customers * **Participant:** `{{contact.raw_phone}}` ### Use Case 2: Remove Members When They Cancel[​](#use-case-2 "Direct link to Use Case 2: Remove Members When They Cancel") **Trigger:** Tag Added — `cancelled` **Action:** Change WhatsApp Group Participant * **Action:** Remove * **Group:** VIP Customers * **Participant:** `{{contact.raw_phone}}` *** ## FAQs[​](#faqs "Direct link to FAQs") Always use the full international format with the country code — for example, `+14155552671`. The easiest and most reliable option is to insert the **`{{contact.raw_phone}}`** custom value, which already stores the number with its country code. A number entered without a country code will not match a WhatsApp user and the action will fail. We recommend **`{{contact.raw_phone}}`**. Depending on how a contact was created, `{{contact.phone}}` may be formatted or stored without the country code, which causes the participant match to fail. `{{contact.raw_phone}}` keeps the number in full international format. The most common cause is a phone number without a country code. Make sure the Participant field uses a full international number (e.g. `+14155552671`) or `{{contact.raw_phone}}`. Also confirm your WhatsApp number is connected and that the group is available in your WhatsApp settings. Groups must be added and available in your WhatsApp settings dashboard first. Add the group there, then return to the workflow and refresh. The action will fail to run. We recommend setting up the **WhatsApp Disconnected** trigger to get alerts when your number goes offline. *** ## Support[​](#support "Direct link to Support") If you need help with the setup or onboarding: * WhatsApp Support: [Chat on WhatsApp](https://wa.me/+12267248710?text=Hi%2C%20I%20need%20help%20with%20the%20Change%20WhatsApp%20Group%20Participant%20action.) * Email: [**support@goghl.ai**](mailto:support@goghl.ai) # Send Internal iMessage Notification Source: https://help.goghl.ai/automation/actions/internal-notification-action-imessage The Send Internal iMessage Notification action alerts the user(s) assigned to a contact directly from your CRM workflows. The notification is synced to both the CRM and an actual iMessage - so your team is alerted wherever they are. > Why it matters: When a workflow runs on a contact, the people responsible for that contact need to know. This action notifies the assigned user(s) automatically - delivered both as a CRM notification and as a real iMessage - so nothing slips through the cracks. *** ## Key Benefits[​](#key-benefits "Direct link to Key Benefits") **Notify the Right People** - Message the user(s) assigned to the contact automatically **Flexible Targeting** - Send to all assigned users, a specific user, or any phone number **Synced Everywhere** - Delivered to both the CRM and an actual iMessage **Attachment Support** - Include a file with the notification **Workflow Integration** - Combine with any CRM trigger for powerful automation *** ## Who Should Use It[​](#who-should-use-it "Direct link to Who Should Use It") **Sales Teams** - Alert the assigned rep the moment a contact takes action **Support Teams** - Notify the contact owner about escalations **Agencies** - Route internal alerts across client sub-accounts **Operations** - Keep staff informed of status changes and hand-offs *** ## Requirements[​](#requirements "Direct link to Requirements") Before using this action: **Update your iMessage provider app** to the latest version * Go to **App Marketplace → Installed Apps → iMessage provider → Update** **Connect a native (Apple device) instance** * Use the **Native Instance Settings dashboard** to connect one or more Apple devices *** ## How to Set Up[​](#how-to-set-up "Direct link to How to Set Up") ### Step 1: Create or Edit a Workflow[​](#step-1-create-or-edit-a-workflow "Direct link to Step 1: Create or Edit a Workflow") Go to **Automation → Workflows** Create a new workflow or edit an existing one Add your desired trigger (Form Submitted, iMessage Inbound, Appointment Booked, etc.) ### Step 2: Add the Action[​](#step-2-add-the-action "Direct link to Step 2: Add the Action") Click **+** or **Add New Action** after your trigger Switch to the **Apps** tab Click the **iMessage provider** app icon Select **Send Internal iMessage Notification** Send Internal iMessage Notification ### Step 3: Configure the Action[​](#step-3-configure-the-action "Direct link to Step 3: Configure the Action") | Field | Required | Description | | ---------------- | -------- | ------------------------------------------------------------------------------------------------------------ | | **To User Type** | Yes | Who receives the notification - **Assigned Users**, **Particular User**, or **Custom Number** | | **Message** | No | The notification text to send (supports custom variables) | | **Choose User** | No | Shown based on **To User Type** - select a specific user or enter a phone number (hidden for Assigned Users) | | **Attachment** | No | Include a file with the notification | ### Step 4: Save and Publish[​](#step-4-save-and-publish "Direct link to Step 4: Save and Publish") Click **Save action** Review your complete workflow Toggle from **Draft** to **Published** *** ## Action Fields Explained[​](#action-fields-explained "Direct link to Action Fields Explained") ### To User Type Field[​](#to-user-type-field "Direct link to To User Type Field") Choose who the notification goes to. This selection controls what the **Choose User** field becomes. | Option | What it does | | ------------------- | ------------------------------------------------------------------------------------------------------ | | **Assigned Users** | Sends the notification to **every user assigned to the contact**. The **Choose User** field is hidden. | | **Particular User** | Lets you pick **one specific user** from a dropdown. The **Choose User** field becomes that dropdown. | | **Custom Number** | Lets you **enter any phone number** to notify. The **Choose User** field becomes a text input. | ### Choose User Field[​](#choose-user-field "Direct link to Choose User Field") This field adapts to your **To User Type** selection: * **Assigned Users** → hidden (the action resolves the assigned users automatically) * **Particular User** → a dropdown to select the user * **Custom Number** → a text field to type the destination phone number ### Message Field[​](#message-field "Direct link to Message Field") Enter the notification text. You can: * Type plain text * Use **custom variables** (click the tag icon to insert) * Include emojis **Example with variables:** ```text theme={null} New activity from {{contact.first_name}} {{contact.last_name}}. Please follow up. ``` ### Attachment Field[​](#attachment-field "Direct link to Attachment Field") Attach a file to send with the notification. This field is optional. *** ## Example Use Cases[​](#example-use-cases "Direct link to Example Use Cases") ### Use Case 1: Alert the Assigned Rep[​](#use-case-1-alert-the-assigned-rep "Direct link to Use Case 1: Alert the Assigned Rep") Notify whoever owns the contact when a new message comes in. **Trigger:** iMessage Inbound **Action:** Send Internal iMessage Notification * **To User Type:** Assigned Users * **Message:** ```text theme={null} {{contact.first_name}} just replied. Jump back into the conversation when you can. ``` *** ### Use Case 2: Notify a Specific Manager[​](#use-case-2-notify-a-specific-manager "Direct link to Use Case 2: Notify a Specific Manager") Escalate high-value leads to a fixed recipient. **Trigger:** Form Submitted **Action:** Send Internal iMessage Notification * **To User Type:** Custom Number * **Choose User:** +1 555 010 0000 * **Message:** ```text theme={null} New high-value lead: {{contact.first_name}} {{contact.last_name}}. ``` *** ## Important Notes[​](#important-notes "Direct link to Important Notes") ### Technical Details[​](#technical-details "Direct link to Technical Details") * The notification is synced to **both the CRM and an actual iMessage** * **Assigned Users** sends to every user assigned to the contact that runs the workflow * **Custom Number** can reach any phone number, even someone not assigned to the contact * Works with all standard CRM workflow triggers ### Best Practices[​](#best-practices "Direct link to Best Practices") * Use **Assigned Users** so the right owner is always notified as assignments change * Use **custom variables** to give recipients context at a glance * Keep notifications concise * Test before publishing *** ## FAQs[​](#faqs "Direct link to FAQs") It depends on **To User Type**: every user assigned to the contact (**Assigned Users**), one user you pick (**Particular User**), or any number you type (**Custom Number**). Yes. Choose **Custom Number** and enter any phone number. Yes. Use the **Attachment** field to include a file with the notification. Yes. Click the tag icon in the Message field to insert custom variables like `{{contact.first_name}}`. *** ## Support[​](#support "Direct link to Support") If you need help with the setup or onboarding: * WhatsApp Support: [Chat on WhatsApp](https://wa.me/+12267248710?text=Hi%2C%20I%20need%20help%20with%20Send%20Internal%20iMessage%20Notification.) * Email: [**support@goghl.ai**](mailto:support@goghl.ai) # Send Internal Android SMS Notification Source: https://help.goghl.ai/automation/actions/internal-notification-action-sms The Send Internal Android SMS Notification action alerts the user(s) assigned to a contact directly from your CRM workflows. The notification is synced to both the CRM and an actual SMS - so your team is alerted wherever they are. > Why it matters: When a workflow runs on a contact, the people responsible for that contact need to know. This action notifies the assigned user(s) automatically - delivered both as a CRM notification and as a real SMS - so nothing slips through the cracks. *** ## Key Benefits[​](#key-benefits "Direct link to Key Benefits") **Notify the Right People** - Message the user(s) assigned to the contact automatically **Flexible Targeting** - Send to all assigned users, a specific user, or any phone number **Synced Everywhere** - Delivered to both the CRM and an actual SMS **Attachment Support** - Include a file with the notification **Workflow Integration** - Combine with any CRM trigger for powerful automation *** ## Who Should Use It[​](#who-should-use-it "Direct link to Who Should Use It") **Sales Teams** - Alert the assigned rep the moment a contact takes action **Support Teams** - Notify the contact owner about escalations **Agencies** - Route internal alerts across client sub-accounts **Operations** - Keep staff informed of status changes and hand-offs *** ## Requirements[​](#requirements "Direct link to Requirements") Before using this action: **Update your SMS(Android) provider app** to the latest version * Go to **App Marketplace → Installed Apps → SMS(Android) provider → Update** **Connect an Android device** * Use your **SMS(Android) settings** to connect one or more Android devices *** ## How to Set Up[​](#how-to-set-up "Direct link to How to Set Up") ### Step 1: Create or Edit a Workflow[​](#step-1-create-or-edit-a-workflow "Direct link to Step 1: Create or Edit a Workflow") Go to **Automation → Workflows** Create a new workflow or edit an existing one Add your desired trigger (Form Submitted, SMS Inbound, Appointment Booked, etc.) ### Step 2: Add the Action[​](#step-2-add-the-action "Direct link to Step 2: Add the Action") Click **+** or **Add New Action** after your trigger Switch to the **Apps** tab Click the **SMS(Android) provider** app icon Select **Send Internal Android SMS Notification** Send Internal Android SMS Notification ### Step 3: Configure the Action[​](#step-3-configure-the-action "Direct link to Step 3: Configure the Action") | Field | Required | Description | | ---------------- | -------- | ------------------------------------------------------------------------------------------------------------ | | **To User Type** | Yes | Who receives the notification - **Assigned Users**, **Particular User**, or **Custom Number** | | **Message** | No | The notification text to send (supports custom variables) | | **Choose User** | No | Shown based on **To User Type** - select a specific user or enter a phone number (hidden for Assigned Users) | | **Attachment** | No | Include a file with the notification | ### Step 4: Save and Publish[​](#step-4-save-and-publish "Direct link to Step 4: Save and Publish") Click **Save action** Review your complete workflow Toggle from **Draft** to **Published** *** ## Action Fields Explained[​](#action-fields-explained "Direct link to Action Fields Explained") ### To User Type Field[​](#to-user-type-field "Direct link to To User Type Field") Choose who the notification goes to. This selection controls what the **Choose User** field becomes. | Option | What it does | | ------------------- | ------------------------------------------------------------------------------------------------------ | | **Assigned Users** | Sends the notification to **every user assigned to the contact**. The **Choose User** field is hidden. | | **Particular User** | Lets you pick **one specific user** from a dropdown. The **Choose User** field becomes that dropdown. | | **Custom Number** | Lets you **enter any phone number** to notify. The **Choose User** field becomes a text input. | ### Choose User Field[​](#choose-user-field "Direct link to Choose User Field") This field adapts to your **To User Type** selection: * **Assigned Users** → hidden (the action resolves the assigned users automatically) * **Particular User** → a dropdown to select the user * **Custom Number** → a text field to type the destination phone number ### Message Field[​](#message-field "Direct link to Message Field") Enter the notification text. You can: * Type plain text * Use **custom variables** (click the tag icon to insert) * Include emojis **Example with variables:** ```text theme={null} New activity from {{contact.first_name}} {{contact.last_name}}. Please follow up. ``` ### Attachment Field[​](#attachment-field "Direct link to Attachment Field") Attach a file to send with the notification. This field is optional. *** ## Example Use Cases[​](#example-use-cases "Direct link to Example Use Cases") ### Use Case 1: Alert the Assigned Rep[​](#use-case-1-alert-the-assigned-rep "Direct link to Use Case 1: Alert the Assigned Rep") Notify whoever owns the contact when a new message comes in. **Trigger:** SMS Inbound **Action:** Send Internal Android SMS Notification * **To User Type:** Assigned Users * **Message:** ```text theme={null} {{contact.first_name}} just replied. Jump back into the conversation when you can. ``` *** ### Use Case 2: Notify a Specific Manager[​](#use-case-2-notify-a-specific-manager "Direct link to Use Case 2: Notify a Specific Manager") Escalate high-value leads to a fixed recipient. **Trigger:** Form Submitted **Action:** Send Internal Android SMS Notification * **To User Type:** Custom Number * **Choose User:** +1 555 010 0000 * **Message:** ```text theme={null} New high-value lead: {{contact.first_name}} {{contact.last_name}}. ``` *** ## Important Notes[​](#important-notes "Direct link to Important Notes") ### Technical Details[​](#technical-details "Direct link to Technical Details") * The notification is synced to **both the CRM and an actual SMS** * **Assigned Users** sends to every user assigned to the contact that runs the workflow * **Custom Number** can reach any phone number, even someone not assigned to the contact * Works with all standard CRM workflow triggers ### Best Practices[​](#best-practices "Direct link to Best Practices") * Use **Assigned Users** so the right owner is always notified as assignments change * Use **custom variables** to give recipients context at a glance * Keep notifications concise * Test before publishing *** ## FAQs[​](#faqs "Direct link to FAQs") It depends on **To User Type**: every user assigned to the contact (**Assigned Users**), one user you pick (**Particular User**), or any number you type (**Custom Number**). Yes. Choose **Custom Number** and enter any phone number. Yes. Use the **Attachment** field to include a file with the notification. Yes. Click the tag icon in the Message field to insert custom variables like `{{contact.first_name}}`. *** ## Support[​](#support "Direct link to Support") If you need help with the setup or onboarding: * WhatsApp Support: [Chat on WhatsApp](https://wa.me/+12267248710?text=Hi%2C%20I%20need%20help%20with%20Send%20Internal%20Android%20SMS%20Notification.) * Email: [**support@goghl.ai**](mailto:support@goghl.ai) # Send Internal WhatsApp Notification Source: https://help.goghl.ai/automation/actions/internal-notification-action-whatsapp The Send Internal WhatsApp Notification action alerts the user(s) assigned to a contact directly from your CRM workflows. The notification is synced to both the CRM and an actual WhatsApp message - so your team is alerted wherever they are. > Why it matters: When a workflow runs on a contact, the people responsible for that contact need to know. This action notifies the assigned user(s) automatically - delivered both as a CRM notification and as a real WhatsApp message - so nothing slips through the cracks. *** ## Key Benefits[​](#key-benefits "Direct link to Key Benefits") **Notify the Right People** - Message the user(s) assigned to the contact automatically **Flexible Targeting** - Send to all assigned users, a specific user, or any phone number **Synced Everywhere** - Delivered to both the CRM and an actual WhatsApp message **Attachment Support** - Include a file with the notification **Workflow Integration** - Combine with any CRM trigger for powerful automation *** ## Who Should Use It[​](#who-should-use-it "Direct link to Who Should Use It") **Sales Teams** - Alert the assigned rep the moment a contact takes action **Support Teams** - Notify the contact owner about escalations **Agencies** - Route internal alerts across client sub-accounts **Operations** - Keep staff informed of status changes and hand-offs *** ## Requirements[​](#requirements "Direct link to Requirements") Before using this action: **Update your WhatsApp provider app** to the latest version * Go to **App Marketplace → Installed Apps → WhatsApp provider → Update** **Connect a WhatsApp number** * Use the **WhatsApp Settings dashboard** to connect one or more WhatsApp instances *** ## How to Set Up[​](#how-to-set-up "Direct link to How to Set Up") ### Step 1: Create or Edit a Workflow[​](#step-1-create-or-edit-a-workflow "Direct link to Step 1: Create or Edit a Workflow") Go to **Automation → Workflows** Create a new workflow or edit an existing one Add your desired trigger (Form Submitted, WhatsApp Inbound, Appointment Booked, etc.) ### Step 2: Add the Action[​](#step-2-add-the-action "Direct link to Step 2: Add the Action") Click **+** or **Add New Action** after your trigger Switch to the **Apps** tab Click the **WhatsApp provider** app icon Select **Send Internal WhatsApp Notification** Send Internal WhatsApp Notification ### Step 3: Configure the Action[​](#step-3-configure-the-action "Direct link to Step 3: Configure the Action") | Field | Required | Description | | ---------------- | -------- | ------------------------------------------------------------------------------------------------------------ | | **To User Type** | Yes | Who receives the notification - **Assigned Users**, **Particular User**, or **Custom Number** | | **Message** | No | The notification text to send (supports custom variables) | | **Choose User** | No | Shown based on **To User Type** - select a specific user or enter a phone number (hidden for Assigned Users) | | **Attachment** | No | Include a file with the notification | ### Step 4: Save and Publish[​](#step-4-save-and-publish "Direct link to Step 4: Save and Publish") Click **Save action** Review your complete workflow Toggle from **Draft** to **Published** *** ## Action Fields Explained[​](#action-fields-explained "Direct link to Action Fields Explained") ### To User Type Field[​](#to-user-type-field "Direct link to To User Type Field") Choose who the notification goes to. This selection controls what the **Choose User** field becomes. | Option | What it does | | ------------------- | ------------------------------------------------------------------------------------------------------ | | **Assigned Users** | Sends the notification to **every user assigned to the contact**. The **Choose User** field is hidden. | | **Particular User** | Lets you pick **one specific user** from a dropdown. The **Choose User** field becomes that dropdown. | | **Custom Number** | Lets you **enter any phone number** to notify. The **Choose User** field becomes a text input. | ### Choose User Field[​](#choose-user-field "Direct link to Choose User Field") This field adapts to your **To User Type** selection: * **Assigned Users** → hidden (the action resolves the assigned users automatically) * **Particular User** → a dropdown to select the user * **Custom Number** → a text field to type the destination phone number ### Message Field[​](#message-field "Direct link to Message Field") Enter the notification text. You can: * Type plain text * Use **custom variables** (click the tag icon to insert) * Include emojis **Example with variables:** ```text theme={null} New activity from {{contact.first_name}} {{contact.last_name}}. Please follow up. ``` ### Attachment Field[​](#attachment-field "Direct link to Attachment Field") Attach a file to send with the notification. This field is optional. *** ## Example Use Cases[​](#example-use-cases "Direct link to Example Use Cases") ### Use Case 1: Alert the Assigned Rep[​](#use-case-1-alert-the-assigned-rep "Direct link to Use Case 1: Alert the Assigned Rep") Notify whoever owns the contact when a new message comes in. **Trigger:** WhatsApp Inbound **Action:** Send Internal WhatsApp Notification * **To User Type:** Assigned Users * **Message:** ```text theme={null} {{contact.first_name}} just replied. Jump back into the conversation when you can. ``` *** ### Use Case 2: Notify a Specific Manager[​](#use-case-2-notify-a-specific-manager "Direct link to Use Case 2: Notify a Specific Manager") Escalate high-value leads to a fixed recipient. **Trigger:** Form Submitted **Action:** Send Internal WhatsApp Notification * **To User Type:** Custom Number * **Choose User:** +1 555 010 0000 * **Message:** ```text theme={null} New high-value lead: {{contact.first_name}} {{contact.last_name}}. ``` *** ## Important Notes[​](#important-notes "Direct link to Important Notes") ### Technical Details[​](#technical-details "Direct link to Technical Details") * The notification is synced to **both the CRM and an actual WhatsApp message** * **Assigned Users** sends to every user assigned to the contact that runs the workflow * **Custom Number** can reach any phone number, even someone not assigned to the contact * Works with all standard CRM workflow triggers ### Best Practices[​](#best-practices "Direct link to Best Practices") * Use **Assigned Users** so the right owner is always notified as assignments change * Use **custom variables** to give recipients context at a glance * Keep notifications concise * Test before publishing *** ## FAQs[​](#faqs "Direct link to FAQs") It depends on **To User Type**: every user assigned to the contact (**Assigned Users**), one user you pick (**Particular User**), or any number you type (**Custom Number**). Yes. Choose **Custom Number** and enter any phone number. Yes. Use the **Attachment** field to include a file with the notification. Yes. Click the tag icon in the Message field to insert custom variables like `{{contact.first_name}}`. *** ## Support[​](#support "Direct link to Support") If you need help with the setup or onboarding: * WhatsApp Support: [Chat on WhatsApp](https://wa.me/+12267248710?text=Hi%2C%20I%20need%20help%20with%20Send%20Internal%20WhatsApp%20Notification.) * Email: [**support@goghl.ai**](mailto:support@goghl.ai) # Send WhatsApp Group Message Source: https://help.goghl.ai/automation/actions/send-group-message The action is a custom WhatsApp provider workflow action that sends messages to WhatsApp groups directly from your CRM workflows. Automate team notifications, client updates, and group announcements without manual intervention. > Why it matters: Manually sending updates to WhatsApp groups is time-consuming and easy to forget. Now you can automate group messages triggered by any CRM event-new leads, appointments, form submissions, and more. *** ## Key Benefits[​](#key-benefits "Direct link to Key Benefits") **Automated Group Updates** - Send team notifications automatically **No Manual Messaging** - Eliminate repetitive group messages **Workflow Integration** - Combine with any CRM trigger for powerful automation **Attachment Support** - Include images or videos via URL **Custom Variables** - Personalize messages with contact and trigger data *** ## Who Should Use It[​](#who-should-use-it "Direct link to Who Should Use It") **Sales Teams** - Notify team groups when new leads come in **Support Teams** - Alert support groups when tickets are created **Agencies** - Update client groups on campaign progress automatically **Operations** - Send daily summaries or status updates to internal groups **Managers** - Get automated reports on team activity *** ## Requirements[​](#requirements "Direct link to Requirements") Before using this action: **Update your WhatsApp provider app** to the latest version * Go to **App Marketplace → Installed Apps → WhatsApp provider → Update** **Allow groups** in WhatsApp Settings * Groups must be enabled in your WhatsApp dashboard before they appear in the action dropdown *** ## How to Set Up[​](#how-to-set-up "Direct link to How to Set Up") ### Step 1: Allow Groups in WhatsApp Settings[​](#step-1-allow-groups-in-whatsapp-settings "Direct link to Step 1: Allow Groups in WhatsApp Settings") Go to **WhatsApp** in your sidebar Click **Manage** on your WhatsApp instance Navigate to group settings **Allow** the groups you want to use in workflows Save your settings > **Important:** Only groups that are allowed will appear in the action dropdown. Group Settings ### Step 2: Create or Edit a Workflow[​](#step-2-create-or-edit-a-workflow "Direct link to Step 2: Create or Edit a Workflow") Go to **Automation → Workflows** Create a new workflow or edit an existing one Add your desired trigger (Form Submitted, Appointment Booked, Customer Reply, etc.) ### Step 3: Add the Action[​](#step-3-add-the-action "Direct link to Step 3: Add the Action") Click **+** or **Add New Action** after your trigger Switch to the **Apps** tab Click the **WhatsApp provider** app icon Select **Send WhatsApp Group Message** Apps Add Sendgroup ### Step 4: Configure the Action[​](#step-4-configure-the-action "Direct link to Step 4: Configure the Action") | Field | Required | Description | | ------------------ | -------- | --------------------------------------------- | | **Message** | Yes | The message text to send (supports variables) | | **Attachment** | No | Public URL to an image or video | | **WhatsApp Group** | Yes | Select from your allowed groups | Send Group Message ### Step 5: Save and Publish[​](#step-5-save-and-publish "Direct link to Step 5: Save and Publish") Click **Save action** Review your complete workflow Toggle from **Draft** to **Published** *** ## Action Fields Explained[​](#action-fields-explained "Direct link to Action Fields Explained") ### Message Field[​](#message-field "Direct link to Message Field") Enter the message you want to send. You can: * Type plain text * Use **custom variables** (click the tag icon to insert) * Include emojis * Use line breaks for formatting **Example with variables:** ```text theme={null} New Lead Alert! Name: {{contact.first_name}} {{contact.last_name}}Phone: {{contact.phone}}Email: {{contact.email}} Please follow up within 5 minutes! ``` ### Attachment Field[​](#attachment-field "Direct link to Attachment Field") Paste a direct URL to an image or video file. This field is optional. **Supported formats:** PNG, JPG, JPEG, GIF, WebP, MP4, MOV **Requirements:** * URL must be publicly accessible * Direct link to the file (not a webpage) * File size under 16MB for videos ### WhatsApp Group Dropdown[​](#whatsapp-group-dropdown "Direct link to WhatsApp Group Dropdown") Select the destination group. Only groups **allowed** in your WhatsApp Settings will appear. If you don't see your group: Go to **WhatsApp → Manage** Allow the group in settings Return to workflow and refresh *** ## Example Use Cases[​](#example-use-cases "Direct link to Example Use Cases") ### Use Case 1: New Lead Notification[​](#use-case-1-new-lead-notification "Direct link to Use Case 1: New Lead Notification") Alert your sales team when a new lead submits a form. **Trigger:** Form Submitted **Action:** Send WhatsApp Group Message * **Group:** Sales Team * **Message:** ```text theme={null} NEW LEAD ALERT Name: {{contact.first_name}} {{contact.last_name}}Phone: {{contact.phone}}Email: {{contact.email}}Source: {{contact.source}} First person to respond wins! ``` *** ### Use Case 2: Appointment Notification[​](#use-case-2-appointment-notification "Direct link to Use Case 2: Appointment Notification") Notify your operations team when a new appointment is booked. **Trigger:** Appointment Scheduled **Action:** Send WhatsApp Group Message * **Group:** Operations Team * **Message:** ```text theme={null} New Appointment Booked Client: {{contact.name}}Service: {{appointment.title}}Date: {{appointment.start_date}}Time: {{appointment.start_time}} Please ensure everything is ready. ``` *** ## Important Notes[​](#important-notes "Direct link to Important Notes") ### Technical Details[​](#technical-details "Direct link to Technical Details") * Messages send from your connected WhatsApp number * Groups must be **allowed first** in WhatsApp Settings * Supports text, emojis, and one attachment per message * Works with all standard CRM workflow triggers ### Best Practices[​](#best-practices "Direct link to Best Practices") * Keep messages concise and scannable * Use relevant variables only * Test before publishing * Don't over-notify - too many messages cause fatigue *** ## FAQs[​](#faqs "Direct link to FAQs") Yes. Add multiple "Send WhatsApp Group Message" actions, each targeting a different group. Groups must be **allowed** in WhatsApp Settings first. Go to WhatsApp → Manage → Group Settings. Yes. Paste a public URL in the Attachment field. Supported formats: PNG, JPG, GIF, WebP, MP4, MOV. The message will fail to send. We recommend setting up the WhatsApp Disconnected trigger to get alerts when your number goes offline. *** ## Support[​](#support "Direct link to Support") If you need help with the setup or onboarding: * WhatsApp Support: [Chat on WhatsApp](https://wa.me/+12267248710?text=Hi%2C%20I%20need%20help%20with%20Send%20WhatsApp%20Group%20Message.) * Email: [**support@goghl.ai**](mailto:support@goghl.ai) # Send iMessage Source: https://help.goghl.ai/automation/actions/send-imessage The action is a custom workflow action that sends an iMessage to a contact directly from your CRM workflows, using your connected Apple device. Automate replies, confirmations, reminders, and follow-ups without sending anything by hand. > Why it matters: Manually replying to contacts over iMessage doesn't scale. With this action you can send personalized iMessages triggered by any CRM event-new leads, appointments, form submissions, replies, and more. *** ## Key Benefits[​](#key-benefits "Direct link to Key Benefits") **Automated Messaging** - Send iMessages automatically from any workflow **Personalized Content** - Use custom variables to tailor every message **Attachment Support** - Include an image, video, or file with your message **Multi-Device Support** - Choose which connected Apple device sends the message **Workflow Integration** - Combine with any CRM trigger for powerful automation *** ## Who Should Use It[​](#who-should-use-it "Direct link to Who Should Use It") **Sales Teams** - Instantly follow up with new leads over iMessage **Support Teams** - Send confirmations and updates automatically **Agencies** - Automate client-facing messaging across sub-accounts **Operations** - Send reminders, alerts, and status updates **Marketers** - Deliver timely, personalized iMessage touches *** ## Requirements[​](#requirements "Direct link to Requirements") Before using this action: **Update your iMessage provider app** to the latest version * Go to **App Marketplace → Installed Apps → iMessage provider → Update** **Connect a native (Apple device) instance** * Use the **Native Instance Settings dashboard** to connect one or more Apple devices *** ## How to Set Up[​](#how-to-set-up "Direct link to How to Set Up") ### Step 1: Create or Edit a Workflow[​](#step-1-create-or-edit-a-workflow "Direct link to Step 1: Create or Edit a Workflow") Go to **Automation → Workflows** Create a new workflow or edit an existing one Add your desired trigger (Form Submitted, iMessage Inbound, Appointment Booked, etc.) ### Step 2: Add the Action[​](#step-2-add-the-action "Direct link to Step 2: Add the Action") Click **+** or **Add New Action** after your trigger Switch to the **Apps** tab Click the **iMessage provider** app icon Select **Send iMessage** Send iMessage ### Step 3: Configure the Action[​](#step-3-configure-the-action "Direct link to Step 3: Configure the Action") | Field | Required | Description | | ----------------------- | -------- | --------------------------------------------------------------------------------------------- | | **Action Name** | Yes | A label for this action in the workflow (e.g. "Send iMessage") | | **Message** | Yes | The message text to send (supports custom variables) | | **Attachment** | No | Upload a file (**System upload**) or pick one from the **Media library** | | **Device Phone Number** | No | The connected Apple device to send from. Leave empty to use your dashboard's default instance | ### Step 4: Save and Publish[​](#step-4-save-and-publish "Direct link to Step 4: Save and Publish") Click **Save action** Review your complete workflow Toggle from **Draft** to **Published** *** ## Action Fields Explained[​](#action-fields-explained "Direct link to Action Fields Explained") ### Message Field[​](#message-field "Direct link to Message Field") Enter the message you want to send. You can: * Type plain text * Use **custom variables** (click the tag icon to insert) * Include emojis * Use line breaks for formatting **Example with variables:** ```text theme={null} Hi {{contact.first_name}} Thanks for reaching out! A member of our team will get back to you shortly.Meanwhile, feel free to reply here with any questions. ``` ### Attachment Field[​](#attachment-field "Direct link to Attachment Field") Attach a file to send with your message. You have two options: * **System upload** - Click to upload, or drag and drop a file * **Media library** - Select an existing file from your library This field is optional. ### Device Phone Number Field[​](#device-phone-number-field "Direct link to Device Phone Number Field") Choose which connected Apple device sends the message. > **Connected native instances.** Use the Native Instance Settings dashboard to connect more instances. *** ## Example Use Cases[​](#example-use-cases "Direct link to Example Use Cases") ### Use Case 1: Instant Lead Follow-Up[​](#use-case-1-instant-lead-follow-up "Direct link to Use Case 1: Instant Lead Follow-Up") Reply to a new lead the moment they submit a form. **Trigger:** Form Submitted **Action:** Send iMessage * **Message:** ```text theme={null} Hi {{contact.first_name}}! Thanks for your interest. We received your request and will be in touch within the next few minutes. ``` *** ### Use Case 2: Auto-Reply to Inbound Messages[​](#use-case-2-auto-reply-to-inbound-messages "Direct link to Use Case 2: Auto-Reply to Inbound Messages") Acknowledge every inbound iMessage automatically. **Trigger:** iMessage Inbound **Action:** Send iMessage * **Message:** ```text theme={null} Thanks for your message! We've received it and will reply shortly. ``` *** ## Important Notes[​](#important-notes "Direct link to Important Notes") ### Technical Details[​](#technical-details "Direct link to Technical Details") * Messages send from your connected Apple device (native instance) * Leaving **Device Phone Number** empty uses your dashboard's default instance * Supports text, emojis, and one attachment per message * Works with all standard CRM workflow triggers ### Best Practices[​](#best-practices "Direct link to Best Practices") * Keep messages concise and personal * Use relevant variables only * Test before publishing * Avoid over-messaging - too many messages cause fatigue *** ## FAQs[​](#faqs "Direct link to FAQs") The one you select in the **Device Phone Number** field. Connect more devices from the Native Instance Settings dashboard. Yes. Use the **Attachment** field to upload a file (System upload) or pick one from the Media library. Yes. Click the tag icon in the Message field to insert custom variables like `{{contact.first_name}}`. The message will fail to send. Make sure your connected device stays online and signed in to iMessage. *** ## Support[​](#support "Direct link to Support") If you need help with the setup or onboarding: * WhatsApp Support: [Chat on WhatsApp](https://wa.me/+12267248710?text=Hi%2C%20I%20need%20help%20with%20Send%20iMessage.) * Email: [**support@goghl.ai**](mailto:support@goghl.ai) # Send Android SMS Source: https://help.goghl.ai/automation/actions/send-sms The Send Android SMS action is a custom workflow action that sends an SMS to a contact directly from your CRM workflows, using your connected Android device. Automate replies, confirmations, reminders, and follow-ups without sending anything by hand. > Why it matters: Manually replying to contacts over SMS doesn't scale. With this action you can send personalized text messages triggered by any CRM event-new leads, appointments, form submissions, replies, and more. *** ## Key Benefits[​](#key-benefits "Direct link to Key Benefits") **Automated Messaging** - Send SMS automatically from any workflow **Personalized Content** - Use custom variables to tailor every message **Attachment Support** - Include an image, video, or file with your message **Multi-Device Support** - Choose which connected Android device sends the message **Workflow Integration** - Combine with any CRM trigger for powerful automation *** ## Who Should Use It[​](#who-should-use-it "Direct link to Who Should Use It") **Sales Teams** - Instantly follow up with new leads over SMS **Support Teams** - Send confirmations and updates automatically **Agencies** - Automate client-facing messaging across sub-accounts **Operations** - Send reminders, alerts, and status updates **Marketers** - Deliver timely, personalized SMS touches *** ## Requirements[​](#requirements "Direct link to Requirements") Before using this action: **Update your SMS(Android) provider app** to the latest version * Go to **App Marketplace → Installed Apps → SMS(Android) provider → Update** **Connect an Android device** * Use your **SMS(Android) settings** to connect one or more Android devices *** ## How to Set Up[​](#how-to-set-up "Direct link to How to Set Up") ### Step 1: Create or Edit a Workflow[​](#step-1-create-or-edit-a-workflow "Direct link to Step 1: Create or Edit a Workflow") Go to **Automation → Workflows** Create a new workflow or edit an existing one Add your desired trigger (Form Submitted, SMS Inbound, Appointment Booked, etc.) ### Step 2: Add the Action[​](#step-2-add-the-action "Direct link to Step 2: Add the Action") Click **+** or **Add New Action** after your trigger Switch to the **Apps** tab Click the **SMS(Android) provider** app icon Select **Send Android SMS** Send Android SMS ### Step 3: Configure the Action[​](#step-3-configure-the-action "Direct link to Step 3: Configure the Action") | Field | Required | Description | | -------------------- | -------- | --------------------------------------------------------------------------------------------- | | **Message** | No | The message text to send (supports custom variables) | | **Connected Device** | No | The connected Android device to send from. Leave empty to use your dashboard's default device | | **Attachment** | No | Upload a file (**System upload**) or pick one from the **Media library** | ### Step 4: Save and Publish[​](#step-4-save-and-publish "Direct link to Step 4: Save and Publish") Click **Save action** Review your complete workflow Toggle from **Draft** to **Published** *** ## Action Fields Explained[​](#action-fields-explained "Direct link to Action Fields Explained") ### Message Field[​](#message-field "Direct link to Message Field") Enter the message you want to send. You can: * Type plain text * Use **custom variables** (click the tag icon to insert) * Include emojis * Use line breaks for formatting **Example with variables:** ```text theme={null} Hi {{contact.first_name}} Thanks for reaching out! A member of our team will get back to you shortly. ``` ### Connected Device Field[​](#connected-device-field "Direct link to Connected Device Field") Choose which connected Android device sends the message. > **Connected devices.** Use your SMS(Android) settings to connect more Android devices. **Leave this field empty** to use your dashboard's default device. ### Attachment Field[​](#attachment-field "Direct link to Attachment Field") Attach a file to send with your message. You have two options: * **System upload** - Click to upload, or drag and drop a file * **Media library** - Select an existing file from your library This field is optional. *** ## Example Use Cases[​](#example-use-cases "Direct link to Example Use Cases") ### Use Case 1: Instant Lead Follow-Up[​](#use-case-1-instant-lead-follow-up "Direct link to Use Case 1: Instant Lead Follow-Up") Reply to a new lead the moment they submit a form. **Trigger:** Form Submitted **Action:** Send Android SMS * **Message:** ```text theme={null} Hi {{contact.first_name}}! Thanks for your interest. We received your request and will be in touch within the next few minutes. ``` *** ### Use Case 2: Auto-Reply to Inbound Messages[​](#use-case-2-auto-reply-to-inbound-messages "Direct link to Use Case 2: Auto-Reply to Inbound Messages") Acknowledge every inbound SMS automatically. **Trigger:** SMS Inbound **Action:** Send Android SMS * **Message:** ```text theme={null} Thanks for your message! We've received it and will reply shortly. ``` *** ## Important Notes[​](#important-notes "Direct link to Important Notes") ### Technical Details[​](#technical-details "Direct link to Technical Details") * Messages send from your connected Android device * Leaving **Connected Device** empty uses your dashboard's default device * Supports text and one attachment per message * Works with all standard CRM workflow triggers ### Best Practices[​](#best-practices "Direct link to Best Practices") * Keep messages concise and personal * Use relevant variables only * Test before publishing * Avoid over-messaging - too many messages cause fatigue *** ## FAQs[​](#faqs "Direct link to FAQs") The one you select in the **Connected Device** field. Connect more devices from your SMS(Android) settings. Yes. Use the **Attachment** field to upload a file (System upload) or pick one from the Media library. Yes. Click the tag icon in the Message field to insert custom variables like `{{contact.first_name}}`. The message will fail to send. Make sure your connected device stays online and signed in. *** ## Support[​](#support "Direct link to Support") If you need help with the setup or onboarding: * WhatsApp Support: [Chat on WhatsApp](https://wa.me/+12267248710?text=Hi%2C%20I%20need%20help%20with%20Send%20Android%20SMS.) * Email: [**support@goghl.ai**](mailto:support@goghl.ai) # Send WhatsApp Message Source: https://help.goghl.ai/automation/actions/send-whatsapp-message The action is a custom WhatsApp provider workflow action that sends a WhatsApp message to a contact directly from your CRM workflows. Automate replies, confirmations, reminders, and follow-ups without sending anything by hand. > Why it matters: Manually replying to contacts on WhatsApp doesn't scale. With this action you can send personalized WhatsApp messages triggered by any CRM event-new leads, appointments, form submissions, replies, and more. *** ## Key Benefits[​](#key-benefits "Direct link to Key Benefits") **Automated Messaging** - Send WhatsApp messages automatically from any workflow **Personalized Content** - Use custom variables to tailor every message **Attachment Support** - Include an image, video, or document with your message **Multi-Number Support** - Choose which connected WhatsApp number sends the message **Workflow Integration** - Combine with any CRM trigger for powerful automation *** ## Who Should Use It[​](#who-should-use-it "Direct link to Who Should Use It") **Sales Teams** - Instantly follow up with new leads on WhatsApp **Support Teams** - Send confirmations and updates automatically **Agencies** - Automate client-facing messaging across sub-accounts **Operations** - Send reminders, alerts, and status updates **Marketers** - Deliver timely, personalized WhatsApp touches *** ## Requirements[​](#requirements "Direct link to Requirements") Before using this action: **Update your WhatsApp provider app** to the latest version * Go to **App Marketplace → Installed Apps → WhatsApp provider → Update** **Connect a WhatsApp number** * Use the **WhatsApp Settings dashboard** to connect one or more WhatsApp instances *** ## How to Set Up[​](#how-to-set-up "Direct link to How to Set Up") ### Step 1: Create or Edit a Workflow[​](#step-1-create-or-edit-a-workflow "Direct link to Step 1: Create or Edit a Workflow") Go to **Automation → Workflows** Create a new workflow or edit an existing one Add your desired trigger (Form Submitted, WhatsApp Inbound, Appointment Booked, etc.) ### Step 2: Add the Action[​](#step-2-add-the-action "Direct link to Step 2: Add the Action") Click **+** or **Add New Action** after your trigger Switch to the **Apps** tab Click the **WhatsApp provider** app icon Select **Send WhatsApp Message** Send WhatsApp Message ### Step 3: Configure the Action[​](#step-3-configure-the-action "Direct link to Step 3: Configure the Action") | Field | Required | Description | | ------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------- | | **Action Name** | Yes | A label for this action in the workflow (e.g. "Send Whatsapp Message") | | **Message** | Yes | The message text to send (supports custom variables) | | **Attachments** | No | Upload a file (**System upload**) or pick one from the **Media library** | | **WhatsApp Number** | No | The connected number to send from. Leave empty to use the number-selection priority configured in your dashboard settings | ### Step 4: Save and Publish[​](#step-4-save-and-publish "Direct link to Step 4: Save and Publish") Click **Save action** Review your complete workflow Toggle from **Draft** to **Published** *** ## Action Fields Explained[​](#action-fields-explained "Direct link to Action Fields Explained") ### Message Field[​](#message-field "Direct link to Message Field") Enter the message you want to send. You can: * Type plain text * Use **custom variables** (click the tag icon to insert) * Include emojis * Use line breaks for formatting **Example with variables:** ```text theme={null} Hi {{contact.first_name}} Thanks for reaching out! A member of our team will get back to you shortly.Meanwhile, feel free to reply here with any questions. ``` ### Attachments Field[​](#attachments-field "Direct link to Attachments Field") Attach a file to send with your message. You have two options: * **System upload** - Click to upload, or drag and drop a file * **Media library** - Select an existing file from your library This field is optional. ### WhatsApp Number Field[​](#whatsapp-number-field "Direct link to WhatsApp Number Field") Choose which connected WhatsApp instance sends the message. > **Connected WhatsApp instances.** Use the WhatsApp Settings dashboard to connect more WhatsApp instances. **Leave this field empty** to use the number-selection priority as configured in your dashboard settings. *** ## Example Use Cases[​](#example-use-cases "Direct link to Example Use Cases") ### Use Case 1: Instant Lead Follow-Up[​](#use-case-1-instant-lead-follow-up "Direct link to Use Case 1: Instant Lead Follow-Up") Reply to a new lead the moment they submit a form. **Trigger:** Form Submitted **Action:** Send WhatsApp Message * **Message:** ```text theme={null} Hi {{contact.first_name}}! Thanks for your interest. We received your request and will be in touch within the next few minutes. ``` *** ### Use Case 2: Auto-Reply to Inbound Messages[​](#use-case-2-auto-reply-to-inbound-messages "Direct link to Use Case 2: Auto-Reply to Inbound Messages") Acknowledge every inbound WhatsApp message automatically. **Trigger:** WhatsApp Inbound **Action:** Send WhatsApp Message * **Message:** ```text theme={null} Thanks for your message! We've received it and will reply shortly. ``` *** ## Important Notes[​](#important-notes "Direct link to Important Notes") ### Technical Details[​](#technical-details "Direct link to Technical Details") * Messages send from your connected WhatsApp number * Leaving **WhatsApp Number** empty uses your dashboard's number-selection priority * Supports text, emojis, and one attachment per message * Works with all standard CRM workflow triggers ### Best Practices[​](#best-practices "Direct link to Best Practices") * Keep messages concise and personal * Use relevant variables only * Test before publishing * Avoid over-messaging - too many messages cause fatigue *** ## FAQs[​](#faqs "Direct link to FAQs") The one you select in the **WhatsApp Number** field. If you leave it empty, it uses the number-selection priority configured in your WhatsApp dashboard settings. Yes. Use the **Attachments** field to upload a file (System upload) or pick one from the Media library. Yes. Click the tag icon in the Message field to insert custom variables like `{{contact.first_name}}`. The message will fail to send. We recommend setting up the [WhatsApp Disconnected](/automation/triggers/whatsapp-disconnected) trigger to get alerts when your number goes offline. *** ## Support[​](#support "Direct link to Support") If you need help with the setup or onboarding: * WhatsApp Support: [Chat on WhatsApp](https://wa.me/+12267248710?text=Hi%2C%20I%20need%20help%20with%20Send%20WhatsApp%20Message.) * Email: [**support@goghl.ai**](mailto:support@goghl.ai) # Send WhatsApp Text to Speech Message Source: https://help.goghl.ai/automation/actions/send-whatsapp-text-to-speech-message The Send WhatsApp Text to Speech Message action is a custom WhatsApp provider workflow action that converts text into a natural-sounding voice note and sends it as a WhatsApp audio message - automatically, from any CRM workflow. > Why it matters: Recording voice notes by hand doesn't scale. With this action you can send personalized audio messages triggered by any CRM event-new leads, appointments, form submissions, replies, and more-using AI-generated voices. *** ## Key Benefits[​](#key-benefits "Direct link to Key Benefits") **Automated Voice Notes** - Send WhatsApp voice messages automatically from any workflow **Natural-Sounding Audio** - Convert text to lifelike speech using ElevenLabs voices **Personalized Content** - Use custom variables to tailor every message **Multi-Number Support** - Choose which connected WhatsApp number sends the message **Workflow Integration** - Combine with any CRM trigger for powerful automation *** ## Who Should Use It[​](#who-should-use-it "Direct link to Who Should Use It") **Sales Teams** - Instantly follow up with new leads using a personal voice note **Support Teams** - Send confirmations and updates automatically **Agencies** - Automate client-facing messaging across sub-accounts **Operations** - Send reminders, alerts, and status updates **Marketers** - Deliver timely, personalized WhatsApp audio touches *** ## Requirements[​](#requirements "Direct link to Requirements") Before using this action: **Update your WhatsApp provider app** to the latest version * Go to **App Marketplace → Installed Apps → WhatsApp provider → Update** **Connect a WhatsApp number** * Use the **WhatsApp Settings dashboard** to connect one or more WhatsApp instances **Enable Text-to-Speech** * Add your **ElevenLabs API Key** and toggle **Enable Text-to-Speech** in **WhatsApp → Settings**. See the [Text-to-Speech setup guide](/features/text-to-speech) for details. *** ## How to Set Up[​](#how-to-set-up "Direct link to How to Set Up") ### Step 1: Create or Edit a Workflow[​](#step-1-create-or-edit-a-workflow "Direct link to Step 1: Create or Edit a Workflow") Go to **Automation → Workflows** Create a new workflow or edit an existing one Add your desired trigger (Form Submitted, WhatsApp Inbound, Appointment Booked, etc.) ### Step 2: Add the Action[​](#step-2-add-the-action "Direct link to Step 2: Add the Action") Click **+** or **Add New Action** after your trigger Switch to the **Apps** tab Click the **WhatsApp provider** app icon Select **Send WhatsApp Text to Speech Message** Send WhatsApp Text to Speech Message ### Step 3: Configure the Action[​](#step-3-configure-the-action "Direct link to Step 3: Configure the Action") | Field | Required | Description | | ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------- | | **Connected WhatsApp** | No | The connected number to send from. Leave empty to use the number-selection priority configured in your dashboard settings | | **API Key** | No | Your ElevenLabs API Key used to generate the audio. Leave empty to use the key configured in **WhatsApp → Settings** | | **Voice Model** | No | The ElevenLabs voice model used for speech generation | | **Voice** | No | The ElevenLabs voice that reads your message | | **Custom Voice** | No | A custom (cloned) ElevenLabs Voice ID to use instead of a library voice | | **Message** | Yes | The text to convert to speech (supports custom variables) | ### Step 4: Save and Publish[​](#step-4-save-and-publish "Direct link to Step 4: Save and Publish") Click **Save action** Review your complete workflow Toggle from **Draft** to **Published** *** ## Action Fields Explained[​](#action-fields-explained "Direct link to Action Fields Explained") ### API Key Field[​](#api-key-field "Direct link to API Key Field") Your **ElevenLabs API Key**, used to generate the audio. This field is optional - leave it empty to use the API Key configured in **WhatsApp → Settings**. See the [Text-to-Speech setup guide](/features/text-to-speech#how-to-get-your-elevenlabs-api-key) for how to create one. ### Voice Model Field[​](#voice-model-field "Direct link to Voice Model Field") Select the **ElevenLabs voice model** used to generate the speech. Different models offer trade-offs between quality, speed, and language support. ### Voice Field[​](#voice-field "Direct link to Voice Field") Select the **ElevenLabs voice** that reads your message from the list of available voices. ### Custom Voice Field[​](#custom-voice-field "Direct link to Custom Voice Field") Provide a **custom (cloned) ElevenLabs Voice ID** to use instead of a library voice. Find Voice IDs in your [ElevenLabs Voice Library](https://elevenlabs.io/app/voice-library) - see [How to Find Voice IDs](/features/text-to-speech#how-to-find-voice-ids). ### Message Field[​](#message-field "Direct link to Message Field") Enter the text you want converted to speech. You can: * Type plain text * Use **custom variables** (click the tag icon to insert) **Example with variables:** ```text theme={null} Hi {{contact.first_name}}, your appointment is confirmed. We look forward to seeing you! ``` ### Connected WhatsApp Field[​](#connected-whatsapp-field "Direct link to Connected WhatsApp Field") Choose which connected WhatsApp instance sends the message. > **Connected WhatsApp instances.** Use the WhatsApp Settings dashboard to connect more WhatsApp instances. **Leave this field empty** to use the number-selection priority as configured in your dashboard settings. *** ## Example Use Cases[​](#example-use-cases "Direct link to Example Use Cases") ### Use Case 1: Personalized Voice Welcome[​](#use-case-1-personalized-voice-welcome "Direct link to Use Case 1: Personalized Voice Welcome") Greet a new lead with a personal-sounding voice note the moment they submit a form. **Trigger:** Form Submitted **Action:** Send WhatsApp Text to Speech Message * **Message:** ```text theme={null} Hi {{contact.first_name}}! Thanks for your interest. We received your request and will be in touch shortly. ``` *** ### Use Case 2: Appointment Reminder[​](#use-case-2-appointment-reminder "Direct link to Use Case 2: Appointment Reminder") Send a friendly voice reminder before an appointment. **Trigger:** Appointment Reminder Time **Action:** Send WhatsApp Text to Speech Message * **Message:** ```text theme={null} Hi {{contact.first_name}}, this is a reminder about your appointment on {{contact.appointment_date}}. See you soon! ``` *** ## Important Notes[​](#important-notes "Direct link to Important Notes") ### Technical Details[​](#technical-details "Direct link to Technical Details") * Audio is generated with the **ElevenLabs API** and sent as a WhatsApp voice note * Requires a valid **ElevenLabs API Key** with **Text-to-Speech** and **Voices** permissions * Leaving **WhatsApp Number** empty uses your dashboard's number-selection priority * Works with all standard CRM workflow triggers ### Best Practices[​](#best-practices "Direct link to Best Practices") * Keep messages concise - we recommend under 2-3 minutes (approximately 300-450 words) * Use relevant variables only * Test before publishing * Avoid over-messaging - too many messages cause fatigue *** ## FAQs[​](#faqs "Direct link to FAQs") The one you select in the **WhatsApp Number** field. If you leave it empty, it uses the number-selection priority configured in your WhatsApp dashboard settings. From your [ElevenLabs Voice Library](https://elevenlabs.io/app/voice-library). Click any voice and copy its Voice ID. See [How to Find Voice IDs](/features/text-to-speech#how-to-find-voice-ids). Yes. Click the tag icon in the Message field to insert custom variables like `{{contact.first_name}}`. The message will fail to send. We recommend setting up the [WhatsApp Disconnected](/automation/triggers/whatsapp-disconnected) trigger to get alerts when your number goes offline. *** ## Support[​](#support "Direct link to Support") If you need help with the setup or onboarding: * WhatsApp Support: [Chat on WhatsApp](https://wa.me/+12267248710?text=Hi%2C%20I%20need%20help%20with%20Send%20WhatsApp%20Text%20to%20Speech%20Message.) * Email: [**support@goghl.ai**](mailto:support@goghl.ai) # Wait Step Source: https://help.goghl.ai/automation/actions/wait-step The Wait Step action is a custom Message provider workflow action that pauses a workflow for a contact until they reply on WhatsApp, iMessage, or SMS, or until a timeout you set elapses. Build conversational, reply-aware automations that branch on whether the contact responds. > Why it matters: Most workflow steps fire and move on. The Wait Step lets a workflow pause and listen for the contact's next message, so you can confirm appointments, qualify leads, and run back-and-forth conversations that react to what the contact actually says-and fall back gracefully when they go quiet. *** ## How It Works[​](#how-it-works "Direct link to How It Works") When the workflow reaches the Wait Step, the contact is **parked** and the workflow stops advancing for them: * If the contact **sends any message** on the selected channel (to the connected number you chose, or any connected number if you leave it blank), the workflow continues down the **Customer Responded** branch. Their message and any attachments are available to the steps that follow. * If the **timeout elapses** with no reply, the workflow continues down the **Timeout** branch. Only one branch ever runs-whichever happens first. A reply that arrives after the timeout, or a timeout that fires after a reply, is ignored. The Wait Step resolves on **any** inbound message from the contact, not a specific keyword. To act on what they said (e.g. "YES" vs "NO"), add an **If/Else** step after the **Customer Responded** branch that checks the reply text. *** ## How to Set Up[​](#how-to-set-up "Direct link to How to Set Up") ### Step 1: Create or Edit a Workflow[​](#step-1-create-or-edit-a-workflow "Direct link to Step 1: Create or Edit a Workflow") Go to **Automation → Workflows** Create a new workflow or edit an existing one Add a step that **sends the contact a message** before the wait (e.g. Send WhatsApp Message asking a question) ### Step 2: Add the Action[​](#step-2-add-the-action "Direct link to Step 2: Add the Action") Click **+** or **Add New Action** after your message step Switch to the **Apps** tab Click the **Message provider** app icon Select **Wait Step** Wait Step action ### Step 3: Configure the Action[​](#step-3-configure-the-action "Direct link to Step 3: Configure the Action") | Field | Required | Description | | -------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------- | | **Action Name** | Yes | A label for this action in the workflow (e.g. "Wait for reply") | | **Channel** | Yes | The channel to listen on: **WhatsApp**, **iMessage**, or **SMS** | | **Connected Number** | No | The connected number to wait on. Leave empty to accept a reply to **any** of your connected numbers for this contact and channel | | **Timeout** | No | How long to wait for a reply before taking the **Timeout** branch. Defaults to **7 days** if left empty | ### Step 4: Build the Branches[​](#step-4-build-the-branches "Direct link to Step 4: Build the Branches") After the Wait Step, the workflow splits into two pre-defined branches. Add the steps you want under each: **Customer Responded** - runs when the contact replies. Add your follow-up (e.g. book the appointment, tag the contact, send a thank-you) **Timeout** - runs when no reply arrives in time. Add your fallback (e.g. send a reminder, notify your team, mark the lead cold) ### Step 5: Save and Publish[​](#step-5-save-and-publish "Direct link to Step 5: Save and Publish") Click **Save action** Review your complete workflow, including both branches Toggle from **Draft** to **Published** *** ## Action Fields Explained[​](#action-fields-explained "Direct link to Action Fields Explained") ### Channel Field[​](#channel-field "Direct link to Channel Field") Choose which channel the contact's reply must arrive on: **WhatsApp**, **iMessage**, or **SMS**. Only a reply on this channel resolves the wait. Match this to the channel you used to message the contact just before the Wait Step. ### Connected Number Field[​](#connected-number-field "Direct link to Connected Number Field") Choose which connected number the reply must come to. > **Leave this field empty** to accept a reply to **any** of your connected numbers on the selected channel (for the same contact). Set it when you run multiple numbers and only want a reply to that specific line to satisfy the wait. ### Timeout Field[​](#timeout-field "Direct link to Timeout Field") Set how long the workflow should wait for a reply. When the timeout elapses with no reply, the **Timeout** branch runs. * Leaving it empty applies the default of **7 days**, so a wait never parks indefinitely * The timer starts the moment the workflow reaches the Wait Step *** ## Branches Explained[​](#branches-explained "Direct link to Branches Explained") ### Customer Responded[​](#customer-responded "Direct link to Customer Responded") Runs as soon as the contact sends a message on the selected channel. The reply is passed forward, so downstream steps can use: * The **message text** the contact sent * Any **attachments** (images, media) they included Use this to react to their answer, capture their response, or continue the conversation. ### Timeout[​](#timeout "Direct link to Timeout") Runs when the timeout elapses with no reply. Use it for reminders, escalations, or to move the contact into a different path when they don't respond. *** ## Example Use Cases[​](#example-use-cases "Direct link to Example Use Cases") ### Use Case 1: Appointment Confirmation[​](#use-case-1-appointment-confirmation "Direct link to Use Case 1: Appointment Confirmation") Ask the contact to confirm, and chase them if they go quiet. **Before the wait:** Send WhatsApp Message * **Message:** ```text theme={null} Reply YES to confirm your appointment tomorrow at 3 PM. ``` **Action:** Wait Step * **Channel:** WhatsApp * **Timeout:** 1 day * **Customer Responded:** Add an If/Else on the reply, tag "Confirmed", send a confirmation * **Timeout:** Send a reminder or notify the team to call *** ### Use Case 2: Lead Qualification[​](#use-case-2-lead-qualification "Direct link to Use Case 2: Lead Qualification") Ask a question and route based on whether they engage. **Before the wait:** Send Android SMS * **Message:** ```text theme={null} Are you still looking for a quote? Reply and we'll get right on it. ``` **Action:** Wait Step * **Channel:** SMS * **Timeout:** 2 days * **Customer Responded:** Assign to a rep and start the sales sequence * **Timeout:** Move the contact into a long-term nurture campaign *** ### Use Case 3: Re-Engagement[​](#use-case-3-re-engagement "Direct link to Use Case 3: Re-Engagement") Give a cold contact a chance to respond before dropping them. **Before the wait:** Send iMessage * **Message:** ```text theme={null} Haven't heard from you in a while, still interested? ``` **Action:** Wait Step * **Channel:** iMessage * **Timeout:** 3 days * **Customer Responded:** Re-add to your active pipeline * **Timeout:** Tag "Unresponsive" and stop messaging *** ## Important Notes[​](#important-notes "Direct link to Important Notes") ### Technical Details[​](#technical-details "Direct link to Technical Details") * The wait resolves on **any** inbound message from the contact on the selected channel, not a specific keyword * Match the **Channel** field to the channel you used to message the contact * Leaving **Connected Number** empty accepts a reply to any of your connected numbers on that channel * The default timeout is **7 days** when none is set * Only one branch runs-whichever happens first; a late reply or late timeout is ignored * The contact must have a phone number for replies to be matched ### Best Practices[​](#best-practices "Direct link to Best Practices") * Always send the contact a message **before** the Wait Step so they know to reply * Add an **If/Else** after **Customer Responded** to act on specific answers * Set a **Timeout** that matches your follow-up cadence-don't rely on the 7-day default unless that's intended * Always build out the **Timeout** branch so unresponsive contacts aren't left in limbo *** ## FAQs[​](#faqs "Direct link to FAQs") Any inbound message from the contact on the selected channel (and the connected number, if you specified one). It doesn't have to contain a specific word. To branch on the content, add an If/Else after the Customer Responded branch. The Timeout branch runs once the wait duration elapses. If you didn't set a timeout, the default is 7 days. Yes. On the Customer Responded branch, the reply's message text and any attachments are passed forward for use in the steps that follow. The one you pick in Connected Number. If you leave it empty, a reply to any of your connected numbers on the selected channel resolves the wait. No. Resolution is atomic-only the first event (reply or timeout) advances the workflow. The other is ignored. The action can't match replies without a phone number and will report an error. Make sure the contact has a valid phone before the Wait Step. Yes. Set the Channel field to the same channel you used to message the contact-only a reply on that channel resolves the wait. *** ## Support[​](#support "Direct link to Support") If you need help with the setup or onboarding: * WhatsApp Support: [Chat on WhatsApp](https://wa.me/+12267248710?text=Hi%2C%20I%20need%20help%20with%20the%20Wait%20Step%20action.) * Email: [**support@goghl.ai**](mailto:support@goghl.ai) # iMessage Source: https://help.goghl.ai/automation/imessage All iMessage workflow triggers and actions for GoHighLevel. ## iMessage triggers & actions Automate iMessage inside your GoHighLevel workflows. Use **triggers** to start a workflow when something happens, and **actions** to send messages as a step in any workflow. ## Actions Send an iMessage to a contact directly from your CRM workflows using your connected Apple device. Pause the workflow until the contact replies on iMessage or a timeout elapses, then branch. ## Triggers Fires when an iMessage arrives on your connected number, send auto-replies or route conversations. Fires when an iMessage is sent from your number, log activity or schedule follow-ups. # Migrate SMS Automations to WhatsApp Source: https://help.goghl.ai/automation/migrate-sms-to-whatsapp Move your workflows from HighLevel's native SMS trigger and actions to the WhatsApp QR custom provider's own triggers and actions. If you connected WhatsApp the legacy way, it **overrides your sub-account's native SMS**. Your workflows still say **Send SMS** and **Customer Replied**, but the messages go out over WhatsApp. That works. It just hides WhatsApp behind SMS - no attachments, no per-number routing, no WhatsApp filters, no reply-aware waits. The **WhatsApp QR custom provider** adds its own triggers and actions to the workflow builder, so your automations run on WhatsApp on purpose instead of by inheritance. This guide swaps them, one workflow at a time. | | **Legacy method (native SMS override)** | **WhatsApp QR custom provider** | | ----------------------- | ---------------------------------------------- | -------------------------------------------------------------------- | | **How WhatsApp runs** | It overrides the sub-account's native SMS | As its own channel, linked by QR scan | | **What you build with** | HighLevel's **native** SMS trigger and actions | The WhatsApp provider's own triggers and actions | | **Where they live** | The standard trigger and action lists | The **Apps** tab | | **What you get** | Plain text - WhatsApp treated as SMS | Attachments, per-number sending, WhatsApp filters, reply-aware waits | This page covers the **workflow side only**. For the connection itself, see [WhatsApp Setup](/whatsapp/full-setup) and [Legacy WhatsApp Setup](/whatsapp/sms-provider-setup). Nothing breaks if you do nothing. While the native SMS override is in place, native **Send SMS** keeps delivering over WhatsApp. Migrating is about gaining WhatsApp's real capabilities, not repairing a broken setup. *** ## Do you need this guide?[​](#do-you-need-this-guide "Direct link to Do you need this guide?") You do if any published workflow uses one of these **and you expect it to reach people on WhatsApp**: * **Send SMS** action * **Customer Replied** trigger with Reply Channel set to SMS * **Internal Notification** action on SMS or WhatsApp * **Wait** action set to *the contact to reply* on SMS *** ## Before you start[​](#before-you-start "Direct link to Before you start") **App Marketplace → Installed Apps → WhatsApp provider → Update** Use the **WhatsApp Settings dashboard** to connect one or more instances Until both are done, the WhatsApp triggers and actions will not appear on the **Apps** tab. If you cannot find them, you are either on the wrong tab or the app needs updating. *** ## What replaces what[​](#what-replaces-what "Direct link to What replaces what") | Today (native) | Switch to | | -------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | | **Customer Replied**, Reply Channel = SMS | [**WhatsApp Inbound**](/automation/triggers/whatsapp-inbound) trigger | | *Nothing - the trigger always had a contact* | **Find Contact** or **Create Contact** action | | **Send SMS** | [**Send WhatsApp Message**](/automation/actions/send-whatsapp-message) action | | **Internal Notification**, SMS or WhatsApp | [**Send Internal WhatsApp Notification**](/automation/actions/internal-notification-action-whatsapp) action | | **Wait**, *the contact to reply* on SMS | [**Wait Step**](/automation/actions/wait-step), Channel = WhatsApp | Every WhatsApp replacement lives on the **Apps** tab → **WhatsApp provider** app, never in the standard lists. **Find Contact** and **Create Contact** are HighLevel built-ins, already in every workflow. *** ## How to migrate a workflow[​](#how-to-migrate-a-workflow "Direct link to How to migrate a workflow") Work through one workflow at a time. Copy the workflow and rename it, for example "Lead Follow-Up - WhatsApp". The original stays published and untouched while you build. Replace **Customer Replied** with **WhatsApp Inbound**, then add **Find Contact** or **Create Contact** directly below it. Everything downstream depends on the contact existing. Use the table above. Re-insert variables with the tag icon rather than pasting them, so they bind to the right field. Tag checks, Intent Type, and Replied to Workflow become **If/Else** conditions after the contact step. Message your connected number from your own phone and walk the whole path - reply arrives, contact resolved, message sends, internal alert lands. Only once the new one is confirmed, set the old workflow back to **Draft**. Contacts already in it finish normally. Never leave the old and new versions of the same workflow published at the same time - every contact gets messaged twice. *** ## 1. Customer Replied → WhatsApp Inbound[​](#1-customer-replied--whatsapp-inbound "Direct link to 1. Customer Replied → WhatsApp Inbound") | | **Customer Replied** | **WhatsApp Inbound** | | -------------- | --------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | | **Fires when** | A contact replies to a message | A message arrives on a connected WhatsApp number, including a first-ever message from an unknown number | | **Channels** | Email, SMS, WhatsApp, Social, All-in-One Chat | WhatsApp only | | **Filters** | Contains Phrase, Exact Match Phrase, Has Tag, Doesn't Have Tag, Intent Type, Replied to Workflow, Reply Channel | Contact ID, Lid, Location ID, Message, Receiver Name, Receiver Phone Number, Sender Name, Sender Phone Number, WhatsApp Username | | **Contact** | Always a known contact | You resolve it yourself - see [step 2](#2-resolve-the-contact-find-contact-or-create-contact) | WhatsApp Inbound Trigger **What you gain** - filtering on *Receiver Phone Number* lets you run a different workflow per connected number, and the *Message contains* filter covers the keyword routing you did with **Contains Phrase**. | Before | After | | ------------------------------------------------------------------ | ---------------------------------------------------------------------------- | | Customer Replied, Reply Channel = SMS, Contains Phrase = "pricing" | WhatsApp Inbound, Message *contains* "pricing" → Find Contact → your actions | *** ## 2. Resolve the contact: Find Contact or Create Contact[​](#2-resolve-the-contact-find-contact-or-create-contact "Direct link to 2. Resolve the contact: Find Contact or Create Contact") This step has no native equivalent, and skipping it is the number-one migration mistake. **Customer Replied** always handed the next step a known contact. **WhatsApp Inbound** does not - the message can come from a number that is not in your CRM yet. Add this action immediately after the trigger. Both are HighLevel built-in actions, so there is nothing extra to install. Pick one: | Action | Map this field | To this value | | ------------------ | -------------- | --------------------------------------------------------------------- | | **Find Contact** | **ContactID** | *Whatsapp, imessage and SMS → Whatsapp Inbound → ContactID* | | **Create Contact** | **Phone** | *Whatsapp, imessage and SMS → Whatsapp Inbound → Sender Phone Number* | Click **+ Add** below the trigger Search for and select **Find Contact** or **Create Contact** Map the field from the table above, inserting the value with the tag icon Click **Save action** Create Contact Action **Which one?** Use **Create Contact** when the sender may be new to your CRM - it skips creation if the contact already exists, so it never makes duplicates. Use **Find Contact** when every sender is already a saved contact and you only need to look them up. Every action after this one - Send WhatsApp Message, Send Email, Create Task - then has a contact to work with. *** ## 3. Send SMS → Send WhatsApp Message[​](#3-send-sms--send-whatsapp-message "Direct link to 3. Send SMS → Send WhatsApp Message") | | **Send SMS** | **Send WhatsApp Message** | | ------------------ | ----------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | | **Channel** | SMS, reaching WhatsApp only because of the native SMS override | WhatsApp, explicitly | | **Media** | Attachments go as MMS, subject to carrier size limits, and oversized files become media-library links | Real attachments: images, video, documents, from upload or the Media library | | **Sending number** | Not selectable | Optional **WhatsApp Number** field, or leave empty for your dashboard's priority order | | **Formatting** | Plain SMS text | Custom variables, emojis, and line breaks render as written | Send WhatsApp Message | Before | After | | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | | Send SMS: "Hi `{{contact.first_name}}`, thanks! Link: example.com/brochure" | Send WhatsApp Message: "Hi `{{contact.first_name}}`! Thanks for your interest, we will be in touch shortly." with the brochure PDF attached | *** ## 4. Internal Notification → Send Internal WhatsApp Notification[​](#4-internal-notification--send-internal-whatsapp-notification "Direct link to 4. Internal Notification → Send Internal WhatsApp Notification") | | **Internal Notification** | **Send Internal WhatsApp Notification** | | ---------------------- | ------------------------------------------ | -------------------------------------------------- | | **Delivery** | Pick one: Email, In-App, SMS, or WhatsApp | WhatsApp **and** the CRM at once | | **Recipients** | All Users, Particular Users, Assigned User | Assigned Users, Particular User, **Custom Number** | | **Outside the team** | Not possible | **Custom Number** reaches any phone number | | **WhatsApp templates** | Must use approved templates | None needed - write the message you want | Send Internal WhatsApp Notification Map your old recipient setting onto **To User Type**: | Was | Set To User Type to | | ----------------------------- | -------------------------------------------------------- | | Assigned User | **Assigned Users** | | Particular Users | **Particular User**, then pick people in **Choose User** | | All Users | **Particular User**, and select everyone who needs it | | An external or on-call number | **Custom Number** | | Before | After | | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | | Customer Replied → Internal Notification, SMS, Assigned User, "Contact replied" | WhatsApp Inbound → Find Contact → Send Internal WhatsApp Notification, Assigned Users, "`{{contact.first_name}}` just replied." | *** ## 5. Wait → Wait Step[​](#5-wait--wait-step "Direct link to 5. Wait → Wait Step") **Only one flavour of Wait migrates.** The native **Wait** handles eight kinds of waiting. The **Wait Step** replaces exactly one - *the contact to reply* - and only on your connected WhatsApp, iMessage, or SMS number. Everything else stays native, and the two work together in the same workflow. | What you want | Use | | ----------------------------------------------------------------------------- | --------------- | | A fixed delay, a date, a recurring schedule, an appointment offset | **Native Wait** | | A trigger-link click, an email open, a field condition, a team member's reply | **Native Wait** | | The *customer* to reply on your connected WhatsApp number | **Wait Step** | | To branch on whether they replied, and use what they said downstream | **Wait Step** | | A reply to one specific connected number only | **Wait Step** | **What you gain** * **The reply comes with it.** Message text and attachments are handed to the steps after **Customer Responded**, so you can branch on what the customer actually said * **Two named branches** - **Customer Responded** and **Timeout** - instead of one path with a timeout escape * **Per-number scoping** with the optional **Connected Number** field **Using both together** ```text theme={null} Send WhatsApp Message: "Hi {{contact.first_name}}, confirming tomorrow at 3pm. Reply YES to confirm." | Wait Step - Channel: WhatsApp - Timeout: 1 day |-- Customer Responded -> If/Else on the reply text | |-- contains "yes" -> add tag "confirmed" | |-- else -> Send Internal WhatsApp Notification to the assigned user |-- Timeout -> Native Wait (2 hours) -> Send WhatsApp Message: "Just checking you got this?" ``` *** ## FAQs[​](#faqs "Direct link to FAQs") Yes, and it is the recommended way to migrate gradually. It is also required when part of the workflow needs a native-only feature, such as an email internal notification or a recurring-schedule Wait. They only appear under the **Apps** tab, never in the standard lists. If the Apps tab has no WhatsApp provider app, update it from **App Marketplace → Installed Apps** and connect at least one number. **Create Contact** when the sender may be new to your CRM - it skips creation for existing contacts, so no duplicates are made. **Find Contact** when every sender is already saved and you only need to look them up. They finish the workflow they are in. Setting it back to Draft only stops new contacts entering, so let in-flight contacts drain before you delete anything. Those filters do not exist on **WhatsApp Inbound**. Leave the trigger unfiltered or filter on message text, then add an **If/Else** after the contact step to check tags or any other contact field. Only the ones set to *the contact to reply* on SMS. Every other kind of Wait stays on the native action. *** ## Support[​](#support "Direct link to Support") If you need help with the migration: * WhatsApp Support: [Chat on WhatsApp](https://wa.me/+12267248710?text=Hi%2C%20I%20need%20help%20with%20migrating%20my%20SMS%20automations%20to%20WhatsApp.) * Email: [**support@goghl.ai**](mailto:support@goghl.ai) # Setup Source: https://help.goghl.ai/automation/setup Automate your messaging inside CRM workflows with custom triggers and actions for WhatsApp and iMessage. ## Automate messaging in CRM Message provider adds custom workflow **triggers** and **actions** to CRM so you can automate messaging across channels. Use **triggers** to start a workflow when something happens (a message arrives, a number disconnects, a call is missed), and **actions** to send messages as a step in any workflow. Triggers and actions appear natively in the CRM workflow builder once the Message provider app is installed, no extra configuration required. ## Choose a channel Each channel has its own set of triggers and actions. Open a channel below to see everything available. Send messages and group messages, and trigger workflows on inbound/outbound messages, disconnections, missed calls, and group participant changes. Send iMessages, and trigger workflows on inbound and outbound iMessages. Send SMS messages and trigger workflows on inbound and outbound SMS. # SMS Source: https://help.goghl.ai/automation/sms All SMS workflow triggers and actions. ## SMS triggers & actions Automate SMS inside your CRM workflows. Use **triggers** to start a workflow when something happens, and **actions** to send messages as a step in any workflow. ## Actions Send an SMS message to a contact directly from your CRM workflows using your connected Android device. Send internal notifications when SMS messages arrive or fail so your team can follow up. Pause the workflow until the contact replies via SMS or a timeout elapses, then branch. ## Triggers Fires when an SMS arrives on your connected number, send auto-replies or route conversations. Fires when an SMS is sent from your number, log activity or schedule follow-ups. # iMessage Inbound Source: https://help.goghl.ai/automation/triggers/imessage-inbound The trigger is a custom workflow trigger that fires automatically whenever an on your connected number. Use it to send instant auto-replies, route conversations to the right team, or notify staff the moment a customer reaches out. *** ## Key Benefits[​](#key-benefits "Direct link to Key Benefits") **Instant Response** - React the moment a customer's message lands **Smart Routing** - Direct conversations to the right rep or team **Never Miss a Lead** - Automate follow-up so no inbound message goes cold **Filtered Automation** - Trigger only on messages that match your criteria **Zero Manual Monitoring** - No need to watch the inbox around the clock *** ## Who Should Use It[​](#who-should-use-it "Direct link to Who Should Use It") **Sales teams** - Auto-respond and assign new conversations instantly **Support teams** - Acknowledge inbound messages and create tickets automatically **Agencies** - Standardize inbound message handling across client sub-accounts **High-volume operations** - Keep response times fast even at scale *** ## Requirements[​](#requirements "Direct link to Requirements") Before using this trigger, update your messaging provider app to the latest version: Go to **App Marketplace → Installed Apps** Find your **iMessage provider** app Click **Update** if available *** ## How to Set Up[​](#how-to-set-up "Direct link to How to Set Up") ### Step 1: Create a New Workflow[​](#step-1-create-a-new-workflow "Direct link to Step 1: Create a New Workflow") Go to **Automation → Workflows** Click **Create Workflow** or **+ Add** Select **Start from Scratch** ### Step 2: Add the Trigger[​](#step-2-add-the-trigger "Direct link to Step 2: Add the Trigger") Click **Add New Trigger** Switch to the **Apps** tab (not the default triggers) Find and click your **iMessage provider** app icon Select **iMessage Inbound** from the dropdown (Optional) Add **Filters** to narrow when the trigger fires Click **Save trigger** iMessage Inbound Trigger ### Step 3: Find or Create the Contact[​](#step-3-find-or-create-the-contact "Direct link to Step 3: Find or Create the Contact") Inbound messages often come from numbers that are not in your CRM yet. Every action that follows - sending a reply, assigning an owner, adding a tag - needs a contact record to act on. Add the **Find Contact** action right after the trigger to look up the sender. If the contact is not found, add **Create Contact** so the contact exists before the rest of the workflow runs. **Find Contact** and **Create Contact** are HighLevel built-in actions. They are already available in every workflow, so there is nothing extra to install. #### Find the contact Click **+ Add** below the trigger Search for and select **Find Contact** Under **Fields**, select **Contact ID** from the dropdown Click the tag icon in the value box and insert **Whatsapp, imessage and SMS → iMessage Inbound → Contact ID** Click **Save action** The workflow now splits into two branches: **Contact found** and **Contact not found**. Find Contact Branches #### Create the contact if not found Under the **Contact not found** branch, add the **Create Contact** action: Click **+ Add** below **Contact not found** Search for and select **Create Contact** Under **Fields**, select **Phone** from the dropdown Click the tag icon in the value box and insert **Whatsapp, imessage and SMS → iMessage Inbound → Sender Phone Number** Click **Save action** Create Contact Action #### Rejoin the branches So that new contacts run the same actions as existing ones, send the **Contact not found** branch back to the **Contact found** branch: Click **+ Add** below **Create Contact** Search for and select **Go To** Select the first action under the **Contact found** branch as the target (add that action first if you have not yet - see Step 4) Click **Save action** Existing contacts go straight down the **Contact found** branch. New contacts are created first, then jump to the same actions - no duplicate record is made either way. Once these actions are saved, continue to your send action or any other step you want to run for that contact. ### Step 4: Add Your Actions[​](#step-4-add-your-actions "Direct link to Step 4: Add Your Actions") With the contact in place, add the actions you want to execute when an inbound iMessage is received: * **Send iMessage** → Reply to the contact on the same channel * **Send Email** → Notify the assigned rep * **Send Internal Notification** → Alert your team inside the CRM * **Create Task** → Queue a follow-up * **Add to Workflow / Pipeline** → Move the contact through your funnel ### Step 5: Save and Publish[​](#step-5-save-and-publish "Direct link to Step 5: Save and Publish") Review your workflow Click **Save** Toggle workflow from **Draft** to **Published** *** ## Available Filters[​](#available-filters "Direct link to Available Filters") Use filters to control exactly which inbound iMessages start the workflow. Each filter can be paired with an operator (equals, contains, etc.). | Filter | Description | | --------------------- | ------------------------------------------------------------- | | Contact ID | The unique ID of the contact who sent the message | | Location ID | The CRM location (sub-account) where the message was received | | Message | The text content of the inbound message | | Receiver Name | The name of the account that received the message | | Receiver Phone Number | The number that received the message (your iMessage number) | | Sender Name | The name of the contact who sent the message | | Sender Phone Number | The phone number of the contact who sent the message | *** ## Example Use Cases[​](#example-use-cases "Direct link to Example Use Cases") ### Use Case 1: Instant Auto-Reply[​](#use-case-1-instant-auto-reply "Direct link to Use Case 1: Instant Auto-Reply") Acknowledge every inbound message immediately. **Trigger:** iMessage Inbound **Action:** Send a reply confirming you received the message and will respond shortly. *** ### Use Case 2: Route by Keyword[​](#use-case-2-route-by-keyword "Direct link to Use Case 2: Route by Keyword") Send leads to the right team based on what they say. **Trigger:** iMessage Inbound **Filter:** Message **contains** "pricing" **Action:** Notify the sales team and create a high-priority follow-up task. *** ## Important Notes[​](#important-notes "Direct link to Important Notes") ### Technical Details[​](#technical-details "Direct link to Technical Details") * The trigger fires **once per inbound message** * Filters are optional - leave them blank to fire on every inbound iMessage * Executes immediately when the message is received ### Best Practices[​](#best-practices "Direct link to Best Practices") * Add **Find Contact** as the first action, with **Create Contact** on the **Contact not found** branch, so later steps always have a contact to work with * Use the **Message** filter to build keyword-based routing flows * Use the **Location ID** filter when managing multiple sub-accounts * Test your workflow by sending a message to your connected number *** ## FAQs[​](#faqs "Direct link to FAQs") No. Filters are optional. Without them, the trigger fires on every inbound iMessage. Yes. Use the **Message** or **Sender** filters to build separate workflows for different conditions. **Find Contact** locates it and the workflow continues down the **Contact found** branch. **Create Contact** only runs on the **Contact not found** branch, so no duplicate contact is made. Add them whenever the workflow can receive a message from a number that is not in your CRM yet, especially if **Do not create new Contacts** is enabled on the instance. If every sender is already a saved contact, **Find Contact** on its own is enough. *** ## Support[​](#support "Direct link to Support") If you need help with the setup or onboarding: * WhatsApp Support: [Chat on WhatsApp](https://wa.me/+12267248710?text=Hi%2C%20I%20need%20help%20with%20iMessage%20Inbound.) * Email: [**support@goghl.ai**](mailto:support@goghl.ai) # iMessage Outbound Source: https://help.goghl.ai/automation/triggers/imessage-outbound The trigger is a custom workflow trigger that fires automatically whenever an from your connected number. Use it to log outgoing activity, schedule follow-ups after a reply goes out, or sync sent messages to other systems. *** ## Key Benefits[​](#key-benefits "Direct link to Key Benefits") **Activity Tracking** - Capture every outbound message automatically **Automated Follow-Up** - Schedule the next step the moment a reply is sent **Source Awareness** - Distinguish manual replies from automated sends **Filtered Automation** - Trigger only on messages that match your criteria **Zero Manual Logging** - No need to record outgoing activity by hand *** ## Who Should Use It[​](#who-should-use-it "Direct link to Who Should Use It") **Sales teams** - Trigger follow-up sequences after a rep replies **Support teams** - Log outbound responses for reporting and SLAs **Agencies** - Audit outbound messaging across client sub-accounts **Operations teams** - Sync sent-message data into reporting tools *** ## Requirements[​](#requirements "Direct link to Requirements") Before using this trigger, update your messaging provider app to the latest version: Go to **App Marketplace → Installed Apps** Find your **iMessage provider** app Click **Update** if available *** ## How to Set Up[​](#how-to-set-up "Direct link to How to Set Up") ### Step 1: Create a New Workflow[​](#step-1-create-a-new-workflow "Direct link to Step 1: Create a New Workflow") Go to **Automation → Workflows** Click **Create Workflow** or **+ Add** Select **Start from Scratch** ### Step 2: Add the Trigger[​](#step-2-add-the-trigger "Direct link to Step 2: Add the Trigger") Click **Add New Trigger** Switch to the **Apps** tab (not the default triggers) Find and click your **iMessage provider** app icon Select **iMessage Outbound** from the dropdown (Optional) Add **Filters** to narrow when the trigger fires Click **Save trigger** iMessage Outbound Trigger ### Step 3: Add Your Actions[​](#step-3-add-your-actions "Direct link to Step 3: Add Your Actions") Add any actions you want to execute when an outbound iMessage is sent: * **Wait + Send Follow-Up** → Schedule the next message * **Create Task** → Queue a check-in * **Update Contact / Custom Field** → Record last-contacted info * **Send Internal Notification** → Notify a manager of the send ### Step 4: Save and Publish[​](#step-4-save-and-publish "Direct link to Step 4: Save and Publish") Review your workflow Click **Save** Toggle workflow from **Draft** to **Published** *** ## Available Filters[​](#available-filters "Direct link to Available Filters") Use filters to control exactly which outbound iMessages start the workflow. Each filter can be paired with an operator (equals, contains, etc.). | Filter | Description | | -------------------- | ----------------------------------------------------------- | | Contact ID | The unique ID of the contact the message was sent to | | Contact Phone Number | The phone number of the contact the message was sent to | | Location ID | The CRM location (sub-account) the message was sent from | | Message | The text content of the outbound message | | Sender Phone Number | The number the message was sent from (your iMessage number) | | Source | The origin of the message (e.g. manual send vs. automation) | *** ## Example Use Cases[​](#example-use-cases "Direct link to Example Use Cases") ### Use Case 1: Follow-Up After a Reply[​](#use-case-1-follow-up-after-a-reply "Direct link to Use Case 1: Follow-Up After a Reply") Keep the conversation moving automatically. **Trigger:** iMessage Outbound **Action:** Wait 1 day, then send a follow-up if the contact hasn't replied. *** ### Use Case 2: Log Manual Replies Only[​](#use-case-2-log-manual-replies-only "Direct link to Use Case 2: Log Manual Replies Only") Track only the messages your team sends by hand. **Trigger:** iMessage Outbound **Filter:** Source **equals** manual **Action:** Update a "Last Manual Contact" custom field on the contact. *** ## Important Notes[​](#important-notes "Direct link to Important Notes") ### Technical Details[​](#technical-details "Direct link to Technical Details") * The trigger fires **once per outbound message** * Filters are optional - leave them blank to fire on every outbound iMessage * The **Source** filter helps separate manual sends from automated ones ### Best Practices[​](#best-practices "Direct link to Best Practices") * Use the **Source** filter to avoid follow-up loops triggered by your own automations * Use the **Contact ID** filter for contact-specific flows * Test your workflow by sending a message from your connected number *** ## FAQs[​](#faqs "Direct link to FAQs") Yes. Outbound messages sent by automations can also fire this trigger. Use the **Source** filter to separate manual sends from automated ones and avoid loops. No. Filters are optional. Without them, the trigger fires on every outbound iMessage. *** ## Support[​](#support "Direct link to Support") If you need help with the setup or onboarding: * WhatsApp Support: [Chat on WhatsApp](https://wa.me/+12267248710?text=Hi%2C%20I%20need%20help%20with%20iMessage%20Outbound.) * Email: [**support@goghl.ai**](mailto:support@goghl.ai) # Message Failed Trigger Source: https://help.goghl.ai/automation/triggers/message-failed The Message Failed trigger is a custom workflow trigger that fires automatically whenever a message fails to be delivered. It works across all messaging channels - WhatsApp, iMessage, and Android SMS - so you can react to delivery failures, alert your team, or retry sends automatically. *** ## Key Benefits[​](#key-benefits "Direct link to Key Benefits") **Catch Failures Instantly** - React the moment a message fails to deliver **Channel Agnostic** - Works across WhatsApp, iMessage, and Android SMS **Smart Recovery** - Automate retries, fallbacks, or alerts on failure **Filtered Automation** - Trigger only on the error codes or channels you care about **Zero Manual Monitoring** - No need to watch logs for failed sends *** ## Who Should Use It[​](#who-should-use-it "Direct link to Who Should Use It") **Sales teams** - Get notified the instant an outreach message fails **Support teams** - Catch undelivered replies before they cost you a customer **Agencies** - Monitor delivery health across client sub-accounts **Operations teams** - Trigger fallbacks and clean up bad contact data automatically *** ## Requirements[​](#requirements "Direct link to Requirements") Before using this trigger, update your messaging provider app to the latest version: Go to **App Marketplace → Installed Apps** Find your messaging provider app (**WhatsApp provider**, **iMessage provider**, or **SMS(Android) provider**) Click **Update** if available *** ## How to Set Up[​](#how-to-set-up "Direct link to How to Set Up") ### Step 1: Create a New Workflow[​](#step-1-create-a-new-workflow "Direct link to Step 1: Create a New Workflow") Go to **Automation → Workflows** Click **Create Workflow** or **+ Add** Select **Start from Scratch** ### Step 2: Add the Trigger[​](#step-2-add-the-trigger "Direct link to Step 2: Add the Trigger") Click **Add New Trigger** Switch to the **Apps** tab (not the default triggers) Find and click your messaging provider app icon Select **Message Failed** from the dropdown (Optional) Add **Filters** to narrow when the trigger fires Click **Save trigger** Message Failed Trigger ### Step 3: Add Your Actions[​](#step-3-add-your-actions "Direct link to Step 3: Add Your Actions") Add any actions you want to execute when a message fails: * **Send Internal Notification** → Alert your team inside the CRM * **Wait + Resend** → Retry the message after a delay * **Update Contact / Custom Field** → Flag the contact for review * **Create Task** → Queue a manual follow-up ### Step 4: Save and Publish[​](#step-4-save-and-publish "Direct link to Step 4: Save and Publish") Review your workflow Click **Save** Toggle workflow from **Draft** to **Published** *** ## Available Filters[​](#available-filters "Direct link to Available Filters") Use filters to control exactly which failed messages start the workflow. Each filter can be paired with an operator (equals, contains, etc.). | Filter | Description | | ----------------------- | ----------------------------------------------------------------------------------------------- | | Contact ID | The unique ID of the contact the message was sent to | | Location ID | The CRM location (sub-account) where the message failed | | Error Code | The specific failure code returned (see [Error Codes](#error-codes) below). Choose one or more. | | Error Type | The category of failure returned. Choose one or more. | | Channel Type | The channel the message was sent on (e.g. whatsApp, imessage, sms) | | Contact Phone Number | The phone number of the contact the message was sent to | | Whatsapp Instance Index | The index of the WhatsApp instance that attempted the send | | Phone Number Used | The number the message was sent from | *** ## Error Codes[​](#error-codes "Direct link to Error Codes") Use these codes with the **Error Code** filter to build precise recovery flows. | Code | What It Means | | ---- | ----------------------------------------------------------------------------------------------------------------- | | 101 | No connected WhatsApp instances exist for the location. Nothing can send. | | 102 | A manual override `{WA#N}` was used in the message body, but instance N does not exist. | | 103 | A manual override `{WA#N}` was used, but that instance is currently not connected. | | 104 | The contact has a `wa:` tag, but that WhatsApp number is not connected. | | 105 | The contact's assigned user owns a WhatsApp instance, but it is not connected. | | 106 | All sender-selection rules were tried; no connected instance was available. | | 107 | The logged-in GHL user's WhatsApp instance is not connected. | | 108 | The workflow specified a sender number that exists but is currently offline. The system retried before failing. | | 109 | The WhatsApp API rejected the message after multiple retries. | | 110 | The recipient does not have a WhatsApp account. The contact is also auto-tagged with **Invalid WhatsApp Number**. | | 111 | The workflow specified a sender number that is not registered for this location at all. | *** ## Example Use Cases[​](#example-use-cases "Direct link to Example Use Cases") ### Use Case 1: Alert the Team on a Failed Send[​](#use-case-1-alert-the-team-on-a-failed-send "Direct link to Use Case 1: Alert the Team on a Failed Send") Know the moment an outbound message doesn't go through. **Trigger:** Message Failed **Action:** Send an internal notification to the assigned user. *** ### Use Case 2: Clean Up Invalid Numbers[​](#use-case-2-clean-up-invalid-numbers "Direct link to Use Case 2: Clean Up Invalid Numbers") Flag contacts that can't receive messages. **Trigger:** Message Failed **Filter:** Error Code **is** 110 **Action:** Add a tag and move the contact out of active outreach. *** ## Important Notes[​](#important-notes "Direct link to Important Notes") ### Technical Details[​](#technical-details "Direct link to Technical Details") * The trigger fires **once per failed message** * Filters are optional - leave them blank to fire on every failed message * **Error Code** and **Error Type** support selecting multiple values * Use the **Channel Type** filter to scope the workflow to a single channel ### Best Practices[​](#best-practices "Direct link to Best Practices") * Use the **Error Code** filter to build targeted recovery flows (e.g. retry on 108, tag on 110) * Use the **Channel Type** filter when handling channels differently * Test your workflow by forcing a failure (e.g. sending to a disconnected number) *** ## FAQs[​](#faqs "Direct link to FAQs") All of them - WhatsApp, iMessage, and Android SMS. Use the **Channel Type** filter to narrow to one channel. Yes. The **Error Code** and **Error Type** filters are multi-select, so you can fire on one or several failure conditions. No. Filters are optional. Without them, the trigger fires on every failed message. *** ## Support[​](#support "Direct link to Support") If you need help with the setup or onboarding: * WhatsApp Support: [Chat on WhatsApp](https://wa.me/+12267248710?text=Hi%2C%20I%20need%20help%20with%20the%20Message%20Failed%20trigger.) * Email: [**support@goghl.ai**](mailto:support@goghl.ai) # Android SMS Inbound Source: https://help.goghl.ai/automation/triggers/sms-inbound The trigger is a custom SMS provider workflow trigger that fires automatically whenever a SMS is arrived on your connected (Android Device) number. Use it to send instant auto-replies, route conversations to the right team, or notify staff the moment a customer reaches out. *** ## Key Benefits[​](#key-benefits "Direct link to Key Benefits") **Instant Response** - React the moment a customer's message lands **Smart Routing** - Direct conversations to the right rep or team **Never Miss a Lead** - Automate follow-up so no inbound message goes cold **Filtered Automation** - Trigger only on messages that match your criteria **Zero Manual Monitoring** - No need to watch the inbox around the clock *** ## Who Should Use It[​](#who-should-use-it "Direct link to Who Should Use It") **Sales teams** - Auto-respond and assign new conversations instantly **Support teams** - Acknowledge inbound messages and create tickets automatically **Agencies** - Standardize inbound message handling across client sub-accounts **High-volume operations** - Keep response times fast even at scale *** ## Requirements[​](#requirements "Direct link to Requirements") Before using this trigger, update your messaging provider app to the latest version: Go to **App Marketplace → Installed Apps** Find your **SMS(Android) provider** app Click **Update** if available *** ## How to Set Up[​](#how-to-set-up "Direct link to How to Set Up") ### Step 1: Create a New Workflow[​](#step-1-create-a-new-workflow "Direct link to Step 1: Create a New Workflow") Go to **Automation → Workflows** Click **Create Workflow** or **+ Add** Select **Start from Scratch** ### Step 2: Add the Trigger[​](#step-2-add-the-trigger "Direct link to Step 2: Add the Trigger") Click **Add New Trigger** Switch to the **Apps** tab (not the default triggers) Find and click your **SMS(Android) provider** app icon Select **SMS Inbound** from the dropdown (Optional) Add **Filters** to narrow when the trigger fires Click **Save trigger** SMS Inbound Trigger ### Step 3: Find or Create the Contact[​](#step-3-find-or-create-the-contact "Direct link to Step 3: Find or Create the Contact") Inbound messages often come from numbers that are not in your CRM yet. Every action that follows - sending a reply, assigning an owner, adding a tag - needs a contact record to act on. Add the **Find Contact** action right after the trigger to look up the sender. If the contact is not found, add **Create Contact** so the contact exists before the rest of the workflow runs. **Find Contact** and **Create Contact** are HighLevel built-in actions. They are already available in every workflow, so there is nothing extra to install. #### Find the contact Click **+ Add** below the trigger Search for and select **Find Contact** Under **Fields**, select **Contact ID** from the dropdown Click the tag icon in the value box and insert **Whatsapp, imessage and SMS → SMS Inbound → Contact ID** Click **Save action** The workflow now splits into two branches: **Contact found** and **Contact not found**. Find Contact Branches #### Create the contact if not found Under the **Contact not found** branch, add the **Create Contact** action: Click **+ Add** below **Contact not found** Search for and select **Create Contact** Under **Fields**, select **Phone** from the dropdown Click the tag icon in the value box and insert **Whatsapp, imessage and SMS → SMS Inbound → Sender Phone Number** Click **Save action** Create Contact Action #### Rejoin the branches So that new contacts run the same actions as existing ones, send the **Contact not found** branch back to the **Contact found** branch: Click **+ Add** below **Create Contact** Search for and select **Go To** Select the first action under the **Contact found** branch as the target (add that action first if you have not yet - see Step 4) Click **Save action** Existing contacts go straight down the **Contact found** branch. New contacts are created first, then jump to the same actions - no duplicate record is made either way. Once these actions are saved, continue to your send action or any other step you want to run for that contact. ### Step 4: Add Your Actions[​](#step-4-add-your-actions "Direct link to Step 4: Add Your Actions") With the contact in place, add the actions you want to execute when an inbound SMS is received: * **Send SMS** → Reply to the contact on the same channel * **Send Email** → Notify the assigned rep * **Send Internal Notification** → Alert your team inside the CRM * **Create Task** → Queue a follow-up * **Add to Workflow / Pipeline** → Move the contact through your funnel ### Step 5: Save and Publish[​](#step-5-save-and-publish "Direct link to Step 5: Save and Publish") Review your workflow Click **Save** Toggle workflow from **Draft** to **Published** *** ## Available Filters[​](#available-filters "Direct link to Available Filters") Use filters to control exactly which inbound SMS messages start the workflow. Each filter can be paired with an operator (equals, contains, etc.). | Filter | Description | | --------------------- | ------------------------------------------------------------- | | Location ID | The CRM location (sub-account) where the message was received | | Receiver Phone Number | The number that received the message (your SMS number) | | Sender Phone Number | The phone number of the contact who sent the message | | Receiver Name | The name of the account that received the message | | Sender Name | The name of the contact who sent the message | | Message | The text content of the inbound message | | Contact ID | The unique ID of the contact who sent the message | *** ## Example Use Cases[​](#example-use-cases "Direct link to Example Use Cases") ### Use Case 1: Instant Auto-Reply[​](#use-case-1-instant-auto-reply "Direct link to Use Case 1: Instant Auto-Reply") Acknowledge every inbound message immediately. **Trigger:** SMS Inbound **Action:** Send a reply confirming you received the message and will respond shortly. *** ### Use Case 2: Route by Keyword[​](#use-case-2-route-by-keyword "Direct link to Use Case 2: Route by Keyword") Send leads to the right team based on what they say. **Trigger:** SMS Inbound **Filter:** Message **contains** "pricing" **Action:** Notify the sales team and create a high-priority follow-up task. *** ## Important Notes[​](#important-notes "Direct link to Important Notes") ### Technical Details[​](#technical-details "Direct link to Technical Details") * The trigger fires **once per inbound message** * Filters are optional - leave them blank to fire on every inbound SMS * Executes immediately when the message is received ### Best Practices[​](#best-practices "Direct link to Best Practices") * Add **Find Contact** as the first action, with **Create Contact** on the **Contact not found** branch, so later steps always have a contact to work with * Use the **Message** filter to build keyword-based routing flows * Use the **Location ID** filter when managing multiple sub-accounts * Test your workflow by sending a message to your connected number *** ## FAQs[​](#faqs "Direct link to FAQs") No. Filters are optional. Without them, the trigger fires on every inbound SMS. Yes. Use the **Message** or **Sender** filters to build separate workflows for different conditions. **Find Contact** locates it and the workflow continues down the **Contact found** branch. **Create Contact** only runs on the **Contact not found** branch, so no duplicate contact is made. Add them whenever the workflow can receive a message from a number that is not in your CRM yet, especially if **Do not create new Contacts** is enabled on the instance. If every sender is already a saved contact, **Find Contact** on its own is enough. *** ## Support[​](#support "Direct link to Support") If you need help with the setup or onboarding: * WhatsApp Support: [Chat on WhatsApp](https://wa.me/+12267248710?text=Hi%2C%20I%20need%20help%20with%20SMS%20Inbound.) * Email: [**support@goghl.ai**](mailto:support@goghl.ai) # Android SMS Outbound Source: https://help.goghl.ai/automation/triggers/sms-outbound The SMS Outbound trigger fires automatically whenever an outbound text message is sent from your connected (Android Device) number. Use it to log outgoing activity, schedule follow-ups after a reply goes out, or sync sent messages to other systems. *** ## Key Benefits[​](#key-benefits "Direct link to Key Benefits") **Activity Tracking** - Capture every outbound message automatically **Automated Follow-Up** - Schedule the next step the moment a reply is sent **Source Awareness** - Distinguish manual replies from automated sends **Filtered Automation** - Trigger only on messages that match your criteria **Zero Manual Logging** - No need to record outgoing activity by hand *** ## Who Should Use It[​](#who-should-use-it "Direct link to Who Should Use It") **Sales teams** - Trigger follow-up sequences after a rep replies **Support teams** - Log outbound responses for reporting and SLAs **Agencies** - Audit outbound messaging across client sub-accounts **Operations teams** - Sync sent-message data into reporting tools *** ## Requirements[​](#requirements "Direct link to Requirements") Before using this trigger, update your messaging provider app to the latest version: Go to **App Marketplace → Installed Apps** Find your **SMS(Android) provider** app Click **Update** if available *** ## How to Set Up[​](#how-to-set-up "Direct link to How to Set Up") ### Step 1: Create a New Workflow[​](#step-1-create-a-new-workflow "Direct link to Step 1: Create a New Workflow") Go to **Automation → Workflows** Click **Create Workflow** or **+ Add** Select **Start from Scratch** ### Step 2: Add the Trigger[​](#step-2-add-the-trigger "Direct link to Step 2: Add the Trigger") Click **Add New Trigger** Switch to the **Apps** tab (not the default triggers) Find and click your **SMS(Android) provider** app icon Select **SMS Outbound** from the dropdown (Optional) Add **Filters** to narrow when the trigger fires Click **Save trigger** SMS Outbound Trigger ### Step 3: Add Your Actions[​](#step-3-add-your-actions "Direct link to Step 3: Add Your Actions") Add any actions you want to execute when an outbound SMS is sent: * **Wait + Send Follow-Up** → Schedule the next message * **Create Task** → Queue a check-in * **Update Contact / Custom Field** → Record last-contacted info * **Send Internal Notification** → Notify a manager of the send ### Step 4: Save and Publish[​](#step-4-save-and-publish "Direct link to Step 4: Save and Publish") Review your workflow Click **Save** Toggle workflow from **Draft** to **Published** *** ## Available Filters[​](#available-filters "Direct link to Available Filters") Use filters to control exactly which outbound SMS messages start the workflow. Each filter can be paired with an operator (equals, contains, etc.). | Filter | Description | | -------------------- | ----------------------------------------------------------- | | Location ID | The CRM location (sub-account) the message was sent from | | Source | The origin of the message (e.g. manual send vs. automation) | | Contact ID | The unique ID of the contact the message was sent to | | Contact Phone Number | The phone number of the contact the message was sent to | | Message | The text content of the outbound message | | Sender Phone Number | The number the message was sent from (your SMS number) | *** ## Example Use Cases[​](#example-use-cases "Direct link to Example Use Cases") ### Use Case 1: Follow-Up After a Reply[​](#use-case-1-follow-up-after-a-reply "Direct link to Use Case 1: Follow-Up After a Reply") Keep the conversation moving automatically. **Trigger:** SMS Outbound **Action:** Wait 1 day, then send a follow-up if the contact hasn't replied. *** ### Use Case 2: Log Manual Replies Only[​](#use-case-2-log-manual-replies-only "Direct link to Use Case 2: Log Manual Replies Only") Track only the messages your team sends by hand. **Trigger:** SMS Outbound **Filter:** Source **equals** manual **Action:** Update a "Last Manual Contact" custom field on the contact. *** ## Important Notes[​](#important-notes "Direct link to Important Notes") ### Technical Details[​](#technical-details "Direct link to Technical Details") * The trigger fires **once per outbound message** * Filters are optional - leave them blank to fire on every outbound SMS * The **Source** filter helps separate manual sends from automated ones ### Best Practices[​](#best-practices "Direct link to Best Practices") * Use the **Source** filter to avoid follow-up loops triggered by your own automations * Use the **Contact ID** filter for contact-specific flows * Test your workflow by sending a message from your connected number *** ## FAQs[​](#faqs "Direct link to FAQs") Yes. Outbound messages sent by automations can also fire this trigger. Use the **Source** filter to separate manual sends from automated ones and avoid loops. No. Filters are optional. Without them, the trigger fires on every outbound SMS. *** ## Support[​](#support "Direct link to Support") If you need help with the setup or onboarding: * WhatsApp Support: [Chat on WhatsApp](https://wa.me/+12267248710?text=Hi%2C%20I%20need%20help%20with%20SMS%20Outbound.) * Email: [**support@goghl.ai**](mailto:support@goghl.ai) # WhatsApp Disconnected Source: https://help.goghl.ai/automation/triggers/whatsapp-disconnected The trigger is a custom Whatsapp provider workflow trigger that fires automatically whenever a WhatsApp number disconnects from your CRM. Use it to build automated alerts, create reconnection tasks, or notify your team instantly when a connection is lost. *** ## Key Benefits[​](#key-benefits "Direct link to Key Benefits") **Instant Alerts** - Know immediately when a WhatsApp number goes offline **Prevent Missed Messages** - Take action before leads go unanswered **Multi-Account Monitoring** - Track disconnections across all your sub-accounts **Automated Recovery** - Trigger notifications to reconnect quickly **Zero Manual Monitoring** - No need to constantly check connection status *** ## Who Should Use It[​](#who-should-use-it "Direct link to Who Should Use It") **Agencies** - Monitor client WhatsApp numbers and alert account managers instantly **Teams with multiple numbers** - Track which numbers need attention across locations **High-volume operations** - Ensure 24/7 WhatsApp availability for lead response **Remote teams** - Get notified when field devices lose connection *** ## Requirements[​](#requirements "Direct link to Requirements") Before using this trigger, update your Whatsapp provider app to the latest version: Go to **App Marketplace → Installed Apps** Find **Whatsapp provider** Click **Update** if available *** ## How to Set Up[​](#how-to-set-up "Direct link to How to Set Up") ### Step 1: Create a New Workflow[​](#step-1-create-a-new-workflow "Direct link to Step 1: Create a New Workflow") Go to **Automation → Workflows** Click **Create Workflow** or **+ Add** Select **Start from Scratch** ### Step 2: Add the Trigger[​](#step-2-add-the-trigger "Direct link to Step 2: Add the Trigger") Click **Add New Trigger** Switch to the **Apps** tab (not the default triggers) Find and click the **Whatsapp provider** app icon Select **WhatsApp Disconnected** from the dropdown Click **Save trigger** WhatsApp Disconnect Triggers ### Step 3: Add Your Actions[​](#step-3-add-your-actions "Direct link to Step 3: Add Your Actions") Add any actions you want to execute when disconnection occurs: * **Send Email** → Alert admin team * **Send SMS** → Notify account owner * **Create Task** → Assign reconnection task * **Send Slack Message** → Alert your team channel * **Internal Notification** → Notify CRM users ### Step 4: Save and Publish[​](#step-4-save-and-publish "Direct link to Step 4: Save and Publish") Review your workflow Click **Save** Toggle workflow from **Draft** to **Published** *** ## Available Trigger Variables[​](#available-trigger-variables "Direct link to Available Trigger Variables") When the trigger fires, these variables become available for use in your workflow actions. Insert them by clicking the **tag icon** in any field or typing with double curly braces. | Variable | Description | Example Value | | --------------------------------------------------------------- | ----------------------------- | ------------- | | `{{whatsapp_disconnected_prod.payload.instance.phoneNumber}}` | The disconnected phone number | `+1234567890` | | `{{whatsapp_disconnected_prod.payload.instance.instanceIndex}}` | Instance identifier index | `1` | | `{{whatsapp_disconnected_prod.payload.channelType}}` | The channel type | `whatsapp` | | `{{whatsapp_disconnected_prod.locationId}}` | The CRM location ID | `abc123xyz` | *** ## Example Use Cases[​](#example-use-cases "Direct link to Example Use Cases") ### Use Case 1: Email Alert to Admin[​](#use-case-1-email-alert-to-admin "Direct link to Use Case 1: Email Alert to Admin") Send an immediate email when any WhatsApp number disconnects. **Trigger:** WhatsApp Disconnected **Action:** Send Email * **To:** [admin@yourcompany.com](mailto:admin@yourcompany.com) * \*\*Subject:\*\*WhatsApp Disconnected - Action Required * **Body:** ```text theme={null} Alert: WhatsApp Number DisconnectedPhone Number: {{whatsapp_disconnected_prod.payload.instance.phoneNumber}}Location ID: {{whatsapp_disconnected_prod.locationId}}This number is now offline. Please reconnect immediately. ``` *** ### Use Case 2: Create Reconnection Task[​](#use-case-2-create-reconnection-task "Direct link to Use Case 2: Create Reconnection Task") Automatically create a high-priority task for your operations team. **Trigger:** WhatsApp Disconnected **Action:** Create Task * \*\*Title:\*\*Reconnect WhatsApp: `{{whatsapp_disconnected_prod.payload.instance.phoneNumber}}` * **Description:** This WhatsApp number has disconnected. Please reconnect immediately. * **Assign to:** Operations Manager * **Priority:** High *** ## Important Notes[​](#important-notes "Direct link to Important Notes") ### Technical Details[​](#technical-details "Direct link to Technical Details") * The trigger fires **once per disconnection event** * Works for both manual disconnections and unexpected disconnections * Executes immediately when disconnection is detected * Works across all WhatsApp instances in the location ### Best Practices[​](#best-practices "Direct link to Best Practices") * Set up **multiple notification channels** for critical numbers * Include the **phone number variable** in all notifications for quick identification * Create **high-priority tasks** with immediate due dates * Test your workflow by manually disconnecting a test number *** ## FAQs[​](#faqs "Direct link to FAQs") Yes. The trigger fires for all disconnection events-whether manual, network-related, or unexpected. Yes. You can add as many actions as needed to a single workflow. They will execute in sequence when the trigger fires. When the trigger fires, your WhatsApp number is already offline and cannot send messages. Use alternative notification methods like email, SMS, or Slack. The trigger fires immediately when the disconnection is detected-typically within seconds of the actual event. *** ## Support[​](#support "Direct link to Support") If you need help with the setup or onboarding: * WhatsApp Support: [Chat on WhatsApp](https://wa.me/+12267248710?text=Hi%2C%20I%20need%20help%20with%20WhatsApp%20Disconnected.) * Email: [**support@goghl.ai**](mailto:support@goghl.ai) # WhatsApp Group Message Inbound Source: https://help.goghl.ai/automation/triggers/whatsapp-group-message-inbound The trigger is a custom Whatsapp provider workflow trigger that fires automatically whenever a message is received in a connected WhatsApp group. Use it to send instant auto-replies, route conversations to the right team, or notify staff the moment someone posts in the group. *** ## Key Benefits[​](#key-benefits "Direct link to Key Benefits") **Instant Response** - React the moment a message lands in the group **Smart Routing** - Direct conversations to the right rep or team **Never Miss a Lead** - Automate follow-up so no group message goes cold **Filtered Automation** - Trigger only on messages that match your criteria **Zero Manual Monitoring** - No need to watch the group around the clock *** ## Who Should Use It[​](#who-should-use-it "Direct link to Who Should Use It") **Sales teams** - Auto-respond and assign new group conversations instantly **Support teams** - Acknowledge group messages and create tickets automatically **Agencies** - Standardize group message handling across client sub-accounts **High-volume operations** - Keep response times fast even at scale *** ## Requirements[​](#requirements "Direct link to Requirements") Before using this trigger, update your Whatsapp provider app to the latest version: Go to **App Marketplace → Installed Apps** Find **Whatsapp provider** Click **Update** if available *** ## How to Set Up[​](#how-to-set-up "Direct link to How to Set Up") ### Step 1: Allow Groups in WhatsApp Settings[​](#step-1-allow-groups-in-whatsapp-settings "Direct link to Step 1: Allow Groups in WhatsApp Settings") Go to **WhatsApp** in your sidebar Click **Manage** on your WhatsApp instance Navigate to group settings **Allow** the groups you want to use in workflows Save your settings > **Important:** Only messages from allowed groups will fire this trigger. Group Settings ### Step 2: Create a New Workflow[​](#step-2-create-a-new-workflow "Direct link to Step 2: Create a New Workflow") Go to **Automation → Workflows** Click **Create Workflow** or **+ Add** Select **Start from Scratch** ### Step 3: Add the Trigger[​](#step-3-add-the-trigger "Direct link to Step 3: Add the Trigger") Click **Add New Trigger** Switch to the **Apps** tab (not the default triggers) Find and click the **Whatsapp provider** app icon Select **WhatsApp Group Message Inbound** from the dropdown (Optional) Add **Filters** to narrow when the trigger fires Click **Save trigger** WhatsApp Group Message Inbound Trigger ### Step 4: Create the Contact[​](#step-4-create-the-contact "Direct link to Step 4: Create the Contact") Group members who message you are often not in your CRM yet. Every action that follows - sending a reply, assigning an owner, adding a tag - needs a contact record to act on. Add the **Create Contact** action right after the trigger so the contact exists before the rest of the workflow runs. **Create Contact** is a HighLevel built-in action. It is already available in every workflow, so there is nothing extra to install. Click **+ Add** below the trigger Search for and select **Create Contact** Under **Fields**, select **Phone** from the dropdown Click the tag icon in the value box and insert **Whatsapp, imessage and SMS → Whatsapp Group Message Inbound → Sender Number** Click **Save action** Create Contact Action If the contact already exists, the workflow skips the create step - no duplicate record is made - and moves straight to the next action. Map **Sender Number**, not **Group Number**. Sender Number is the individual member who posted the message; Group Number is the group's proxy number. Once this action is saved, continue to your send action or any other step you want to run for that contact. ### Step 5: Add Your Actions[​](#step-5-add-your-actions "Direct link to Step 5: Add Your Actions") With the contact in place, add the actions you want to execute when an inbound group message is received: * **Send Group Message** → Reply in the same WhatsApp group * **Send Email** → Notify the assigned rep * **Send Internal Notification** → Alert your team inside the CRM * **Create Task** → Queue a follow-up * **Add to Workflow / Pipeline** → Move the contact through your funnel ### Step 6: Save and Publish[​](#step-6-save-and-publish "Direct link to Step 6: Save and Publish") Review your workflow Click **Save** Toggle workflow from **Draft** to **Published** *** ## Available Filters[​](#available-filters "Direct link to Available Filters") Use filters to control exactly which inbound group messages start the workflow. Each filter can be paired with an operator (equals, contains, etc.). | Filter | Description | | ----------------------- | ------------------------------------------------------------- | | Location ID | The CRM location (sub-account) where the message was received | | Group Name | The name of the WhatsApp group where the message was received | | Group Number | The proxy number of the WhatsApp group | | Group Contact ID | The unique ID of the group | | Sender Name | The name of the contact who sent the message | | Sender Number | The phone number of the contact who sent the message | | Connected Device Name | The name of the connected device that received the message | | Connected Device Number | The number of the connected device that received the message | | Message | The text content of the inbound message | *** ## Example Use Cases[​](#example-use-cases "Direct link to Example Use Cases") ### Use Case 1: Instant Auto-Reply[​](#use-case-1-instant-auto-reply "Direct link to Use Case 1: Instant Auto-Reply") Acknowledge every inbound group message immediately. **Trigger:** WhatsApp Group Message Inbound **Action:** Send a reply confirming the message was received and will be handled shortly. *** ### Use Case 2: Route by Keyword[​](#use-case-2-route-by-keyword "Direct link to Use Case 2: Route by Keyword") Send leads to the right team based on what they say in the group. **Trigger:** WhatsApp Group Message Inbound **Filter:** Message **contains** "pricing" **Action:** Notify the sales team and create a high-priority follow-up task. *** ## Important Notes[​](#important-notes "Direct link to Important Notes") ### Technical Details[​](#technical-details "Direct link to Technical Details") * The trigger fires **once per inbound group message** * Filters are optional - leave them blank to fire on every inbound group message * Executes immediately when the message is received ### Best Practices[​](#best-practices "Direct link to Best Practices") * Add **Create Contact** as the first action so later steps always have a contact to work with * Use the **Message** filter to build keyword-based routing flows * Use the **Group Name** or **Group Number** filter to target a specific group * Test your workflow by sending a message to your connected group *** ## FAQs[​](#faqs "Direct link to FAQs") No. Filters are optional. Without them, the trigger fires on every inbound group message. Yes. Use the **Group Name** or **Group Number** filters to build separate workflows for different groups. The **Create Contact** action skips the create step. No duplicate contact is made and the workflow moves straight to the next action. Add it whenever the workflow can receive a message from a number that is not in your CRM yet, especially if **Do not create new Contacts** is enabled on the instance. If every sender is already a saved contact, you can skip it. *** ## Support[​](#support "Direct link to Support") If you need help with the setup or onboarding: * WhatsApp Support: [Chat on WhatsApp](https://wa.me/+12267248710?text=Hi%2C%20I%20need%20help%20with%20WhatsApp%20Group%20Message%20Inbound.) * Email: [**support@goghl.ai**](mailto:support@goghl.ai) # WhatsApp Group Participant Change Source: https://help.goghl.ai/automation/triggers/whatsapp-group-participant-change The trigger is a custom Whatsapp provider workflow trigger that fires automatically whenever a . Use it to welcome new members, kick off onboarding, run off-boarding, or alert admins to membership changes. *** ## Key Benefits[​](#key-benefits "Direct link to Key Benefits") **Automated Welcomes** - Greet every new member the moment they join **Onboarding & Off-boarding** - Trigger sequences on add or remove events **Admin Visibility** - Know who changed group membership and when **Filtered Automation** - Trigger only on the groups or events you care about **Zero Manual Monitoring** - No need to watch group membership by hand *** ## Who Should Use It[​](#who-should-use-it "Direct link to Who Should Use It") **Community managers** - Welcome and onboard new group members automatically **Sales teams** - Track when prospects join or leave a group **Agencies** - Monitor group membership across client sub-accounts **Membership / course operators** - Sync group access changes with your CRM *** ## Requirements[​](#requirements "Direct link to Requirements") Before using this trigger, update your Whatsapp provider app to the latest version: Go to **App Marketplace → Installed Apps** Find **Whatsapp provider** Click **Update** if available *** ## How to Set Up[​](#how-to-set-up "Direct link to How to Set Up") ### Step 1: Create a New Workflow[​](#step-1-create-a-new-workflow "Direct link to Step 1: Create a New Workflow") Go to **Automation → Workflows** Click **Create Workflow** or **+ Add** Select **Start from Scratch** ### Step 2: Add the Trigger[​](#step-2-add-the-trigger "Direct link to Step 2: Add the Trigger") Click **Add New Trigger** Switch to the **Apps** tab (not the default triggers) Find and click the **Whatsapp provider** app icon Select **WhatsApp Group Participant Change** from the dropdown (Optional) Add **Filters** to narrow when the trigger fires Click **Save trigger** WhatsApp Group Participant Change Trigger ### Step 3: Add Your Actions[​](#step-3-add-your-actions "Direct link to Step 3: Add Your Actions") Add any actions you want to execute when group membership changes: * **Send WhatsApp Message** → Welcome a new member * **Add / Remove from Workflow** → Start onboarding or off-boarding * **Update Contact / Tag** → Reflect group membership in the CRM * **Send Internal Notification** → Alert an admin of the change ### Step 4: Save and Publish[​](#step-4-save-and-publish "Direct link to Step 4: Save and Publish") Review your workflow Click **Save** Toggle workflow from **Draft** to **Published** *** ## Available Filters[​](#available-filters "Direct link to Available Filters") Use filters to control exactly which membership changes start the workflow. Each filter can be paired with an operator (equals, contains, etc.). | Filter | Description | | -------------------------- | ------------------------------------------------------- | | Action by which Admin No. | The phone number of the admin who made the change | | Affected Member's No. | The phone number of the member who was added or removed | | Event Type (add or remove) | Whether the member was **added** or **removed** | | Group Name | The name of the WhatsApp group | | Group No. in CRM | The group's identifier as stored in the CRM | | Location ID | The CRM location (sub-account) the group belongs to | *** ## Example Use Cases[​](#example-use-cases "Direct link to Example Use Cases") ### Use Case 1: Welcome New Members[​](#use-case-1-welcome-new-members "Direct link to Use Case 1: Welcome New Members") Greet everyone who joins. **Trigger:** WhatsApp Group Participant Change **Filter:** Event Type **equals** add **Action:** Send a welcome WhatsApp message and start the onboarding workflow. *** ### Use Case 2: Off-Board Removed Members[​](#use-case-2-off-board-removed-members "Direct link to Use Case 2: Off-Board Removed Members") Clean up when someone leaves. **Trigger:** WhatsApp Group Participant Change **Filter:** Event Type **equals** remove **Action:** Remove the contact's group tag and notify the admin. *** ## Important Notes[​](#important-notes "Direct link to Important Notes") ### Technical Details[​](#technical-details "Direct link to Technical Details") * The trigger fires **once per participant change event** * Use the **Event Type** filter to separate **add** and **remove** flows * Filters are optional - leave them blank to fire on every membership change ### Best Practices[​](#best-practices "Direct link to Best Practices") * Build **separate workflows** for add vs. remove using the Event Type filter * Use the **Group Name** or **Group No. in CRM** filter to target a specific group * Test by adding and removing a test member from a connected group *** ## FAQs[​](#faqs "Direct link to FAQs") Yes. Use the **Event Type (add or remove)** filter, or branch your workflow based on it. No. Filters are optional. Without them, the trigger fires on every add and remove event across your groups. *** ## Support[​](#support "Direct link to Support") If you need help with the setup or onboarding: * WhatsApp Support: [Chat on WhatsApp](https://wa.me/+12267248710?text=Hi%2C%20I%20need%20help%20with%20WhatsApp%20Group%20Participant%20Change.) * Email: [**support@goghl.ai**](mailto:support@goghl.ai) # WhatsApp Inbound Source: https://help.goghl.ai/automation/triggers/whatsapp-inbound The trigger is a custom Whatsapp provider workflow trigger that fires automatically whenever an on your connected number. Use it to send instant auto-replies, route conversations to the right team, or notify staff the moment a customer reaches out. *** ## Key Benefits[​](#key-benefits "Direct link to Key Benefits") **Instant Response** - React the moment a customer's message lands **Smart Routing** - Direct conversations to the right rep or team **Never Miss a Lead** - Automate follow-up so no inbound message goes cold **Filtered Automation** - Trigger only on messages that match your criteria **Zero Manual Monitoring** - No need to watch the inbox around the clock *** ## Who Should Use It[​](#who-should-use-it "Direct link to Who Should Use It") **Sales teams** - Auto-respond and assign new conversations instantly **Support teams** - Acknowledge inbound messages and create tickets automatically **Agencies** - Standardize inbound message handling across client sub-accounts **High-volume operations** - Keep response times fast even at scale *** ## Requirements[​](#requirements "Direct link to Requirements") Before using this trigger, update your Whatsapp provider app to the latest version: Go to **App Marketplace → Installed Apps** Find **Whatsapp provider** Click **Update** if available *** ## How to Set Up[​](#how-to-set-up "Direct link to How to Set Up") ### Step 1: Create a New Workflow[​](#step-1-create-a-new-workflow "Direct link to Step 1: Create a New Workflow") Go to **Automation → Workflows** Click **Create Workflow** or **+ Add** Select **Start from Scratch** ### Step 2: Add the Trigger[​](#step-2-add-the-trigger "Direct link to Step 2: Add the Trigger") Click **Add New Trigger** Switch to the **Apps** tab (not the default triggers) Find and click the **Whatsapp provider** app icon Select **WhatsApp Inbound** from the dropdown (Optional) Add **Filters** to narrow when the trigger fires Click **Save trigger** WhatsApp Inbound Trigger ### Step 3: Find or Create the Contact[​](#step-3-find-or-create-the-contact "Direct link to Step 3: Find or Create the Contact") Inbound messages often come from numbers that are not in your CRM yet. Every action that follows - sending a reply, assigning an owner, adding a tag - needs a contact record to act on. Add the **Find Contact** action right after the trigger to look up the sender. If the contact is not found, add **Create Contact** so the contact exists before the rest of the workflow runs. **Find Contact** and **Create Contact** are HighLevel built-in actions. They are already available in every workflow, so there is nothing extra to install. #### Find the contact Click **+ Add** below the trigger Search for and select **Find Contact** Under **Fields**, select **Contact ID** from the dropdown Click the tag icon in the value box and insert **Whatsapp, imessage and SMS → Whatsapp Inbound → Contact ID** Click **Save action** The workflow now splits into two branches: **Contact found** and **Contact not found**. Find Contact Branches #### Create the contact if not found Under the **Contact not found** branch, add the **Create Contact** action: Click **+ Add** below **Contact not found** Search for and select **Create Contact** Under **Fields**, select **Phone** from the dropdown Click the tag icon in the value box and insert **Whatsapp, imessage and SMS → Whatsapp Inbound → Sender Phone Number** Click **Add field** and select **Email** from the dropdown Click the tag icon in the value box and insert **Whatsapp, imessage and SMS → Whatsapp Inbound → Whatsapp Id (Email)** Click **Save action** Create Contact Action Map the **Email** field as well as **Phone**. WhatsApp now lets people message you from a username instead of a phone number, and those senders arrive with no phone number at all. Their WhatsApp identifier comes through as **Whatsapp Id (Email)** and is saved on the contact's email field, so mapping it is what keeps username-based senders from creating blank or duplicate contacts. #### Rejoin the branches So that new contacts run the same actions as existing ones, send the **Contact not found** branch back to the **Contact found** branch: Click **+ Add** below **Create Contact** Search for and select **Go To** Select the first action under the **Contact found** branch as the target (add that action first if you have not yet - see Step 4) Click **Save action** Existing contacts go straight down the **Contact found** branch. New contacts are created first, then jump to the same actions - no duplicate record is made either way. Once these actions are saved, continue to your send action or any other step you want to run for that contact. ### Step 4: Add Your Actions[​](#step-4-add-your-actions "Direct link to Step 4: Add Your Actions") With the contact in place, add the actions you want to execute when an inbound WhatsApp message is received: * **Send WhatsApp Message** → Reply to the contact on the same channel * **Send Email** → Notify the assigned rep * **Send Internal Notification** → Alert your team inside the CRM * **Create Task** → Queue a follow-up * **Add to Workflow / Pipeline** → Move the contact through your funnel ### Step 5: Save and Publish[​](#step-5-save-and-publish "Direct link to Step 5: Save and Publish") Review your workflow Click **Save** Toggle workflow from **Draft** to **Published** *** ## Available Filters[​](#available-filters "Direct link to Available Filters") Use filters to control exactly which inbound WhatsApp messages start the workflow. Each filter can be paired with an operator (equals, contains, etc.). | Filter | Description | | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Contact ID | The unique ID of the contact who sent the message | | Location ID | The CRM location (sub-account) where the message was received | | Message | The text content of the inbound message | | Receiver Name | The name of the account that received the message | | Receiver Phone Number | The number that received the message (your WhatsApp number) | | Whatsapp UserId (Email) | The contact's unique WhatsApp identifier formatted as an email, stored as a primary or additional email in your CRM (for phone-less / username-based WhatsApp contacts) | | Sender Name | The name of the contact who sent the message | | Sender Phone Number | The phone number of the contact who sent the message | *** ## Example Use Cases[​](#example-use-cases "Direct link to Example Use Cases") ### Use Case 1: Instant Auto-Reply[​](#use-case-1-instant-auto-reply "Direct link to Use Case 1: Instant Auto-Reply") Acknowledge every inbound message immediately. **Trigger:** WhatsApp Inbound **Action:** Send a reply confirming you received the message and will respond shortly. *** ### Use Case 2: Route by Keyword[​](#use-case-2-route-by-keyword "Direct link to Use Case 2: Route by Keyword") Send leads to the right team based on what they say. **Trigger:** WhatsApp Inbound **Filter:** Message **contains** "pricing" **Action:** Notify the sales team and create a high-priority follow-up task. *** ## Important Notes[​](#important-notes "Direct link to Important Notes") ### Technical Details[​](#technical-details "Direct link to Technical Details") * The trigger fires **once per inbound message** * Filters are optional - leave them blank to fire on every inbound WhatsApp message * Executes immediately when the message is received ### Best Practices[​](#best-practices "Direct link to Best Practices") * Add **Find Contact** as the first action, with **Create Contact** on the **Contact not found** branch, so later steps always have a contact to work with * Use the **Message** filter to build keyword-based routing flows * Use the **Location ID** filter when managing multiple sub-accounts * Test your workflow by sending a message to your connected number *** ## FAQs[​](#faqs "Direct link to FAQs") No. Filters are optional. Without them, the trigger fires on every inbound WhatsApp message. Yes. Use the **Message** or **Sender** filters to build separate workflows for different conditions. **Find Contact** locates it and the workflow continues down the **Contact found** branch. **Create Contact** only runs on the **Contact not found** branch, so no duplicate contact is made. Add them whenever the workflow can receive a message from a number that is not in your CRM yet, especially if **Do not create new Contacts** is enabled on the instance. If every sender is already a saved contact, **Find Contact** on its own is enough. *** ## Support[​](#support "Direct link to Support") If you need help with the setup or onboarding: * WhatsApp Support: [Chat on WhatsApp](https://wa.me/+12267248710?text=Hi%2C%20I%20need%20help%20with%20WhatsApp%20Inbound.) * Email: [**support@goghl.ai**](mailto:support@goghl.ai) # WhatsApp Missed Call Source: https://help.goghl.ai/automation/triggers/whatsapp-missed-call The trigger is a custom Whatsapp provider workflow trigger that fires automatically whenever a on your connected number. Use it to send an instant follow-up message, create a call-back task, or alert your team so no opportunity slips through. *** ## Key Benefits[​](#key-benefits "Direct link to Key Benefits") **Instant Call-Back** - Reach out the moment a call is missed **Lead Recovery** - Turn missed calls into booked conversations **Team Alerts** - Notify the right rep immediately **Filtered Automation** - Trigger only on calls that match your criteria **Zero Manual Monitoring** - No need to watch the call log *** ## Who Should Use It[​](#who-should-use-it "Direct link to Who Should Use It") **Sales teams** - Auto-respond to missed calls before the lead moves on **Support teams** - Queue call-backs and track response times **Agencies** - Ensure missed calls are handled across client sub-accounts **High-volume operations** - Recover missed calls automatically at scale *** ## Requirements[​](#requirements "Direct link to Requirements") Before using this trigger, update your Whatsapp provider app to the latest version: Go to **App Marketplace → Installed Apps** Find **Whatsapp provider** Click **Update** if available *** ## How to Set Up[​](#how-to-set-up "Direct link to How to Set Up") ### Step 1: Create a New Workflow[​](#step-1-create-a-new-workflow "Direct link to Step 1: Create a New Workflow") Go to **Automation → Workflows** Click **Create Workflow** or **+ Add** Select **Start from Scratch** ### Step 2: Add the Trigger[​](#step-2-add-the-trigger "Direct link to Step 2: Add the Trigger") Click **Add New Trigger** Switch to the **Apps** tab (not the default triggers) Find and click the **Whatsapp provider** app icon Select **WhatsApp Missed Call** from the dropdown (Optional) Add **Filters** to narrow when the trigger fires Click **Save trigger** WhatsApp Missed Call Trigger ### Step 3: Add Your Actions[​](#step-3-add-your-actions "Direct link to Step 3: Add Your Actions") Add any actions you want to execute when a WhatsApp call is missed: * **Send WhatsApp / SMS Message** → "Sorry we missed your call - how can we help?" * **Create Task** → Assign a call-back to the right rep * **Send Internal Notification** → Alert your team channel * **Add to Workflow / Pipeline** → Start a lead-recovery sequence ### Step 4: Save and Publish[​](#step-4-save-and-publish "Direct link to Step 4: Save and Publish") Review your workflow Click **Save** Toggle workflow from **Draft** to **Published** *** ## Available Filters[​](#available-filters "Direct link to Available Filters") Use filters to control exactly which missed calls start the workflow. Each filter can be paired with an operator (equals, contains, etc.). | Filter | Description | | ---------------------- | -------------------------------------------------------- | | Caller Phone Number | The phone number of the person who called | | Connected Phone Number | Your WhatsApp number that received the call | | Location ID | The CRM location (sub-account) where the call was missed | *** ## Example Use Cases[​](#example-use-cases "Direct link to Example Use Cases") ### Use Case 1: Instant Missed-Call Text Back[​](#use-case-1-instant-missed-call-text-back "Direct link to Use Case 1: Instant Missed-Call Text Back") Never let a missed call go silent. **Trigger:** WhatsApp Missed Call **Action:** Send a WhatsApp message: "Sorry we missed your call! Reply here and we'll help right away." *** ### Use Case 2: Assign a Call-Back Task[​](#use-case-2-assign-a-call-back-task "Direct link to Use Case 2: Assign a Call-Back Task") Make sure someone follows up. **Trigger:** WhatsApp Missed Call **Action:** Create a high-priority task to call `Caller Phone Number` back within 15 minutes. *** ## Important Notes[​](#important-notes "Direct link to Important Notes") ### Technical Details[​](#technical-details "Direct link to Technical Details") * The trigger fires **once per missed call** * Filters are optional - leave them blank to fire on every missed WhatsApp call * Executes immediately when the missed call is detected ### Best Practices[​](#best-practices "Direct link to Best Practices") * Pair this trigger with an **immediate text-back** for the fastest recovery * Use the **Connected Phone Number** filter when running multiple numbers * Test by placing a call to your connected number and letting it go unanswered *** ## FAQs[​](#faqs "Direct link to FAQs") The trigger fires when a call is registered as missed (unanswered). Behavior for declined calls depends on how the call is reported by WhatsApp. No. Filters are optional. Without them, the trigger fires on every missed WhatsApp call. *** ## Support[​](#support "Direct link to Support") If you need help with the setup or onboarding: * WhatsApp Support: [Chat on WhatsApp](https://wa.me/+12267248710?text=Hi%2C%20I%20need%20help%20with%20WhatsApp%20Missed%20Call.) * Email: [**support@goghl.ai**](mailto:support@goghl.ai) # WhatsApp Outbound Source: https://help.goghl.ai/automation/triggers/whatsapp-outbound The trigger is a custom Whatsapp provider workflow trigger that fires automatically whenever an from your connected number. Use it to log outgoing activity, schedule follow-ups after a reply goes out, or sync sent messages to other systems. *** ## Key Benefits[​](#key-benefits "Direct link to Key Benefits") **Activity Tracking** - Capture every outbound message automatically **Automated Follow-Up** - Schedule the next step the moment a reply is sent **Source Awareness** - Distinguish manual replies from automated sends **Filtered Automation** - Trigger only on messages that match your criteria **Zero Manual Logging** - No need to record outgoing activity by hand *** ## Who Should Use It[​](#who-should-use-it "Direct link to Who Should Use It") **Sales teams** - Trigger follow-up sequences after a rep replies **Support teams** - Log outbound responses for reporting and SLAs **Agencies** - Audit outbound messaging across client sub-accounts **Operations teams** - Sync sent-message data into reporting tools *** ## Requirements[​](#requirements "Direct link to Requirements") Before using this trigger, update your Whatsapp provider app to the latest version: Go to **App Marketplace → Installed Apps** Find **Whatsapp provider** Click **Update** if available *** ## How to Set Up[​](#how-to-set-up "Direct link to How to Set Up") ### Step 1: Create a New Workflow[​](#step-1-create-a-new-workflow "Direct link to Step 1: Create a New Workflow") Go to **Automation → Workflows** Click **Create Workflow** or **+ Add** Select **Start from Scratch** ### Step 2: Add the Trigger[​](#step-2-add-the-trigger "Direct link to Step 2: Add the Trigger") Click **Add New Trigger** Switch to the **Apps** tab (not the default triggers) Find and click the **Whatsapp provider** app icon Select **WhatsApp Outbound** from the dropdown (Optional) Add **Filters** to narrow when the trigger fires Click **Save trigger** WhatsApp Outbound Trigger ### Step 3: Add Your Actions[​](#step-3-add-your-actions "Direct link to Step 3: Add Your Actions") Add any actions you want to execute when an outbound WhatsApp message is sent: * **Wait + Send Follow-Up** → Schedule the next message * **Create Task** → Queue a check-in * **Update Contact / Custom Field** → Record last-contacted info * **Send Internal Notification** → Notify a manager of the send ### Step 4: Save and Publish[​](#step-4-save-and-publish "Direct link to Step 4: Save and Publish") Review your workflow Click **Save** Toggle workflow from **Draft** to **Published** *** ## Available Filters[​](#available-filters "Direct link to Available Filters") Use filters to control exactly which outbound WhatsApp messages start the workflow. Each filter can be paired with an operator (equals, contains, etc.). | Filter | Description | | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Contact ID | The unique ID of the contact the message was sent to | | Contact Phone Number | The phone number of the contact the message was sent to | | Whatsapp UserId (Email) | The contact's unique WhatsApp identifier formatted as an email, stored as a primary or additional email in your CRM (for phone-less / username-based WhatsApp contacts) | | Location ID | The CRM location (sub-account) the message was sent from | | Message | The text content of the outbound message | | Sender Number | The number the message was sent from (your WhatsApp number) | | Source | The origin of the message (e.g. manual send vs. automation) | *** ## Example Use Cases[​](#example-use-cases "Direct link to Example Use Cases") ### Use Case 1: Follow-Up After a Reply[​](#use-case-1-follow-up-after-a-reply "Direct link to Use Case 1: Follow-Up After a Reply") Keep the conversation moving automatically. **Trigger:** WhatsApp Outbound **Action:** Wait 1 day, then send a follow-up if the contact hasn't replied. *** ### Use Case 2: Log Manual Replies Only[​](#use-case-2-log-manual-replies-only "Direct link to Use Case 2: Log Manual Replies Only") Track only the messages your team sends by hand. **Trigger:** WhatsApp Outbound **Filter:** Source **equals** manual **Action:** Update a "Last Manual Contact" custom field on the contact. *** ## Important Notes[​](#important-notes "Direct link to Important Notes") ### Technical Details[​](#technical-details "Direct link to Technical Details") * The trigger fires **once per outbound message** * Filters are optional - leave them blank to fire on every outbound WhatsApp message * The **Source** filter helps separate manual sends from automated ones ### Best Practices[​](#best-practices "Direct link to Best Practices") * Use the **Source** filter to avoid follow-up loops triggered by your own automations * Use the **Contact ID** filter for contact-specific flows * Test your workflow by sending a message from your connected number *** ## FAQs[​](#faqs "Direct link to FAQs") Yes. Outbound messages sent by automations can also fire this trigger. Use the **Source** filter to separate manual sends from automated ones and avoid loops. No. Filters are optional. Without them, the trigger fires on every outbound WhatsApp message. *** ## Support[​](#support "Direct link to Support") If you need help with the setup or onboarding: * WhatsApp Support: [Chat on WhatsApp](https://wa.me/+12267248710?text=Hi%2C%20I%20need%20help%20with%20WhatsApp%20Outbound.) * Email: [**support@goghl.ai**](mailto:support@goghl.ai) # WhatsApp Source: https://help.goghl.ai/automation/whatsapp All WhatsApp workflow triggers and actions for GoHighLevel. ## WhatsApp triggers & actions Automate WhatsApp inside your GoHighLevel workflows. Use **triggers** to start a workflow when something happens, and **actions** to send messages as a step in any workflow. ## Actions Send a WhatsApp message to a contact directly from your CRM workflows. Send messages to WhatsApp groups for team notifications, client updates, and announcements. Pause the workflow until the contact replies on WhatsApp or a timeout elapses, then branch. ## Triggers Fires when a message arrives on your connected number, send auto-replies or route conversations. Fires when a message is sent from your number, log activity or schedule follow-ups. Fires when a WhatsApp number disconnects, send alerts or create reconnection tasks. Fires on a missed call, send an instant follow-up or create a call-back task. Fires when group membership changes, welcome new members or alert admins. # Conversation AI Agent Source: https://help.goghl.ai/conversation-ai/index Set up a Conversation AI agent that automatically replies to customers, answers questions from your knowledge base, and books appointments over WhatsApp, SMS, and other channels connected through GoGHL.ai. Imagine your WhatsApp replying to customers, answering their questions, and booking appointments on its own. With **Conversation AI Agents** and your **GoGHL.ai** channels, that's exactly what you get: * A customer messages your business on **WhatsApp** * The AI agent reads the message, understands the intent, and replies instantly * If they want to book an appointment, it offers available slots from your calendar * If they have a question, it answers from your **knowledge base** * If it doesn't know the answer, it **hands off to a human** All automatic, all on WhatsApp, from your own number connected via GoGHL.ai. *** ## Full Setup Video