Skip to content

Commit

Permalink
initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
jmordica committed Jun 2, 2023
1 parent f35caa0 commit 69e2a71
Show file tree
Hide file tree
Showing 5 changed files with 4,825 additions and 1 deletion.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*

.DS_Store
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json

Expand Down
5 changes: 5 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"deno.enable": true,
"deno.lint": true,
"deno.unstable": true
}
188 changes: 187 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,187 @@
# call-control
# TypeScript SDK for Call Control

This is a Deno TypeScript SDK for Call Control, providing an easy way to
interact with the Call Control API. The SDK includes methods to manage calls,
perform actions like dialing, answering, and hanging up, as well as working with
DTMF tones, real-time transcription, and media streaming.

## Table of Contents

- [Getting Started](#getting-started)
- [Usage](#usage)
- [Available Methods](#available-methods)

## Getting Started

To use this SDK, you'll need to import the `CallControl` class into your project
and instantiate it with your `baseUrl` and `bearerToken`.

```typescript
import { CallControl, DialResponse } from "call-control-sdk";

const cc = new CallControl({
baseUrl: "https://your-api-url.com",
bearerToken : "your-bearer-token"
});
```

## Usage

After initializing the `CallControl` class, you can call its methods to interact
with the Call Control API. For example, to dial a number:

```typescript
try {
const call = await cc.dial({
to: "+10409992842",
from: "+12994882747",
connection_id: "2299939939jfjj93",
});
} catch (err) {
console.log(err.message);
}
```

## Available Methods

The following methods are available in the CallControl class:

### 1. dial(dialRequest: DialRequest)

Dials a number or SIP URI from a given connection. Returns a `DialResponse` with
a `call_leg_id` that can be used to correlate the command with subsequent
webhooks.

### 2. answer(callControlId: string, answerRequest?: AnswerRequest)

Answers an incoming call. The Answer command must be issued before executing
subsequent commands on an incoming call. Returns a `CommandResponse`.

### 3. bridge(callControlId: string, bridgeRequest: BridgeRequest)

Bridges two call control calls. Returns a `CommandResponse`.

### 4. enqueue(callControlId: string, enqueueRequest: EnqueueRequest)

Puts the call in a queue. Returns a `CommandResponse`.

### 5. forkingStart(callControlId: string, forkingStartRequest: ForkingStartRequest)

Starts forking the media from a call to a specific target in realtime. This
stream can be used to enable real-time audio analysis for a variety of use
cases, such as fraud detection or AI-generated audio responses. Returns a
`CommandResponse`.

### 6. forkingStop(callControlId: string, forkingStopRequest?: ForkingStopRequest)

Stops forking a call. Returns a `CommandResponse`.

### 7. gather(callControlId: string, gatherRequest?: GatherRequest)

Gathers DTMF signals to build interactive menus. The Answer command must be
issued before the `gather` command. Returns a `CommandResponse`.

### 8. gatherStop(callControlId: string, gatherStopRequest?: GatherStopRequest)

Stops the current gather. Returns a `CommandResponse`.

### 9. gatherUsingAudio(callControlId: string, gatherUsingAudioRequest?: GatherUsingAudioRequest)

Plays an audio file on the call until the required DTMF signals are gathered to
build interactive menus. The Answer command must be issued before the
`gatherUsingAudio` command. Returns a `CommandResponse`.

### 10. gatherUsingSpeak(callControlId: string, gatherUsingSpeakRequest: GatherUsingSpeakRequest)

Converts text to speech and plays it back on the call to gather DTMF signals.
The Answer command must be issued before the `gatherUsingSpeak` command. Returns
a `CommandResponse`.

### 11. hangup(callControlId: string, hangupRequest?: HangupRequest)

Hangs up the call. Returns a `CommandResponse`.

### 12. removeFromQueue(callControlId: string, removeFromQueueRequest?: RemoveFromQueueRequest)

Removes the call from a queue. Returns a `CommandResponse`.

### 13. playAudio(callControlId: string, playAudioRequest: PlayAudioRequest)

Plays an audio file on the call. If multiple play audio commands are issued
consecutively, the audio files will be placed in a queue awaiting playback.
Returns a `CommandResponse`.

### 14. stopAudio(callControlId: string, stopAudioRequest?: StopAudioRequest)

Stops audio being played on the call. Returns a `CommandResponse`.

### 15. pauseRecording(callControlId: string, pauseRecordingRequest?: PauseRecordingRequest)

Pauses recording the call. Recording can be resumed via the Resume recording
command. Returns a `CommandResponse`.

### 16. resumeRecording(callControlId: string, resumeRecordingRequest?: ResumeRecordingRequest)

Resumes recording the call. Returns a `CommandResponse`.

### 17. startRecording(callControlId: string, startRecordingRequest: StartRecordingRequest)

Starts recording the call. Recording will stop on call hang-up or can be
initiated via the Stop Recording command. Returns a `CommandResponse`.

### 18. stopRecording(callControlId: string, stopRecordingRequest?: StopRecordingRequest)

Stops recording the call. Returns a `CommandResponse`.

### 19. refer(callControlId: string, sipReferRequest: ReferRequest)

Initiates a SIP Refer on a Call Control call. Returns a `CommandResponse`.

### 20. reject(callControlId: string, rejectRequest: RejectRequest)

Rejects an incoming call. Returns a `CommandResponse`.

### 21. sendDtmf(callControlId: string, sendDTMFRequest: SendDtmfRequest)

Sends DTMF tones from this leg. DTMF tones will be heard by the other end of the
call. Returns a `CommandResponse`.

### 22. speakText(callControlId: string, speakTextRequest: SpeakTextRequest)

Converts text to speech and plays it back on the call. If multiple speak text
commands are issued consecutively, the audio files will be placed in a queue
awaiting playback. Returns a `CommandResponse`.

### 23. startStream(callControlId: string, startStreamRequest?: StartStreamRequest)

Starts streaming the media from a call to a specific WebSocket address in
near-realtime. Audio will be delivered as base64-encoded RTP payload (raw
audio), wrapped in JSON payloads. Returns a `CommandResponse`.

### 24. stopStream(callControlId: string, stopStreamRequest?: StopStreamRequest)

Stops streaming a call to a WebSocket. Returns a `CommandResponse`.

### 25. startTranscription(callControlId: string, startTranscriptionRequest?: StartTranscriptionRequest)

Starts real-time transcription. Transcription will stop on call hang-up or can
be initiated via the Transcription stop command. Returns a `CommandResponse`.

### 26. stopTranscription(callControlId: string, stopTranscriptionRequest?: StopTranscriptionRequest)

Stops real-time transcription. Returns a `CommandResponse`.

### 27. transfer(callControlId: string, transferRequest: TransferRequest)

Transfers a call to a new destination. If the transfer is unsuccessful, a
`call.hangup` webhook for the other call (Leg B) will be sent indicating that
the transfer could not be completed. The original call will remain active and
may be issued additional commands, potentially transferring the call to an
alternate destination. Returns a `CommandResponse`.

### 28. updateState(callControlId: string, updateStateRequest: UpdateStateRequest)

Updates client state. Returns a `CommandResponse`.

For each method, refer to the SDK's `types.ts` for more details on the required
parameters and expected responses.
Loading

0 comments on commit 69e2a71

Please sign in to comment.