Hacer una llamada
En la parte superior de la ViewController justo debajo de la clase client declaración: añadir una propiedad de tipo cadena para almacenar una referencia a cualquier llamada en curso
class ViewController: UIViewController, NXMClientDelegate {
...
let client = VGVoiceClient()
var callID: String?
...
}
Basándose en la anulabilidad del callID la propiedad callButtonPressed Ahora se puede utilizar este método tanto para iniciar como para finalizar llamadas; el placeCall y endCall Los métodos se activan para cada caso.
Sustituir el actual callButtonPressed método con el código siguiente:
@IBAction func callButtonPressed(_ sender: Any) {
if callID == nil {
placeCall()
} else {
endCall()
}
}
func placeCall() {
callButton.setTitle("End Call", for: .normal)
client.serverCall(["to": "PHONE_NUMBER"]) { error, callId in
DispatchQueue.main.async { [weak self] in
guard let self else { return }
if error == nil {
self.callID = callId
} else {
self.callButton.setTitle("Call", for: .normal)
self.connectionStatusLabel.text = error?.localizedDescription
}
}
}
}
func endCall() {
guard let callID else { return }
client.hangup(callID) { error in
DispatchQueue.main.async { [weak self] in
guard let self else { return }
if error == nil {
self.callID = nil
self.callButton.setTitle("Call", for: .normal)
}
}
}
}
Al realizar la llamada, el callServer se llama a la función. Esto enviará la información contenida en el diccionario —en este caso, el número del destinatario— a tu servidor de webhooks. Tu webhook responderá con un objeto de control de llamadas que indicará a Vonage con quién debe conectar tu llamada. Al finalizar la llamada, el hangup en caso de éxito callID es nulo.
NOTA: Asegúrese de sustituir PHONE_NUMBER a continuación con el número de teléfono real al que desea llamar, en el formato E.164 (por ejemplo, 447700900000). Además, asegúrese de que el servidor webhook que construyó en los pasos anteriores sigue funcionando.
¡Ya está! ¡Ahora ya puedes configurar, iniciar y realizar la llamada! ¡Es mágico! En cuanto recibas la llamada, podrás contestarla y escuchar la llamada de In-App Voice dentro de la aplicación.
Webhooks
Mientras realizas la llamada, pasa al terminal y fíjate en el /voice/answer punto final al que se realiza la llamada para recuperar el NCCO:
NCCO request:
- callee: 447700900000
Además, a medida que la llamada avanza por las distintas fases, /voice/event se envían eventos:
...
---
VOICE EVENT:
{
from: null,
to: 'Alice',
uuid: '2da93da3-bcac-47ee-b48e-4a18fae7db08',
conversation_uuid: 'CON-1a28b1f8-0831-44e6-8d58-42739e7d4c77',
status: 'started',
direction: 'inbound',
timestamp: '2021-03-10T10:36:21.285Z'
}
---
VOICE EVENT:
{
headers: {},
from: 'Alice',
to: '447700900000',
uuid: '8aa86e22-8d45-4201-b8d8-3dcd76e76429',
conversation_uuid: 'CON-1a28b1f8-0831-44e6-8d58-42739e7d4c77',
status: 'started',
direction: 'outbound',
timestamp: '2021-03-10T10:36:27.080Z'
}
---
...
---
VOICE EVENT:
{
start_time: null,
headers: {},
rate: null,
from: 'Alice',
to: '447700900000',
uuid: '8aa86e22-8d45-4201-b8d8-3dcd76e76429',
conversation_uuid: 'CON-1a28b1f8-0831-44e6-8d58-42739e7d4c77',
status: 'answered',
direction: 'outbound',
network: null,
timestamp: '2021-03-10T10:36:31.604Z'
}
---
VOICE EVENT:
{
headers: {},
end_time: '2021-03-10T10:36:36.000Z',
uuid: '8aa86e22-8d45-4201-b8d8-3dcd76e76429',
network: '23433',
duration: '5',
start_time: '2021-03-10T10:36:31.000Z',
rate: '0.10000000',
price: '0.00833333',
from: 'Unknown',
to: '447700900000',
conversation_uuid: 'CON-1a28b1f8-0831-44e6-8d58-42739e7d4c77',
status: 'completed',
direction: 'outbound',
timestamp: '2021-03-10T10:36:35.585Z'
}
---
VOICE EVENT:
{
headers: {},
end_time: '2021-03-10T10:36:35.000Z',
uuid: '2da93da3-bcac-47ee-b48e-4a18fae7db08',
network: null,
duration: '15',
start_time: '2021-03-10T10:36:20.000Z',
rate: '0.00',
price: '0',
from: null,
to: 'Alice',
conversation_uuid: 'CON-1a28b1f8-0831-44e6-8d58-42739e7d4c77',
status: 'completed',
direction: 'inbound',
timestamp: '2021-03-10T10:36:36.187Z'
}
NOTA: A medida que se completa la llamada, los eventos también contendrán información sobre la duración y el precio.
Realizar una llamada de voz desde la aplicación
Realizas una llamada de voz desde una aplicación de iOS a un teléfono utilizando el Client SDK de iOS.