Streaming start
Start streaming the media from a call to a specific WebSocket address or Dialogflow connection in near-realtime. Audio will be delivered as base64-encoded RTP payload (raw audio), wrapped in JSON payloads.
Please find more details about media streaming messages specification under the link.
import Telnyx from 'telnyx';
const client = new Telnyx({
apiKey: process.env['TELNYX_API_KEY'], // This is the default and can be omitted
});
const response = await client.calls.actions.startStreaming('call_control_id');
console.log(response.data);import os
from telnyx import Telnyx
client = Telnyx(
api_key=os.environ.get("TELNYX_API_KEY"), # This is the default and can be omitted
)
response = client.calls.actions.start_streaming(
call_control_id="call_control_id",
)
print(response.data)
package main
import (
"context"
"fmt"
"github.com/team-telnyx/telnyx-go"
"github.com/team-telnyx/telnyx-go/option"
)
func main() {
client := telnyx.NewClient(
option.WithAPIKey("My API Key"),
)
response, err := client.Calls.Actions.StartStreaming(
context.TODO(),
"call_control_id",
telnyx.CallActionStartStreamingParams{},
)
if err != nil {
panic(err.Error())
}
fmt.Printf("%+v\n", response.Data)
}
package com.telnyx.sdk.example;
import com.telnyx.sdk.client.TelnyxClient;
import com.telnyx.sdk.client.okhttp.TelnyxOkHttpClient;
import com.telnyx.sdk.models.calls.actions.ActionStartStreamingParams;
import com.telnyx.sdk.models.calls.actions.ActionStartStreamingResponse;
public final class Main {
private Main() {}
public static void main(String[] args) {
TelnyxClient client = TelnyxOkHttpClient.fromEnv();
ActionStartStreamingResponse response = client.calls().actions().startStreaming("call_control_id");
}
}require "telnyx"
telnyx = Telnyx::Client.new(api_key: "My API Key")
response = telnyx.calls.actions.start_streaming("call_control_id")
puts(response)<?php
require_once dirname(__DIR__) . '/vendor/autoload.php';
use Telnyx\Client;
use Telnyx\Calls\StreamBidirectionalCodec;
use Telnyx\Calls\StreamBidirectionalMode;
use Telnyx\Calls\StreamBidirectionalSamplingRate;
use Telnyx\Calls\StreamBidirectionalTargetLegs;
use Telnyx\Calls\StreamCodec;
use Telnyx\Core\Exceptions\APIException;
$client = new Client(apiKey: getenv('TELNYX_API_KEY') ?: 'My API Key');
try {
$response = $client->calls->actions->startStreaming(
'call_control_id',
clientState: 'aGF2ZSBhIG5pY2UgZGF5ID1d',
commandID: '891510ac-f3e4-11e8-af5b-de00688a4901',
customParameters: [
['name' => 'param1', 'value' => 'value1'],
['name' => 'param2', 'value' => 'value2'],
],
dialogflowConfig: [
'analyzeSentiment' => false, 'partialAutomatedAgentReply' => false
],
enableDialogflow: false,
streamAuthToken: 'your-auth-token',
streamBidirectionalCodec: StreamBidirectionalCodec::G722,
streamBidirectionalMode: StreamBidirectionalMode::RTP,
streamBidirectionalSamplingRate: StreamBidirectionalSamplingRate::RATE_16000,
streamBidirectionalTargetLegs: StreamBidirectionalTargetLegs::BOTH,
streamCodec: StreamCodec::PCMA,
streamTrack: 'both_tracks',
streamURL: 'wss://www.example.com/websocket',
);
var_dump($response);
} catch (APIException $e) {
echo $e->getMessage();
}telnyx calls:actions start-streaming \
--api-key 'My API Key' \
--call-control-id call_control_idcurl --request POST \
--url https://api.telnyx.com/v2/calls/{call_control_id}/actions/streaming_start \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"stream_url": "wss://www.example.com/websocket",
"stream_track": "both_tracks",
"client_state": "aGF2ZSBhIG5pY2UgZGF5ID1d",
"command_id": "891510ac-f3e4-11e8-af5b-de00688a4901",
"enable_dialogflow": false,
"dialogflow_config": {
"analyze_sentiment": false,
"partial_automated_agent_reply": false
}
}
'{
"data": {
"result": "ok"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Unique identifier and token for controlling the call
Body
Start streaming media request
The destination WebSocket address where the stream is going to be delivered.
"wss://www.example.com/websocket"
Specifies which track should be streamed.
inbound_track, outbound_track, both_tracks "both_tracks"
Specifies the codec to be used for the streamed audio. When set to 'default' or when transcoding is not possible, the codec from the call will be used.
PCMU, PCMA, G722, OPUS, AMR-WB, L16, default "PCMA"
Configures method of bidirectional streaming (mp3, rtp).
mp3, rtp "rtp"
Indicates codec for bidirectional streaming RTP payloads. Used only with stream_bidirectional_mode=rtp. Case sensitive.
PCMU, PCMA, G722, OPUS, AMR-WB, L16 "G722"
Specifies which call legs should receive the bidirectional stream audio.
both, self, opposite "both"
Audio sampling rate.
8000, 16000, 22050, 24000, 48000 16000
Enables Dialogflow for the current call. The default value is false.
true
Show child attributes
Show child attributes
Use this field to add state to every subsequent webhook. It must be a valid Base-64 encoded string.
"aGF2ZSBhIG5pY2UgZGF5ID1d"
Use this field to avoid duplicate commands. Telnyx will ignore any command with the same command_id for the same call_control_id.
"891510ac-f3e4-11e8-af5b-de00688a4901"
Custom parameters to be sent as part of the WebSocket connection.
Show child attributes
Show child attributes
[
{ "name": "param1", "value": "value1" },
{ "name": "param2", "value": "value2" }
]
An authentication token to be sent as part of the WebSocket connection. Maximum length is 4000 characters.
4000"your-auth-token"
Response
Successful response upon making a call control command.
Show child attributes
Show child attributes
{ "result": "ok" }
Was this page helpful?
import Telnyx from 'telnyx';
const client = new Telnyx({
apiKey: process.env['TELNYX_API_KEY'], // This is the default and can be omitted
});
const response = await client.calls.actions.startStreaming('call_control_id');
console.log(response.data);import os
from telnyx import Telnyx
client = Telnyx(
api_key=os.environ.get("TELNYX_API_KEY"), # This is the default and can be omitted
)
response = client.calls.actions.start_streaming(
call_control_id="call_control_id",
)
print(response.data)
package main
import (
"context"
"fmt"
"github.com/team-telnyx/telnyx-go"
"github.com/team-telnyx/telnyx-go/option"
)
func main() {
client := telnyx.NewClient(
option.WithAPIKey("My API Key"),
)
response, err := client.Calls.Actions.StartStreaming(
context.TODO(),
"call_control_id",
telnyx.CallActionStartStreamingParams{},
)
if err != nil {
panic(err.Error())
}
fmt.Printf("%+v\n", response.Data)
}
package com.telnyx.sdk.example;
import com.telnyx.sdk.client.TelnyxClient;
import com.telnyx.sdk.client.okhttp.TelnyxOkHttpClient;
import com.telnyx.sdk.models.calls.actions.ActionStartStreamingParams;
import com.telnyx.sdk.models.calls.actions.ActionStartStreamingResponse;
public final class Main {
private Main() {}
public static void main(String[] args) {
TelnyxClient client = TelnyxOkHttpClient.fromEnv();
ActionStartStreamingResponse response = client.calls().actions().startStreaming("call_control_id");
}
}require "telnyx"
telnyx = Telnyx::Client.new(api_key: "My API Key")
response = telnyx.calls.actions.start_streaming("call_control_id")
puts(response)<?php
require_once dirname(__DIR__) . '/vendor/autoload.php';
use Telnyx\Client;
use Telnyx\Calls\StreamBidirectionalCodec;
use Telnyx\Calls\StreamBidirectionalMode;
use Telnyx\Calls\StreamBidirectionalSamplingRate;
use Telnyx\Calls\StreamBidirectionalTargetLegs;
use Telnyx\Calls\StreamCodec;
use Telnyx\Core\Exceptions\APIException;
$client = new Client(apiKey: getenv('TELNYX_API_KEY') ?: 'My API Key');
try {
$response = $client->calls->actions->startStreaming(
'call_control_id',
clientState: 'aGF2ZSBhIG5pY2UgZGF5ID1d',
commandID: '891510ac-f3e4-11e8-af5b-de00688a4901',
customParameters: [
['name' => 'param1', 'value' => 'value1'],
['name' => 'param2', 'value' => 'value2'],
],
dialogflowConfig: [
'analyzeSentiment' => false, 'partialAutomatedAgentReply' => false
],
enableDialogflow: false,
streamAuthToken: 'your-auth-token',
streamBidirectionalCodec: StreamBidirectionalCodec::G722,
streamBidirectionalMode: StreamBidirectionalMode::RTP,
streamBidirectionalSamplingRate: StreamBidirectionalSamplingRate::RATE_16000,
streamBidirectionalTargetLegs: StreamBidirectionalTargetLegs::BOTH,
streamCodec: StreamCodec::PCMA,
streamTrack: 'both_tracks',
streamURL: 'wss://www.example.com/websocket',
);
var_dump($response);
} catch (APIException $e) {
echo $e->getMessage();
}telnyx calls:actions start-streaming \
--api-key 'My API Key' \
--call-control-id call_control_idcurl --request POST \
--url https://api.telnyx.com/v2/calls/{call_control_id}/actions/streaming_start \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"stream_url": "wss://www.example.com/websocket",
"stream_track": "both_tracks",
"client_state": "aGF2ZSBhIG5pY2UgZGF5ID1d",
"command_id": "891510ac-f3e4-11e8-af5b-de00688a4901",
"enable_dialogflow": false,
"dialogflow_config": {
"analyze_sentiment": false,
"partial_automated_agent_reply": false
}
}
'{
"data": {
"result": "ok"
}
}