Package: dev.telequick.sdk. Class: TeleQuickClient.

Constructor

public TeleQuickClient(String endpoint, String credentialsPath)
ArgumentNotes
endpointquic://host:port
credentialsPathPath to your service-account JSON.
The constructor reads only tenant_id from the JSON; signing happens later during the QUIC handshake.

Public fields

public java.util.function.Consumer<byte[]> onAudioFrame;
public java.util.function.Consumer<byte[]> onCallEvent;
Set these before any RPC. Both receive the raw serde envelope.

RPC methods

public void dial(String to, String trunkId);
public void dial(String to, String trunkId,
                 String callFrom, int maxDurationMs,
                 int defaultApp, String defaultAppArgs,
                 String aiWs, String aiQuic,
                 boolean autoBargeIn, int bargeInPatienceMs,
                 String clientId);

public void originateBulk(String csvUrl, String trunkId,
                          int callsPerSecond, String campaignId);
public void originateBulk(String csvUrl, String trunkId,
                          int callsPerSecond, String campaignId,
                          int defaultApp, String defaultAppArgs,
                          String aiWs, String aiQuic,
                          boolean autoBargeIn, int bargeInPatienceMs);

public void terminate(String callSid);
public void barge(String callSid);
public void abortBulk(String campaignId);
public void streamEvents(String clientId);

public void setInboundRouting(String trunkId, int rule,
                              String audioUrl, String webhookUrl,
                              String aiWs, String aiQuic);

public void getIncomingCalls(String trunkId);
public void answerIncomingCall(String callSid, String aiWs, String aiQuic);

public void getActiveBuckets();
public void getBucketCalls(String bucketId);
public void executeBucketAction(String bucketId, int action);

public void pushAudio(String callSid, byte[] payload,
                      String codec, long seqNum, boolean eos);
All methods are blocking (no Future<Void> wrapper). For async use, submit to an executor.

FFI helpers

TeleQuickClient.CoreFFI is the JNA Library interface. Two helpers deserialize incoming envelopes:
CoreFFI.C_AudioFrame  af = CoreFFI.INSTANCE.telequick_deserialize_audio_frame(
    Pointer payloadBuffer, long length);

CoreFFI.C_CallEvent   ev = CoreFFI.INSTANCE.telequick_deserialize_call_event(
    Pointer payloadBuffer, long length);
C_AudioFrame has fields:
FieldJava type
call_sidString
payloadPointer (raw codec)
codecString
sequence_numberlong
end_of_streamboolean
C_CallEvent:
FieldJava type
call_sidString
event_typeint
statusString
start_timestamp_mslong
q850_causeint
recording_urlString
duration_secondsint

Method ID constants

import dev.telequick.sdk.MethodID;

MethodID.ORIGINATE
MethodID.AUDIO_FRAME
MethodID.STREAM_EVENTS
// …

Threading model

The internal EventLoopGroup is a single-thread NioEventLoopGroup. All inbound demuxing happens on that one thread; your onAudioFrame / onCallEvent callbacks run on it. Don’t block them — at audio frame rates of 50 fps, even a 1 ms callback eats 5% of CPU.