ai-responder/CHANGELOG.md
Rama main · réplica de lectura del repositorio original.
# Changelog
All notable changes to the **AI Responder** plugin are documented here.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this plugin adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
The version here always matches `manifest.json`'s `version`.
## [Unreleased]
## [0.1.6] - 2026-11-10
### Fixed
- Skip forwarded messages (`isForwarded`), reject query strings and fragments in `apiBaseUrl`, strip multiple trailing slashes when building the `/chat/completions` URL, and guard against replies that become empty after Markdown conversion.
### Changed
- Align plugin metadata with OpenWA v0.30.0.
## [0.1.5] - 2026-11-08
### Changed
- Align plugin metadata with OpenWA v0.29.1.
## [0.1.4] - 2026-11-06
### Changed
- Align plugin metadata with OpenWA v0.29.0.
## [0.1.3] - 2026-10-31
### Changed
- Align plugin metadata with OpenWA v0.27.0.
## [0.1.2] - 2026-10-28
### Changed
- Align plugin metadata with OpenWA v0.26.0.
- Document that a per-session override that points `apiBaseUrl` at another origin must also set `apiKey`, which OpenWA 0.26.0 no longer inherits.
## [0.1.1] - 2026-10-15
### Changed
- Align plugin metadata with OpenWA v0.25.0 and complete dashboard translations for all supported locales.
## [0.1.0] - 2026-09-24
### Added
- Answers inbound WhatsApp messages with a reply from any OpenAI-compatible Chat Completions API
(`apiBaseUrl`, `apiKey`, `model`, optional `systemPrompt`), sent as a quoted reply.
- Single-turn: each message is sent on its own, with no conversation history.
- Replies converted from Markdown to WhatsApp formatting.
- Runs at hook priority 97, after every other responder, and claims each message it answers.
- The provider call runs off the hook, so a slow provider never delays message delivery.
- Hourly limits per chat (`maxRepliesPerChatPerHour`) and per session (`maxRepliesPerSessionPerHour`),
kept in memory, and at most eight provider calls open at once.
- Bounded cost per message: input cut to `maxInputChars`, output capped by `maxOutputTokens`, request
timeout `timeoutMs`.
- Skips its own messages, contact cards, polls, orders, product cards, locations, channels, broadcasts,
messages delivered more than five minutes late, and redeliveries; groups only with `respondInGroups`.
- `apiBaseUrl` must be https; http only for a loopback host.