Ctrl K
ComunidadGuías…

ai-responder/manifest.json

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
{
  "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)"
        }
      }
    }
  }
}