{"id":345628,"date":"2026-10-12T07:43:18","date_gmt":"2026-10-12T07:43:18","guid":{"rendered":"https:\/\/ru.wordpress.org\/plugins\/gsxr-777-ai-open-chat\/"},"modified":"2026-10-12T08:40:32","modified_gmt":"2026-10-12T08:40:32","slug":"wln-multi-provider-ai-chat","status":"publish","type":"plugin","link":"https:\/\/ary.wordpress.org\/plugins\/wln-multi-provider-ai-chat\/","author":23538529,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.4.8","stable_tag":"1.4.8","tested":"7.1.3","requires":"5.0","requires_php":"7.4","requires_plugins":null,"header_name":"WLN Multi-Provider AI Chat","header_author":"WLN Multi-Provider AI Chat","header_description":"Universal AI chat widget for WordPress with support for OpenAI, Claude, Gemini, Yandex and other LLM providers.","assets_banners_color":"021b5e","last_updated":"2026-10-12 08:40:32","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/wln.su\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":45,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.4.7":{"tag":"1.4.7","author":"gsxr777","date":"2026-10-12 07:43:09","revision":3740754},"1.4.8":{"tag":"1.4.8","author":"gsxr777","date":"2026-10-12 08:40:32","revision":3740860}},"upgrade_notice":{"1.4.8":"<p>Fixes the Widget Settings tab translations. Existing settings and stored data are preserved.<\/p>","1.4.7":"<p>Includes the Russian translation. Existing settings and stored data are preserved.<\/p>","1.4.6":"<p>Fixes activation on older MySQL versions and verifies storage initialization before completing an upgrade. Existing settings and stored data are preserved.<\/p>","1.4.5":"<p>WordPress.org review fixes for compatibility metadata, widget dimension validation and knowledge document sanitization. Existing settings and stored data are preserved.<\/p>","1.4.4":"<p>Security and directory-review fixes. Existing settings, API keys, conversation history and knowledge documents are preserved during updates. Private or password-protected posts are excluded from AI knowledge retrieval.<\/p>","1.4.2":"<p>Fixes invalid API credentials caused by double encryption during settings saves. Existing keys are recovered on read; no re-entry or settings reset is required.<\/p>","1.4.1":"<p>Renames the plugin while retaining existing data and configuration. When switching from the former plugin filename, deactivate the old copy and activate this package manually. Do not delete shared plugin data.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3740860,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3740860,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3740860,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3740860,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.4.7","1.4.8"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3740860,"resolution":"1","location":"assets","locale":"","width":529,"height":747},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3740860,"resolution":"2","location":"assets","locale":"","width":2111,"height":2453},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3740860,"resolution":"3","location":"assets","locale":"","width":2111,"height":1164},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3740860,"resolution":"4","location":"assets","locale":"","width":2111,"height":1164},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3740860,"resolution":"5","location":"assets","locale":"","width":1900,"height":1495},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3740860,"resolution":"6","location":"assets","locale":"","width":2111,"height":1164}},"screenshots":{"1":"Floating AI chat widget with a welcome message and message input.","2":"API settings: provider endpoint, model, generation parameters, page context and data retention.","3":"Knowledge base: site content index and Markdown document editor.","4":"General widget settings: title, welcome message, position and dimensions.","5":"Widget appearance settings: color scheme, gradients, message colors and fonts.","6":"Conversation statistics: sessions, messages and average messages per session."}},"plugin_section":[],"plugin_tags":[2353,5707,2364,2369,14090],"plugin_category":[41],"plugin_contributors":[286002],"plugin_business_model":[],"class_list":["post-345628","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-chat","plugin_tags-chatbot","plugin_tags-customer-support","plugin_tags-knowledge-base","plugin_category-communication","plugin_contributors-gsxr777","plugin_committers-gsxr777"],"banners":{"banner":"https:\/\/ps.w.org\/wln-multi-provider-ai-chat\/assets\/banner-772x250.png?rev=3740860","banner_2x":"https:\/\/ps.w.org\/wln-multi-provider-ai-chat\/assets\/banner-1544x500.png?rev=3740860","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/wln-multi-provider-ai-chat\/assets\/icon-128x128.png?rev=3740860","icon_2x":"https:\/\/ps.w.org\/wln-multi-provider-ai-chat\/assets\/icon-256x256.png?rev=3740860","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/wln-multi-provider-ai-chat\/assets\/screenshot-1.png?rev=3740860","caption":"Floating AI chat widget with a welcome message and message input."},{"src":"https:\/\/ps.w.org\/wln-multi-provider-ai-chat\/assets\/screenshot-2.png?rev=3740860","caption":"API settings: provider endpoint, model, generation parameters, page context and data retention."},{"src":"https:\/\/ps.w.org\/wln-multi-provider-ai-chat\/assets\/screenshot-3.png?rev=3740860","caption":"Knowledge base: site content index and Markdown document editor."},{"src":"https:\/\/ps.w.org\/wln-multi-provider-ai-chat\/assets\/screenshot-4.png?rev=3740860","caption":"General widget settings: title, welcome message, position and dimensions."},{"src":"https:\/\/ps.w.org\/wln-multi-provider-ai-chat\/assets\/screenshot-5.png?rev=3740860","caption":"Widget appearance settings: color scheme, gradients, message colors and fonts."},{"src":"https:\/\/ps.w.org\/wln-multi-provider-ai-chat\/assets\/screenshot-6.png?rev=3740860","caption":"Conversation statistics: sessions, messages and average messages per session."}],"raw_content":"<!--section=description-->\n<p>WLN Multi-Provider AI Chat adds a floating chat widget to a WordPress site. Site administrators choose an AI endpoint and model, supply credentials, and configure the widget. Replies are generated by the configured service.<\/p>\n\n<p>Features include:<\/p>\n\n<ul>\n<li>OpenAI, Anthropic Claude, Google Gemini, YandexGPT, OpenRouter, local Ollama, and custom OpenAI-compatible endpoints.<\/li>\n<li>A local database knowledge index for published, publicly viewable posts and pages without passwords, and administrator-supplied Markdown documents.<\/li>\n<li>Optional page context and configurable conversation history sent with a question.<\/li>\n<li>Widget colors, dimensions, position, fonts, and welcome messages.<\/li>\n<li>Signed visitor sessions, abuse-prevention rate limits, encrypted API-key storage, and administrator permission checks.<\/li>\n<li>Local conversation statistics, configurable retention, and visitor-controlled history deletion.<\/li>\n<li>Translation-ready interface and integration with Polylang for saved widget strings. Translations are distributed through translate.wordpress.org.<\/li>\n<\/ul>\n\n<p>All included plugin features are available without a plugin license or subscription. External AI providers may require accounts and charge for their processing. Request limits protect the site from abuse; they do not unlock paid plugin features.<\/p>\n\n<p>This is an independent plugin and is not affiliated with the listed AI providers.<\/p>\n\n<h3>External services<\/h3>\n\n<p>No provider request is made merely by activating the plugin or opening the widget. After the administrator configures the service, requests are made when a visitor sends a message or an administrator clicks Test Connection. The connection test sends a fixed test message through the same prompt-building process, so configured system instructions and any relevant knowledge excerpts may also be included.<\/p>\n\n<p>Requests contain the API credential, selected model and generation parameters, system instructions, the current message and a limited conversation history. Relevant knowledge excerpts may be included. If page context is enabled, the current page URL, title, content excerpt and selected text may also be included. Yandex requests additionally include the configured project\/folder identifier. The provider sees the server's network address and HTTP request metadata. Visitor IP addresses and browser user agents are not deliberately included in AI prompt payloads.<\/p>\n\n<p>Only the configured endpoint receives these requests. Asynchronous Yandex generation may require follow-up status requests. There is no developer telemetry, advertising tracker or license-verification service. Provider documentation links are ordinary links and open only when clicked.<\/p>\n\n<h4>OpenAI<\/h4>\n\n<p>Used to generate chat replies at https:\/\/api.openai.com\/v1. Receives the request data described above when selected and a chat or test request is submitted.\nTerms: https:\/\/openai.com\/policies\/services-agreement\/\nPrivacy: https:\/\/openai.com\/policies\/privacy-policy\/<\/p>\n\n<h4>Anthropic<\/h4>\n\n<p>Used to generate Claude replies at https:\/\/api.anthropic.com\/v1. Receives the request data described above when selected and a chat or test request is submitted.\nTerms: https:\/\/www.anthropic.com\/legal\/commercial-terms\nPrivacy: https:\/\/www.anthropic.com\/legal\/privacy<\/p>\n\n<h4>Google Gemini<\/h4>\n\n<p>Used to generate replies at https:\/\/generativelanguage.googleapis.com\/v1beta. Receives the request data described above when selected and a chat or test request is submitted.\nTerms: https:\/\/ai.google.dev\/gemini-api\/terms\nPrivacy: https:\/\/policies.google.com\/privacy<\/p>\n\n<h4>Yandex Cloud<\/h4>\n\n<p>Used to generate YandexGPT replies at https:\/\/ai.api.cloud.yandex.net\/v1 or another administrator-configured Yandex Foundation Models endpoint. Receives the request data described above, including the project\/folder identifier, on chat and test requests; operation identifiers are sent when polling asynchronous results.\nTerms: https:\/\/yandex.com\/legal\/cloud_termsofuse\/en\/\nPrivacy: https:\/\/yandex.com\/legal\/confidential\/en\/<\/p>\n\n<h4>OpenRouter<\/h4>\n\n<p>Used to route generation requests through https:\/\/openrouter.ai\/api\/v1 to the selected model provider. Receives the request data described above on chat and test requests and forwards content to the upstream provider. Review that model provider's policies as well.\nTerms: https:\/\/openrouter.ai\/terms\nPrivacy: https:\/\/openrouter.ai\/privacy<\/p>\n\n<h4>Ollama and custom endpoints<\/h4>\n\n<p>The Ollama preset uses http:\/\/localhost:11434\/v1 on the WordPress server. The same request data is sent to that local service on chat and test requests. The plugin does not contact ollama.com automatically. Whether an Ollama model or a custom gateway forwards data elsewhere depends on how the administrator configures that service.\nOllama service terms: https:\/\/ollama.com\/terms\nOllama privacy: https:\/\/ollama.com\/privacy\nLocal Ollama software license: https:\/\/github.com\/ollama\/ollama\/blob\/main\/LICENSE<\/p>\n\n<p>For a custom endpoint, the destination and applicable terms\/privacy policy are determined by the administrator. Review those documents before configuration and disclose that service in the site's privacy notice. The plugin cannot identify the operator or terms of an arbitrary URL.<\/p>\n\n<h4>Poolside (optional custom endpoint)<\/h4>\n\n<p>When an administrator configures https:\/\/inference.poolside.ai\/v1 and a supported model, Poolside generates replies using the same request data and triggers described above. The plugin allows a longer request timeout for Poolside endpoints. No Poolside request is made unless that endpoint is explicitly configured.\nTerms: https:\/\/poolside.ai\/legal\/eula\nPrivacy: https:\/\/poolside.ai\/legal\/privacy<\/p>\n\n<h3>License<\/h3>\n\n<p>GPL version 2 or later. See LICENSE.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin ZIP through Plugins &gt; Add New &gt; Upload Plugin and activate it.<\/li>\n<li>Open AI Chat &gt; API Settings. Review the external-service disclosures below, then choose an endpoint and model and enter the provider's API key. For a local Ollama endpoint that ignores authentication, enter a non-empty placeholder such as <code>ollama<\/code>.<\/li>\n<li>Click Test Connection, then save the settings.<\/li>\n<li>Configure Widget Settings and optionally add Markdown documents under Knowledge Base.<\/li>\n<li>Update the site's privacy notice to describe chat storage and the chosen provider. The floating widget appears on the frontend.<\/li>\n<\/ol>\n\n<p>PHP OpenSSL with AES-256-GCM support is required to store provider credentials. Markdown knowledge documents are available as reference material for public visitor questions: upload only information intended for that audience. Sites with membership or other third-party content restrictions should review which published content is appropriate for the knowledge index.<\/p>\n\n<p>Knowledge documents are saved as plain Markdown text. HTML tags are removed and invalid UTF-8 is rejected; line breaks, headings, lists and other plain Markdown formatting are retained.<\/p>\n\n<p>Developers can exclude additional posts with the <code>wln_multi_provider_ai_chat_public_knowledge_post<\/code> filter (return false for restricted posts); it is applied at indexing and retrieval. Provider requests do not follow HTTP redirects: configure the final API endpoint URL. Administrator connection tests display provider errors; the local <code>wln_multi_provider_ai_chat_error<\/code> action provides fixed diagnostic event names without logging credentials, prompts or provider response bodies.<\/p>\n\n<p>The floating widget is configured through Widget Settings. Existing <code>[gsxr_777_chat]<\/code> shortcodes and the new <code>[wln_multi_provider_ai_chat]<\/code> alias remain recognized; the frontend displays one global floating widget.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20is%20chat%20data%20stored%3F\"><h3>Where is chat data stored?<\/h3><\/dt>\n<dd><p>Conversation messages and local statistics are stored in this site's WordPress database. A signed conversation credential is stored in the visitor's browser local storage so the conversation can resume after page reloads. Visitors can clear their history. Retention and optional request metadata are configurable in API Settings.<\/p><\/dd>\n<dt id=\"will%20an%20update%20reset%20my%20settings%3F\"><h3>Will an update reset my settings?<\/h3><\/dt>\n<dd><p>No. Existing option names, database tables, encryption derivation, browser session storage and the legacy shortcode are retained for compatibility. Defaults are added only for missing options. A fallback imports options from partially renamed builds only when the original option does not exist. Deactivation does not delete settings.<\/p>\n\n<p>The first change from the old plugin directory\/main filename to the new slug requires manual activation of the new plugin. Back up the site, deactivate the old plugin, install and activate this package, then check the existing configuration. Do not activate both copies together. Do not use WordPress's Delete action on the old copy if its data-removal option is enabled, because both copies share stored data. A slug change does not automatically become a normal WordPress update.<\/p><\/dd>\n<dt id=\"does%20this%20use%20the%20wordpress%20ai%20client%3F\"><h3>Does this use the WordPress AI Client?<\/h3><\/dt>\n<dd><p>This release retains direct provider integrations to preserve existing credentials, model parameters, custom endpoints and support for WordPress versions before 7.0. It does not automatically migrate provider settings into the core AI Client.<\/p><\/dd>\n<dt id=\"are%20there%20private%20rest%20endpoints%3F\"><h3>Are there private REST endpoints?<\/h3><\/dt>\n<dd><p>The session endpoint issues a new random signed credential without storing data or contacting an AI provider. Configuration and translated-label endpoints intentionally expose only frontend widget settings. Chat and history endpoints require the conversation's signed credential. Administrative operations require manage_options and form\/AJAX nonces when changing data.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4.8<\/h4>\n\n<ul>\n<li>Fixed the Widget Settings tabs to display General and Appearance in English while preserving their Russian translations.<\/li>\n<\/ul>\n\n<h4>1.4.7<\/h4>\n\n<ul>\n<li>Bundled the Russian translation, including the conversation history clearing message.<\/li>\n<li>Registered bundled language files while retaining priority for WordPress.org language packs.<\/li>\n<\/ul>\n\n<h4>1.4.6<\/h4>\n\n<ul>\n<li>Removed DATETIME expression defaults for compatibility with older MySQL versions and strict SQL modes.<\/li>\n<li>Verified required database schema changes before recording a completed upgrade; failed upgrades remain retryable.<\/li>\n<li>Declared integer display widths explicitly so schema verification also completes on MariaDB.<\/li>\n<li>Prevented LiteSpeed REST caching of chat endpoints so session checks and conversation history remain current.<\/li>\n<li>Used portable session index prefixes and handled unavailable optional FULLTEXT indexes without activation output.<\/li>\n<li>Checked OpenSSL requirements and handled storage initialization failures during activation.<\/li>\n<\/ul>\n\n<h4>1.4.5<\/h4>\n\n<ul>\n<li>Kept the Tested up to declaration only in this readme.<\/li>\n<li>Applied separate widget width (300-800px) and height (400-900px) setting sanitizers.<\/li>\n<li>Sanitized POST values at input, preserving multiline welcome messages and system instructions.<\/li>\n<li>Sanitized Markdown text in both editor save handlers, file uploads and the shared storage method.<\/li>\n<\/ul>\n\n<h4>1.4.4<\/h4>\n\n<ul>\n<li>Escaped quotes when formatting message links to prevent HTML attribute injection.<\/li>\n<li>Excluded password-protected posts and rechecked post visibility when retrieving existing knowledge chunks.<\/li>\n<li>Validated REST chat parameter types and message length before processing requests.<\/li>\n<li>Disabled API redirects to avoid forwarding credentials and limited response sizes.<\/li>\n<li>Replaced raw error logging with local diagnostic events that contain only fixed event identifiers.<\/li>\n<li>Cleared scheduled tasks and partial-rename fallback options during the relevant uninstall paths.<\/li>\n<\/ul>\n\n<h4>1.4.3<\/h4>\n\n<ul>\n<li>Prevented theme section containment from clipping the floating button on hover.<\/li>\n<li>Isolated the send button dimensions and outline icons from global theme submit-button and SVG styles.<\/li>\n<li>Localized previously saved English default widget labels at display time while preserving custom text and stored settings.<\/li>\n<\/ul>\n\n<h4>1.4.2<\/h4>\n\n<ul>\n<li>Prevented double encryption when WordPress sanitizes an already encrypted API key.<\/li>\n<li>Added read compatibility for previously double-encrypted keys without rewriting saved settings.<\/li>\n<li>Improved errors from providers that return a string error and retained HTTP status when no message is available.<\/li>\n<\/ul>\n\n<h4>1.4.1<\/h4>\n\n<ul>\n<li>Renamed the plugin, PHP and JavaScript classes, files, frontend CSS classes and translation domain to WLN Multi-Provider AI Chat.<\/li>\n<li>Preserved existing settings, API-key encryption, database tables, saved sessions and legacy shortcodes and REST routes.<\/li>\n<li>Fixed inconsistent storage identifiers left by a partial rename.<\/li>\n<li>Documented external services and public REST routes; removed unnecessary public WordPress nonces.<\/li>\n<li>Removed bundled translations and manual text-domain loading in favor of WordPress.org language packs.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Added signed sessions, authenticated API-key encryption, local knowledge indexing, retention cleanup and widget improvements.<\/li>\n<\/ul>","raw_excerpt":"AI chat widget with configurable providers, page context, a local knowledge index, and appearance settings.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/345628","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=345628"}],"author":[{"embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/gsxr777"}],"wp:attachment":[{"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=345628"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=345628"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=345628"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=345628"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=345628"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=345628"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}