Relay.Calling.Call
Relay.Calling.Call
All calls in SignalWire have a common generic interface, Call
. A Call
is a connection between SignalWire and another device.
Properties
Property | Type | Description |
---|---|---|
Id | string | The unique identifier of the call. |
Type | string | The type of call. Only phone is currently supported. |
From | string | The phone number that the call is coming from. |
To | string | The phone number you are attempting to call. |
Timeout | int | The seconds the call rings before being transferred to voicemail. |
State | string | The current state of the call. |
PrevState | string | The previous state of the call. |
Context | string | The context the call belongs to. |
Peer | *signalwire.CallObj | The call your original call is connected to. |
Active | bool | Whether the call is active. |
Ended | bool | Whether the call has ended. |
Answered | bool | Whether the call has been answered. |
Failed | bool | Whether the call has failed. |
Busy | bool | Whether the call was busy. |
Methods
Answer
Answer an inbound call.
Returns
*signalwire.AnswerResult
- The result of the answer operation.
Examples
Answer an inbound call and check if it was successful:
resultAnswer := call.Answer()
if !resultAnswer.Successful {
if err := consumer.Stop(); err != nil {
log.Errorf("Error occurred while trying to stop Consumer")
return
}
}
Detect
Start a detector on the call and waits until it has finished or failed.
The Detect
method is a generic method for all types of detecting, see DetectAnsweringMachine
, DetectDigit
or DetectFax
for more specific usage.
Returns
*signalwire.DetectResult
- The result of the detect operation.
DetectMachineAsync, DetectFaxAsync, DetectDigitAsync
Asynchronous version of detect
. It does not wait the detector ends but returns a Relay.Calling.DetectAction
you can interact with.
Parameters
See detect
for the parameter list.
Returns
pointer to DetectAction, error
Examples
Detect digits using default parameters.
var det signalwire.DetectDigitParams
detectDigitAction, err := resultDial.Call.DetectDigitAsync(&det)
Detect digits using filter.
var det signalwire.DetectDigitParams
det.Digits = "789"
detectDigitAction, err := resultDial.Call.DetectDigitAsync(&det)
detectMachine
Detect whether the call was answered by a human or an answering machine.
Parameters
Parameter | Type | Required | Description |
---|---|---|---|
params | *signalwire.DetectMachineParams | optional | Detection parameters with the following properties: |
DetectMachineParams Properties
Parameter | Type | Required | Description |
---|---|---|---|
InitialTimeout | float64 | optional | Number of seconds to wait for initial voice before giving up. Defaults to 4.5. |
EndSilenceTimeout | float64 | optional | Number of seconds to wait for voice to finish. Defaults to 1.0. |
MachineVoiceThreshold | float64 | optional | How many seconds of voice to decide is a machine. Defaults to 1.25. |
MachineWordsThreshold | int | optional | How many words to count to decide is a machine. Defaults to 6. |
Returns
*signalwire.DetectResult
- The result of the machine detection.
Examples
Perform an AMD and wait until the machine is ready:
// MyOnDetectUpdate ran on Detector update
func MyOnDetectUpdate(det interface{}) {
signalwire.Log.Info("Detect update.\n")
detectAction, ok := det.(*signalwire.DetectMachineAction)
if ok {
signalwire.Log.Info("Machine Detect Action.\n")
if detectAction.GetDetectorEvent() == signalwire.DetectMachineReady {
signalwire.Log.Info("Machine READY.\n")
detectAction.Stop()
}
}
}
var det signalwire.DetectMachineParams
detectMachineAction, err := resultDial.Call.DetectMachineAsync(&det)
if err != nil {
signalwire.Log.Error("Error occurred while trying to start answering machine detector")
}
detectMachineAsync
Asynchronous version of detectMachine
. It does not wait for the detector to end but returns a DetectAction
you can interact with.
Parameters
See detectMachine
for the parameter list.
Returns
*signalwire.DetectAction
, error
- The detect action and any error.
Examples
Perform an asynchronous AMD on the call. Then stop the action if not completed yet:
detectMachineAction, err := resultDial.Call.DetectMachineAsync(&det)
if err != nil {
signalwire.Log.Error("Error occurred while trying to start answering machine detector")
}
time.Sleep(10 * time.Second)
if !detectMachineAction.GetCompleted() {
detectMachineAction.Stop()
}
detectDigit
Detect DTMF digits on the call.
Parameters
Parameter | Type | Required | Description |
---|---|---|---|
params | *signalwire.DetectDigitParams | optional | Detection parameters |
DetectDigitParams Properties
Parameter | Type | Required | Description |
---|---|---|---|
Timeout | float64 | optional | Number of seconds to run the detector. Defaults to 30.0. |
Digits | string | optional | The digits to detect. Defaults to "0123456789#*". |
Returns
*signalwire.DetectResult
- The result of the digit detection.
Examples
Detect digits and then write a log with the result:
// MyOnDetectUpdate ran on Detector update
func MyOnDetectUpdate(det interface{}) {
// type assertion to infer the type of detector that just called our callback.
detectAction, ok := det.(*signalwire.DetectDigitAction)
if ok {
signalwire.Log.Info("Detected DTMF: %s\n", detectAction.GetDetectorEvent().String())
}
}
func MyReady(consumer *signalwire.Consumer) {
[...]
resultDial.Call.OnDetectUpdate = MyOnDetectUpdate
var det signalwire.DetectDigitParams
detectDigitAction, err := resultDial.Call.DetectDigitAsync(&det)
if err != nil {
signalwire.Log.Error("Error occurred while trying to start digit detector")
}
}
detectDigitAsync
Asynchronous version of detectDigit
.
Returns
*signalwire.DetectAction
, error
- The detect action and any error.
Examples
Detect only 1-3
digits asynchronously:
resultDial.Call.OnDetectUpdate = MyOnDetectUpdate
var det signalwire.DetectDigitParams
det.Digits = "123"
detectDigitAction, err := resultDial.Call.DetectDigitAsync(&det)
if err != nil {
signalwire.Log.Error("Error occurred while trying to start digit detector")
}
detectFax
Detect fax tones on the call.
Parameters
Parameter | Type | Required | Description |
---|---|---|---|
params | *signalwire.DetectFaxParams | optional | Detection parameters |
DetectFaxParams Properties
Parameter | Type | Required | Description |
---|---|---|---|
Timeout | float64 | optional | Number of seconds to run the detector. Defaults to 30.0. |
Tone | string | optional | The fax tone to detect: CED or CNG . Defaults to "CED". |
Returns
*signalwire.DetectResult
- The result of the fax detection.
Examples
Detect fax on the current call.
var det signalwire.DetectFaxParams
det.Tone = "CED"
detectFaxAction, err := resultDial.Call.DetectFax(&det)
if err != nil {
signalwire.Log.Error("Error occurred while trying to start fax detector")
}
detectFaxAsync
Asynchronous version of detectFax
.
Returns
*signalwire.DetectAction
, error
- The detect action and any error.
Examples
Detect fax on the current call. Stop the action immediately.
var det signalwire.DetectFaxParams
det.Tone = "CED"
detectFaxAction, err := resultDial.Call.DetectFaxAsync(&det)
if err != nil {
signalwire.Log.Error("Error occurred while trying to start fax detector")
}
hangup
Hangup the call.
Returns
*signalwire.HangupResult
- The result of the hangup operation.
Examples
Hangup the current call:
if err := resultDial.Call.Hangup(); err != nil {
signalwire.Log.Error("Error occurred while trying to hangup call. Err: %v\n", err)
}
playAudio
Play an audio file on the call.
Parameters
Parameter | Type | Required | Description |
---|---|---|---|
url | string | required | HTTP(S) URL to audio resource to play. |
Returns
*signalwire.PlayResult
, error
- The result of the play operation and any error.
Examples
Play an MP3 file:
PlayAction, err := resultDial.Call.PlayAudio("https://www.phatdrumloops.com/audio/wav/space_funk1.wav")
if err != nil {
signalwire.Log.Error("Error occurred while trying to Play audio\n")
}
playAudioAsync
Asynchronous version of playAudio
.
Returns
*signalwire.PlayAction
, error
- The play action and any error.
Examples
Play an Mp3 file and stop it after 5 seconds.
playAction, err := resultDial.Call.PlayAudioAsync("https://cdn.signalwire.com/default-music/welcome.mp3")
if err != nil {
log.Errorf("Error occurred while trying to play audio")
}
time.Sleep(5 * time.Second)
playAction.Stop()
playTTS
Play text-to-speech on the call.
Parameters
Parameter | Type | Required | Description |
---|---|---|---|
text | string | required | Text to speak. |
language | string | optional | Language code. Defaults to "en-US". |
gender | string | optional | Voice gender: male or female . Defaults to "female". |
Returns
*signalwire.PlayResult
, error
- The result of the play operation and any error.
Examples
Play TTS:
_, err := resultDial.Call.PlayTTS("Welcome to Signalwire !", "en-US", "female")
if err != nil {
signalwire.Log.Error("Error occurred while trying to Play audio\n")
}
playTTSAsync
Asynchronous version of playTTS
.
Returns
*signalwire.PlayAction
, error
- The play action and any error.
Examples
Play TTS and stop it after 1 second.
playAction, err := resultDial.Call.PlayTTSAsync("Welcome to Signalwire !", "en-US", "female")
if err != nil {
signalwire.Log.Error("Error occurred while trying to Play audio\n")
}
time.Sleep(1 * time.Second)
playAction.Stop()
record
Start recording the call and wait until the recording ends or fails.
Parameters
Parameter | Type | Required | Description |
---|---|---|---|
params | *signalwire.RecordParams | optional | Recording parameters |
RecordParams Properties
Parameter | Type | Required | Description |
---|---|---|---|
Beep | bool | optional | Play a beep before recording. Defaults to false. |
Stereo | bool | optional | Record in stereo. Defaults to false. |
Format | string | optional | Recording format: mp3 or wav . Defaults to "mp3". |
Direction | string | optional | Recording direction: listen , speak , or both . Defaults to "speak". |
InitialTimeout | float64 | optional | Seconds to wait until something is heard. Defaults to 5.0. |
EndSilenceTimeout | float64 | optional | Seconds to wait until caller stops speaking. Defaults to 1.0. |
Terminators | string | optional | DTMF digits that end recording. Defaults to "#*". |
Returns
*signalwire.RecordResult
, error
- The result of the record operation and any error.
Examples
Start recording audio in the call for both direction in stereo mode, if successful, grab url
, duration
and size
from the RecordResult object:
var rec signalwire.RecordParams
rec.Beep = true
rec.Format = "wav"
rec.Stereo = true
rec.Direction = signalwire.RecordDirectionBoth.String()
rec.InitialTimeout = 10
rec.EndSilenceTimeout = 3
rec.Terminators = "#*"
// blocking
recordResult, err := resultDial.Call.RecordAudio(&rec)
if err != nil {
signalwire.Log.Error("Error occurred while trying to record audio\n")
}
// recording stops on silence
signalwire.Log.Info("Recording is at: %s. Duration is:%d Size is:%d \n", recordResult.URL, recordResult.Duration, recordResult.Size)
recordAsync
Asynchronous version of record
.
Returns
*signalwire.RecordAction
, error
- The record action and any error.
Examples
Start recording audio in the call for both direction in stereo mode and then stop it using the RecordAction object:
var rec signalwire.RecordParams
rec.Beep = true
rec.Format = "wav"
rec.Stereo = true
rec.Direction = signalwire.RecordDirectionBoth.String()
rec.InitialTimeout = 10
rec.EndSilenceTimeout = 3
rec.Terminators = "#*"
recordAction, err := resultDial.Call.RecordAudioAsync(&rec)
if err != nil {
signalwire.Log.Error("Error occurred while trying to record audio\n")
}
time.Sleep(3 * time.Second)
signalwire.Log.Info("Stopping recording...\n")
recordAction.Stop()
for {
time.Sleep(1 * time.Second)
if recordAction.GetCompleted() {
break
}
}
// for Actions we use Getters, for Results that we know that are delivered when a blocking action ends
// we can just read the needed vars directly from the Result struct.
signalwire.Log.Info("Recording is at: %s. Duration is:%d Size is:%d \n", recordAction.GetURL(), recordAction.GetDuration(), recordAction.GetSize())
sendFax
Send a fax through the call.
Parameters
Parameter | Type | Required | Description |
---|---|---|---|
document | string | required | HTTP(S) URL to the document to send (PDF format only). |
identity | string | optional | Identity to display on receiving fax. |
header | string | optional | Custom string to add to header of each fax page. |
Returns
*signalwire.FaxResult
, error
- The result of the fax operation and any error.
Examples
Sending a fax on the call:
faxAction, err := resultDial.Call.SendFax("https://example.com/fax.pdf", "", "")
if err != nil {
signalwire.Log.Error("Error occurred while trying to send fax\n")
}
sendFaxAsync
Asynchronous version of sendFax
.
Returns
*signalwire.FaxAction
, error
- The fax action and any error.
Examples
Trying to send a fax and then stop it:
faxAction, err := resultDial.Call.SendFaxAsync("https://example.com/fax.pdf", "", "")
if err != nil {
signalwire.Log.Error("Error occurred while trying to send fax\n")
}
// do something here, the for loop can be placed in a go routine
for {
time.Sleep(200 * time.Millisecond)
if faxAction.GetCompleted() {
break
}
}
signalwire.Log.Info("Pages #%d\n", faxAction.GetPages())
receiveFax
Prepare the call to receive an inbound fax.
Returns
*signalwire.FaxResult
, error
- The result of the fax operation and any error.
Examples
Receiving a fax on the call and print logs for URL and number of received pages:
faxResult, err := call.ReceiveFax()
if err != nil {
log.Errorf("Error occurred while trying to receive fax")
return
}
log.Infof("Download Document from %s\n Pages #%d\n", faxResult.Document, faxResult.Pages
receiveFaxAsync
Asynchronous version of receiveFax
.
Returns
*signalwire.FaxAction
, error
- The fax action and any error.
Examples
Trying to receive a fax and then stop it:
faxAction, err := call.ReceiveFaxAsync()
if err != nil {
signalwire.Log.Errorf("Error occurred while trying to receive fax")
return
}
dial
This will start a call that was created with NewCall
and waits until the Call has been answered or hung up.
Returns
*signalwire.DialResult
- The result of the dial operation.
Examples
newCall := consumer.Client.Calling.NewCall(fromNumber, toNumber)
resultDial := consumer.Client.Calling.Dial(newCall)
if !resultDial.Successful {
if err := consumer.Stop(); err != nil {
signalwire.Log.Error("Error occurred while trying to stop Consumer")
}
return
}
play
Play one or multiple media in a call and wait until the playing has ended.
The Play
method is a generic method for all types of playing, see playAudio
, playSilence
or playTTS
for more specific usage.
Parameters
Parameter | Type | Required | Description |
---|---|---|---|
media | [signalwire.MaxPlay]signalwire.PlayGenericParams | required | Array of PlayGenericParams Struct. The type PlayGenericParams contains only a var interface and the SDK code expects types PlayAudio or PlayTTS or PlaySilence to be assigned to it. |
- To play an audio file use the PlayAudio type to set the URL for the audio file:
Parameter | Type | Required | Description |
---|---|---|---|
URL | string | required | Http(s) URL to audio resource to play. |
- To play text to speech use the PlayTTS type to set the TTS params:
Parameter | Type | Required | Description |
---|---|---|---|
Text | string | required | TTS to play. |
Language | string | optional | Default to en-US . |
Gender | string | optional | male or female . Default to female . |
- To play silence use the PlaySilence type to set the Duration:
Parameter | Type | Required | Description |
---|---|---|---|
Duration | float64 | required | Seconds of silence to play. |
Returns
[]*signalwire.PlayResult
- Array of PlayResult.
Examples
Play multiple media elements in the call:
audio := new(signalwire.PlayAudio)
audio.URL = "https://www.phatdrumloops.com/audio/wav/space_funk1.wav"
tts := new(signalwire.PlayTTS)
tts.Text = "Hello from SignalWire!"
tts.Language = "en-US"
tts.Gender = "male"
silence := new(signalwire.PlaySilence)
silence.Duration = 3 /*seconds*/
var playGeneric [signalwire.MaxPlay]signalwire.PlayGenericParams
playGeneric[0].SpecificParams = audio
playGeneric[1].SpecificParams = silence
playGeneric[2].SpecificParams = tts
// will play all three in the order defined in the "playGeneric" array.
// It will stop when all three Play commands end or upon error.
if _, err := resultDial.Call.Play(playGeneric); err != nil {
signalwire.Log.Error("Error occurred while trying to play audio\n")
}
playAsync
Asynchronous version of play
. It does not wait the playing to complete but returns a PlayAction
you can interact with. This will run all Play actions in parallel.
Parameters
See play
for the parameter list.
Returns
[]*signalwire.PlayAction
- Array of pointers to PlayAction.
Examples
Play multiple media elements in the call and then stop it:
audio := new(signalwire.PlayAudio)
audio.URL = "https://www.phatdrumloops.com/audio/wav/space_funk1.wav"
tts := new(signalwire.PlayTTS)
tts.Text = "Hello from SignalWire!"
tts.Language = "en-US"
tts.Gender = "female"
silence := new(signalwire.PlaySilence)
silence.Duration = 3
// MaxPlay is 10
var playGeneric [signalwire.MaxPlay]signalwire.PlayGenericParams
playGeneric[0].SpecificParams = audio
playGeneric[1].SpecificParams = silence
playGeneric[2].SpecificParams = tts
if _, err := resultDial.Call.PlayAsync(playGeneric); err != nil {
signalwire.Log.Error("Error occurred while trying to play audio\n")
}
playSilence
This is a helper function that refines the use of play
. This simplifies playing silence.
Parameters
Parameter | Type | Required | Description |
---|---|---|---|
duration | float64 | required | Seconds of silence to play. |
Returns
*signalwire.PlayResult
, error
- The result of the play operation and any error.
Examples
Play silence for 3 seconds:
if _, err := resultDial.Call.PlaySilence(3); err != nil {
log.Errorf("Error occurred while trying to play silence. Err: %v\n", err)
}
playSilenceAsync
Asynchronous version of playSilence
. It does not wait the playing to completes but returns a PlayAction
you can interact with.
Parameters
See playSilence
for the parameter list.
Returns
*signalwire.PlayAction
, error
- The play action and any error.
Examples
Play silence for 3 seconds (async):
if _, err := resultDial.Call.PlaySilenceAsync(3); err != nil {
log.Errorf("Error occurred while trying to play silence. Err: %v\n", err)
}
prompt
Play one or more media while collecting user's input from the call at the same time, such as digits
and speech
. It waits until the collection succeed or timeout is reached. This is a general method for all types of playing, see promptAudio
or promptTTS
for more specific usage.
Parameters
Parameter | Type | Required | Description |
---|---|---|---|
media | *[]signalwire.PlayStruct | required | List of media elements to play. See play for the array structure. |
collect | *signalwire.CollectStruct | required | The configuration for input collection. |
volume | float64 | optional | Controls the volume, between -40dB and +40dB where 0 is unchanged. Default is 0 . |
Returns
*signalwire.PromptResult
- The result object to interact with.
Examples
Ask user to enter their PIN and collect the digits:
resultDial.Call.OnPrompt = func(promptaction *signalwire.PromptAction) {
// we could do something here and this gets called when the Prompt Action finishes.
}
playAudioParams := signalwire.PlayAudioParams{
URL: "https://www.pacdv.com/sounds/voices/can-you-keep-a-secret.wav",
}
playTTSParams := signalwire.PlayTTSParams{
Text: "Hello from Signalwire!",
}
playRingtoneParams := signalwire.PlayRingtoneParams{
Duration: 5,
Name: "us",
}
play := []signalwire.PlayStruct{{
Type: "audio",
Params: playAudioParams,
}, {
Type: "tts",
Params: playTTSParams,
}, {
Type: "ringtone",
Params: playRingtoneParams,
}}
collectDigits := new(signalwire.CollectDigits)
collectDigits.Max = 3
collectSpeech := new(signalwire.CollectSpeech)
collectSpeech.EndSilenceTimeout = 1
collectSpeech.SpeechTimeout = 10
collectSpeech.Hints = []string{"top", "well"}
collect := signalwire.CollectStruct{
Speech: collectSpeech,
Digits: collectDigits,
}
promptAction, err := resultDial.Call.PromptAsync(&play, &collect)
if err != nil {
signalwire.Log.Error("Error occurred while trying to start Prompt Action\n")
if err := consumer.Stop(); err != nil {
signalwire.Log.Error("Error occurred while trying to stop Consumer. Err: %v\n", err)
}
return
}
// do something here
time.Sleep(15 * time.Second)
if !promptAction.GetCompleted() {
promptAction.Stop()
}
for {
time.Sleep(1 * time.Second)
if promptAction.GetCompleted() {
break
}
}
myResult := promptAction.GetResultType()
switch myResult {
case signalwire.CollectResultSpeech:
signalwire.Log.Info("Speech text: \"%s\" Confidence: %f\n", promptAction.GetCollectResult(), promptAction.GetConfidence())
case signalwire.CollectResultDigit:
signalwire.Log.Info("Digits: \"%s\" Terminator: %s\n", promptAction.GetCollectResult(), promptAction.GetTerminator())
default:
signalwire.Log.Info("Result was: %s\n", myResult.String())
}
promptAsync
Asynchronous version of prompt
. It does not wait the collection to completes but returns a PromptAction
you can interact with.
Parameters
See prompt
for the parameter list.
Returns
*signalwire.PromptAction
, error
- The prompt action and any error.
Examples
Ask user to enter their PIN and collect the digits.
sendDigits
This method sends DTMF digits to the other party on the call. Allowed digits are 1234567890*#ABCD
and wW
for short and long waits. If any invalid characters are present, the entire operation is rejected.
Parameters
Parameter | Type | Required | Description |
---|---|---|---|
digits | string | required | String of DTMF digits to send. |
Returns
*signalwire.SendDigitsResult
, error
- The result of the send digits operation and any error.
Examples
Send some digits:
_, err := resultDial.Call.SendDigits("777777890*#")
if err != nil {
signalwire.Log.Error("Error occurred while trying send digits: %v\n", err)
}
sendDigitsAsync
Asynchronous version of sendDigits
. It does not wait for the sending event to complete, and immediately returns a SendDigitsAction
object you can interact with.
Parameters
See sendDigits
for the parameter list.
Returns
*signalwire.SendDigitsAction
, error
- The send digits action and any error.
Examples
Send some digits and then check if the operation is completed using the SendDigitsAction object:
/* use an anonymous function as CB */
resultDial.Call.OnSendDigitsFinished = func(a *signalwire.SendDigitsAction) {
signalwire.Log.Info("SendDigits finished with successful result: [%v]\n", a.GetSuccessful())
}
sendDigitsAction, err := resultDial.Call.SendDigitsAsync("1234567890*#")
if err != nil {
signalwire.Log.Error("Error occurred while trying to send digits\n")
}
tap
Intercept call media and stream it to the specify endpoint. It waits until the end of the call. SignalWire will send RTP or Websocket audio to the endpoint.
Parameters
Parameter | Type | Required | Description |
---|---|---|---|
audioDirection | string | required | listen what the caller hears, speak what the caller says or both . |
tap | *signalwire.TapDevice | required | Struct with the following properties: |
TapDevice Properties
Parameter | Type | Required | Description |
---|---|---|---|
Type | string | required | Protocols to use: RTP , WS . Use signalwire.TapRTP.String() or signalwire.TapWS.String() |
Ptime | int | optional | Packetization time in ms. It will be the same as the tapped media if not set, typically 20 ms. |
Codec | string | optional | Codec to use. It will be the same as the tapped media if not set. Codecs can be PCMU , PCMA and OPUS . Defaults to PCMU . |
- To
tap
through RTP:
Parameter | Type | Required | Description |
---|---|---|---|
Addr | string | required | RTP IP v4 address. |
Port | int | required | RTP port. |
- To
tap
through WS (Websocket audio -ws
orwss
URI):
Parameter | Type | Required | Description |
---|---|---|---|
URI | string | required | ws or wss URI . To be set with Type signalwire.TapWS.String() |
Returns
*signalwire.TapResult
, error
- The result of the tap operation and any error.
Examples
Tapping audio from the call, if successful, print both source and destination devices from the
TapResult
object.
tapAsync
Asynchronous version of tap
. It does not wait the end of tapping but returns a TapAction
you can interact with.
Parameters
See tap
for the parameter list.
Returns
*signalwire.TapAction
, error
- The tap action and any error.
Examples
Tapping audio from the call and then stop it using the TapAction
object:
var tapdevice signalwire.TapDevice
if taptype == "rtp" {
tapdevice.Type = signalwire.TapRTP.String()
tapdevice.Params.Addr = "X.X.X.X"
tapdevice.Params.Port = 1234
tapdevice.Params.Codec = "PCMU"
} else if taptype == "ws" {
tapdevice.Type = signalwire.TapWS.String()
tapdevice.Params.URI = "wss://X.X.X.X:1234"
}
tapAction, err := resultDial.Call.TapAudioAsync(signalwire.TapDirectionListen, &tapdevice)
if err != nil {
signalwire.Log.Fatal("Error occurred while trying to tap audio: %v\n", err)
}
time.Sleep(10 * time.Second)
tapAction.Stop()
signalwire.Log.Info("SourceDevice: %v\n", tapAction.GetSourceDevice()) // comes from the SignalWire platform
signalwire.Log.Info("DestinationDevice: %v\n", tapAction.GetDestinationDevice()) // the device passed above
waitFor
Wait for specific events on the Call or returns false
if the Call ends without getting them.
Parameters
Parameter | Type | Required | Description |
---|---|---|---|
event | string | required | One Call State Event |
timeout | float64 | optional | Timeout in seconds |
Returns
bool
- Whether the event was received before timeout.
Examples
Wait for ending event:
call.WaitFor("ending", 3) // wait 3 seconds
waitForAnswered
This is a helper function that refines the use of waitFor
. This simplifies waiting for the answered state.
Parameters
Parameter | Type | Required | Description |
---|---|---|---|
timeout | float64 | optional | Timeout in seconds |
Returns
bool
- Whether the call was answered before timeout.
Examples
Wait for the answered event:
call.WaitForAnswered(20) // wait 20 seconds
waitForEnded
This is a helper function that refines the use of waitFor
. This simplifies waiting for the ended state.
Parameters
Parameter | Type | Required | Description |
---|---|---|---|
timeout | float64 | optional | Timeout in seconds |
Returns
bool
- Whether the call ended before timeout.
Examples
Wait for the ended event:
call.WaitForEnded(3) // wait 3 seconds
waitForEnding
This is a helper function that refines the use of waitFor
. This simplifies waiting for the ending state.
Parameters
Parameter | Type | Required | Description |
---|---|---|---|
timeout | float64 | optional | Timeout in seconds |
Returns
bool
- Whether the call started ending before timeout.
Examples
Wait for the ending event:
call.WaitForEnding(3) // wait 3 seconds
waitForRinging
This is a helper function that refines the use of waitFor
. This simplifies waiting for the ringing state.
Parameters
Parameter | Type | Required | Description |
---|---|---|---|
timeout | float64 | optional | Timeout in seconds |
Returns
bool
- Whether the call started ringing before timeout.
Examples
Wait for the ringing event:
call.WaitForRinging(3) // wait 3 seconds
Callbacks
All these callbacks can be used to track the calls lifecycle and instruct SignalWire on what to do for each different state.
State Callbacks
To track the state of a call.
Property | Description |
---|---|
OnStateChange | Event dispatched when Call state changes. |
OnCreated | The call has been created in Relay. |
OnRinging | The call is ringing and has not yet been answered. |
OnAnswered | The call has been picked up. |
OnEnding | The call is hanging up. |
OnEnded | The call has ended. |
Play Callbacks
To track a playback state.
Property | Description |
---|---|
OnPlayStateChange | Event dispatched when the state of a playing changes. |
OnPlayPlaying | A playback is playing on the call. |
OnPlayError | A playback failed to start. |
OnPlayFinished | The playback has ended. |
OnPlayPaused | The playback is paused. |
Record Callbacks
To track a recording state.
Property | Description |
---|---|
OnRecordStateChange | Event dispatched when the state of a recording changes. |
OnRecordRecording | The call is being recorded. |
OnRecordNoInput | The recording failed due to no input. |
OnRecordFinished | The recording has finished. |
Fax Callbacks
To track a fax state.
Property | Description |
---|---|
OnFaxError | Faxing failed. |
OnFaxFinished | Faxing has finished. |
OnFaxPage | A fax page has been sent or received. |
Detect Callbacks
To track a detector state.
Property | Description |
---|---|
OnDetectError | The detector has failed. |
OnDetectFinished | The detector has finished. |
OnDetectUpdate | There is a notification from the detector (eg: a new DTMF tone). |
Send Digits Events
To receive a message when the digits are finished sending.
Property | Description |
---|---|
OnSendDigitsStateChange | The send digits state is changing, generalized event for the following events. |
OnSendDigitsFinished | The digits have finished sending. |
Tap Events
To track an active tap.
Property | Description |
---|---|
OnTapStateChange | The tap state is changing, generalized event for the following events. |
OnTapTapping | The call is being tapped. |
OnTapFinished | The tapping has finished. |
Prompt Events
To track a prompt state.
Property | Description |
---|---|
OnPrompt | The prompt action on the call has ended. |