Hacer una llamada
Esta guía explica cómo realizar una llamada con el Vonage Client SDK. Antes de comenzar, asegúrate de haber agregado el SDK a tu aplicación y (Android, iOS, JS).
NOTA: En iOS se espera que utilice CallKit para las llamadas entrantes y salientes. Siga las instrucciones de Llamadas salientes con iOS CallKit entrada del blog.
Hacer una llamada
En serverCall le permite iniciar una llamada de voz utilizando la función Voice API. Cuando se llama a este método, el answer_url webhook que está configurado para su Aplicación de Vonage se ejecutará. Esto define el lógica y capacidades de la llamada.
// 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
}
}
Datos personalizados
Incluir sus propios datos personalizados le permite pasar contexto, en un formato clave-valor, a su answer_url servidor webhook. Si proporciona un valor con el campo to rellenará el nivel superior to en la consulta que hagas a tu servidor webhook. Otros datos estarán bajo el custom_data objeto.
// 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
...
}
Los datos estarán disponibles en la consulta de la solicitud realizada a su answer_url servidor webhook:
{
"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"
}
}
Escuchar eventos de llamada
Para ver actualizaciones sobre el estado de una llamada, por ejemplo, para saber si el otro miembro respondió o colgó la llamada, debes escuchar los eventos de estado de tramo.
Para ver actualizaciones sobre el estado de la llamada:
// 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
}
Añade el ViewControllero similar, como delegado del cliente de voz:
client.delegate = self
ViewController ahora tendrán que ajustarse a VGVoiceClientDelegateEl didReceiveLegStatusUpdateForCall le informará de los cambios en los tramos de llamada de la llamada activa:
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
}
}