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 recomienda utilizar CallKit para las llamadas entrantes y salientes. Sigue las instrucciones de la Llamadas salientes con iOS CallKit entrada de blog.
Hacer una llamada
El 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á. Eso 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 tus propios datos personalizados te permite pasar información contextual, en formato clave-valor, a tu answer_url servidor de webhooks. Si introduces un valor con el 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 que se haya realizado a tu 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 consultar las novedades sobre el estado de la convocatoria:
// 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á 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
}
}