Anrufe tätigen
Diese Anleitung beschreibt, wie Sie mit dem Vonage Client SDK einen Anruf tätigen. Bevor Sie beginnen, stellen Sie sicher, dass Sie das SDK zu Ihrer App hinzugefügt haben und (Android, iOS, JS).
HINWEIS: Unter iOS wird erwartet, dass Sie CallKit für eingehende und ausgehende Anrufe verwenden. Bitte befolgen Sie die Ausgehende Anrufe mit iOS CallKit Blogbeitrag.
Anrufe tätigen
Die serverCall Methode können Sie einen Sprachanruf über die funktionsreiche Voice API. Wenn diese Methode aufgerufen wird, wird die answer_url Webhook die für Ihr System konfiguriert ist Vonage Anwendung ausgeführt wird. Das definiert die Logik und Fähigkeiten des Anrufs.
// After creating a session
client.serverCall({to:phoneNumberOrUsername})
.then(callId => {
console.log("Id of created call: ", callId);
})
.catch(error => {
console.error("Error making call: ", error);
});
val client = VoiceClient(this.application.applicationContext)
client.serverCall(mapOf("to" to "PHONE_NUMBER")) {
err, outboundCall ->
when {
err != null -> {
// Handle call error.
}
else -> {
// Handle call success.
}
}
}
let client = VGVoiceClient()
client.serverCall(["to": "PHONE_NUMBER"]) { error, callID in
if error == nil {
// Handle call success.
} else {
// Handle call failure
}
}
Benutzerdefinierte Daten
Wenn Sie Ihre eigenen benutzerdefinierten Daten einschließen, können Sie den Kontext in einem Schlüssel-Wert-Format an Ihre answer_url Webhook-Server. Wenn Sie einen Wert mit der Option to Schlüssel, wird die oberste Ebene ausgefüllt to in der Anfrage, die Sie an Ihren Webhook-Server stellen. Andere Daten werden unter dem custom_data Objekt.
// After creating a session
client.serverCall({to:phoneNumberOrUsername, device_name: "Alice app"})
.then(callId => {
console.log("Id of created call: ", callId);
})
.catch(error => {
console.error("Error making call: ", error);
});
client.serverCall(mapOf("to" to "PHONE_NUMBER", "device_name" to "Alice app")) {
err, outboundCall ->
...
}
client.serverCall(["to": "PHONE_NUMBER", "device_name": "Alice app"]) { error, callID in
...
}
Die Daten werden über die Abfrage der Anfrage an Ihre Website verfügbar sein. answer_url Webhook-Server:
{
"to": "447000000000",
"from_user": "Alice",
"conversation_uuid": "CON-8dd32088-66be-42ae-b0af-c9e12ca588ed",
"uuid": "54c255ca-9c1c-4ecd-b175-a1d022dc7b07",
"custom_data": {
"to": "447000000000",
"device_name": "Alice app"
}
}
Auf Anrufereignisse achten
Um den aktuellen Status eines Anrufs zu erfahren, z. B. ob der andere Teilnehmer den Anruf entgegengenommen oder aufgelegt hat, sollten Sie die Ereignisse zum Beinstatus abhören.
Um den aktuellen Stand des Anrufs zu erfahren:
// After creating a session
client.on("legStatusUpdate", (callId, legId, status) => {
console.log({callId, legId, status});
});
client.on("callInvite", (callId, from, channelType) => {
// Answer / Reject Call
console.log({callId, from, channelType});
});
client.on("callHangup", (callId, callQuality, reason) => {
console.log(`Call ${callId} has hung up, callQuality:${callQuality}, reason:${reason}`);
});
client.on("sessionError", (error) => {
console.error({error});
});
client.setOnLegStatusUpdate { callId, legId, status ->
// Call leg updates
}
client.setCallInviteListener { callId, from, channelType ->
// Handling incoming call invite
}
client.setOnCallHangupListener { callId, callQuality, reason ->
// Handle hangups
}
client.setSessionErrorListener { error ->
// Handle session errors
}
Hinzufügen der aktuellen ViewControllero.ä. als Delegierter für den Voice-Client:
client.delegate = self
ViewController müssen nun den folgenden Anforderungen entsprechen VGVoiceClientDelegatedie didReceiveLegStatusUpdateForCall wird Sie über Änderungen an den Gesprächsabschnitten des aktiven Gesprächs informieren:
extension ViewController: VGVoiceClientDelegate {
func voiceClient(_ client: VGVoiceClient, didReceiveLegStatusUpdateForCall callId: String, withLegId legId: String, andStatus status: String) {
// Call leg updates
}
func voiceClient(_ client: VGVoiceClient, didReceiveHangupForCall callId: String, withQuality callQuality: VGRTCQuality, reason: VGHangupReason) {
// Handle hangups
}
func client(_ client: VGBaseClient, didReceiveSessionErrorWith reason: VGSessionErrorReason) {
// Handle session errors
}
}