Sample code for 30+ languages & platforms
VBScript Requires Chilkat v11.5.0+

Box: Poll User Events and Save a Checkpoint

See more Box Examples

Poll the authenticated user event stream in bounded batches. The local JSON checkpoint keeps processed event IDs and the next stream position. This single-process demonstration logs events; a production worker should commit its business action, deduplication record, and cursor transactionally and prune old IDs.

See the Box API guide for setup and the complete workflow.

Chilkat VBScript Downloads

VBScript
Dim fso, outFile
Set fso = CreateObject("Scripting.FileSystemObject")
'Create a Unicode (utf-16) output text file.
Set outFile = fso.CreateTextFile("output.txt", True, True)

success = 0

'  Requires Chilkat 11.5.0 or later and a previously unlocked Chilkat bundle.
'  See Global Unlock Sample.
'  Guide: Box API Guide.

success = 0

'  Supply an unexpired token obtained with one of the Box authentication examples.
'  A token represents a particular user or service account. IDs must be accessible to it.
set curl = CreateObject("Chilkat.HttpCurl")
curl.SetVar "access_token","BOX_ACCESS_TOKEN"

set state = CreateObject("Chilkat.JsonObject")
set files = CreateObject("Chilkat.FileAccess")
statePath = "qa_data/box_events_state.json"
If (files.FileExists(statePath) = 1) Then
    success = state.LoadFile(statePath)
    If (success <> 1) Then
        outFile.WriteLine(state.LastErrorText)
        WScript.Quit
    End If

    If (state.HasMember("position") <> 1) Then
        outFile.WriteLine("Invalid checkpoint: position missing.")
        WScript.Quit
    End If

Else
    '  "now" starts a new subscription. It deliberately skips historical events.
    success = state.UpdateString("position","now")
End If

curl.SetVar "position",state.StringOf("position")
set page = CreateObject("Chilkat.JsonObject")
set seenPath = CreateObject("Chilkat.StringBuilder")

batch = 0

more = 1
Do While (more = 1) And (batch < 20)
    curl.ClearTargetOutput "*"
    set authorizedCommand1 = CreateObject("Chilkat.StringBuilder")
    success = authorizedCommand1.SetString("curl -X GET ""https://api.box.com/2.0/events?stream_type=all&stream_position={{position}}&limit=100"" -H ""Authorization: Bearer {{access_token}}""")
    headerReplacement1 = authorizedCommand1.Replace("{{access_token}}",curl.GetVar("access_token"))
    success = curl.DoYourThing(authorizedCommand1.GetAsString())
    If ((success <> 1) Or (curl.StatusCode <> 200)) Then
        outFile.WriteLine("Box request failed. HTTP status: " & curl.StatusCode)
        outFile.WriteLine("Failure reason: " & curl.FailReason)
        outFile.WriteLine(curl.ResponseBodyStr)
        WScript.Quit
    End If

    success = curl.GetResponseJson(page)
    If (success <> 1) Then
        outFile.WriteLine(curl.LastErrorText)
        WScript.Quit
    End If

    count = page.SizeOfArray("entries")
    i = 0
    Do While i < count
        page.I = i
        eventId = page.StringOf("entries[i].event_id")
        If (eventId = "") Then
            outFile.WriteLine("Event without an event_id; checkpoint not advanced.")
            WScript.Quit
        End If

        seenPath.Clear 
        success = seenPath.Append("seen.")
        success = seenPath.Append(eventId)
        If (state.HasMember(seenPath.GetAsString()) = 0) Then
            '  Replace this logging with your idempotent business operation.
            '  Record success only after that operation succeeds.
            outFile.WriteLine(eventId & " " & page.StringOf("entries[i].event_type") & " " & page.StringOf("entries[i].source.id"))
            success = state.UpdateBool(seenPath.GetAsString(),1)
        End If

        i = i + 1
    Loop
    nextPosition = page.StringOf("next_stream_position")
    If (nextPosition = "") Then
        outFile.WriteLine("Missing next_stream_position; checkpoint not advanced.")
        WScript.Quit
    End If

    more = (count > 0) And (nextPosition <> curl.GetVar("position"))
    success = state.UpdateString("position",nextPosition)
    success = state.WriteFile(statePath)
    If (success <> 1) Then
        outFile.WriteLine(state.LastErrorText)
        WScript.Quit
    End If

    curl.SetVar "position",nextPosition
    batch = batch + 1
Loop
outFile.WriteLine("Checkpoint saved. Run again later to continue polling.")

outFile.Close