> For the complete documentation index, see [llms.txt](https://tochemey.gitbook.io/goakt/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://tochemey.gitbook.io/goakt/features/actor/message-scheduling.md).

# Message Scheduling

You can schedule sending messages to actor that will be acted upon in the future. To achieve that you can use the following methods on the [Actor System](https://github.com/Tochemey/goakt/blob/main/actor/actor_system.go#L241-L395):

* [**ScheduleOnce**](https://github.com/Tochemey/goakt/blob/main/actor/actor_system.go#L259) - will send the given message to a local actor ***once*** after a given interval
* [**Schedule**](https://github.com/Tochemey/goakt/blob/main/actor/actor_system.go#L279) - will send the given message to a local actor at a given interval
* [**RemoteSchedule**](https://github.com/Tochemey/goakt/blob/main/actor/actor_system.go#L320) - will send the given message to a remote actor at a given interval. This requires remoting to be enabled on the actor system.
* [**RemoteScheduleOnce**](https://github.com/Tochemey/goakt/blob/main/actor/actor_system.go#L299) - will send the given message to a remote actor ***once*** after a given interval. This requires remoting to be enabled on the actor system.
* [**ScheduleWithCron**](https://github.com/Tochemey/goakt/blob/main/actor/actor_system.go#L340) - will send the given message to a local actor using a cron expression.
* [**RemoteScheduleWithCron**](https://github.com/Tochemey/goakt/blob/main/actor/actor_system.go#L362) - will send the given message to a remote actor using a cron expression. This requires remoting to be enabled on the actor system.
* [**CancelSchedule**](https://github.com/Tochemey/goakt/blob/main/actor/actor_system.go#L373) - will cancel a prior scheduled message given its reference
* [**PauseSchedule**](https://github.com/Tochemey/goakt/blob/main/actor/actor_system.go#L384) - will pause a prior scheduled message given its reference
* [**ResumeSchedule**](https://github.com/Tochemey/goakt/blob/main/actor/actor_system.go#L395) - will resume a prior paused scheduled message given its reference.

## **Cron Expression Format**

| Field        | Required | Allowed Values  | Allowed Special Characters |
| ------------ | -------- | --------------- | -------------------------- |
| Seconds      | yes      | 0-59            | , - \* /                   |
| Minutes      | yes      | 0-59            | , - \* /                   |
| Hours        | yes      | 0-23            | , - \* /                   |
| Day of month | yes      | 1-31            | , - \* ? /                 |
| Month        | yes      | 1-12 or JAN-DEC | , - \* /                   |
| Day of week  | yes      | 1-7 or SUN-SAT  | , - \* ? /                 |
| Year         | no       | empty, 1970-    | , - \* /                   |

**Note**

All the schedule method comes with a [ScheduleOption](https://github.com/Tochemey/goakt/blob/main/actor/schedule_option.go#L87-L139) that can help configure:

* The `Sender` to set the message's sender when the scheduled message is delivered
* The `SenderAddress`  to set the message's sender address. This is suitable for remote message scheduling&#x20;
* The `Reference`  uniquely identifies the scheduled message and can be used later to manage it such as canceling, pausing or resuming.
