prayer-times-id
Skill ini menjalankan engine Node.js untuk:
- mengambil jadwal shalat harian dari AlAdhan API,
- menentukan status Ramadan (otomatis/manual),
- membuat one-shot cron job OpenClaw untuk setiap waktu shalat yang belum lewat,
- mengirim pesan reminder berformat rapi dengan quote harian.
Struktur File
engine.js— engine utama penjadwalan reminder.prayer_config.json— konfigurasi lokasi + pengaturan perhitungan.quotes_id.json— kumpulan quote Islami berbahasa Indonesia.
Dependensi
- Node.js 18+ (disarankan 20+)
- OpenClaw CLI tersedia di PATH (
openclaw) - Akses internet ke:
https://api.aladhan.com/v1/timingshttps://api.aladhan.com/v1/gToH
Konfigurasi
Edit prayer_config.json:
{
"location": {
"name": "Cimahi",
"latitude": -6.8722,
"longitude": 107.5427,
"expires": "2026-03-02"
},
"settings": {
"auto_ramadan": true,
"manual_override": null,
"method": 11,
"timezone": "Asia/Jakarta"
},
"sources": {
"quotes_enabled": true,
"current_day_source": "local"
}
}
Keterangan penting:
location.name: label lokasi yang tampil di pesan.latitude/longitude: koordinat lokasi.settings.method: metode kalkulasi AlAdhan.settings.timezone: timezone IANA (contohAsia/Jakarta).settings.auto_ramadan: deteksi Ramadan otomatis dari tanggal Hijriah.settings.manual_override:true/falseuntuk override status Ramadan;nulluntuk otomatis.
Cara Menjalankan
Dari folder skill:
node engine.js --dry-run
- Tidak menulis cron job, hanya simulasi output JSON.
node engine.js
- Menambahkan cron one-shot ke OpenClaw untuk waktu shalat hari ini yang belum lewat.
Output
Engine mengeluarkan JSON ringkas, contoh:
status: hasil eksekusidryRun: mode simulasi atau reallocation,timezone,ramadanregistered: jumlah job yang berhasil dijadwalkanjobs[]: detail job per waktu shalat
Keamanan & Kepatuhan
- Tidak ada hardcoded secret/token/api key.
- Tidak ada hardcoded private/public IP.
- Eksekusi CLI memakai
execFileSync(tanpa shell command interpolation) untuk meminimalkan risiko command injection. - Penjadwalan job memakai
openclaw cron add --at ... --system-event ...secara langsung (tanpa nested command / shell-style job string). - Input konfigurasi divalidasi (nama lokasi, koordinat, metode).
- Input user
location.namesekarang disanitasi untuk keamanan (hanya alphanumeric, spasi, dan-). - Request API dibatasi timeout (
AbortSignal.timeout) agar tidak hang.
Catatan Operasional
- Engine hanya menjadwalkan reminder hari berjalan; jalankan ulang harian (mis. via scheduler induk) untuk generate jadwal hari berikutnya.
- Engine hanya menggunakan mode modern OpenClaw Cron (
--at+--system-event) dan tidak lagi menyediakan fallback legacy berbasis--job 'at ...'.