Install and configure the Kivunly AI chat widget on my WordPress site. FACTS — use these, don't guess: - Kivunly is a free plugin in the official WordPress Plugin Directory. Slug: kivunly. Listing: https://wordpress.org/plugins/kivunly/ Docs: https://kivunly.com/docs.html Requires WordPress 5.8+ and PHP 7.4+. - The plugin is only the front end. It needs a chat endpoint that produces the answers. Before configuring anything, ask me which I have: (a) the hosted Kivunly service — I will give you an endpoint URL and a site key, or (b) my own backend — the contract is at the bottom of this prompt. - All settings live in one WordPress option, `kivunly_options` (an array). Any key you leave out falls back to the plugin default. Keys: enabled 0 or 1 master switch; nothing loads on the site when 0 endpoint https URL where visitor messages are sent site_key string identifies this site to the backend bot_name string shown in the chat header (defaults to the site title) tagline string small line under the bot name greeting string first message the visitor sees teaser string small bubble near the closed button ("" disables it) chips string suggested questions, ONE PER LINE position right or left left usually reads better on RTL sites accent hex colour buttons and visitor messages header_bg hex colour chat header background logo_url URL optional logo in the header INSTALL — prefer WP-CLI if it is available on this server: wp plugin install kivunly --activate wp option patch update kivunly_options endpoint "" wp option patch update kivunly_options site_key "" wp option patch update kivunly_options enabled 1 If `option patch` fails because the option does not exist yet, create it instead: wp option add kivunly_options --format=json '{"enabled":1,"endpoint":"","site_key":""}' IF WP-CLI IS NOT AVAILABLE, do not try to drive the admin UI. Give me these steps: 1. Plugins -> Add New Plugin -> search "Kivunly" -> Install Now -> Activate 2. Settings -> Kivunly 3. Paste the endpoint URL and site key, tick "Enable widget", Save Changes VERIFY before telling me it is done: 1. Load the site's front page: a chat bubble should appear in the bottom corner. 2. Send one real question and confirm the reply links to pages on this site. 3. Click one of those links and confirm it resolves (no 404). If the assistant says it could not find a matching page, that is correct behaviour for a topic the site does not cover — it refuses instead of inventing links. IF I AM RUNNING MY OWN BACKEND, this is the contract the widget speaks: POST Content-Type: application/json { "message": "what the visitor typed (max 1000 chars)", "history": [ { "role": "user|assistant", "content": "..." } ], "key": "", "page": "https://example.com/the-page-the-visitor-is-on/" } Response: { "reply": "markdown with [real links](https://example.com/post/)", "suggestions": ["short follow-up 1", "short follow-up 2"] } Only `reply` is required. Markdown links and **bold** are rendered; all HTML is escaped. `history` holds at most the last 8 messages of the current browser session. The endpoint must allow cross-origin requests from the site's own domain. Ground every answer in the site's real pages — WordPress exposes them at /wp-json/wp/v2/posts — and explicitly allow the model to say it found nothing. A backend that is not allowed to come up empty will invent URLs. CONSTRAINTS: - Do not modify theme files, wp-config.php, .htaccess, or any other plugin. - Do not install anything besides the kivunly plugin. - Do not put the site into maintenance mode or disable caching plugins without asking. - If anything is ambiguous — which backend, which site, missing credentials — ask me instead of guessing.