Senden und Empfangen von DTMF
Übersicht
Dual Tone Multi Frequency (DTMF) ist eine Form der Signalisierung, die von Telefonsystemen zur Übertragung der Ziffern 0-9 und die * und # Zeichen. In der Regel drückt ein Anrufer diese Tasten auf seiner Telefontastatur, woraufhin das Telefon einen Ton erzeugt, der aus zwei gleichzeitig gespielten Frequenzen besteht (daher Dual Tone).
DTMF wird sowohl für die Wahl eines Ziels auf einem Festnetztelefon als auch für die Signalisierung an die Gegenstelle verwendet, sobald ein Anruf angenommen wurde. In der Regel wird dies verwendet, um ein interaktives Voice-Response-System (IVR) zu implementieren oder um Informationen wie eine PIN-Nummer oder einen Konferenzgesprächs-Pin einzugeben.
Mit den Client SDKs können Sie sowohl eine DTMF-Eingabe von Ihrem App-Benutzer erfassen, als auch auf DTMF-Eingaben hören, die von einem anderen Teilnehmer gesendet wurden.
Bevor Sie beginnen, stellen Sie sicher, dass Sie das SDK zu Ihrer Anwendung hinzugefügt und Sie sind in der Lage machen. oder erhalten Anrufe.
DTMF senden
Um DTMF-Töne von Ihrer Anwendung an das Backend zu senden, verwenden Sie diese Methode:
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"];
Während eines laufenden Anrufs, bei dem Ihr Backend eine NCCO mit einer Eingabeaktionwird durch das Senden eines DTMF-Tons die definierte "eventUrl".
DTMF-Empfang
Wann immer ein Mitglied in einer Conversation oder eine Call ein DTMF sendet, werden alle anderen Mitglieder über dieses Ereignis benachrichtigt.
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
});
Die DTMF-Ereignisse werden in Ihrer Implementierung von NexmoCallEventListener.onDTMF() Methode, auf der NexmoCallEventListener die mit dem 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);
Die DTMF-Ereignisse werden in der Implementierung des dtmfReceived(_, callMember) optionale Methode für Ihre NXMCallDelegate:
func call(_ call: NXMCall, didReceive dtmf: String, from member: NXMMember?) {
print("DTMF received:`\(dtmf)` from `\(String(describing: member?.user.name))`")
}
Die DTMF-Ereignisse werden in der Implementierung des DTMFReceived:callMember: optionale Methode für Ihre NXMCallDelegate:
- (void)call:(NXMCall *)call didReceive:(NSString *)dtmf fromMember:(NXMMember *)member {
NSLog(@"DTMF received: `%@` from `%@`", dtmf, member.user.name);
}