{ "id": "ai-responder", "name": "AI Responder", "version": "0.1.6", "type": "extension", "main": "dist/index.js", "description": "Auto-replies to inbound WhatsApp messages with an OpenAI-compatible Chat Completions API. Single-turn, rate-limited per chat and per session, and last in the responder chain.", "author": "Abhinav Raj <92502850+probably-ABHINAV@users.noreply.github.com>", "license": "MIT", "homepage": "https://github.com/rmyndharis/OpenWA-plugins/tree/main/ai-responder", "repository": "https://github.com/rmyndharis/OpenWA-plugins", "keywords": ["ai", "openai", "llm", "auto-reply", "chatbot", "whatsapp", "openwa"], "status": "beta", "minOpenWAVersion": "0.8.0", "testedOpenWAVersion": "0.30.0", "provides": ["ai-auto-reply"], "permissions": [ "net:fetch", "messages:send" ], "net": { "allow": ["localhost", "127.0.0.1", "[::1]"], "allowConfigHosts": ["apiBaseUrl"] }, "sessionScoped": true, "sessions": ["*"], "hooks": ["message:received"], "configSchema": { "type": "object", "properties": { "apiBaseUrl": { "type": "string", "default": "https://api.openai.com/v1", "title": "API base URL", "required": true, "description": "Base URL of an OpenAI-compatible API, e.g. https://api.openai.com/v1 or https://api.groq.com/openai/v1. Must be https, and an https host set here is added to the outbound allowlist automatically. http is accepted only for localhost, 127.0.0.1 or [::1], which also needs SSRF_ALLOWED_HOSTS on the gateway." }, "apiKey": { "type": "string", "secret": true, "required": true, "title": "API key", "description": "Bearer key for the provider. Stored as a secret and sent only to the API base URL." }, "model": { "type": "string", "default": "gpt-4o-mini", "title": "Model", "required": true, "description": "Model id sent with every request." }, "systemPrompt": { "type": "textarea", "title": "System prompt", "description": "Optional instructions for tone and scope. Not secret: any contact can try to make the model reveal or ignore it, so never put confidential data here." }, "respondInGroups": { "type": "boolean", "default": false, "title": "Also respond in group chats", "description": "Off by default. When on, every message in every group the account is in is sent to the provider." }, "maxRepliesPerChatPerHour": { "type": "number", "default": 20, "min": 1, "title": "Max replies per chat per hour", "description": "Messages answered per chat per clock hour. Messages over the limit are left to the rest of the chain. Kept in memory, so a restart resets it." }, "maxRepliesPerSessionPerHour": { "type": "number", "default": 200, "min": 1, "title": "Max replies per session per hour", "description": "Messages answered per WhatsApp session per clock hour, across all chats. Bounds provider cost. Kept in memory, so a restart resets it." }, "maxInputChars": { "type": "number", "default": 2000, "min": 1, "title": "Max input characters", "description": "The message text sent to the provider is cut to this many characters." }, "maxOutputTokens": { "type": "number", "default": 500, "min": 1, "title": "Max output tokens", "description": "Sent as max_tokens, bounding the length and cost of each reply." }, "timeoutMs": { "type": "number", "default": 15000, "min": 1000, "max": 25000, "title": "Request timeout (ms)", "description": "Provider request timeout. Clamped to 1000-25000 ms, below the host's 30000 ms per-call ceiling." } } }, "i18n": { "en": { "name": "AI Responder", "description": "Auto-replies to inbound WhatsApp messages with an OpenAI-compatible Chat Completions API. Single-turn, rate-limited per chat and per session, and last in the responder chain.", "config": { "apiBaseUrl": { "title": "API base URL" }, "apiKey": { "title": "API key" }, "model": { "title": "Model" }, "systemPrompt": { "title": "System prompt" }, "respondInGroups": { "title": "Also respond in group chats" }, "maxRepliesPerChatPerHour": { "title": "Max replies per chat per hour" }, "maxRepliesPerSessionPerHour": { "title": "Max replies per session per hour" }, "maxInputChars": { "title": "Max input characters" }, "maxOutputTokens": { "title": "Max output tokens" }, "timeoutMs": { "title": "Request timeout (ms)" } } }, "es": { "name": "Respuestas con IA", "description": "Responde automáticamente a los mensajes entrantes de WhatsApp mediante una API de Chat Completions compatible con OpenAI. Una respuesta por mensaje, sin historial, con límites por chat y por sesión, y último en la cadena de respuestas.", "config": { "apiBaseUrl": { "title": "URL base de la API" }, "apiKey": { "title": "Clave de API" }, "model": { "title": "Modelo" }, "systemPrompt": { "title": "Instrucciones del sistema" }, "respondInGroups": { "title": "Responder también en grupos" }, "maxRepliesPerChatPerHour": { "title": "Máximo de respuestas por chat y hora" }, "maxRepliesPerSessionPerHour": { "title": "Máximo de respuestas por sesión y hora" }, "maxInputChars": { "title": "Máximo de caracteres de entrada" }, "maxOutputTokens": { "title": "Máximo de tokens de salida" }, "timeoutMs": { "title": "Tiempo de espera de la solicitud (ms)" } } }, "zh-CN": { "name": "AI 自动回复", "description": "通过兼容 OpenAI 的 Chat Completions API 自动回复入站的 WhatsApp 消息。单轮回复,按聊天和会话限速,并在回复链中最后执行。", "config": { "apiBaseUrl": { "title": "API 基础 URL" }, "apiKey": { "title": "API 密钥" }, "model": { "title": "模型" }, "systemPrompt": { "title": "系统提示词" }, "respondInGroups": { "title": "也在群组中回复" }, "maxRepliesPerChatPerHour": { "title": "每个聊天每小时最多回复数" }, "maxRepliesPerSessionPerHour": { "title": "每个会话每小时最多回复数" }, "maxInputChars": { "title": "最大输入字符数" }, "maxOutputTokens": { "title": "最大输出 Token 数" }, "timeoutMs": { "title": "请求超时(毫秒)" } } }, "de": { "name": "KI-Antwortassistent", "description": "Antwortet über eine OpenAI-kompatible Chat-API mit Limits pro Chat und Sitzung, nach allen anderen Antwort-Plugins.", "config": { "apiBaseUrl": { "title": "API-Basis-URL" }, "apiKey": { "title": "API-Schlüssel" }, "model": { "title": "Modell" }, "systemPrompt": { "title": "Systemanweisung" }, "respondInGroups": { "title": "Auch in Gruppenchats antworten" }, "maxRepliesPerChatPerHour": { "title": "Max. Antworten pro Chat und Stunde" }, "maxRepliesPerSessionPerHour": { "title": "Max. Antworten pro Sitzung und Stunde" }, "maxInputChars": { "title": "Max. Eingabezeichen" }, "maxOutputTokens": { "title": "Max. Ausgabetokens" }, "timeoutMs": { "title": "Anfragezeitlimit (ms)" } } }, "tr": { "name": "Yapay Zeka Yanıtlayıcı", "description": "Diğer yanıt eklentilerinden sonra, sohbet ve oturum sınırlarıyla OpenAI uyumlu bir API üzerinden yanıt verir.", "config": { "apiBaseUrl": { "title": "API temel URL adresi" }, "apiKey": { "title": "API anahtarı" }, "model": { "title": "Model" }, "systemPrompt": { "title": "Sistem istemi" }, "respondInGroups": { "title": "Grup sohbetlerinde de yanıtla" }, "maxRepliesPerChatPerHour": { "title": "Sohbet başına saatlik yanıt sınırı" }, "maxRepliesPerSessionPerHour": { "title": "Oturum başına saatlik yanıt sınırı" }, "maxInputChars": { "title": "En fazla girdi karakteri" }, "maxOutputTokens": { "title": "En fazla çıktı belirteci" }, "timeoutMs": { "title": "İstek zaman aşımı (ms)" } } }, "pt-BR": { "name": "Assistente de respostas com IA", "description": "Responde por uma API compatível com OpenAI, com limites por conversa e sessão, após os demais plugins de resposta.", "config": { "apiBaseUrl": { "title": "URL base da API" }, "apiKey": { "title": "Chave da API" }, "model": { "title": "Modelo" }, "systemPrompt": { "title": "Instrução do sistema" }, "respondInGroups": { "title": "Responder também em grupos" }, "maxRepliesPerChatPerHour": { "title": "Máx. de respostas por conversa por hora" }, "maxRepliesPerSessionPerHour": { "title": "Máx. de respostas por sessão por hora" }, "maxInputChars": { "title": "Máx. de caracteres de entrada" }, "maxOutputTokens": { "title": "Máx. de tokens de saída" }, "timeoutMs": { "title": "Tempo limite da requisição (ms)" } } }, "ko": { "name": "AI 자동 응답", "description": "다른 응답 플러그인 다음에 OpenAI 호환 API로 응답하며 채팅 및 세션별 한도를 적용합니다.", "config": { "apiBaseUrl": { "title": "API 기본 URL" }, "apiKey": { "title": "API 키" }, "model": { "title": "모델" }, "systemPrompt": { "title": "시스템 프롬프트" }, "respondInGroups": { "title": "그룹 채팅에도 응답" }, "maxRepliesPerChatPerHour": { "title": "채팅별 시간당 최대 응답 수" }, "maxRepliesPerSessionPerHour": { "title": "세션별 시간당 최대 응답 수" }, "maxInputChars": { "title": "최대 입력 문자 수" }, "maxOutputTokens": { "title": "최대 출력 토큰 수" }, "timeoutMs": { "title": "요청 제한 시간 (ms)" } } }, "id": { "name": "Penjawab AI", "description": "Membalas melalui API yang kompatibel dengan OpenAI, dengan batas per chat dan sesi, setelah plugin penjawab lainnya.", "config": { "apiBaseUrl": { "title": "URL dasar API" }, "apiKey": { "title": "Kunci API" }, "model": { "title": "Model" }, "systemPrompt": { "title": "Instruksi sistem" }, "respondInGroups": { "title": "Balas juga di chat grup" }, "maxRepliesPerChatPerHour": { "title": "Maks. balasan per chat per jam" }, "maxRepliesPerSessionPerHour": { "title": "Maks. balasan per sesi per jam" }, "maxInputChars": { "title": "Maks. karakter masukan" }, "maxOutputTokens": { "title": "Maks. token keluaran" }, "timeoutMs": { "title": "Batas waktu permintaan (ms)" } } }, "he": { "name": "משיב AI", "description": "משיב דרך API תואם OpenAI, עם מגבלות לכל שיחה והפעלה, אחרי תוספי המענה האחרים.", "config": { "apiBaseUrl": { "title": "כתובת בסיס של API" }, "apiKey": { "title": "מפתח API" }, "model": { "title": "מודל" }, "systemPrompt": { "title": "הנחיית מערכת" }, "respondInGroups": { "title": "מענה גם בקבוצות" }, "maxRepliesPerChatPerHour": { "title": "מספר תשובות מרבי לשיחה בשעה" }, "maxRepliesPerSessionPerHour": { "title": "מספר תשובות מרבי להפעלה בשעה" }, "maxInputChars": { "title": "מספר תווי קלט מרבי" }, "maxOutputTokens": { "title": "מספר טוקנים מרבי בפלט" }, "timeoutMs": { "title": "זמן קצוב לבקשה (ms)" } } }, "zh-HK": { "name": "AI 自動回覆", "description": "透過相容 OpenAI 的 API 回覆,設有每個對話及工作階段的限制,並在其他回覆外掛之後執行。", "config": { "apiBaseUrl": { "title": "API 基礎網址" }, "apiKey": { "title": "API 金鑰" }, "model": { "title": "模型" }, "systemPrompt": { "title": "系統提示" }, "respondInGroups": { "title": "同時回覆群組對話" }, "maxRepliesPerChatPerHour": { "title": "每個對話每小時最多回覆數" }, "maxRepliesPerSessionPerHour": { "title": "每個工作階段每小時最多回覆數" }, "maxInputChars": { "title": "最多輸入字元數" }, "maxOutputTokens": { "title": "最多輸出 token 數" }, "timeoutMs": { "title": "請求逾時 (ms)" } } }, "ar": { "name": "مجيب الذكاء الاصطناعي", "description": "يرد عبر واجهة متوافقة مع OpenAI، بحدود لكل محادثة وجلسة، بعد إضافات الرد الأخرى.", "config": { "apiBaseUrl": { "title": "عنوان API الأساسي" }, "apiKey": { "title": "مفتاح API" }, "model": { "title": "النموذج" }, "systemPrompt": { "title": "تعليمات النظام" }, "respondInGroups": { "title": "الرد في محادثات المجموعات أيضاً" }, "maxRepliesPerChatPerHour": { "title": "الحد الأقصى للردود لكل محادثة في الساعة" }, "maxRepliesPerSessionPerHour": { "title": "الحد الأقصى للردود لكل جلسة في الساعة" }, "maxInputChars": { "title": "الحد الأقصى لأحرف الإدخال" }, "maxOutputTokens": { "title": "الحد الأقصى لرموز الإخراج" }, "timeoutMs": { "title": "مهلة الطلب (ms)" } } }, "te": { "name": "AI ప్రత్యుత్తర సహాయకుడు", "description": "ఇతర ప్రత్యుత్తర ప్లగిన్‌ల తర్వాత, చాట్ మరియు సెషన్ పరిమితులతో OpenAI అనుకూల API ద్వారా బదులిస్తుంది.", "config": { "apiBaseUrl": { "title": "API మూల URL" }, "apiKey": { "title": "API కీ" }, "model": { "title": "మోడల్" }, "systemPrompt": { "title": "సిస్టమ్ సూచన" }, "respondInGroups": { "title": "గ్రూప్ చాట్‌లలో కూడా బదులివ్వండి" }, "maxRepliesPerChatPerHour": { "title": "చాట్‌కు గంటకు గరిష్ఠ ప్రత్యుత్తరాలు" }, "maxRepliesPerSessionPerHour": { "title": "సెషన్‌కు గంటకు గరిష్ఠ ప్రత్యుత్తరాలు" }, "maxInputChars": { "title": "గరిష్ఠ ఇన్‌పుట్ అక్షరాలు" }, "maxOutputTokens": { "title": "గరిష్ఠ అవుట్‌పుట్ టోకెన్‌లు" }, "timeoutMs": { "title": "అభ్యర్థన గడువు (ms)" } } }, "fr": { "name": "Assistant de réponse IA", "description": "Répond via une API compatible OpenAI, avec des limites par conversation et session, après les autres extensions de réponse.", "config": { "apiBaseUrl": { "title": "URL de base de l’API" }, "apiKey": { "title": "Clé API" }, "model": { "title": "Modèle" }, "systemPrompt": { "title": "Instruction système" }, "respondInGroups": { "title": "Répondre aussi dans les groupes" }, "maxRepliesPerChatPerHour": { "title": "Réponses maximales par conversation et par heure" }, "maxRepliesPerSessionPerHour": { "title": "Réponses maximales par session et par heure" }, "maxInputChars": { "title": "Caractères d’entrée maximum" }, "maxOutputTokens": { "title": "Jetons de sortie maximum" }, "timeoutMs": { "title": "Délai de la requête (ms)" } } }, "it": { "name": "Assistente di risposta IA", "description": "Risponde tramite una API compatibile con OpenAI, con limiti per chat e sessione, dopo gli altri plugin di risposta.", "config": { "apiBaseUrl": { "title": "URL di base API" }, "apiKey": { "title": "Chiave API" }, "model": { "title": "Modello" }, "systemPrompt": { "title": "Istruzione di sistema" }, "respondInGroups": { "title": "Rispondi anche nelle chat di gruppo" }, "maxRepliesPerChatPerHour": { "title": "Risposte massime per chat ogni ora" }, "maxRepliesPerSessionPerHour": { "title": "Risposte massime per sessione ogni ora" }, "maxInputChars": { "title": "Caratteri massimi in ingresso" }, "maxOutputTokens": { "title": "Token massimi in uscita" }, "timeoutMs": { "title": "Timeout della richiesta (ms)" } } }, "hi": { "name": "AI उत्तर सहायक", "description": "अन्य उत्तर प्लगइन के बाद, प्रति चैट और सत्र की सीमाओं के साथ OpenAI-संगत API से उत्तर देता है।", "config": { "apiBaseUrl": { "title": "API आधार URL" }, "apiKey": { "title": "API कुंजी" }, "model": { "title": "मॉडल" }, "systemPrompt": { "title": "सिस्टम निर्देश" }, "respondInGroups": { "title": "समूह चैट में भी उत्तर दें" }, "maxRepliesPerChatPerHour": { "title": "प्रति चैट प्रति घंटे अधिकतम उत्तर" }, "maxRepliesPerSessionPerHour": { "title": "प्रति सत्र प्रति घंटे अधिकतम उत्तर" }, "maxInputChars": { "title": "अधिकतम इनपुट अक्षर" }, "maxOutputTokens": { "title": "अधिकतम आउटपुट टोकन" }, "timeoutMs": { "title": "अनुरोध समय सीमा (ms)" } } } } }