Einen Anruf erhalten
An der Spitze der ViewController Klasse, unterhalb der client fügen Sie eine String-Eigenschaft hinzu, die einen Verweis auf einen laufenden Aufruf enthält.
class ViewController: UIViewController {
let connectionStatusLabel = UILabel()
let client = VGVoiceClient()
var callID: String?
...
}
Wenn die Anwendung einen Anruf erhält, möchten Sie ihr die Möglichkeit geben, den Anruf anzunehmen oder abzulehnen. Dazu fügen Sie die displayIncomingCallAlert Funktion zum ViewController Klasse.
class ViewController: UIViewController {
...
func displayIncomingCallAlert(callID: String, caller: String) {
let alert = UIAlertController(title: "Incoming call from", message: caller, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Answer", style: .default, handler: { _ in
self.client.answer(callID) { error in
if error == nil {
self.callID = callID
}
}
}))
alert.addAction(UIAlertAction(title: "Reject", style: .destructive, handler: { _ in
self.client.reject(callID) { error in
if let error {
self.connectionStatusLabel.text = error.localizedDescription
}
}
}))
self.present(alert, animated: true, completion: nil)
}
}
Die displayIncomingCallAlert Funktion nimmt als Parameter eine Anruf-ID und einen Anrufer an. Beachten Sie in der UIAlertAction für die Beantwortung der Einladung, bei Erfolg weisen Sie die callID zu dem Grundstück von früher
Zur Verwendung displayIncomingCallAlert müssen Sie die VGVoiceClientDelegate die eine Funktion hat, die aufgerufen wird, wenn der Client eine eingehende VGVoiceInvite.
extension ViewController: VGVoiceClientDelegate {
...
func voiceClient(_ client: VGVoiceClient, didReceiveInviteForCall callId: String, from caller: String, withChannelType type: VGVoiceChannelType) {
DispatchQueue.main.async { [weak self] in
self?.displayIncomingCallAlert(callID: callId, caller: caller)
}
}
func voiceClient(_ client: VGVoiceClient, didReceiveInviteCancelForCall callId: String, with reason: VGVoiceInviteCancelReason) {
DispatchQueue.main.async { [weak self] in
self?.dismiss(animated: true)
}
}
func voiceClient(_ client: VGVoiceClient, didReceiveHangupForCall callId: String, withQuality callQuality: VGRTCQuality, reason: VGHangupReason) {
DispatchQueue.main.async { [weak self] in
self?.callID = nil
self?.connectionStatusLabel.text = "Call Ended"
}
}
}
Sie können auch die didReceiveHangupForCall Delegierte Funktion, die aufgerufen wird, wenn der Anruf aufgelegt wird.
HINWEIS: Stellen Sie außerdem sicher, dass der Webhook-Server, den Sie in den vorherigen Schritten erstellt haben, noch läuft.
Presse Cmd + R Wenn Sie die Nummer anrufen, die mit Ihrer früheren Anwendung verknüpft ist, erhalten Sie einen Hinweis. Sie können abheben und der Anruf wird verbunden!

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: 441234567890
Außerdem durchläuft der Anruf verschiedene Phasen, /voice/event werden Ereignisse gesendet:
EVENT:
{
headers: {},
from: '441234567890',
to: '442038297050',
uuid: '0779a56d002f1c7f47f82ef5fe84ab79',
conversation_uuid: 'CON-8f5a100c-fbce-4218-8d4b-16341335bcd6',
status: 'ringing',
direction: 'inbound',
timestamp: '2021-03-29T21:20:05.582Z'
}
---
EVENT:
{
headers: {},
from: '441234567890',
to: '442038297050',
uuid: '0779a56d002f1c7f47f82ef5fe84ab79',
conversation_uuid: 'CON-8f5a100c-fbce-4218-8d4b-16341335bcd6',
status: 'started',
direction: 'inbound',
timestamp: '2021-03-29T21:20:05.582Z'
}
---
EVENT:
{
start_time: null,
headers: {},
rate: null,
from: '441234567890',
to: '442038297050',
uuid: '0779a56d002f1c7f47f82ef5fe84ab79',
conversation_uuid: 'CON-8f5a100c-fbce-4218-8d4b-16341335bcd6',
status: 'answered',
direction: 'inbound',
network: null,
timestamp: '2021-03-29T21:20:06.182Z'
}
---
EVENT:
{
from: '441234567890',
to: 'Alice',
uuid: '944bf4bf-8dc7-4e23-86b2-2f4234777416',
conversation_uuid: 'CON-8f5a100c-fbce-4218-8d4b-16341335bcd6',
status: 'started',
direction: 'outbound',
timestamp: '2021-03-29T21:20:13.025Z'
}
---
EVENT:
{
start_time: null,
headers: {},
rate: null,
from: '441234567890',
to: 'Alice',
uuid: '944bf4bf-8dc7-4e23-86b2-2f4234777416',
conversation_uuid: 'CON-8f5a100c-fbce-4218-8d4b-16341335bcd6',
status: 'answered',
direction: 'outbound',
network: null,
timestamp: '2021-03-29T21:20:13.025Z'
}
---
EVENT:
{
headers: {},
end_time: '2021-03-29T21:20:16.000Z',
uuid: '944bf4bf-8dc7-4e23-86b2-2f4234777416',
network: null,
duration: '5',
start_time: '2021-03-29T21:20:11.000Z',
rate: '0.00',
price: '0',
from: '441234567890',
to: 'Alice',
conversation_uuid: 'CON-8f5a100c-fbce-4218-8d4b-16341335bcd6',
status: 'completed',
direction: 'outbound',
timestamp: '2021-03-29T21:20:17.574Z'
}
---
EVENT:
{
headers: {},
end_time: '2021-03-29T21:20:18.000Z',
uuid: '0779a56d002f1c7f47f82ef5fe84ab79',
network: 'GB-FIXED',
duration: '12',
start_time: '2021-03-29T21:20:06.000Z',
rate: '0.00720000',
price: '0.00144000',
from: ' 441234567890',
to: '442038297050',
conversation_uuid: 'CON-8f5a100c-fbce-4218-8d4b-16341335bcd6',
status: 'completed',
direction: 'inbound',
timestamp: '2021-03-29T21:20:17.514Z'
}
---
Annehmen eines Anrufs in der App
Sie erhalten einen Anruf von einem Telefon zu Ihrer App