68 lines
1.7 KiB
TypeScript
68 lines
1.7 KiB
TypeScript
import type {
|
|
HangupCallInput,
|
|
InitiateCallInput,
|
|
InitiateCallResult,
|
|
PlayTtsInput,
|
|
ProviderName,
|
|
ProviderWebhookParseResult,
|
|
StartListeningInput,
|
|
StopListeningInput,
|
|
WebhookContext,
|
|
WebhookVerificationResult,
|
|
} from "../types.js";
|
|
|
|
/**
|
|
* Abstract base interface for voice call providers.
|
|
*
|
|
* Each provider (Telnyx, Twilio, etc.) implements this interface to provide
|
|
* a consistent API for the call manager.
|
|
*
|
|
* Responsibilities:
|
|
* - Webhook verification and event parsing
|
|
* - Outbound call initiation and hangup
|
|
* - Media control (TTS playback, STT listening)
|
|
*/
|
|
export interface VoiceCallProvider {
|
|
/** Provider identifier */
|
|
readonly name: ProviderName;
|
|
|
|
/**
|
|
* Verify webhook signature/HMAC before processing.
|
|
* Must be called before parseWebhookEvent.
|
|
*/
|
|
verifyWebhook(ctx: WebhookContext): WebhookVerificationResult;
|
|
|
|
/**
|
|
* Parse provider-specific webhook payload into normalized events.
|
|
* Returns events and optional response to send back to provider.
|
|
*/
|
|
parseWebhookEvent(ctx: WebhookContext): ProviderWebhookParseResult;
|
|
|
|
/**
|
|
* Initiate an outbound call.
|
|
* @returns Provider call ID and status
|
|
*/
|
|
initiateCall(input: InitiateCallInput): Promise<InitiateCallResult>;
|
|
|
|
/**
|
|
* Hang up an active call.
|
|
*/
|
|
hangupCall(input: HangupCallInput): Promise<void>;
|
|
|
|
/**
|
|
* Play TTS audio to the caller.
|
|
* The provider should handle streaming if supported.
|
|
*/
|
|
playTts(input: PlayTtsInput): Promise<void>;
|
|
|
|
/**
|
|
* Start listening for user speech (activate STT).
|
|
*/
|
|
startListening(input: StartListeningInput): Promise<void>;
|
|
|
|
/**
|
|
* Stop listening for user speech (deactivate STT).
|
|
*/
|
|
stopListening(input: StopListeningInput): Promise<void>;
|
|
}
|