Using Smartfill on Campaign Vacancy Fields
Version 2.5 added ability to prefill Campaign Vacancy Fields through the help of AI (Large Language Models).
Please consult with your Partner Account Manager to get this feature enabled for your ATS.
When the end user is filling in the form in the order journey, below the description field, user sees a button FILL IN WITH AI
. Upon clicking this button, the description they provided gets sent to AI and a polling is added to keep track of the progress of the task created by HAPI Backend Vacancy Fields Smartfill Endpoint. When task is marked as "completed", the data returned by HAPI Backend gets set on campaignForm
object.
If user has already entered information into the fields, then they click the button, the information they entered will not get overwritten.
As a side note, these properties of campaignForm
object are not set after smartfill completes:
labels
companyId
campaignName
because this field is just for recruiter's record keepingcurrency
poNumber
orderReference
paymentMethod
targetGroup.*
because fields of this section are before the buttonrecruiterInfo.*
because fields of this section are before the buttonpostingDetails.title
because this field is before the buttonpostingDetails.description
because this field is before the buttonpostingDetails.contactInfo.*
because fields of this section are before the buttonpostingDetails.organization.companyLogo
because if description contains multiple images, AI might fail to pick the correct onethis changed with version 3.1postingDetails.workingLocation.allowsRemoteWork
because this is easy to miss in the UI and recruiter might fail to review thispostingDetails.applicationUrl
because this field is being prefilled by you according to Prefilling Campaign Form recipepostingDetails.jobPageUrl
because this field is being prefilled by you according to Prefilling Campaign Form recipeorderedProducts
orderedProductsSpecs.*
orderedProductsSpecsLabels.*
Triggering the smartfill without user action
Vacancy fields smartfill can be triggered by running the service function:
window.hapi.campaign.service.createSuggestionOfVacancyFields.run()
By default, when user clicks the FILL IN WITH AI
button, description
field of campaignForm object is sent to HAPI Backend Vacancy Fields Smartfill Endpoint. You are most likely prefilling description
field with the description that you already have however if you want to provide another description than the one you prefill, or you want to pass a custom context object of your own that has lots of campaign related data, you can check the arguments of createSuggestionOfVacancyFields
service function by checking the Typescript definition and pass your own description/data.
Allowlisting Vacancy Fields
This feature was added in version 3.5.
To include some fields via dot notated paths, for example allow prefilling of targetGroup
:
window
.hapi
.campaign
.utils
.excludedDotNotatedObjectPathsOfCampaignFormForSmartFillVacancyFields = window
.hapi
.campaign
.utils
.excludedDotNotatedObjectPathsOfCampaignFormForSmartFillVacancyFields.filter(
path => !path.startsWith('targetGroup')
)
Updating campaignForm
object manually
If you have the SmartFill response object and want to manually update the campaignForm
object, you need to use the utility function which does some pre-processing on the response object to make it HAPI Elements compatible.
const smartfillResponse = {
"id": "some-id",
"status": "completed",
"created_at": "2025-09-02T06:34:10Z",
"updated_at": "2025-09-02T06:34:57Z",
"prefill_data": {
"campaignName": "Mock Campaign Name",
"taxonomy.industry": "48",
"recruiterInfo.name": "Marian Mazarovici",
"taxonomy.seniority": "1",
"postingDetails.title": "Senior Data Engineer - Recruitment Analytics",
"taxonomy.jobFunction": "31",
"taxonomy.educationLevel": "1",
"postingDetails.description": "<p>Company Description</p>\n<p>At VONQ we publish jobs online - uncomplicated and more successful for everyone.</p>\n<p>Every day, we impact the lives of thousands of people looking for their next job! We know how to distribute your vacancies whether you’re looking for 30 top talent roles or need to manage 30,000 job ads. With reliable job distribution automation, data-driven channel recommendations, programmatic advertising options and meaningful reports.</p>\n<p>Today, over 1000 leading companies - including over 25 Global Fortune 500s - use VONQ everyday to strengthen their employer brand and recruit talent. With a global network of partners who implement our technology seamlessly in their HR tech, you can use VONQ job distribution wherever you are, no matter what applicant tracking system you use. We are headquartered in Rotterdam, NL and have offices in Amsterdam, Groningen, Düsseldorf, DE and London, UK. Hiring? VONQ it.</p>\n<p>Job Description</p>\n<p>As one of our Data Engineers, you’ll have a huge contribution to our flagship contract: the Job Marketing Platform (JMP). It’s a data-driven application with a recommendation engine that advises recruiters how they should reach their target audience online. The platform is used daily by many clients, and we have an ambitious roadmap to build it out further! <br><br>Your challenge? You’ll work on the analytics part of our platform where we provide insights to our customers on how applicants act while applying to a certain position. You’ll engineer data pipelines to integrate data sources from tracking systems (Snowplow) and other systems to build and visualize insights! <br><br><strong>How you get the job done</strong></p>\n<ul>\n<li>Work in a multidisciplinary agile team</li>\n<li>Take part in critical contract design efforts and hands-on with the implementation</li>\n<li>Contribute to the scalable streaming data processing application, environment and tools for resources efficiency</li>\n<li>Work with Big Data and web tracking technologies</li>\n<li>Engineer pipelines for processing, cleansing, and verifying the integrity of data</li>\n<li>Design and develop microservices as data consumers</li>\n<li>Be hands-on with AWS infrastructure and relational databases</li>\n</ul>\n<p><strong> You will be part of an international and experienced Engineering department </strong>consisting of Backend and Frontend Developers, Data- and DevOps Engineers, Designers, an Agile Coach and a CTO.</p>\n<p>Qualifications</p>\n<p>This describes the ideal candidate, but above all, we value people that are eager to grow, autonomous, work together, and love to get things done!</p>\n<ul>\n<li>3+ years of experience in Data Engineering or related sphere</li>\n<li>Bachelor degree or equivalent relevant work experience</li>\n<li>Experience with working in an Agile environment (Scrum/Kanban)</li>\n<li>Excellent communication skills in English</li>\n<li>Experience with programming in Scala or Python is required</li>\n<li>Experience in working with data (integration of data from multiple data sources, building ETL pipelines, API development etc) is strongly desirable</li>\n<li>A DevOps mindset is needed, experience with AWS infrastructure is a big plus</li>\n</ul>\n<p> </p>\n<p><strong>Bonus points!</strong></p>\n<ul>\n<li>Experience with Apache Spark</li>\n<li>Experience with web tracking technologies is a big plus (we use Snowplow)</li>\n<li>Understanding of distributed computing principles and streaming applications</li>\n<li>Understanding of microservices concept is appreciated</li>\n</ul>\n<p> </p>\n<p>Additional Information</p>\n<p>We promise that at VONQ you’ll never stop learning! You’ll be surrounded by international and experienced colleagues, so prepare yourself for some interesting and intellectual conversations. <br><br>Our contract still has a lot of potential to grow, and YOU can make an impact on that. You’ll get freedom and space for own initiatives, in fact, we encourage you. <br><br>We have legendary company outings, beers on Friday and lots of FUN! <br><br><strong>There is more! We offer:</strong></p>\n<ul>\n<li>A good salary</li>\n<li>Pension contribution</li>\n<li>Flexible working hours</li>\n<li>Unlimited (paid!) holidays</li>\n<li>Time and budget for training</li>\n<li>Relocation support and more!</li>\n</ul>",
"recruiterInfo.emailAddress": "marian@vonq.com",
"postingDetails.employmentType": "permanent",
"postingDetails.contactInfo.name": "Marian Mazarovici",
"postingDetails.organization.name": "VONQ",
"postingDetails.yearsOfExperience": 3,
"postingDetails.workingLocation.city": "London",
"postingDetails.weeklyWorkingHours.to": 40,
"postingDetails.salaryIndication.period": "yearly",
"postingDetails.weeklyWorkingHours.from": 20,
"postingDetails.workingLocation.country": "United Kingdom",
"postingDetails.contactInfo.emailAddress": "marian@vonq.com",
"postingDetails.workingLocation.postcode": "W1F 8FL",
"postingDetails.salaryIndication.range.to": 100000,
"postingDetails.salaryIndication.range.from": 50000,
"postingDetails.workingLocation.addressLine1": "14 Great Chapel Street",
"postingDetails.salaryIndication.range.currency": "GBP",
"postingDetails.workingLocation.allowsRemoteWork": "0"
}
}
const updatedCampaignForm = window.hapi.campaign.utils.getUpdatedCampaignFormWithVacancyFieldsSmartFillResponse(smartfillResponse)
window.hapi.campaign.state.campaignForm = updatedCampaignForm
The type definition can be found as getUpdatedCampaignFormWithVacancyFieldsSmartFillResponse