VONQ
ChangelogVersion 4.9

AI product recommender in the Media Mix step

AI product recommender in the Media Mix step

Recruiters on the recommendations-first product layout get a third tab, "AI Recommender", that asks HAPI's AI for a ranked shortlist of channels for the vacancy they are working on — each channel with the model's own reason for picking it. It is a shortcut past the filters for the case where the recruiter knows the vacancy but not the marketplace.

What's new

  • An "AI Recommender" tab next to "Get recommendations" and "Search by product". Job title and job description arrive prefilled from the filters and the campaign and stay editable; job function, industry and location are shown as read-only chips with a link back to the first tab, because they are the filters themselves and editing them there re-runs the regular search.
  • "What the AI receives" lists exactly what the request body will contain, including how many channels already in the basket are excluded from the answer.
  • Generate, then wait. The tab shows a thinking state with a Cancel button while the job runs, and the result applies itself: the grid switches to the AI's picks in the model's ranked order.
  • Reasons on the cards. Each card in an applied recommendation carries an "AI pick" strip and the model's one-line reason under the channel name. The rule-based "Recommended channel" strip steps aside while it does.
  • A banner above the grid states how many channels are shown, notes that filters and sorting are bypassed, and offers Reset. Sort By and Filter By are disabled while a recommendation is applied, and the browse sections (frequently used, media-mix recommendations, free add-ons) are hidden — none of them is part of what the AI was asked.
  • The bypass rule. While a recommendation is applied the product search sends only the recommendation id plus pagination: no job title, no location, no sort. That is what makes the ranked order survive.
  • Failures are shown in the tab, with a Try again button: nothing to recommend, the feature not enabled for the account, the provider unavailable, the job taking too long, an expired or unknown recommendation.
  • Layout v3 only. The tab lives in the tab strip introduced with he_product_filters_layout: "v3"; v1 and v2 have no entry point.
  • Off unless VONQ turns it on. The tab appears only when settings.products.ai_recommendations_enabled is true on the account, which VONQ sets per partner.

Using it from the SDK

Three state keys carry the feature:

window.hapi.product.state.aiRecommendationId.value // applied recommendation id, or null
window.hapi.product.state.aiRecommendationJob.value // the current job: status, productCount, recommendations[], error
window.hapi.product.state.aiRecommendationPollingTimeoutsMap.value // running poll timers, keyed by job id

And four service functions:

// Build the request from the filters and the campaign description, or pass your own draft.
await window.hapi.product.service.createAiRecommendation.run()
await window.hapi.product.service.createAiRecommendation.run({
	title: "Registered nurse",
	description: "Night shifts in a teaching hospital…",
})

// One poll of a job. The create call polls on its own; this is for a job you
// already have an id for.
await window.hapi.product.service.getAiRecommendation.run(id)

// Point the product search at a recommendation (the create call does this
// itself as soon as the job completes with at least one channel).
await window.hapi.product.service.applyAiRecommendation.run(id)

// Drop the recommendation and search normally again.
await window.hapi.product.service.resetAiRecommendation.run()

The two HAPI calls are also available raw on window.hapi.product.api.createAiRecommendation and window.hapi.product.api.getAiRecommendation.

The bypass is exclusive. While aiRecommendationId is set, the product search sends recommendationId, format, limit and offset and nothing else — any filter you set meanwhile is ignored until the recommendation is reset. Two consequences for hosts:

  • restartJourney clears the id and the job for you.
  • If you reset the search filters yourself (writing product state directly rather than through the journey), call resetAiRecommendation as well — otherwise the grid keeps showing the AI's picks and your filters appear to do nothing.

Known behaviour

  • Rate limit. HAPI allows 60 recommendation requests per 60 seconds per partner token, shared by all of that partner's customers. The create call and every poll count against it, which is why the client polls slowly.
  • Poll cadence. The first poll waits 6 seconds, the next 8, then every 10. Jobs typically settle in under 10 seconds.
  • 120-second deadline. A job that has not reached a terminal status by then is given up on locally with the timeout code; HAPI may still finish it.
  • Expiry. Recommendations expire server-side. A search against an expired or unknown id drops the id, shows a notice on the banner, and re-runs the regular search.
  • recommendation_provider_unavailable is HAPI's code for the model provider being down; it reads as "temporarily unavailable, try again shortly" and is worth a retry a minute later.
  • Fewer channels than the AI picked. The model can pick a channel this account cannot order; the search drops it, and the banner says so.

Element ids and classes

Elementidclass
Tab headerproduct-ai-recommendation-tab
Tab panelhapi__products-ai-recommendation
Editable formhapi__products-ai-recommendation-form
Job title inputproduct-ai-recommendation-title-input
Job description textareaproduct-ai-recommendation-description-textarea
Back to the filters tabproduct-ai-recommendation-edit-filters-link
"What the AI receives"hapi__products-ai-recommendation-criteria
Generateproduct-ai-recommendation-generate-button
Generating / failed / applied blockhapi__products-ai-recommendation-status
Cancelproduct-ai-recommendation-cancel-button
Try againproduct-ai-recommendation-retry-button
Reset (in the tab)product-ai-recommendation-reset-button
Banner above the gridproduct-ai-recommendation-bannerhapi__products-ai-recommendation-banner
Reset (in the banner)product-ai-recommendation-banner-reset-button
"AI pick" strip on a cardhapi__card-product-ai-pick
Reason line on a cardhapi__card-product-ai-reason

Backwards compatibility

  • Purely additive. No SDK function, getter, setter, property or event was removed or renamed, and no existing element id, class or data-* attribute changed.
  • Nothing changes for an account without settings.products.ai_recommendations_enabled: no tab, no banner, no new requests, and the product search keeps sending exactly the parameters it sent before.
  • The v1 and v2 filter layouts have no entry point for the feature yet.
  • No theme variable was added; the new strip and banner reuse the existing success and info colours.

I18n

The following i18n translations have been added:

Key"en" value"de" value"nl" value"fr" value"es" value"it" value
products.ai-recommendation.tabAI RecommenderKI-EmpfehlungenAI-aanbevelingenRecommandations IARecomendaciones de IAConsigli IA
products.ai-recommendation.introLet AI pick channels for this vacancy. It reads the details below and returns a ranked shortlist with a reason for each channel.Lass die KI Kanäle für diese Vakanz auswählen. Sie liest die Angaben unten und liefert eine sortierte Auswahl mit einer Begründung je Kanal.Laat AI kanalen kiezen voor deze vacature. De AI leest de gegevens hieronder en geeft een gerangschikte selectie met per kanaal een toelichting.Laissez l'IA choisir les canaux pour ce poste. Elle lit les informations ci-dessous et renvoie une sélection classée, avec une justification par canal.Deja que la IA elija canales para esta vacante. Lee los datos de abajo y devuelve una selección ordenada con un motivo para cada canal.Lascia che l'IA scelga i canali per questa posizione. Legge i dati qui sotto e restituisce una selezione ordinata con una motivazione per ogni canale.
products.ai-recommendation.receivesWhat the AI receivesDas erhält die KIWat de AI krijgtCe que reçoit l'IALo que recibe la IACosa riceve l'IA
products.ai-recommendation.field.titleJob titleStellenbezeichnungFunctietitelIntitulé du postePuestoTitolo della posizione
products.ai-recommendation.field.descriptionJob description (optional)Stellenbeschreibung (optional)Functieomschrijving (optioneel)Description du poste (facultatif)Descripción del puesto (opcional)Descrizione della posizione (facoltativa)
products.ai-recommendation.field.description-placeholderPaste or write the vacancy text. Up to 4000 characters are sent.Füge den Vakanztext ein oder schreibe ihn. Es werden bis zu 4000 Zeichen übermittelt.Plak of schrijf de vacaturetekst. Er worden maximaal 4000 tekens verstuurd.Collez ou rédigez le texte de l'offre. Jusqu'à 4000 caractères sont envoyés.Pega o escribe el texto de la vacante. Se envían hasta 4000 caracteres.Incolla o scrivi il testo dell'annuncio. Vengono inviati fino a 4000 caratteri.
products.ai-recommendation.field.job-functionJob functionJobfunktionFunctiegebiedFonctionFunciónFunzione
products.ai-recommendation.field.industryIndustryBrancheBrancheSecteurSectorSettore
products.ai-recommendation.field.locationLocationStandortLocatieLieuUbicaciónLuogo
products.ai-recommendation.field.not-setNot setNicht gesetztNiet ingesteldNon renseignéSin definirNon impostato
products.ai-recommendation.edit-filtersChange in Get recommendationsUnter „Empfehlungen erhalten“ ändernWijzigen bij Aanbevelingen ophalenModifier dans Obtenir des recommandationsCambiar en Obtener recomendacionesModifica in Ottieni consigli
products.ai-recommendation.excludedExcluded: {count} already in your basketAusgeschlossen: {count} bereits in deinem WarenkorbUitgesloten: {count} al in je winkelmandjeExclus : {count} déjà dans votre panierExcluidos: {count} ya en tu cestaEsclusi: {count} già nel tuo carrello
products.ai-recommendation.bypass-noteWhile an AI recommendation is applied, the filters and sorting are bypassed.Solange eine KI-Empfehlung aktiv ist, werden Filter und Sortierung übergangen.Zolang een AI-aanbeveling actief is, worden de filters en sortering overgeslagen.Tant qu'une recommandation IA est appliquée, les filtres et le tri sont ignorés.Mientras haya una recomendación de IA aplicada, se omiten los filtros y la ordenación.Finché è attivo un consiglio dell'IA, i filtri e l'ordinamento vengono ignorati.
products.ai-recommendation.generateGet AI recommendationsKI-Empfehlungen erhaltenAI-aanbevelingen ophalenObtenir des recommandations IAObtener recomendaciones de IAOttieni consigli dall'IA
products.ai-recommendation.generatingFinding the best channels…Passende Kanäle werden gesucht…De beste kanalen worden gezocht…Recherche des meilleurs canaux…Buscando los mejores canales…Ricerca dei canali migliori…
products.ai-recommendation.generating-hintThis usually takes about 10 seconds.Das dauert in der Regel etwa 10 Sekunden.Dit duurt meestal ongeveer 10 seconden.Cela prend généralement une dizaine de secondes.Suele tardar unos 10 segundos.Di solito richiede circa 10 secondi.
products.ai-recommendation.cancelCancelAbbrechenAnnulerenAnnulerCancelarAnnulla
products.ai-recommendation.retryTry againErneut versuchenOpnieuw proberenRéessayerReintentarRiprova
products.ai-recommendation.resetResetZurücksetzenHerstellenRéinitialiserRestablecerReimposta
products.ai-recommendation.appliedAI recommendation appliedKI-Empfehlung angewendetAI-aanbeveling toegepastRecommandation IA appliquéeRecomendación de IA aplicadaConsiglio dell'IA applicato
products.ai-recommendation.applied-count{count} channels matched{count} passende Kanäle{count} kanalen gevonden{count} canaux correspondants{count} canales coincidentes{count} canali corrispondenti
products.ai-recommendation.emptyThe AI found no matching channels for these details. Add a description or adjust the filters and try again.Die KI hat zu diesen Angaben keine passenden Kanäle gefunden. Ergänze eine Beschreibung oder passe die Filter an und versuche es erneut.De AI vond geen passende kanalen bij deze gegevens. Voeg een omschrijving toe of pas de filters aan en probeer het opnieuw.L'IA n'a trouvé aucun canal correspondant à ces informations. Ajoutez une description ou ajustez les filtres, puis réessayez.La IA no encontró canales que encajen con estos datos. Añade una descripción o ajusta los filtros e inténtalo de nuevo.L'IA non ha trovato canali adatti a questi dati. Aggiungi una descrizione o modifica i filtri e riprova.
products.ai-recommendation.error.no-criteriaAdd at least a job title, a job function, an industry, a location or a description first.Gib zuerst mindestens eine Stellenbezeichnung, eine Jobfunktion, eine Branche, einen Standort oder eine Beschreibung an.Vul eerst minstens een functietitel, een functiegebied, een branche, een locatie of een omschrijving in.Renseignez d'abord au moins un intitulé de poste, une fonction, un secteur, un lieu ou une description.Indica antes al menos un puesto, una función, un sector, una ubicación o una descripción.Indica prima almeno un titolo della posizione, una funzione, un settore, un luogo o una descrizione.
products.ai-recommendation.error.not-enabledAI recommendations are not enabled for your account.KI-Empfehlungen sind für dein Konto nicht freigeschaltet.AI-aanbevelingen zijn niet ingeschakeld voor je account.Les recommandations IA ne sont pas activées pour votre compte.Las recomendaciones de IA no están activadas en tu cuenta.I consigli dell'IA non sono attivi sul tuo account.
products.ai-recommendation.error.unavailableThe AI recommendation service is temporarily unavailable. This usually clears within a few minutes. Try again shortly.Der Dienst für KI-Empfehlungen ist vorübergehend nicht erreichbar. Das klärt sich meist innerhalb weniger Minuten. Versuche es gleich noch einmal.De AI-aanbevelingsdienst is tijdelijk niet beschikbaar. Dit is meestal binnen een paar minuten opgelost. Probeer het zo nog eens.Le service de recommandations IA est momentanément indisponible. Cela se règle généralement en quelques minutes. Réessayez d'ici peu.El servicio de recomendaciones de IA no está disponible temporalmente. Suele resolverse en unos minutos. Inténtalo en breve.Il servizio di consigli dell'IA non è momentaneamente disponibile. Di solito si risolve in pochi minuti. Riprova tra poco.
products.ai-recommendation.error.timeoutThe recommendation is taking longer than expected. Try again.Die Empfehlung dauert länger als erwartet. Versuche es erneut.De aanbeveling duurt langer dan verwacht. Probeer het opnieuw.La recommandation prend plus de temps que prévu. Réessayez.La recomendación está tardando más de lo previsto. Inténtalo de nuevo.Il consiglio sta richiedendo più tempo del previsto. Riprova.
products.ai-recommendation.error.expiredThis recommendation has expired. Generate a new one.Diese Empfehlung ist abgelaufen. Erstelle eine neue.Deze aanbeveling is verlopen. Maak een nieuwe aan.Cette recommandation a expiré. Générez-en une nouvelle.Esta recomendación ha caducado. Genera una nueva.Questo consiglio è scaduto. Generane uno nuovo.
products.ai-recommendation.error.not-foundThis recommendation no longer exists. Generate a new one.Diese Empfehlung existiert nicht mehr. Erstelle eine neue.Deze aanbeveling bestaat niet meer. Maak een nieuwe aan.Cette recommandation n'existe plus. Générez-en une nouvelle.Esta recomendación ya no existe. Genera una nueva.Questo consiglio non esiste più. Generane uno nuovo.
products.ai-recommendation.error.failedThe recommendation could not be generated. Try again.Die Empfehlung konnte nicht erstellt werden. Versuche es erneut.De aanbeveling kon niet worden gemaakt. Probeer het opnieuw.La recommandation n'a pas pu être générée. Réessayez.No se pudo generar la recomendación. Inténtalo de nuevo.Non è stato possibile generare il consiglio. Riprova.
products.ai-recommendation.chipAI pickKI-AuswahlAI-keuzeChoix de l'IAElección de la IAScelta dell'IA
products.ai-recommendation.unfilteredSome recommended channels are not available to you right now, so fewer are shown.Einige empfohlene Kanäle stehen dir derzeit nicht zur Verfügung, deshalb werden weniger angezeigt.Sommige aanbevolen kanalen zijn nu niet voor je beschikbaar, daarom zie je er minder.Certains canaux recommandés ne vous sont pas accessibles pour le moment, il y en a donc moins affichés.Algunos canales recomendados no están disponibles para ti ahora mismo, así que se muestran menos.Alcuni canali consigliati non sono disponibili per te in questo momento, quindi ne vedi meno.
products.ai-recommendation.expired-noticeYour AI recommendation expired. Showing the regular results again.Deine KI-Empfehlung ist abgelaufen. Es werden wieder die regulären Ergebnisse angezeigt.Je AI-aanbeveling is verlopen. De gewone resultaten worden weer getoond.Votre recommandation IA a expiré. Les résultats habituels sont de nouveau affichés.Tu recomendación de IA ha caducado. Volvemos a mostrar los resultados habituales.Il tuo consiglio dell'IA è scaduto. Vengono mostrati di nuovo i risultati abituali.