Skip to content

Commit 8d2283b

Browse files
committed
release: after-hours 0.1.3, faq-bot 0.1.7, chat-flow 1.0.6, group-translate 1.0.6, voice-transcription 1.0.2
Cut PATCH releases for the five plugins with per-session config-honor fixes: - after-hours 0.1.3 — per-event config re-parse (PR #38) - faq-bot 0.1.7 — per-event config re-parse (PR #38) - chat-flow 1.0.6 — per-event config re-parse (PR #38) - group-translate 1.0.6 — config-signature cached rebuild (PR #39) - voice-transcription 1.0.2 — messages:send permission + config-signature cached rebuild (PR #39)
1 parent fecbd45 commit 8d2283b

15 files changed

Lines changed: 871 additions & 140 deletions

File tree

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@ This repository provides:
3434
<!-- BEGIN PLUGIN CATALOG -->
3535
| Plugin | Description | Version | Status |
3636
| ------ | ----------- | ------- | ------ |
37-
| [`after-hours`](./after-hours) | Auto-replies with a configurable away/closing message to messages received outside business hours. | 0.1.2 | stable |
38-
| [`chat-flow`](./chat-flow) | Interactive, stateful auto-reply: a trigger word starts a greeting + numbered menu, replies traverse a configurable menu tree, and per-chat state expires after 15 minutes. | 1.0.5 | stable |
37+
| [`after-hours`](./after-hours) | Auto-replies with a configurable away/closing message to messages received outside business hours. | 0.1.3 | stable |
38+
| [`chat-flow`](./chat-flow) | Interactive, stateful auto-reply: a trigger word starts a greeting + numbered menu, replies traverse a configurable menu tree, and per-chat state expires after 15 minutes. | 1.0.6 | stable |
3939
| [`chatwoot-adapter`](./chatwoot-adapter) | Two-way sync between a WhatsApp session and a Chatwoot inbox: relays WhatsApp messages (1:1 and groups, with media) into Chatwoot as an API-channel inbox, sends agent replies back to WhatsApp, and hands a chat over to a human agent — silencing other OpenWA bots — when an agent takes it in Chatwoot. First consumer of the OpenWA Integration SDK v1; runs sandboxed in the plugin worker. | 0.5.2 | beta |
40-
| [`faq-bot`](./faq-bot) | Auto-replies to inbound WhatsApp messages from configurable FAQ keyword/regex rules. | 0.1.6 | stable |
41-
| [`group-translate`](./group-translate) | Auto-translates group messages between participants' languages via a LibreTranslate backend. Configure in-chat with /tr commands. Admin-gated; disabled until enabled. | 1.0.5 | stable |
40+
| [`faq-bot`](./faq-bot) | Auto-replies to inbound WhatsApp messages from configurable FAQ keyword/regex rules. | 0.1.7 | stable |
41+
| [`group-translate`](./group-translate) | Auto-translates group messages between participants' languages via a LibreTranslate backend. Configure in-chat with /tr commands. Admin-gated; disabled until enabled. | 1.0.6 | stable |
4242
| [`gsheets-logger`](./gsheets-logger) | Logs WhatsApp message events to a Google Sheet via a service account. | 0.2.3 | stable |
4343
| [`http-action`](./http-action) | Triggers safe REST API requests from WhatsApp commands and renders JSON responses back to chat. | 0.1.0 | beta |
4444
| [`supabase-otp-hook`](./supabase-otp-hook) | Deliver Supabase Auth phone OTPs over WhatsApp. | 0.1.0 | beta |

after-hours/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ The version here always matches `manifest.json`'s `version`.
88

99
## [Unreleased]
1010

11+
## [0.1.3] — 2026-07-18
12+
1113
### Fixed
1214

1315
- **Per-session config overrides are now honored at message time.** The hook previously read a config

after-hours/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
| Field | Value |
1313
| ----- | ----- |
1414
| **Identifier** | `after-hours` |
15-
| **Version** | 0.1.2 |
16-
| **Released** | 2026-06-23 |
15+
| **Version** | 0.1.3 |
16+
| **Released** | 2026-07-18 |
1717
| **Status** | stable |
1818
| **Author** | Yudhi Armyndharis |
1919
| **License** | MIT |

after-hours/manifest.json

Lines changed: 219 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,239 @@
11
{
22
"id": "after-hours",
33
"name": "After-Hours Auto-Reply",
4-
"version": "0.1.2",
4+
"version": "0.1.3",
55
"type": "extension",
66
"main": "dist/index.js",
77
"description": "Auto-replies with a configurable away/closing message to messages received outside business hours.",
88
"author": "Yudhi Armyndharis <yudhi@rmyndharis.com>",
99
"license": "MIT",
1010
"homepage": "https://github.com/rmyndharis/OpenWA-plugins/tree/main/after-hours",
1111
"repository": "https://github.com/rmyndharis/OpenWA-plugins",
12-
"keywords": ["after-hours", "business-hours", "away", "auto-reply", "whatsapp", "openwa"],
12+
"keywords": [
13+
"after-hours",
14+
"business-hours",
15+
"away",
16+
"auto-reply",
17+
"whatsapp",
18+
"openwa"
19+
],
1320
"status": "stable",
1421
"minOpenWAVersion": "0.6.2",
1522
"testedOpenWAVersion": "0.8.1",
16-
"provides": ["auto-reply"],
17-
"permissions": ["messages:send"],
18-
"sessions": ["*"],
19-
"hooks": ["message:received"],
23+
"provides": [
24+
"auto-reply"
25+
],
26+
"permissions": [
27+
"messages:send"
28+
],
29+
"sessions": [
30+
"*"
31+
],
32+
"hooks": [
33+
"message:received"
34+
],
2035
"configSchema": {
2136
"type": "object",
2237
"properties": {
23-
"schedule": { "type": "string", "required": true, "title": "Weekly schedule (JSON)",
24-
"description": "Object mapping mon..sun to \"HH:MM-HH:MM\" or null (closed), e.g. {\"mon\":\"09:00-17:00\",\"sat\":\"09:00-13:00\",\"sun\":null}." },
25-
"timezone": { "type": "string", "default": "UTC", "title": "IANA timezone",
26-
"description": "e.g. Asia/Jakarta. The schedule is interpreted in this timezone." },
27-
"awayMessage": { "type": "string", "required": true, "title": "After-hours reply",
28-
"description": "Sent when a message arrives outside business hours." },
29-
"cooldownSec": { "type": "number", "default": 3600, "title": "Cooldown (seconds per chat)",
30-
"description": "Minimum seconds between after-hours replies to the same chat. 0 = reply every time." },
31-
"respondInGroups": { "type": "boolean", "default": false, "title": "Also respond in group chats" }
38+
"schedule": {
39+
"type": "string",
40+
"required": true,
41+
"title": "Weekly schedule (JSON)",
42+
"description": "Object mapping mon..sun to \"HH:MM-HH:MM\" or null (closed), e.g. {\"mon\":\"09:00-17:00\",\"sat\":\"09:00-13:00\",\"sun\":null}."
43+
},
44+
"timezone": {
45+
"type": "string",
46+
"default": "UTC",
47+
"title": "IANA timezone",
48+
"description": "e.g. Asia/Jakarta. The schedule is interpreted in this timezone."
49+
},
50+
"awayMessage": {
51+
"type": "string",
52+
"required": true,
53+
"title": "After-hours reply",
54+
"description": "Sent when a message arrives outside business hours."
55+
},
56+
"cooldownSec": {
57+
"type": "number",
58+
"default": 3600,
59+
"title": "Cooldown (seconds per chat)",
60+
"description": "Minimum seconds between after-hours replies to the same chat. 0 = reply every time."
61+
},
62+
"respondInGroups": {
63+
"type": "boolean",
64+
"default": false,
65+
"title": "Also respond in group chats"
66+
}
3267
}
3368
},
3469
"i18n": {
35-
"es": { "name": "Respuesta Automática Fuera de Horario", "description": "Responde automáticamente con un mensaje de ausencia configurable a los mensajes recibidos fuera del horario comercial.",
36-
"config": { "schedule": { "title": "Horario semanal (JSON)" }, "timezone": { "title": "Zona horaria IANA" }, "awayMessage": { "title": "Respuesta fuera de horario" }, "cooldownSec": { "title": "Tiempo de espera (segundos por chat)" }, "respondInGroups": { "title": "Responder también en grupos" } } },
37-
"fr": { "name": "Réponse Automatique Hors Horaires", "description": "Répond automatiquement avec un message d'absence configurable aux messages reçus en dehors des heures d'ouverture.",
38-
"config": { "schedule": { "title": "Planning hebdomadaire (JSON)" }, "timezone": { "title": "Fuseau horaire IANA" }, "awayMessage": { "title": "Réponse hors horaires" }, "cooldownSec": { "title": "Délai d'attente (secondes par chat)" }, "respondInGroups": { "title": "Répondre aussi dans les groupes" } } },
39-
"it": { "name": "Risposta Automatica Fuori Orario", "description": "Risponde automaticamente con un messaggio di assenza configurabile ai messaggi ricevuti fuori dall'orario di lavoro.",
40-
"config": { "schedule": { "title": "Orario settimanale (JSON)" }, "timezone": { "title": "Fuso orario IANA" }, "awayMessage": { "title": "Risposta fuori orario" }, "cooldownSec": { "title": "Intervallo (secondi per chat)" }, "respondInGroups": { "title": "Rispondi anche nei gruppi" } } },
41-
"ar": { "name": "الرد التلقائي خارج ساعات العمل", "description": "يرد تلقائيًا برسالة غياب قابلة للتهيئة على الرسائل الواردة خارج ساعات العمل.",
42-
"config": { "schedule": { "title": "الجدول الأسبوعي (JSON)" }, "timezone": { "title": "المنطقة الزمنية (IANA)" }, "awayMessage": { "title": "رد خارج ساعات العمل" }, "cooldownSec": { "title": "فترة الانتظار (ثوانٍ لكل محادثة)" }, "respondInGroups": { "title": "الرد في المجموعات أيضًا" } } },
43-
"he": { "name": "מענה אוטומטי מחוץ לשעות הפעילות", "description": "שולח מענה אוטומטי עם הודעת היעדרות ניתנת להגדרה להודעות שהתקבלו מחוץ לשעות הפעילות.",
44-
"config": { "schedule": { "title": "לוח זמנים שבועי (JSON)" }, "timezone": { "title": "אזור זמן IANA" }, "awayMessage": { "title": "מענה מחוץ לשעות הפעילות" }, "cooldownSec": { "title": "זמן המתנה (שניות לצ'אט)" }, "respondInGroups": { "title": "מענה גם בקבוצות" } } },
45-
"te": { "name": "వ్యాపార గంటల తర్వాత ఆటో-రిప్లై", "description": "వ్యాపార సమయం వెలుపల వచ్చే సందేశాలకు కాన్ఫిగర్ చేయదగిన గైర్హాజరు సందేశంతో స్వయంచాలకంగా జవాబిస్తుంది.",
46-
"config": { "schedule": { "title": "వారపు షెడ్యూల్ (JSON)" }, "timezone": { "title": "IANA సమయమండలం" }, "awayMessage": { "title": "వ్యాపార సమయం తర్వాత జవాబు" }, "cooldownSec": { "title": "కూల్‌డౌన్ (ప్రతి చాట్‌కు సెకన్లు)" }, "respondInGroups": { "title": "గ్రూపుల్లోనూ స్పందించు" } } },
47-
"zh-CN": { "name": "下班后自动回复", "description": "对在非工作时间收到的消息,自动回复可配置的离开/关闭消息。",
48-
"config": { "schedule": { "title": "每周排班 (JSON)" }, "timezone": { "title": "IANA 时区" }, "awayMessage": { "title": "下班后回复内容" }, "cooldownSec": { "title": "冷却时间(每个聊天秒数)" }, "respondInGroups": { "title": "也在群组中回复" } } },
49-
"zh-HK": { "name": "下班後自動回覆", "description": "對非工作時間收到的訊息,自動回覆可設定的離開/關閉訊息。",
50-
"config": { "schedule": { "title": "每週排班 (JSON)" }, "timezone": { "title": "IANA 時區" }, "awayMessage": { "title": "下班後回覆內容" }, "cooldownSec": { "title": "冷卻時間(每個聊天秒數)" }, "respondInGroups": { "title": "亦在群組中回覆" } } }
70+
"es": {
71+
"name": "Respuesta Automática Fuera de Horario",
72+
"description": "Responde automáticamente con un mensaje de ausencia configurable a los mensajes recibidos fuera del horario comercial.",
73+
"config": {
74+
"schedule": {
75+
"title": "Horario semanal (JSON)"
76+
},
77+
"timezone": {
78+
"title": "Zona horaria IANA"
79+
},
80+
"awayMessage": {
81+
"title": "Respuesta fuera de horario"
82+
},
83+
"cooldownSec": {
84+
"title": "Tiempo de espera (segundos por chat)"
85+
},
86+
"respondInGroups": {
87+
"title": "Responder también en grupos"
88+
}
89+
}
90+
},
91+
"fr": {
92+
"name": "Réponse Automatique Hors Horaires",
93+
"description": "Répond automatiquement avec un message d'absence configurable aux messages reçus en dehors des heures d'ouverture.",
94+
"config": {
95+
"schedule": {
96+
"title": "Planning hebdomadaire (JSON)"
97+
},
98+
"timezone": {
99+
"title": "Fuseau horaire IANA"
100+
},
101+
"awayMessage": {
102+
"title": "Réponse hors horaires"
103+
},
104+
"cooldownSec": {
105+
"title": "Délai d'attente (secondes par chat)"
106+
},
107+
"respondInGroups": {
108+
"title": "Répondre aussi dans les groupes"
109+
}
110+
}
111+
},
112+
"it": {
113+
"name": "Risposta Automatica Fuori Orario",
114+
"description": "Risponde automaticamente con un messaggio di assenza configurabile ai messaggi ricevuti fuori dall'orario di lavoro.",
115+
"config": {
116+
"schedule": {
117+
"title": "Orario settimanale (JSON)"
118+
},
119+
"timezone": {
120+
"title": "Fuso orario IANA"
121+
},
122+
"awayMessage": {
123+
"title": "Risposta fuori orario"
124+
},
125+
"cooldownSec": {
126+
"title": "Intervallo (secondi per chat)"
127+
},
128+
"respondInGroups": {
129+
"title": "Rispondi anche nei gruppi"
130+
}
131+
}
132+
},
133+
"ar": {
134+
"name": "الرد التلقائي خارج ساعات العمل",
135+
"description": "يرد تلقائيًا برسالة غياب قابلة للتهيئة على الرسائل الواردة خارج ساعات العمل.",
136+
"config": {
137+
"schedule": {
138+
"title": "الجدول الأسبوعي (JSON)"
139+
},
140+
"timezone": {
141+
"title": "المنطقة الزمنية (IANA)"
142+
},
143+
"awayMessage": {
144+
"title": "رد خارج ساعات العمل"
145+
},
146+
"cooldownSec": {
147+
"title": "فترة الانتظار (ثوانٍ لكل محادثة)"
148+
},
149+
"respondInGroups": {
150+
"title": "الرد في المجموعات أيضًا"
151+
}
152+
}
153+
},
154+
"he": {
155+
"name": "מענה אוטומטי מחוץ לשעות הפעילות",
156+
"description": "שולח מענה אוטומטי עם הודעת היעדרות ניתנת להגדרה להודעות שהתקבלו מחוץ לשעות הפעילות.",
157+
"config": {
158+
"schedule": {
159+
"title": "לוח זמנים שבועי (JSON)"
160+
},
161+
"timezone": {
162+
"title": "אזור זמן IANA"
163+
},
164+
"awayMessage": {
165+
"title": "מענה מחוץ לשעות הפעילות"
166+
},
167+
"cooldownSec": {
168+
"title": "זמן המתנה (שניות לצ'אט)"
169+
},
170+
"respondInGroups": {
171+
"title": "מענה גם בקבוצות"
172+
}
173+
}
174+
},
175+
"te": {
176+
"name": "వ్యాపార గంటల తర్వాత ఆటో-రిప్లై",
177+
"description": "వ్యాపార సమయం వెలుపల వచ్చే సందేశాలకు కాన్ఫిగర్ చేయదగిన గైర్హాజరు సందేశంతో స్వయంచాలకంగా జవాబిస్తుంది.",
178+
"config": {
179+
"schedule": {
180+
"title": "వారపు షెడ్యూల్ (JSON)"
181+
},
182+
"timezone": {
183+
"title": "IANA సమయమండలం"
184+
},
185+
"awayMessage": {
186+
"title": "వ్యాపార సమయం తర్వాత జవాబు"
187+
},
188+
"cooldownSec": {
189+
"title": "కూల్‌డౌన్ (ప్రతి చాట్‌కు సెకన్లు)"
190+
},
191+
"respondInGroups": {
192+
"title": "గ్రూపుల్లోనూ స్పందించు"
193+
}
194+
}
195+
},
196+
"zh-CN": {
197+
"name": "下班后自动回复",
198+
"description": "对在非工作时间收到的消息,自动回复可配置的离开/关闭消息。",
199+
"config": {
200+
"schedule": {
201+
"title": "每周排班 (JSON)"
202+
},
203+
"timezone": {
204+
"title": "IANA 时区"
205+
},
206+
"awayMessage": {
207+
"title": "下班后回复内容"
208+
},
209+
"cooldownSec": {
210+
"title": "冷却时间(每个聊天秒数)"
211+
},
212+
"respondInGroups": {
213+
"title": "也在群组中回复"
214+
}
215+
}
216+
},
217+
"zh-HK": {
218+
"name": "下班後自動回覆",
219+
"description": "對非工作時間收到的訊息,自動回覆可設定的離開/關閉訊息。",
220+
"config": {
221+
"schedule": {
222+
"title": "每週排班 (JSON)"
223+
},
224+
"timezone": {
225+
"title": "IANA 時區"
226+
},
227+
"awayMessage": {
228+
"title": "下班後回覆內容"
229+
},
230+
"cooldownSec": {
231+
"title": "冷卻時間(每個聊天秒數)"
232+
},
233+
"respondInGroups": {
234+
"title": "亦在群組中回覆"
235+
}
236+
}
237+
}
51238
}
52-
}
239+
}

chat-flow/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ The version here always matches `manifest.json`'s `version`.
88

99
## [Unreleased]
1010

11+
## [1.0.6] — 2026-07-18
12+
1113
### Fixed
1214

1315
- **Per-session config overrides are now honored at message time.** The hook previously read a config

chat-flow/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
| Field | Value |
1414
| ----- | ----- |
1515
| **Identifier** | `chat-flow` |
16-
| **Version** | 1.0.5 |
17-
| **Released** | 2026-07-02 |
16+
| **Version** | 1.0.6 |
17+
| **Released** | 2026-07-18 |
1818
| **Status** | stable |
1919
| **Author** | Yudhi Armyndharis |
2020
| **License** | MIT |

0 commit comments

Comments
 (0)