Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
06f22eb
ga5 changes
v-dharmarajv May 9, 2025
f5cebcd
ga5 api changes
v-dharmarajv May 13, 2025
a7a071d
Made GA5 changes and recorded the live tests. (#45409)
v-pivamshi May 20, 2025
4c30693
Addressing arb comments
v-dharmarajv May 21, 2025
cf508ed
Added the parser for the dtmf data. (#45347)
v-pivamshi May 21, 2025
6300665
updating the white space difference
v-dharmarajv May 21, 2025
a34f372
addressing the arb comments
v-dharmarajv May 21, 2025
3beae7c
GA5 Javadoc Issues (#45432)
v-saasomani May 21, 2025
47bb9e9
Re-recorded tests and fixed linting issues (unused imports). (#45448)
v-saasomani May 22, 2025
99dccc2
updating java missing fields
v-dharmarajv May 22, 2025
0baee07
Merge branch 'callautomation/release/ga5' of https://github.com/Azure…
v-dharmarajv May 22, 2025
50ad4c7
lint errors
v-dharmarajv May 22, 2025
6fafaf3
moving transport url
v-dharmarajv May 23, 2025
0b8acfa
Addressing the ARB Comments
v-dharmarajv May 27, 2025
2fe8f65
addressing the arb comments
v-dharmarajv May 27, 2025
b83c48e
addressing all arb comments
v-dharmarajv May 27, 2025
e5964c9
merge from main
v-dharmarajv May 27, 2025
1a568e4
updating the transcription and media streaming options
v-dharmarajv May 28, 2025
2a11acf
Fixed Javadoc issues + updated ga5 version. (#45496)
v-saasomani May 28, 2025
0722329
Fixing the lint errors
v-dharmarajv May 28, 2025
f0b6caa
fixing the lint error
v-dharmarajv May 28, 2025
f2faa81
updating the changelog
v-dharmarajv May 30, 2025
c8f0c56
merge from main
v-dharmarajv Jun 3, 2025
2e374f3
Updating the changelog and release date
v-dharmarajv Jun 4, 2025
adcf1bb
Created feature branch off of callautomation/release/ga5. Updated to …
v-saasomani Jun 4, 2025
0141709
Ran recorded tests. Fixed timeout issue with waiting for incomingCall…
v-saasomani Jun 16, 2025
c319bb9
merging from main
v-dharmarajv Jun 23, 2025
1d871a8
adding teams extension user id
v-dharmarajv Jun 23, 2025
789d7ee
ga6 version
v-dharmarajv Jun 23, 2025
320d949
changelog update
v-dharmarajv Jun 23, 2025
fc8a861
moving the sipheaderprefix to extendable enum
v-dharmarajv Jun 23, 2025
68497db
setting callconnection id to recording request
v-dharmarajv Jul 7, 2025
46890d9
merging from main
v-dharmarajv Jul 10, 2025
db98550
updating the ga version
v-dharmarajv Jul 10, 2025
9143398
Increment package versions for core releases (#45876)
azure-sdk Jun 30, 2025
a408c48
Increment package versions for patch releases (#45841)
jairmyree Jun 26, 2025
a4d4c1f
latest from main autorest version
v-dharmarajv Jul 10, 2025
0aa988b
apispec endpoint from the main
v-dharmarajv Jul 10, 2025
9086a08
Fixing the build issues
v-dharmarajv Jul 11, 2025
5c81e17
cherry pickign the changes
v-dharmarajv Jul 11, 2025
4005a5e
adding recorded test
v-dharmarajv Jul 12, 2025
0ebacb5
pushing latest record file
v-dharmarajv Jul 12, 2025
569ff47
removing the public contructor as per the comments
v-dharmarajv Jul 12, 2025
05e0493
removing tests which are added mistaken
v-dharmarajv Jul 14, 2025
58e5649
Merging from main
v-dharmarajv Jul 14, 2025
819831c
updating the release date for the ga6
v-dharmarajv Jul 25, 2025
a231ded
changelog update
v-dharmarajv Jul 29, 2025
a8a72be
removing the release date
v-dharmarajv Jul 29, 2025
ab59789
reverting version beta until finalize the release date
v-dharmarajv Jul 30, 2025
a356468
merge from main
v-dharmarajv Jul 30, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Added the parser for the dtmf data. (#45347)
* Added the parser for the dtmf data.

* Removed dtmf meta data.

---------

Co-authored-by: Vinothini Dharmaraj <[email protected]>
  • Loading branch information
v-pivamshi and v-dharmarajv authored May 21, 2025
commit cf508ed40cf2fef11d9e87351425ef8d9802d314
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

package com.azure.communication.callautomation.implementation.accesshelpers;

import com.azure.communication.callautomation.implementation.converters.DtmfDataConverter;
import com.azure.communication.callautomation.models.DtmfData;

/**
* Helper class to access private values of {@link DtmdfData} across package boundaries.
*/
public final class DtmfDataContructorProxy {
private static DtmfDataContructorProxyAccessor accessor;

private DtmfDataContructorProxy() {
}

/**
* Type defining the methods to set the non-public properties of a {@link DtmfDataContructorProxyAccessor}
* instance.
*/
public interface DtmfDataContructorProxyAccessor {
/**
* Creates a new instance of {@link DtmfData} backed by an internal instance of
* {@link DtmfDataConvertor}.
*
* @param internalResponse The internal response.
* @return A new instance of {@link DtmfData}.
*/
DtmfData create(DtmfDataConverter internalResponse);

/**
* Creates a new instance of {@link DtmfData}
*
* @param data The internal response.
* @return A new instance of {@link DtmfData}.
*/
DtmfData create(String data);
}

/**
* The method called from {@link DtmfData} to set it's accessor.
*
* @param accessor The accessor.
*/
public static void setAccessor(final DtmfDataContructorProxyAccessor accessor) {
DtmfDataContructorProxy.accessor = accessor;
}

/**
* Creates a new instance of {@link DtmfData} backed by an internal instance of
* {@link DtmfDataConverter}.
*
* @param internalResponse The internal response.
* @return A new instance of {@link DtmfData}.
*/
public static DtmfData create(DtmfDataConverter internalResponse) {
// This looks odd but is necessary, it is possible to engage the access helper before anywhere else in the
// application accesses DtmfData which triggers the accessor to be configured. So, if the accessor
// is null this effectively pokes the class to set up the accessor.
if (accessor == null) {
new DtmfData();
}

assert accessor != null;
return accessor.create(internalResponse);
}

/**
* Creates a new instance of {@link DtmfData}
*
* @param data The dtmf data.
* @return A new instance of {@link DtmfData}.
*/
public static DtmfData create(String data) {
// This looks odd but is necessary, it is possible to engage the access helper before anywhere else in the
// application accesses DtmfData which triggers the accessor to be configured. So, if the accessor
// is null this effectively pokes the class to set up the accessor.
if (accessor == null) {
new DtmfData();
}

assert accessor != null;
return accessor.create(data);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

package com.azure.communication.callautomation.implementation.converters;

import java.io.IOException;

import com.azure.json.JsonReader;
import com.azure.json.JsonToken;

/** The DtmfDataInternal model. */
public final class DtmfDataConverter {

/*
* The dtmf data.
*/
private String data;

/*
* The timestamp of when the media was sourced.
*/
private String timestamp;

/*
* The participantId.
*/
private String participantRawID;

/**
* Get the data property.
*
* @return the data value.
*/
public String getData() {
return data;
}

/**
* Get the timestamp property.
*
* @return the timestamp value.
*/
public String getTimestamp() {
return timestamp;
}

/**
* Get the participantRawID property.
*
* @return the participantRawID value.
*/
public String getParticipantRawID() {
return participantRawID;
}

/**
* Reads an instance of DtmfMetadataConverter from the JsonReader.
*<p>
* Note: DtmfDataConverter does not have to implement JsonSerializable, model is only used in deserialization
* context internally by {@link StreamingDataParser} and not serialized.
*</p>
* @param jsonReader The JsonReader being read.
* @return An instance of FileSource if the JsonReader was pointing to an instance of it, or
* null if it was pointing to JSON null.
* @throws IOException If an error occurs while reading the FileSource.
*/
public static DtmfDataConverter fromJson(JsonReader jsonReader) throws IOException {
return jsonReader.readObject(reader -> {
final DtmfDataConverter converter = new DtmfDataConverter();
while (reader.nextToken() != JsonToken.END_OBJECT) {
String fieldName = reader.getFieldName();
reader.nextToken();

if ("data".equals(fieldName)) {
converter.data = reader.getString();
} else if ("timestamp".equals(fieldName)) {
converter.timestamp = reader.getString();
} else if ("participantRawID".equals(fieldName)) {
converter.participantRawID = reader.getString();
} else {
reader.skipChildren();
}
}
return converter;
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,11 @@ public final class TranscriptionMetadataConverter {
*/
private String correlationId;

/*
* The custom speech recognition model endpoint id
*/
private String speechRecognitionModelEndpointId;

/**
* Get the transcriptionSubscriptionId property.
*
Expand Down Expand Up @@ -69,6 +74,15 @@ public String getCorrelationId() {
return correlationId;
}

/**
* Get the speechRecognitionModelEndpointId property.
*
* @return the speechRecognitionModelEndpointId value.
*/
public String getSpeechRecognitionModelEndpointId() {
return speechRecognitionModelEndpointId;
}

/**
* Reads an instance of TranscriptionMetadataConverter from the JsonReader.
*<p>
Expand All @@ -94,6 +108,8 @@ public static TranscriptionMetadataConverter fromJson(JsonReader jsonReader) thr
converter.callConnectionId = reader.getString();
} else if ("correlationId".equals(fieldName)) {
converter.correlationId = reader.getString();
} else if ("speechRecognitionModelEndpointId".equals(fieldName)) {
converter.speechRecognitionModelEndpointId = reader.getString();
} else {
reader.skipChildren();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

package com.azure.communication.callautomation.models;

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;

import com.azure.communication.callautomation.implementation.accesshelpers.DtmfDataContructorProxy;
import com.azure.communication.callautomation.implementation.converters.DtmfDataConverter;
import com.azure.communication.common.CommunicationIdentifier;

/** The dtmf data model. */
public final class DtmfData extends StreamingData {
/*
* The dtmf data.
*/
private final String data;

/*
* The timestamp indicating when the media content was received by the bot, or if the bot is sending media,
* the timestamp of when the media was sourced. The format is ISO 8601 (yyyy-mm-ddThh:mm)
*/
private final OffsetDateTime timestamp;

/*
* The raw ID of the participant.
*/
private final CommunicationIdentifier participant;

static {
DtmfDataContructorProxy.setAccessor(new DtmfDataContructorProxy.DtmfDataContructorProxyAccessor() {
@Override
public DtmfData create(DtmfDataConverter internalData) {
return new DtmfData(internalData);
}

@Override
public DtmfData create(String data) {
return new DtmfData(data);
}
});
}

/**
* Package-private constructor of the class, used internally.
*
* @param internalData The DtmfDataconvertor
*/
DtmfData(DtmfDataConverter internalData) {
this.data = internalData.getData();
this.timestamp = OffsetDateTime.parse(internalData.getTimestamp(), DateTimeFormatter.ISO_OFFSET_DATE_TIME);
if (internalData.getParticipantRawID() != null && !internalData.getParticipantRawID().isEmpty()) {
this.participant = CommunicationIdentifier.fromRawId(internalData.getParticipantRawID());
} else {
participant = null;
}
}

/**
* The constructor
*/
public DtmfData() {
this.data = null;
this.timestamp = null;
this.participant = null;
}

/**
* The constructor
*
* @param data The dtmf data.
*/
DtmfData(String data) {
this.data = data;
this.timestamp = null;
this.participant = null;
}

/**
* Get the data property.
*
* @return the data value.
*/
public String getData() {
return data;
}

/**
* Get the timestamp property.
*
* @return the timestamp value.
*/
public OffsetDateTime getTimestamp() {
return timestamp;
}

/**
* Get the participantRawID property.
*
* @return the participantRawID value.
*/
public CommunicationIdentifier getParticipant() {
return participant;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@

import com.azure.communication.callautomation.implementation.accesshelpers.AudioDataContructorProxy;
import com.azure.communication.callautomation.implementation.accesshelpers.AudioMetadataContructorProxy;
import com.azure.communication.callautomation.implementation.accesshelpers.DtmfDataContructorProxy;
import com.azure.communication.callautomation.implementation.accesshelpers.TranscriptionDataContructorProxy;
import com.azure.communication.callautomation.implementation.accesshelpers.TranscriptionMetadataContructorProxy;
import com.azure.communication.callautomation.implementation.converters.AudioDataConverter;
import com.azure.communication.callautomation.implementation.converters.AudioMetadataConverter;
import com.azure.communication.callautomation.implementation.converters.DtmfDataConverter;
import com.azure.communication.callautomation.implementation.converters.TranscriptionDataConverter;
import com.azure.communication.callautomation.implementation.converters.TranscriptionMetadataConverter;
import com.azure.json.JsonProviders;
Expand Down Expand Up @@ -96,6 +98,11 @@ private static StreamingData parseStreamingData(String data) {
audioMetadata.setStreamingDataKind(StreamingDataKind.AUDIO_METADATA);
return audioMetadata;

case "dtmfData":
DtmfData dtmfData = DtmfDataContructorProxy.create(DtmfDataConverter.fromJson(jsonReader));
dtmfData.setStreamingDataKind(StreamingDataKind.DTMF_DATA);
return dtmfData;

case "transcriptionData":
TranscriptionData transcriptionData = TranscriptionDataContructorProxy
.create(TranscriptionDataConverter.fromJson(jsonReader));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@

package com.azure.communication.callautomation.models;

import com.azure.core.util.ExpandableStringEnum;
import java.util.Collection;

import com.azure.core.util.ExpandableStringEnum;

/**
* Specifies the streaming data kind
*/
Expand All @@ -20,6 +21,11 @@ public final class StreamingDataKind extends ExpandableStringEnum<StreamingDataK
*/
public static final StreamingDataKind AUDIO_METADATA = fromString("audioMetadata");

/**
* Streamind Data kind "dtmfData"
*/
public static final StreamingDataKind DTMF_DATA = fromString("dtmfData");

/**
* Streamind Data kind "transcriptionData".
*/
Expand Down
Loading