Swift

Einen Anruf tätigen

Um einen Anruf zu tätigen, verwenden Sie die callButton im CallViewController UI. Zunächst müssen Sie beiden Schaltflächen ein Ziel hinzufügen.

class CallViewController: UIViewController {
  ...
  override func viewDidLoad() {
    ...
    self.client.delegate = self
    hangUpButton.addTarget(self, action: #selector(endCall), for: .touchUpInside)
    callButton.addTarget(self, action: #selector(makeCall), for: .touchUpInside)
  }
}

Wenn die callButton getippt wird, ruft es die makeCall Funktion. Fügen Sie sie am Ende der CallViewController Klasse.

class CallViewController: UIViewController {
  ...
  @objc private func makeCall() {
    setStatusLabelText("Calling \(user.callPartnerName)")
    
    client.serverCall(["to": user.callPartnerName]) { error, callId in
        if error == nil {
            self.setHangUpButtonHidden(false)
            self.callID = callId
        } else {
            self.setStatusLabelText(error?.localizedDescription)
        }
    }
  }
}

Wenn der Anruf getätigt wird, wird die callServer Funktion aufgerufen wird. Diese übergibt die Informationen im Wörterbuch, in diesem Fall den Benutzernamen des Anrufers, an Ihren Webhook-Server. Ihr Webhook antwortet mit einem Call-Control-Objekt, das Vonage mitteilt, mit wem es Ihren Anruf verbinden soll.

HINWEIS: Stellen Sie außerdem sicher, dass der Webhook-Server, den Sie in den vorherigen Schritten erstellt haben, noch läuft.

Presse Cmd + R zu erstellen und erneut auszuführen. Sie haben jetzt eine funktionierende Anruf-App! Um sie zu testen, können Sie die App auf zwei verschiedenen Simulatoren/Geräten laufen lassen und zwischen den beiden Benutzern telefonieren:

Sent messages

Webhaken

Während Sie den Anruf tätigen, wechseln Sie bitte zum Terminal und beachten Sie die /voice/answer Endpunkt, der zum Abrufen des NCCO aufgerufen wird:

NCCO request:
  - caller: Bob
  - callee: Alice
---
EVENT:
{
  client_ref: 'F906B27D-2119-482F-A876-0E5354D555D3',
  from: null,
  to: 'Bob',
  uuid: '8eaf4a3b-bed7-4316-88f1-fdee8ed34552',
  conversation_uuid: 'CON-a5739d52-35f4-49e1-99c9-68ef9ef2529a',
  status: 'started',
  direction: 'inbound',
  timestamp: '2021-03-26T13:47:14.624Z'
}
---
EVENT:
{
  start_time: null,
  headers: {},
  client_reference: 'F906B27D-2119-482F-A876-0E5354D555D3',
  rate: null,
  from: null,
  to: 'Bob',
  uuid: '8eaf4a3b-bed7-4316-88f1-fdee8ed34552',
  conversation_uuid: 'CON-a5739d52-35f4-49e1-99c9-68ef9ef2529a',
  status: 'answered',
  direction: 'inbound',
  network: null,
  timestamp: '2021-03-26T13:47:14.624Z'
}
---
EVENT:
{
  from: 'Bob',
  to: 'Alice',
  uuid: '61935d7b-9290-4788-8439-1111ae7c9f24',
  conversation_uuid: 'CON-a5739d52-35f4-49e1-99c9-68ef9ef2529a',
  status: 'started',
  direction: 'outbound',
  timestamp: '2021-03-26T13:47:21.032Z'
}
---
EVENT:
{
  start_time: null,
  headers: {},
  rate: null,
  from: 'Bob',
  to: 'Alice',
  uuid: '61935d7b-9290-4788-8439-1111ae7c9f24',
  conversation_uuid: 'CON-a5739d52-35f4-49e1-99c9-68ef9ef2529a',
  status: 'answered',
  direction: 'outbound',
  network: null,
  timestamp: '2021-03-26T13:47:21.032Z'
}
---
EVENT:
{
  headers: {},
  end_time: '2021-03-26T13:47:23.000Z',
  uuid: '61935d7b-9290-4788-8439-1111ae7c9f24',
  network: null,
  duration: '3',
  start_time: '2021-03-26T13:47:20.000Z',
  rate: '0.00',
  price: '0',
  from: 'Bob',
  to: 'Alice',
  conversation_uuid: 'CON-a5739d52-35f4-49e1-99c9-68ef9ef2529a',
  status: 'completed',
  direction: 'outbound',
  timestamp: '2021-03-26T13:47:23.709Z'
}
---
EVENT:
{
  headers: {},
  client_reference: 'F906B27D-2119-482F-A876-0E5354D555D3',
  end_time: '2021-03-26T13:47:23.000Z',
  uuid: '8eaf4a3b-bed7-4316-88f1-fdee8ed34552',
  network: null,
  duration: '9',
  start_time: '2021-03-26T13:47:14.000Z',
  rate: '0.00',
  price: '0',
  from: null,
  to: 'Bob',
  conversation_uuid: 'CON-a5739d52-35f4-49e1-99c9-68ef9ef2529a',
  status: 'completed',
  direction: 'inbound',
  timestamp: '2021-03-26T13:47:23.762Z'
}
---