Enviar e receber DTMF

O Dual Tone Multi Frequency (DTMF) é um tipo de sinalização utilizado por sistemas telefônicos para transmitir os dígitos 0-9 e o * e # caracteres. Normalmente, quem liga pressiona essas teclas no teclado do telefone, e o aparelho gera então um tom composto por duas frequências reproduzidas simultaneamente (daí o nome “Dual Tone”).

O DTMF é utilizado tanto para discar um número em um telefone fixo quanto para enviar sinais ao destinatário assim que a chamada é atendida. Normalmente, ele é usado para implementar um sistema de Resposta Interativa de Voz (IVR) ou para inserir informações, como um número PIN ou o código de acesso a uma teleconferência.

Este guia explica como enviar e receber entradas DTMF usando o Client SDK. Antes de começar, certifique-se de ter adicionado o Client SDK ao seu aplicativo e (Android, iOS, JS) e você consegue fazer ou receber chamadas.

Enviar DTMF

É possível enviar tons DTMF para uma chamada em andamento.

// After creating a session
client.sendDTMF(callId, "1234")
    .then(() => {
        console.log("Success sending DTMF.");
    })
    .catch(error => {
        console.error("Error sending DTMF: ", error);
    });
client.sendDTMF(callID, "1234") {
    error ->
    when {
        error != null -> {
            // Handle DTMF error
        }
    }
}
client.sendDTMF(callID, "1234", callback: { error in
    if error != nil {
        // Handle DTMF error
    }
})

Durante uma chamada em andamento, em que seu backend implementou um NCCO com uma ação de entrada, o envio de um DTMF acionará o definido "eventUrl".

Receber DTMF

Sempre que um participante de uma chamada envia um evento DTMF, todos os demais participantes da chamada são notificados sobre esse evento.

// After creating a session
client.on("dtmf", (callId, legId, digits) => {
  console.log(`leg: ${legId}: has received DTMF digits ${digits}`);
});
client.setOnDTMFListener { callId, legId, digits ->  
    ...
}

Adicione a corrente ViewController, ou algo semelhante, como delegado para o cliente de voz:

client.delegate = self

ViewController agora terá que estar em conformidade com VGVoiceClientDelegate, os eventos DTMF serão recebidos no didReceiveDTMFForCall método delegado:

extension ViewController: VGVoiceClientDelegate {
    
    func voiceClient(_ client: VGVoiceClient, didReceiveDTMFForCall callId: String, withLegId legId: String, andDigits digits: String) {
        ...
    }

    ...

}

Referência