Envoi et réception de DTMF
Vue d'ensemble
La multifréquence à deux tons (DTMF) est une forme de signalisation utilisée par les systèmes téléphoniques pour transmettre les chiffres. 0-9 et le * et # caractères. En général, l'appelant appuie sur ces touches du clavier de son téléphone, qui émet alors une tonalité composée de deux fréquences jouées simultanément (d'où le terme de double tonalité).
Le DTMF est utilisé à la fois pour composer une destination sur un téléphone fixe et pour envoyer un signal à l'extrémité distante une fois que l'appel a été pris. Il est généralement utilisé pour mettre en œuvre un système de réponse vocale interactive (IVR) ou pour saisir des informations telles qu'un code PIN ou un code d'appel de conférence.
Avec les SDK Client, vous pouvez à la fois collecter une entrée DTMF de l'utilisateur de votre application et écouter une entrée DTMF envoyée par un autre membre.
Avant de commencer, assurez-vous que ajouter le SDK à votre application et vous êtes en mesure de faire ou recevoir appels.
Envoyer DTMF
Pour envoyer des tonalités DTMF depuis votre application vers le backend, utilisez cette méthode :
call.conversation.media.sendDTMF('3212333,222,399,3212333,32232,1')
val callListener = object : NexmoRequestListener<NexmoCall> {
override fun onSuccess(nexmoCall: NexmoCall?) {
Log.d("TAG", "Call started: " + nexmoCall.toString())
nexmoCall.sendDTMF("123456")
}
override fun onError(apiError: NexmoApiError) {
Log.d("TAG", "Error: Unable to start a call ${apiError.message}")
}
}
nexmoClient.call("123456", NexmoCallHandler.SERVER, callListener)
NexmoRequestListener<NexmoCall> callListener = new NexmoRequestListener<NexmoCall>() {
@Override
public void onSuccess(@Nullable NexmoCall nexmoCall) {
Log.d("TAG", "Call started: " + nexmoCall.toString());
nexmoCall.sendDTMF("123456");
}
@Override
public void onError(@NonNull NexmoApiError apiError) {
Log.d("TAG", "Error: Unable to start a call " + apiError.getMessage());
}
};
nexmoClient.call("123456", NexmoCallHandler.SERVER, callListener);
nexmoCall.sendDTMF("3212333,222,399,3212333,32232,1")
[ongoingCall sendDTMF:@"3212333,222,399,3212333,32232,1"];
Au cours d'un appel en cours, lorsque votre backend a mis en œuvre une fonction BCN avec une action d'entréeL'envoi d'un DTMF déclenchera l'action définie. "eventUrl".
Réception de DTMF
Chaque fois qu'un membre d'un Conversation ou un Call envoie un DTMF, tous les autres membres sont informés de cet événement.
call.conversation.on("audio:dtmf",(from, event)=>{
event.digit // the dtmf digit(s) received
event.from //id of the user who sent the dtmf
event.timestamp //timestamp of the event
event.cid // conversation id the event was sent to
event.body // additional context about the dtmf
});
The DTMF events will be received in your implementation of NexmoCallEventListener.onDTMF() method, on the NexmoCallEventListener that is attached to the NexmoCall.
val callListener = object : NexmoRequestListener<NexmoCall> {
override fun onSuccess(nexmoCall: NexmoCall?) {
Log.d("TAG", "Call started: " + nexmoCall.toString())
nexmoCall?.addCallEventListener(callEventListener)
}
override fun onError(apiError: NexmoApiError) {
Log.d("TAG", "Error: Unable to start a call ${apiError.message}")
}
}
val callEventListener = object : NexmoCallEventListener {
override fun onDTMF(digit: String?, callMember: NexmoCallMember?) {
Log.d("TAG", "v: digit: $digit, callMember: $callMember")
}
override fun onMemberStatusUpdated(memberStatus: NexmoCallMemberStatus?, callMember: NexmoCallMember?) {
Log.d("TAG", "onMemberStatusUpdated: status: $memberStatus, callMember: $callMember")
}
override fun onMuteChanged(muteState: NexmoMediaActionState?, callMember: NexmoCallMember?) {
Log.d("TAG", "onMuteChanged: muteState: $muteState, callMember: $callMember")
}
override fun onEarmuffChanged(earmuffState: NexmoMediaActionState?, callMember: NexmoCallMember?) {
Log.d("TAG", "onEarmuffChanged: earmuffState: $earmuffState, callMember: $callMember")
}
}
nexmoClient.call("123456", NexmoCallHandler.SERVER, callListener)
NexmoRequestListener<NexmoCall> callListener = new NexmoRequestListener<NexmoCall>() {
@Override
public void onSuccess(@Nullable NexmoCall nexmoCall) {
Log.d("TAG", "Call started: " + nexmoCall.toString());
nexmoCall.addCallEventListener(callEventListener);
}
@Override
public void onError(@NonNull NexmoApiError apiError) {
Log.d("TAG", "Error: Unable to start a call " + apiError.getMessage());
}
};
NexmoCallEventListener callEventListener = new NexmoCallEventListener() {
@Override
public void onMemberStatusUpdated(NexmoCallMemberStatus $memberStatus, NexmoMember nexmoMember) {}
@Override
public void onMuteChanged(NexmoMediaActionState muteState, NexmoMember nexmoMember) {}
@Override
public void onEarmuffChanged(NexmoMediaActionState earmuffState, NexmoMember nexmoMember) {}
@Override
public void onDTMF(String digit, NexmoMember nexmoMember) {
Log.d("TAG", "onDTMF(): digit:" + digit + ", nexmoMember: " + nexmoMember);
}
};
nexmoClient.call("123456", NexmoCallHandler.SERVER, callListener);
The DTMF events will be received in the implementation of the dtmfReceived(_, callMember) optional method for your NXMCallDelegate:
func call(_ call: NXMCall, didReceive dtmf: String, from member: NXMMember?) {
print("DTMF received:`\(dtmf)` from `\(String(describing: member?.user.name))`")
}
The DTMF events will be received in the implementation of the DTMFReceived:callMember: optional method for your NXMCallDelegate:
- (void)call:(NXMCall *)call didReceive:(NSString *)dtmf fromMember:(NXMMember *)member {
NSLog(@"DTMF received: `%@` from `%@`", dtmf, member.user.name);
}