Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 36 additions & 3 deletions docs/channels/sms.rst
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@

.. vale on

A Segment Text Message can be manually sent to Contact lists - Segments - in Mautic. Once sent, you can't edit the Text Message, however you can send it to new Contacts as they join the associated Segment.
A Segment Text Message can be manually sent to Contact lists - Segments - in Mautic. Once sent, you can't edit the Text Message. The **Continue sending** option you set when scheduling the send controls whether it continues to Contacts who join the associated Segment later - see :ref:`Scheduling a Segment Text Message <Schedule Segment Text Message>`.

Note that these are marketing Text Messages by default, and each Contact can only receive the Text Message once - it's the same principle as a mailing list.

Expand Down Expand Up @@ -108,11 +108,44 @@

**Contact Segment** - This allows you to define the Segment/s who should receive the Text Message.

.. note::

@promptless-for-oss promptless-for-oss Sep 9, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Citation

Segment (list) SMS editor hides the publishUp/publishDown date fields (#smsScheduleDates div is hidden when type == 'list') and shows a notice pointing to the Schedule button instead; toggled dynamically in Assets/js/sms.js Mautic.updateSmsScheduleOptions.

Source: form.html.twig:92 · aea9f82


For a Segment Text Message, you set the sending times with the **Schedule** button on the Text Message detail view, not from the editor. See :ref:`Scheduling a Segment Text Message <Schedule Segment Text Message>`.

.. vale off

**Publish at (date/time)** - This allows you to define the date and time at which this Text Message is available for sending to Contacts
.. _schedule segment text message:

Scheduling a Segment Text Message
=================================

.. vale on

@promptless-for-oss promptless-for-oss Sep 9, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Citation

Schedule button only rendered when not isEmbedded, scheduleSms.getSmsType() == 'list' (segment SMS), and the User has sms:smses:publishown/publishother entity access; label switches between 'mautic.sms.send.schedule' (Schedule) and 'mautic.sms.send.schedule.update' (Update schedule) based on whether getPublishUp() is set.

Source: details.html.twig:32 · aea9f82


For a Segment Text Message, you control when the message goes out from its detail view rather than from the message editor.

The **Schedule** button appears on the detail view of a Segment Text Message only - not on template or triggered Text Messages - and only for a User who has permission to publish the Text Message. If you don't see the button, ask an administrator for permission to publish Text Messages. It doesn't appear in embedded views. Once a schedule exists, the button label changes to **Update schedule**.

Check warning on line 126 in docs/channels/sms.rst

View workflow job for this annotation

GitHub Actions / prose

[vale] reported by reviewdog 🐶 [Mautic.FeatureList] Is this referring to a Mautic feature? If so, use 'Activate or Turn On' instead of 'publish'. Raw Output: {"message":"[Mautic.FeatureList] Is this referring to a Mautic feature? If so, use 'Activate or Turn On' instead of 'publish'.","location":{"path":"docs/channels/sms.rst","range":{"start":{"line":126,"column":266},"end":{"line":126,"column":273}}},"severity":"INFO","code":{"value":"Mautic.FeatureList"}}

Check warning on line 126 in docs/channels/sms.rst

View workflow job for this annotation

GitHub Actions / prose

[vale] reported by reviewdog 🐶 [Mautic.FeatureList] Is this referring to a Mautic feature? If so, use 'Activate or Turn On' instead of 'publish'. Raw Output: {"message":"[Mautic.FeatureList] Is this referring to a Mautic feature? If so, use 'Activate or Turn On' instead of 'publish'.","location":{"path":"docs/channels/sms.rst","range":{"start":{"line":126,"column":172},"end":{"line":126,"column":179}}},"severity":"INFO","code":{"value":"Mautic.FeatureList"}}

To schedule the send:

#. Open the detail view of the Segment Text Message by selecting its name from the Channels > Text Messages list.
#. Click **Schedule** to open the scheduling modal.
#. Set the following controls:

@promptless-for-oss promptless-for-oss Sep 9, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Citation

continueSending is a YesNoButtonGroupType field, 'required' => false, defaulting to false ('data' => $options['data']['continueSending'] ?? false) when no prior value exists, i.e. No is the default.

Source: ScheduleSendType.php:38 · aea9f82


* **Start sending date and time** - Required. The date and time when sending begins.

@promptless-for-oss promptless-for-oss Sep 9, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Citation

publishDown field is only revealed in the UI when continueSending is checked ('data-show-on' => '{"schedule_send_continueSending_1":"checked"}') and is not itself required; Sms::getPublishDown() (Entity/Sms.php L405-412) also forces null for one-time (list, continueSending=false) sends.

Source: ScheduleSendType.php:47 · aea9f82

* **Continue sending** - Shown as a Yes/No question, this controls whether the send continues to include Contacts added to the Segment after sending starts.
* **Stop sending** - Appears only when **Continue sending** is Yes. The optional latest date and time to keep sending.

@promptless-for-oss promptless-for-oss Sep 9, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Citation

getBasicQuery() adds lll.date_added <= publishUp filter only when !$sms->isContinueSending() && publishUp is set, so a one-time (Continue sending = No) send only picks up Contacts who joined the Segment on/before the start time; late joiners are excluded.

Source: BroadcastQuery.php:93 · aea9f82

@promptless-for-oss promptless-for-oss Sep 9, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Citation

unpublishCompletedOneTimeSchedule(): once a background-sending, non-continuing SMS has 0 pending Contacts left, it calls $sms->setIsPublished(false) and saves the entity, i.e. auto-unpublishes when the one-time send finishes.

Source: BroadcastExecutioner.php:182 · aea9f82


When **Continue sending** is No - the default - Mautic performs a one-time send to the Contacts who are members of the Segment as of the start time. Contacts added to the Segment after the start time aren't included. After Mautic finishes sending to all pending Contacts, Mautic marks the Text Message as unpublished.

Check warning on line 138 in docs/channels/sms.rst

View workflow job for this annotation

GitHub Actions / prose

[vale] reported by reviewdog 🐶 [Mautic.FeatureList] Is this referring to a Mautic feature? If so, use 'Unavailable or Deactivated' instead of 'unpublished'. Raw Output: {"message":"[Mautic.FeatureList] Is this referring to a Mautic feature? If so, use 'Unavailable or Deactivated' instead of 'unpublished'.","location":{"path":"docs/channels/sms.rst","range":{"start":{"line":138,"column":306},"end":{"line":138,"column":317}}},"severity":"INFO","code":{"value":"Mautic.FeatureList"}}

@promptless-for-oss promptless-for-oss Sep 9, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Citation

getPublishDown() returns the actual stop date when continueSending is true (list type); BroadcastQuery omits the date_added upper-bound filter entirely when isContinueSending() is true, so new Segment members keep being picked up until the optional stop time.

Source: Sms.php:405 · aea9f82


When **Continue sending** is Yes, Mautic sends to the Contacts who are Segment members at the start time and continues to include Contacts added to the Segment afterward, until the optional **Stop sending** time.

To change the scheduled times, reopen the modal with **Update schedule**. To clear the schedule, click **Cancel schedule** - cancelling clears the schedule so the Text Message won't send on that schedule. To dismiss the modal without saving changes, click **Close**.

@promptless-for-oss promptless-for-oss Sep 9, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Citation

SmsController::scheduleSendAction — when the schedule form's 'apply' (Cancel schedule) button is clicked, the controller calls $entity->setPublishUp(null), setPublishDown(null), setContinueSending(false) and saves the entity, i.e. cancelling fully clears the schedule so the Text Message won't send on that schedule. Button labels (Update schedule / Cancel schedule / Close) come from SmsBundle/Form/Type/ScheduleSendType.php buttonOptions when is_scheduled=true.

Source: SmsController.php:320–324 · aea9f82


The status badge on the detail view reflects progress: it shows a sending state while Contacts are still pending, and a sent state once a one-time schedule has finished. A continuing send - where **Continue sending** is Yes - keeps showing the sending state until it reaches the optional **Stop sending** time, so a long-running sending state on a continuing send is normal, not a fault.

Cloning a scheduled Segment Text Message produces an unpublished copy with the schedule cleared.

Check warning on line 146 in docs/channels/sms.rst

View workflow job for this annotation

GitHub Actions / prose

[vale] reported by reviewdog 🐶 [Mautic.FeatureList] Is this referring to a Mautic feature? If so, use 'Unavailable or Deactivated' instead of 'unpublished'. Raw Output: {"message":"[Mautic.FeatureList] Is this referring to a Mautic feature? If so, use 'Unavailable or Deactivated' instead of 'unpublished'.","location":{"path":"docs/channels/sms.rst","range":{"start":{"line":146,"column":54},"end":{"line":146,"column":65}}},"severity":"INFO","code":{"value":"Mautic.FeatureList"}}

@promptless-for-oss promptless-for-oss Sep 9, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Citation

The existing generic 'mautic:broadcasts:send' console command (in ChannelBundle, not added by PR #17310) dispatches a ChannelBroadcastEvent that SmsBundle's BroadcastExecutioner::execute() listens for; SmsBundle has no new Command class of its own, confirming Segment SMS scheduling reuses the pre-existing Send Scheduled Broadcast cron mechanism rather than adding a new command.

Source: SendChannelBroadcastCommand.php:22 · aea9f82


**Unpublish at (date/time)** - This allows you to define the date and time at which this Text Message ceases to be available for sending to Contacts.
Scheduled sends run through the same ``Send Scheduled Broadcast`` Cron job that already sends Segment Text Messages. See :doc:`Cron jobs documentation </configuration/cron_jobs>` for more information. As with any Text Message send, you must first set up an SMS transport.

.. vale off

Expand Down
Loading