Passer un appel
Ce guide explique comment faire un appel avec le Vonage Client SDK. Avant de commencer, assurez-vous d'avoir ajouté le SDK à votre application et (Android, iOS, JS).
NOTE : Sur iOS, il est prévu que vous utilisiez CallKit pour les appels entrants et sortants. Veuillez suivre les instructions de Appels sortants à l'aide d'iOS CallKit blog post.
Passer un appel
Les serverCall vous permet d'initier un appel vocal en utilisant la fonction riche en fonctionnalités Voice API. Lorsque cette méthode est appelée, le answer_url webhook qui est configuré pour votre Applications Vonage s'exécutera. Cela définit le logique et capacités de l'appel.
// 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
}
}
Données personnalisées
L'inclusion de vos propres données personnalisées vous permet de transmettre un contexte, dans un format clé-valeur, à votre answer_url serveur webhook. Si vous fournissez une valeur avec l'option to il remplira le niveau supérieur to dans la requête que vous adressez à votre serveur webhook. Les autres données se trouvent dans la section custom_data objet.
// 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
...
}
Les données seront disponibles sur la requête faite à votre answer_url serveur 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"
}
}
Écouter les événements de l'appel
Pour connaître l'état d'un appel, par exemple pour savoir si l'autre membre a répondu ou raccroché, vous devez écouter les événements relatifs à l'état des segments.
Pour voir les mises à jour de l'état de l'appel :
// 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
}
Ajouter le ViewControllerou similaire, en tant que délégué du client vocal :
client.delegate = self
ViewController devront désormais se conformer à la VGVoiceClientDelegate, le didReceiveLegStatusUpdateForCall vous informera des modifications apportées aux segments d'appel de l'appel actif :
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
}
}