1. Go to this page and download the library: Download callmelater/laravel library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
callmelater / laravel example snippets
use CallMeLater\Laravel\Facades\CallMeLater;
// Simple scheduled request
CallMeLater::http('https://api.example.com/process')
->post()
->payload(['user_id' => 123])
->inHours(2)
->send();
// With full options
CallMeLater::http('https://api.example.com/webhook')
->name('Process order #456')
->method('POST')
->headers(['X-Custom-Header' => 'value'])
->payload(['order_id' => 456, 'action' => 'ship'])
->at(now()->addDays(3))
->timezone('America/New_York')
->retry(5, 'exponential', 120)
->callback('https://myapp.com/callbacks/callmelater')
->metadata(['source' => 'laravel-app'])
->send();
// Using presets
CallMeLater::http('https://api.example.com/reminder')
->post()
->at('tomorrow') // or 'next_monday', 'end_of_week', etc.
->send();
use CallMeLater\Laravel\Facades\CallMeLater;
// Simple reminder
CallMeLater::reminder('Approve deployment')
->to('[email protected]')
->message('Please approve the production deployment for v2.0')
->at('tomorrow 9am')
->send();
// With all options
CallMeLater::reminder('Weekly report sign-off')
->to('[email protected]')
->toMany(['[email protected]', '[email protected]'])
->message('Please review and approve the weekly financial report')
->buttons('Approve', 'Reject')
->allowSnooze(3)
->
use CallMeLater\Laravel\Facades\CallMeLater;
// Repeat every 2 hours, up to 10 times
CallMeLater::http('https://api.example.com/reports/generate')
->post()
->payload(['type' => 'health_check'])
->inMinutes(5)
->everyHours(2)
->maxOccurrences(10)
->send();
// Repeat every day forever
CallMeLater::http('https://api.example.com/cleanup')
->post()
->inHours(1)
->everyDays(1)
->repeatForever()
->send();
// Repeat weekly until a specific date
CallMeLater::http('https://api.example.com/reports/weekly')
->post()
->at('next_monday')
->everyWeeks(1)
->until('2026-12-31T23:59:59Z')
->send();
// Recurring reminders
CallMeLater::reminder('Weekly standup check-in')
->to('[email protected]')
->message('Please confirm your standup attendance')
->at('next_monday')
->everyWeeks(1)
->maxOccurrences(52)
->send();
use CallMeLater\Laravel\Facades\CallMeLater;
// Build a multi-step workflow
CallMeLater::chain('Process Order')
->input(['order_id' => 456])
->addHttpStep('Charge Payment')
->url('https://api.stripe.com/v1/charges')
->post()
->body(['amount' => 2999])
->maxAttempts(3)
->done()
->addGateStep('Approve Shipping')
->message('Approve shipment for order #456?')
->to('[email protected]')
->timeout('2d')
->onTimeout('cancel')
->done()
->addDelayStep('Wait 1 hour')
->hours(1)
->done()
->addHttpStep('Ship Order')
->url('https://shipping.example.com/ship')
->post()
->body(['order_id' => '{{input.order_id}}'])
->condition("{{steps.1.response.action}} == confirmed")
->done()
->errorHandling('fail_chain')
->send();
// Get a chain
$chain = CallMeLater::getChain('chn_123');
// List chains with filters
$chains = CallMeLater::listChains(['status' => 'running']);
// Cancel a running chain
CallMeLater::cancelChain('chn_123');
// app/Listeners/HandleReminderResponse.php
namespace App\Listeners;
use CallMeLater\Laravel\Events\ReminderResponded;
class HandleReminderResponse
{
public function handle(ReminderResponded $event): void
{
if ($event->isConfirmed()) {
// Handle confirmation
logger()->info("Reminder {$event->actionName} was confirmed by {$event->responderEmail}");
} elseif ($event->isDeclined()) {
// Handle decline
logger()->warning("Reminder {$event->actionName} was declined");
}
}
}
use CallMeLater\Laravel\CallMeLater;
class OrderController extends Controller
{
public function __construct(
private CallMeLater $callMeLater
) {}
public function scheduleFollowUp(Order $order)
{
$this->callMeLater->reminder("Follow up on order #{$order->id}")
->to($order->customer_email)
->message("How was your experience with your recent order?")
->inDays(7)
->send();
}
}
// Inspect the payload as an array
$payload = CallMeLater::http('https://api.example.com/process')
->post()
->payload(['user_id' => 123])
->inHours(2)
->toArray();
// Dump and die (useful during development)
CallMeLater::reminder('Test')
->to('[email protected]')
->message('Debug this')
->inHours(1)
->dd();
use CallMeLater\Laravel\Exceptions\ApiException;
use CallMeLater\Laravel\Exceptions\AuthenticationException;
try {
CallMeLater::http('https://example.com')->send();
} catch (AuthenticationException $e) {
// Invalid or expired API token
logger()->error('Auth failed: ' . $e->getMessage());
} catch (ApiException $e) {
// Access the HTTP status code
$e->getStatusCode(); // 422, 404, 500, etc.
// Access the full validation error bag (for 422 responses)
$e->getValidationErrors(); // ['mode' => ['The selected mode is invalid.'], ...]
$e->getErrorBag(); // Alias for getValidationErrors()
// Access the raw response body
$e->getResponseBody();
}