Swift

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.