
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
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.
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.
Een aanvraag of wijziging vastleggen
Via één UpdateConnector met een vaste set velden, zodat de agent geen bericht kan samenstellen dat Profit weigert.
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
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 opzetWat 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.
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
Dertig seconden, één poging
Waarom een tool call één poging krijgt, welke zoekopdrachten een gesprek mogen ophouden, en wat de agent zegt terwijl hij wacht.
Dertig seconden, één pogingWeten wie er belt voordat hij het zegt
Het nummer komt binnen in E.164 en je CRM bevat zes andere vormen. Normaliseren, cachen en gedeelde nummers.
Weten wie er belt voordat hij het zegtKom 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.