{"id":322525,"date":"2026-06-10T08:15:18","date_gmt":"2026-06-10T08:15:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/vragen-ai\/"},"modified":"2026-06-10T08:14:42","modified_gmt":"2026-06-10T08:14:42","slug":"vragen-ai","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/vragen-ai\/","author":23511318,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.0.0","stable_tag":"2.0.0","tested":"7.0","requires":"6.0","requires_php":"8.1","requires_plugins":null,"header_name":"Vragen.ai","header_author":"SWIS","header_description":"Synchronises WordPress content with the vragen.ai knowledge base.","assets_banners_color":"f3f4f6","last_updated":"2026-06-10 08:14:42","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":23,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.0.0":{"tag":"2.0.0","author":"vragenai","date":"2026-06-10 08:14:42"}},"upgrade_notice":{"2.0.0":"<p>Initial public release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3566993,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3566993,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3566993,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3566993,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3566993,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[2353,14090,99,944,1558],"plugin_category":[48],"plugin_contributors":[266452],"plugin_business_model":[],"class_list":["post-322525","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-knowledge-base","plugin_tags-multilingual","plugin_tags-search","plugin_tags-sync","plugin_category-language-tools","plugin_contributors-vragenai","plugin_committers-vragenai"],"banners":{"banner":"https:\/\/ps.w.org\/vragen-ai\/assets\/banner-772x250.png?rev=3566993","banner_2x":"https:\/\/ps.w.org\/vragen-ai\/assets\/banner-1544x500.png?rev=3566993","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/vragen-ai\/assets\/icon.svg?rev=3566993","icon":"https:\/\/ps.w.org\/vragen-ai\/assets\/icon.svg?rev=3566993","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Vragen.ai keeps your WordPress content in sync with a <a href=\"https:\/\/vragen.ai\">vragen.ai<\/a> knowledge base. Whenever a post is published, updated, trashed or deleted, the plugin queues a background job (via Action Scheduler) that creates, updates or removes the matching document in vragen.ai.<\/p>\n\n<p>Features:<\/p>\n\n<ul>\n<li>Automatic sync on publish\/update\/trash\/delete for the post types you choose.<\/li>\n<li>Background processing through Action Scheduler, large sites stay responsive.<\/li>\n<li>Bulk synchronisation of all published content from the settings screen.<\/li>\n<li>WP-CLI command (<code>wp vragenai sync<\/code>) for scripted\/initial imports.<\/li>\n<li>PDF attachments (directly attached media and ACF file fields) are passed to vragen.ai for server-side text extraction.<\/li>\n<li>Multilingual support for WPML and Polylang: all translations of a post are merged into a single document, tagged with every language it is available in.<\/li>\n<li>Filters (<code>vragenai_should_index_post<\/code>, <code>vragenai_document_attributes<\/code>) to customise what is indexed.<\/li>\n<\/ul>\n\n<p>The admin UI is available in English and Dutch, following your site language.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the vragen.ai knowledge base API. This connection is the sole purpose of the plugin: it is required to index your content so it can be searched and answered through vragen.ai. The service is operated by SWIS (https:\/\/swis.nl) on behalf of Vragen.ai (https:\/\/vragen.ai).<\/p>\n\n<p>The API is reached at the endpoint configured for your account, <code>https:\/\/{customer}.vragen.ai\/api\/v1<\/code> by default (the root domain can be changed with the <code>VRAGENAI_API_DOMAIN<\/code> constant).<\/p>\n\n<p>When you publish, update, trash or delete content of an enabled post type and when you run a bulk synchronisation the plugin sends the following to that endpoint:<\/p>\n\n<ul>\n<li>the post title, public URL and rendered content;<\/li>\n<li>metadata: author display name, post type, post format, language(s), publish\/modified dates, taxonomy terms and the featured-image URL;<\/li>\n<li>the URLs and MIME types of attached PDF files, so vragen.ai can fetch and extract their text server-side (the file contents themselves are not uploaded by the plugin);<\/li>\n<li>your configured customer name and API token (sent as a Bearer authorization header).<\/li>\n<\/ul>\n\n<p>In addition, while the settings screen is open the plugin contacts the API at most once per hour to verify the connection.<\/p>\n\n<p>No data is sent until you enter a customer name and API token. The plugin makes no other external requests.<\/p>\n\n<ul>\n<li>Service homepage: https:\/\/vragen.ai\/<\/li>\n<li>Privacy Policy: https:\/\/vragen.ai\/privacy-statement<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Go to <strong>Settings \u2192 Vragen.ai<\/strong>.<\/li>\n<li>Enter your customer name (the <code>{customer}<\/code> in <code>{customer}.vragen.ai<\/code>) and API token. A success notice confirms the connection.<\/li>\n<li>Select the post types to synchronise and save.<\/li>\n<li>Optionally run <strong>Bulk synchronisation<\/strong> to index existing content.<\/li>\n<\/ol>\n\n<p>For production, you can keep secrets out of the database by defining them in <code>wp-config.php<\/code>:<\/p>\n\n<pre><code>define( 'VRAGENAI_CUSTOMER', 'your-organisation' );\ndefine( 'VRAGENAI_TOKEN', 'your-api-token' );\n<\/code><\/pre>\n\n<p>These constants take precedence over the values stored in the settings screen.<\/p>\n\n<p>The API is reached at <code>{customer}.vragen.ai<\/code> by default. For staging or self-hosted environments you can change the root domain (the customer name stays the subdomain) by defining:<\/p>\n\n<pre><code>define( 'VRAGENAI_API_DOMAIN', 'example.com' );\n<\/code><\/pre>\n\n<p>With customer <code>your-organisation<\/code> this targets <code>https:\/\/your-organisation.example.com\/api\/v1<\/code>. There is no settings-screen field for this on purpose.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20do%20i%20get%20a%20customer%20name%20and%20api%20token%3F\"><h3>Where do I get a customer name and API token?<\/h3><\/dt>\n<dd><p>From your vragen.ai account. See https:\/\/vragen.ai\/docs.<\/p><\/dd>\n<dt id=\"does%20it%20extract%20text%20from%20pdfs%20itself%3F\"><h3>Does it extract text from PDFs itself?<\/h3><\/dt>\n<dd><p>No. The plugin sends the file URL to vragen.ai, which crawls and extracts the text server-side.<\/p><\/dd>\n<dt id=\"does%20it%20support%20multiple%20languages%3F\"><h3>Does it support multiple languages?<\/h3><\/dt>\n<dd><p>Yes. With WPML or Polylang active, all translations of a post are treated as one piece of content: they are merged into a single vragen.ai document keyed on the default-language (canonical) translation, with the document content taken from that translation and every available language listed in its metadata. Translations are assumed to be semantically equivalent, so only the canonical content is indexed.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Initial public release.<\/li>\n<\/ul>","raw_excerpt":"Synchronises your published WordPress content with a vragen.ai knowledge base so it can be searched and answered through vragen.ai.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/322525","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=322525"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/vragenai"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=322525"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=322525"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=322525"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=322525"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=322525"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=322525"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}