prayer-times-id
Skill ini menjalankan engine Node.js untuk:
- 1. 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. - INLINECODE1 — konfigurasi lokasi + pengaturan perhitungan.
- INLINECODE2 — 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/timings
- INLINECODE5
Konfigurasi
Edit prayer_config.json:
CODEBLOCK0
Keterangan penting:
- -
location.name: label lokasi yang tampil di pesan. - INLINECODE8 /
longitude: koordinat lokasi. - INLINECODE10 : metode kalkulasi AlAdhan.
- INLINECODE11 : timezone IANA (contoh
Asia/Jakarta). - INLINECODE13 : deteksi Ramadan otomatis dari tanggal Hijriah.
- INLINECODE14 :
true/false untuk override status Ramadan; null untuk otomatis.
Cara Menjalankan
Dari folder skill:
CODEBLOCK1
- - Tidak menulis cron job, hanya simulasi output JSON.
CODEBLOCK2
- - Menambahkan cron one-shot ke OpenClaw untuk waktu shalat hari ini yang belum lewat.
Output
Engine mengeluarkan JSON ringkas, contoh:
- -
status: hasil eksekusi - INLINECODE19 : mode simulasi atau real
- INLINECODE20 ,
timezone, INLINECODE22 - INLINECODE23 : jumlah job yang berhasil dijadwalkan
- INLINECODE24 : 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.name sekarang 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 ...'.
prayer-times-id
该技能运行Node.js引擎,用于:
- 1. 从AlAdhan API获取每日礼拜时间表,
- 确定斋月状态(自动/手动),
- 为每个尚未过时的礼拜时间创建一次性OpenClaw定时任务,
- 发送格式精美的提醒消息并附上每日箴言。
文件结构
- - engine.js — 提醒调度主引擎。
- prayerconfig.json — 位置配置+计算设置。
- quotesid.json — 印尼语伊斯兰箴言集合。
依赖项
- - Node.js 18+(建议20+)
- OpenClaw CLI需在PATH路径中可用(openclaw)
- 互联网访问:
- https://api.aladhan.com/v1/timings
- https://api.aladhan.com/v1/gToH
配置
编辑prayer_config.json:
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,
currentdaysource: local
}
}
重要说明:
- - location.name:消息中显示的位置标签。
- latitude / longitude:位置坐标。
- settings.method:AlAdhan计算方法。
- settings.timezone:IANA时区(例如Asia/Jakarta)。
- settings.autoramadan:根据回历日期自动检测斋月。
- settings.manualoverride:true/false用于覆盖斋月状态;null为自动。
运行方式
在技能文件夹中:
bash
node engine.js --dry-run
bash
node engine.js
- - 为今天尚未过时的礼拜时间向OpenClaw添加一次性定时任务。
输出
引擎输出简洁的JSON,例如:
- - status:执行结果
- dryRun:模拟或真实模式
- location、timezone、ramadan
- registered:成功调度的任务数量
- jobs[]:每个礼拜时间的任务详情
安全与合规
- - 无硬编码的密钥/令牌/API密钥。
- 无硬编码的私有/公共IP。
- CLI执行使用execFileSync(无shell命令插值)以最小化命令注入风险。
- 任务调度直接使用openclaw cron add --at ... --system-event ...(无嵌套命令/shell风格的任务字符串)。
- 配置输入经过验证(位置名称、坐标、方法)。
- 用户输入location.name现已进行安全清理(仅允许字母数字、空格和-)。
- API请求设置超时限制(AbortSignal.timeout)以防止挂起。
操作说明
- - 引擎仅调度当天的提醒;需每日重新运行(例如通过主调度器)以生成次日的日程。
- 引擎仅使用现代OpenClaw Cron模式(--at + --system-event),不再提供基于--job at ...的旧版回退方案。