Case studyGeanonimiseerd klantprojectLees in het Engels

Een bot die claims indient en opvolgt in een vervoerdersportaal

Een Nederlands 3PL-fulfilmentbedrijf dient onderzoeken en claims voor pakketten in via het klantportaal van een vervoerderspartner, gebouwd op Freshdesk. Het portaal heeft geen API, dus elk ticket werd met de hand geopend, gecontroleerd en beantwoord. Deze bot doet dat werk via een echte browser en biedt het aan als een kleine HTTP API.

In het kort

De portaalbot is een browserautomatisering (RPA) voor een Nederlandse 3PL. Hij logt in op het Freshdesk-klantportaal van een vervoerderspartner, dat geen API heeft, en opent claimtickets met de vervoerder, de reden en de factuur als bijlage. Hij leest ook antwoorden, plaatst reacties en sluit tickets. Het onderzoeksplatform van de 3PL roept hem aan zoals elke andere API.

API-endpoints
7
Ticketlijst lezen
~0.5s over HTTP
Browsersessies
1 tegelijk
Talen van het portaal
Nederlands, Engels
Carrier Portal Bot | Claims & Ticket Automation: hoofdscherm van het project

01 / Het probleem

Waarom dit systeem nodig was

Als een pakket zoekraakt of beschadigd aankomt, opent de 3PL een onderzoek bij de vervoerder. Voor één vervoerderspartner betekent dat een ticket in een Freshdesk-klantportaal: vervoerder kiezen, claimreden kiezen, de verkoopfactuur bijvoegen en een verklaring van niet-ontvangst invullen. Voor geen van die stappen is er een API.

Het opvolgen kostte nog meer tijd. Elk open onderzoek moest worden gecontroleerd op nieuwe antwoorden, en reacties moesten met bijlagen worden teruggeplaatst. Het onderzoeksplatform van de 3PL had deze data automatisch nodig, maar de enige toegang was hetzelfde webportaal dat een mens gebruikt.

Een eerste browserversie werkte, maar was traag en zwaar. Elke controle startte Firefox, en negen open onderzoeken in een cyclus van 15 minuten betekenden zo'n 960 browserstarts per dag, meestal om tickets opnieuw te lezen die niet waren veranderd.

02 / De bouw

Hoe ik het heb gebouwd

De bot is een Python FastAPI-service die het portaal bedient met Playwright via Camoufox, een geharde Firefox-build. Hij vult het claimformulier in, inclusief de Choices.js-dropdowns voor vervoerder en claimreden, uploadt bestanden en geeft het nieuwe ticket-ID terug. Stuurt het portaal door naar de ticketlijst in plaats van naar het nieuwe ticket, dan zoekt de bot het ticket op onderwerp.

Sessiecookies worden na het inloggen opgeslagen en hergebruikt, dus de meeste verzoeken slaan het inlogscherm over. Een verlopen sessie herkent de bot aan de doorverwijzing naar de inlogpagina, en hij herstelt die met een nieuwe login. Eén globale lock staat maar één browser tegelijk toe, omdat parallelle sessies de single sign-on van het portaal overbelastten.

Lezen gaat via een sneller pad. Het portaal toont tickets als gewone HTML, dus de ticketlijst en een wijzigingsvingerafdruk (status, aantal reacties, tijd van de nieuwste reactie) worden met de opgeslagen cookies via HTTP opgehaald in ongeveer een halve seconde, in plaats van 20 tot 30 seconden. De browser start alleen als er iets is veranderd. Het Docker-image installeert alleen de libraries die Firefox nodig heeft, niet de volledige Playwright-browserset van ongeveer 2 GB.

03 / Functies

Wat de portaalbot voor vervoerdersclaims doet

01

Claimtickets aanmaken

Vult de velden voor vervoerder, claimreden, factuur en verklaring in, voegt bestanden toe en geeft het nieuwe ticket-ID terug.

02

Antwoorden en reacties plaatsen

Plaatst vervolgreacties met bijlagen en herkent knoplabels in zowel het Nederlands als het Engels.

03

Tickets sluiten

Sluit afgehandelde tickets, en behandelt een ticket dat al gesloten is als klaar in plaats van als fout.

04

Wijzigingen herkennen

Controleert via HTTP status, aantal reacties en nieuwste tijdstempel om te bepalen of een ticket volledig gelezen moet worden.

05

Terugvalopties om tickets te vinden

Vindt een ticket via de eerste pagina van de lijst, een directe URL of gescoorde zoeksuggesties.

06

Sessies bewaren

Hergebruikt opgeslagen cookies en logt alleen opnieuw in als het portaal doorverwijst naar de inlogpagina.

07

Bewijs bij fouten

Legt validatiefouten op het scherm vast en maakt een screenshot van de hele pagina als een formulierstap mislukt.

04 / Workflow

Zo werkt het, stap voor stap

  1. 01

    Het verzoek ontvangen

    Het onderzoeksplatform roept een endpoint aan, zoals indienen, ophalen, reageren of sluiten.

  2. 02

    Het snelle pad proberen

    Lijst- en wijzigingscontroles lopen via HTTP met opgeslagen cookies, zonder een browser te starten.

  3. 03

    Het portaal bedienen

    Is er een schrijfactie of volledige leesactie nodig, dan opent Camoufox het portaal onder de lock voor één browser.

  4. 04

    Gestructureerde data teruggeven

    De bot geeft ticket-ID's, status en het gesprek als JSON terug, zodat het platform ze kan opslaan.

05 / Schermen

Productschermen

Kies een scherm om de interface, workflow en operationele details te bekijken.

01 / 02
Carrier Portal Bot | Claims & Ticket Automation: Overzicht van functies

Overzicht van functies

06 / Wat er veranderde

Het resultaat in de praktijk

  • Claimtickets in het vervoerdersportaal worden geopend, opgevolgd en gesloten vanuit het onderzoeksplatform van de 3PL, zonder dat medewerkers in het portaal hoeven in te loggen.
  • Het lezen van de ticketlijst ging van 20 tot 30 seconden browsertijd naar ongeveer een halve seconde via HTTP, en ongewijzigde tickets starten geen browser meer.
  • Fouten zijn zichtbaar en te herstellen: verlopen sessies herstellen zichzelf, en formulierfouten komen terug met de eigen meldingen van het portaal en een screenshot.

Veelgestelde vragen

Vragen over een vergelijkbaar systeem

Ja. Een bot met browserautomatisering kan het portaal gebruiken zoals een mens dat doet. Deze bot logt in op een Freshdesk-klantportaal, vult claimformulieren in, uploadt facturen, leest antwoorden en sluit tickets. Hij biedt die acties aan als een kleine HTTP API, zodat andere systemen hem kunnen aanroepen zonder te weten dat er een browser achter zit.

De bot logt opnieuw in en slaat de nieuwe sessie automatisch op. Hij herkent een verlopen sessie aan de doorverwijzing naar de inlogpagina en bewaart daarna nieuwe cookies voor het volgende verzoek. Het snelle leespad via HTTP faalt in dat geval zacht en valt terug op de browser, die onderweg de sessie vernieuwt.

De bot geeft de eigen foutmeldingen van het portaal door in plaats van stil te falen. Laadt het formulier opnieuw met validatiefouten, dan verzamelt hij de zichtbare fouttekst en slaat hij een screenshot van de hele pagina op. Stuurt het portaal hem naar de ticketlijst in plaats van naar het nieuwe ticket, dan vindt hij het nieuwe ticket aan de onderwerpregel.

Hij probeert drie routes op volgorde tot er een het juiste ticket opent. Eerst de eerste pagina van de ticketlijst, dan de directe ticket-URL, dan de zoeksuggesties van het portaal. Suggesties krijgen een score op ticket-ID, link en onderwerp, en de bot controleert of de geopende pagina het gevraagde ticket is voordat hij het leest.

Parallelle sessies overbelastten de single sign-on van het portaal, dus de bot draait één browser tegelijk. Een globale lock zet schrijfacties en volledige leesacties in een wachtrij. Het lezen van de ticketlijst en wijzigingscontroles lopen via gewone HTTP buiten de lock, zodat de vaste statuscyclus nooit hoeft te wachten op een trage formulierinzending.

De bot controleert eerst of een ticket is veranderd voordat hij het volledig leest. Een vingerafdruk van status, aantal reacties en tijd van de nieuwste reactie wordt vergeleken met de vorige. De tekst van antwoorden wordt nog steeds via de browser gelezen, zodat de opgeslagen vingerafdrukken in het platform exact overeenkomen. Dat voorkomt dat een oud antwoord opnieuw als nieuw wordt geïmporteerd.

Samenwerken

Vast met een vervoerdersportaal zonder API?

Ik bouw browserautomatisering die claims indient, tickets volgt en de resultaten in je eigen systemen zet. Stuur me de portaalworkflow die je team elke dag herhaalt.

Bespreek je project

Verder lezen