Alle koppelingen
VoiceDock

AFAS Profit

AFAS beantwoordt geen vragen die niet zijn gesteld

Een voice-agent koppelen aan AFAS Profit loopt zelden vast op techniek. Het loopt vast op het gegeven dat AFAS alleen gegevens teruggeeft via connectors die iemand eerst moet publiceren, en die iemand zit meestal nog niet bij het project.

Lezen

GetConnector, per token

Schrijven

UpdateConnector, per token

Wat de datum bepaalt

De connector publiceren

Wat er gevraagd wordt

Vier taken, in de volgorde waarin mensen ze willen

01

De beller opzoeken tussen de relaties

Eén gefilterde GetConnector-aanroep op het nummer. Snel genoeg om binnen een gesprek te passen, mits die connector bestaat.

02

Een order, werkbon of afspraak lezen

Zodat de agent de vraag kan beantwoorden waarvoor de beller belde, in plaats van er een notitie over te maken.

03

Een aanvraag of wijziging vastleggen

Via één UpdateConnector met een vaste set velden, zodat de agent geen bericht kan samenstellen dat Profit weigert.

04

De uitkomst terugzetten

Zodat kantoor ziet wat er is afgesproken zonder dat iemand het uit een transcript overtypt.

De beperking die pijn doet

Er is geen algemene query-API

AFAS ontsluit gegevens via GetConnectors en verwerkt wijzigingen via UpdateConnectors. Allebei worden ze binnen Profit gedefinieerd, en een token krijgt alleen toegang tot de connectors waarvoor hij is ingericht. Dus voordat een agent iets kan opzoeken, moet iemand met AFAS-rechten een GetConnector publiceren die precies die velden teruggeeft, en hem koppelen aan de AppConnector waar jouw token bij hoort. Dat is een kort klusje voor een AFAS-beheerder en een lange wachttijd als niemand het hem heeft gevraagd.

Voer het gesprek over die connector aan het begin, niet aan het eind. Het bepaalt de datum vaker dan de code dat doet.

Werking

Authenticatie
Authorization-header, AfasToken plus een base64-waarde
Lezen
GetConnector, per token ingeperkt
Schrijven
UpdateConnector, per token ingeperkt
Grote uitvragen
skip en take, onder het AFAS Online-plafond van 15 minuten

In de praktijk

Een herkend gesprek, van begin tot eind

connector-call.log
inbound  +31612345678                       t+0.00s
  [norm]   genormaliseerd → 0612345678        t+0.00s
  [afas]   GET /connectors/VD_Relatie_OpNummer
           filterfieldids=Telefoonnr
           filtervalues=0612345678
  [afas]   200 · 1 rij · 410ms                t+0.41s
  [afas]   GET /connectors/VD_Werkbon_Open
  [afas]   200 · 1 rij · 380ms                t+0.79s
  [agent]  "Gaat het over werkbon 2026-4471?" t+0.86s

  scope van het token   VD_Relatie_OpNummer, VD_Werkbon_Open
  buiten de scope       al het andere, met opzet

Wat we bouwen

Een warme cache, en een smalle schrijfroute

Het opzoeken van één beller gaat rechtstreeks, want één GetConnector-aanroep met een filter is snel genoeg om binnen een gesprek te passen. Alles wat een brede uitvraag zou vragen, bereiden we vooraf voor met een synchronisatie op de achtergrond, en daar worden skip en take en dat plafond van vijftien minuten jouw probleem in plaats van dat van de beller. Schrijfacties lopen via één specifieke UpdateConnector met een vaste set velden, zodat de agent geen bericht kan verzinnen dat Profit weigert.

De uitvraag, zoals de connector hem binnenkrijgt
GET /profitrestservices/connectors/VD_Relatie_OpNummer
    ?filterfieldids=Telefoonnr
    &filtervalues=0612345678
    &operatortypes=1
    &skip=0&take=1

Authorization: AfasToken <base64>

// take=1 met opzet. Een connector die duizend rijen kán teruggeven,
// wordt daar ooit om gevraagd, tijdens een gesprek, door een agent
// die gokte.

Wat we van je nodig hebben

Eén persoon, en drie beslissingen

  • Een AFAS-beheerder, vroeg

    Iemand die een GetConnector kan publiceren en het AppConnector-token kan beheren. Zonder die persoon wacht het project, wat wij ook doen. Dit is het punt dat je het meest de moeite waard is om vóór de aftrap te regelen.

  • De exacte velden, bij naam

    Per connector welke velden de agent mag lezen. Een connector die alles teruggeeft, is een connector die ooit iets teruggeeft dat een beller niet hoort te horen.

  • Eén UpdateConnector per schrijfactie

    Met een vaste set velden. Smal wint hier van flexibel, want aan de andere kant staat een taalmodel en Profit weigert wat hij niet herkent.

  • Een token, en een rotatieplan

    Roteren verandert welke connectors hij bereikt. Schrijf op welke dat zijn vóór de eerste rotatie, in plaats van er daarna achter te komen.

Wat we het eerst gevraagd krijgen

Hebben jullie een AFAS-connector die we kunnen aanzetten?

Nee. De connectors staan in jouw Profit-omgeving, gedefinieerd door je beheerder of je AFAS-partner, en ze horen bij jouw inrichting. Wat wij bouwen is het endpoint tussen de agent en die connectors.

Wie moet erbij zitten?

Iemand die een GetConnector kan publiceren en het AppConnector-token kan beheren. Dat is meestal een interne AFAS-beheerder of de partner die Profit heeft ingericht. Zonder die persoon wacht het project, wat wij ook doen.

Hoe zit het met het token?

Dat gaat in de Authorization-header als AfasToken gevolgd door een base64-waarde, en het draagt de connector-scope. Roteer je hem, dan moet je opnieuw nagaan welke connectors hij nog bereikt. Schrijf dat op vóór de eerste rotatie en niet erna.

Is AFAS snel genoeg voor een lopend gesprek?

Voor het gefilterd opzoeken van één record wel, ruim binnen de dertig seconden die een tool call krijgt. Voor alles wat een grote set ophaalt niet, en dat werk hoort in een geplande synchronisatie en niet in het gesprek.

Dieper graven

De twee artikelen onder deze pagina

Kom maar met de lastige

Stuur het systeem, de API-documentatie en één gesprek dat je wilt automatiseren. Tijdens de kennismaking zeggen we of het zware deel de code is of de inrichting, en welke van de twee de datum bepaalt.

Voice-agents en AFAS Profit: GetConnectors, tokens en de echte vertraging | VoiceDock