diff --git a/CHANGELOG.md b/CHANGELOG.md index d22b84c9..12a6e183 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Change Log +## [5.5.0](https://github.com/plivo/plivo-java/tree/v5.5.0) (2021-11-25) +**Features - Voice: Multiparty calls** +- The [Add Multiparty Call API](https://www.plivo.com/docs/voice/api/multiparty-call/participants#add-a-participant) allows for greater functionality by accepting options like `start recording audio`, `stop recording audio`, and their HTTP methods. +- [Multiparty Calls](https://www.plivo.com/docs/voice/api/multiparty-call/) now has new APIs to `stop` and `play` audio. + ## [5.4.1](https://github.com/plivo/plivo-java/tree/v5.4.1) (2021-11-05) **Bug Fix** - [Update Powerpack API](https://www.plivo.com/docs/sms/api/powerpack#update-a-powerpack) response to retrun `number_pool` parameter. diff --git a/README.md b/README.md index 179967ea..9e414a37 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ If you are using Maven, use the following XML to include the Plivo SDK as a depe com.plivo plivo-java - 5.4.1 + 5.5.0 ``` @@ -89,7 +89,7 @@ class Example { ## The Basics The SDK uses consistent interfaces to create, retrieve, update, delete and list resources. The pattern followed is as follows: -```java +``` java Resource.creator(parameters).create(); Resource.getter(parameters).get(); Resource.updater(identifier, parameters).update(); diff --git a/pom.properties b/pom.properties index c76d4c33..e21714f2 100644 --- a/pom.properties +++ b/pom.properties @@ -1,5 +1,5 @@ # Written manually. -version=5.4.1 +version=5.5.0 groupId=com.plivo artifactId=plivo-java diff --git a/src/main/java/com/plivo/api/PlivoAPIService.java b/src/main/java/com/plivo/api/PlivoAPIService.java index 1dab8df0..6922bc9a 100644 --- a/src/main/java/com/plivo/api/PlivoAPIService.java +++ b/src/main/java/com/plivo/api/PlivoAPIService.java @@ -41,591 +41,597 @@ public interface PlivoAPIService { - // Address - @POST("Account/{authId}/Verification/Address/") - Call addressCreate(@Path("authId") String authId, - @Body AddressCreator addressCreator); + // Address + @POST("Account/{authId}/Verification/Address/") + Call addressCreate(@Path("authId") String authId, + @Body AddressCreator addressCreator); - @GET("Account/{authId}/Verification/Address/") - Call> addressList(@Path("authId") String authId, - @QueryMap Map addressListRequest); + @GET("Account/{authId}/Verification/Address/") + Call> addressList(@Path("authId") String authId, + @QueryMap Map addressListRequest); - @GET("Account/{authId}/Verification/Address/{addressId}/") - Call
addressGet(@Path("authId") String authId, @Path("addressId") String addressId); + @GET("Account/{authId}/Verification/Address/{addressId}/") + Call
addressGet(@Path("authId") String authId, @Path("addressId") String addressId); - @POST("Account/{authId}/Verification/Address/{addressId}/") - Call addressUpdate(@Path("authId") String authId, - @Path("addressId") String addressId, @Body AddressUpdater addressUpdater); + @POST("Account/{authId}/Verification/Address/{addressId}/") + Call addressUpdate(@Path("authId") String authId, + @Path("addressId") String addressId, @Body AddressUpdater addressUpdater); - @DELETE("Account/{authId}/Verification/Address/{addressId}/") - Call addressDelete(@Path("authId") String authId, @Path("addressId") String addressId); + @DELETE("Account/{authId}/Verification/Address/{addressId}/") + Call addressDelete(@Path("authId") String authId, @Path("addressId") String addressId); - // Application - @POST("Account/{authId}/Application/") - Call applicationCreate(@Path("authId") String authId, - @Body ApplicationCreator application); + // Application + @POST("Account/{authId}/Application/") + Call applicationCreate(@Path("authId") String authId, + @Body ApplicationCreator application); - @GET("Account/{authId}/Application/") - Call> applicationList(@Path("authId") String authId, - @QueryMap Map applicationListRequest); + @GET("Account/{authId}/Application/") + Call> applicationList(@Path("authId") String authId, + @QueryMap Map applicationListRequest); - @GET("Account/{authId}/Application/{appId}/") - Call applicationGet(@Path("authId") String authId, @Path("appId") String appId); + @GET("Account/{authId}/Application/{appId}/") + Call applicationGet(@Path("authId") String authId, @Path("appId") String appId); - @POST("Account/{authId}/Application/{appId}/") - Call applicationUpdate(@Path("authId") String authId, - @Path("appId") String appId, @Body ApplicationUpdater application); + @POST("Account/{authId}/Application/{appId}/") + Call applicationUpdate(@Path("authId") String authId, + @Path("appId") String appId, @Body ApplicationUpdater application); - @HTTP(method = "DELETE", path = "Account/{authId}/Application/{appId}/", hasBody = true) - Call applicationDelete(@Path("authId") String authId, @Path("appId") String appId, @Body ApplicationDeleter application); + @HTTP(method = "DELETE", path = "Account/{authId}/Application/{appId}/", hasBody = true) + Call applicationDelete(@Path("authId") String authId, @Path("appId") String appId, @Body ApplicationDeleter application); - // Account - @GET("Account/{authId}/") - Call accountGet(@Path("authId") String authId); + // Account + @GET("Account/{authId}/") + Call accountGet(@Path("authId") String authId); - @POST("Account/{authId}/") - Call accountModify(@Path("authId") String authId, - @Body AccountUpdater accountUpdater); + @POST("Account/{authId}/") + Call accountModify(@Path("authId") String authId, + @Body AccountUpdater accountUpdater); - @POST("Account/{authId}/Subaccount/") - Call subaccountCreate(@Path("authId") String authId, - @Body SubaccountCreator subaccountCreator); + @POST("Account/{authId}/Subaccount/") + Call subaccountCreate(@Path("authId") String authId, + @Body SubaccountCreator subaccountCreator); - @POST("Account/{authId}/Subaccount/{subauthId}/") - Call subaccountModify(@Path("authId") String authId, - @Path("subauthId") String subauthId, @Body SubaccountUpdater subaccount); + @POST("Account/{authId}/Subaccount/{subauthId}/") + Call subaccountModify(@Path("authId") String authId, + @Path("subauthId") String subauthId, @Body SubaccountUpdater subaccount); - @GET("Account/{authId}/Subaccount/{subauthId}/") - Call subaccountGet(@Path("authId") String authId, - @Path("subauthId") String subauthId); + @GET("Account/{authId}/Subaccount/{subauthId}/") + Call subaccountGet(@Path("authId") String authId, + @Path("subauthId") String subauthId); - @GET("Account/{authId}/Subaccount/") - Call> subaccountList(@Path("authId") String authId, - @Query("limit") Integer limit, @Query("offset") Integer offset); + @GET("Account/{authId}/Subaccount/") + Call> subaccountList(@Path("authId") String authId, + @Query("limit") Integer limit, @Query("offset") Integer offset); - @HTTP(method = "DELETE", path = "Account/{authId}/Subaccount/{subauthId}/", hasBody = true) - Call subaccountDelete(@Path("authId") String authId, - @Path("subauthId") String subauthId, @Body SubaccountDeleter subaccount); + @HTTP(method = "DELETE", path = "Account/{authId}/Subaccount/{subauthId}/", hasBody = true) + Call subaccountDelete(@Path("authId") String authId, + @Path("subauthId") String subauthId, @Body SubaccountDeleter subaccount); - // Call - @POST("Account/{authId}/Call/") - Call callCreate(@Path("authId") String authId, - @Body CallCreator callCreator); + // Call + @POST("Account/{authId}/Call/") + Call callCreate(@Path("authId") String authId, + @Body CallCreator callCreator); - @GET("Account/{authId}/Call/") - Call> callList(@Path("authId") String authId, - @QueryMap Map callListRequest); + @GET("Account/{authId}/Call/") + Call> callList(@Path("authId") String authId, + @QueryMap Map callListRequest); - @GET("Account/{authId}/Call/{callId}/") - Call callGet(@Path("authId") String authId, - @Path("callId") String callId); + @GET("Account/{authId}/Call/{callId}/") + Call callGet(@Path("authId") String authId, + @Path("callId") String callId); - @POST("Account/{authId}/Call/{callId}/") - Call callUpdate(@Path("authId") String authId, - @Path("callId") String callId, @Body CallUpdater callUpdater); + @POST("Account/{authId}/Call/{callId}/") + Call callUpdate(@Path("authId") String authId, + @Path("callId") String callId, @Body CallUpdater callUpdater); - @DELETE("Account/{authId}/Call/{callId}/") - Call callDelete(@Path("authId") String authId, @Path("callId") String callId); + @DELETE("Account/{authId}/Call/{callId}/") + Call callDelete(@Path("authId") String authId, @Path("callId") String callId); - @GET("Account/{authId}/Call/?status=live") - Call liveCallListGet(@Path("authId") String authId, @QueryMap Map callListRequest); + @GET("Account/{authId}/Call/?status=live") + Call liveCallListGet(@Path("authId") String authId, @QueryMap Map callListRequest); - @GET("Account/{authId}/Call/{callId}/?status=live") - Call liveCallGet(@Path("authId") String authId, @Path("callId") String callId); + @GET("Account/{authId}/Call/{callId}/?status=live") + Call liveCallGet(@Path("authId") String authId, @Path("callId") String callId); - @GET("Account/{authId}/Call/?status=queued") - Call queuedCallListGet(@Path("authId") String authId); + @GET("Account/{authId}/Call/?status=queued") + Call queuedCallListGet(@Path("authId") String authId); - @GET("Account/{authId}/Call/{callId}/?status=queued") - Call queuedCallGet(@Path("authId") String authId, @Path("callId") String callId); + @GET("Account/{authId}/Call/{callId}/?status=queued") + Call queuedCallGet(@Path("authId") String authId, @Path("callId") String callId); - @POST("Account/{authId}/Call/{callId}/Record/") - Call callRecordCreate(@Path("authId") String authId, - @Path("callId") String callId, @Body - CallRecordCreator callRecordCreator); + @POST("Account/{authId}/Call/{callId}/Record/") + Call callRecordCreate(@Path("authId") String authId, + @Path("callId") String callId, @Body + CallRecordCreator callRecordCreator); + + @DELETE("Account/{authId}/Call/{callId}/Record/") + Call callRecordDelete(@Path("authId") String authId, @Path("callId") String callId); + + @POST("Account/{authId}/Call/{callId}/Play/") + Call callPlayCreate(@Path("authId") String authId, + @Path("callId") String callId, @Body + CallPlayCreator callPlayCreator); - @DELETE("Account/{authId}/Call/{callId}/Record/") - Call callRecordDelete(@Path("authId") String authId, @Path("callId") String callId); + @DELETE("Account/{authId}/Call/{callId}/Play/") + Call callPlayDelete(@Path("authId") String authId, @Path("callId") String callId); - @POST("Account/{authId}/Call/{callId}/Play/") - Call callPlayCreate(@Path("authId") String authId, + @POST("Account/{authId}/Call/{callId}/Speak/") + Call callSpeakCreate(@Path("authId") String authId, @Path("callId") String callId, @Body - CallPlayCreator callPlayCreator); + CallSpeakCreator callSpeakCreator); - @DELETE("Account/{authId}/Call/{callId}/Play/") - Call callPlayDelete(@Path("authId") String authId, @Path("callId") String callId); + @DELETE("Account/{authId}/Call/{callId}/Speak/") + Call callSpeakDelete(@Path("authId") String authId, @Path("callId") String callId); - @POST("Account/{authId}/Call/{callId}/Speak/") - Call callSpeakCreate(@Path("authId") String authId, - @Path("callId") String callId, @Body - CallSpeakCreator callSpeakCreator); + @POST("Account/{authId}/Call/{callId}/DTMF/") + Call callDtmfCreate(@Path("authId") String authId, + @Path("callId") String callId, @Body + CallDtmfCreator callDtmfCreator); - @DELETE("Account/{authId}/Call/{callId}/Speak/") - Call callSpeakDelete(@Path("authId") String authId, @Path("callId") String callId); + // Identity + @POST("Account/{authId}/Verification/Identity/") + Call identityCreate(@Path("authId") String authId, + @Body IdentityCreator identitycreator); - @POST("Account/{authId}/Call/{callId}/DTMF/") - Call callDtmfCreate(@Path("authId") String authId, - @Path("callId") String callId, @Body - CallDtmfCreator callDtmfCreator); + @GET("Account/{authId}/Verification/Identity/") + Call> identityList(@Path("authId") String authId, + @QueryMap Map identityListRequest); - // Identity - @POST("Account/{authId}/Verification/Identity/") - Call identityCreate(@Path("authId") String authId, - @Body IdentityCreator identitycreator); + @GET("Account/{authId}/Verification/Identity/{id}/") + Call identityGet(@Path("authId") String authId, @Path("id") String id); - @GET("Account/{authId}/Verification/Identity/") - Call> identityList(@Path("authId") String authId, - @QueryMap Map identityListRequest); + @DELETE("Account/{authId}/Verification/Identity/{id}/") + Call identityDelete(@Path("authId") String authId, @Path("id") String number); - @GET("Account/{authId}/Verification/Identity/{id}/") - Call identityGet(@Path("authId") String authId, @Path("id") String id); + @POST("Account/{authId}/Verification/Identity/{id}/") + Call identityUpdate(@Path("authId") String authId, @Path("id") String identityId, @Body IdentityUpdater identityUpdater); - @DELETE("Account/{authId}/Verification/Identity/{id}/") - Call identityDelete(@Path("authId") String authId, @Path("id") String number); + // Message + @POST("Account/{authId}/Message/") + Call messageSend(@Path("authId") String authId, + @Body MessageCreator messageCreator); - @POST("Account/{authId}/Verification/Identity/{id}/") - Call identityUpdate(@Path("authId") String authId, @Path("id") String identityId, @Body IdentityUpdater identityUpdater); + @GET("Account/{authId}/Message/") + Call> messageList(@Path("authId") String authId, + @QueryMap Map messageListRequest); - // Message - @POST("Account/{authId}/Message/") - Call messageSend(@Path("authId") String authId, - @Body MessageCreator messageCreator); + @GET("Account/{authId}/Message/{id}/") + Call messageGet(@Path("authId") String authId, @Path("id") String id); - @GET("Account/{authId}/Message/") - Call> messageList(@Path("authId") String authId, - @QueryMap Map messageListRequest); + @GET("Account/{authId}/Message/{id}/Media/") + Call> mmsMediaList(@Path("authId") String authId, @Path("id") String id); - @GET("Account/{authId}/Message/{id}/") - Call messageGet(@Path("authId") String authId, @Path("id") String id); + @GET("Account/{authId}/Message/{id}/Media/{media_id}/") + Call mmsMediaGet(@Path("authId") String authId, @Path("id") String id, @Path("media_id") String media_id); - @GET("Account/{authId}/Message/{id}/Media/") - Call> mmsMediaList(@Path("authId") String authId, @Path("id") String id); + @DELETE("Account/{authId}/Message/{id}/Media/") + Call mmsMediaDelete(@Path("authId") String authId, @Path("id") String id); - @GET("Account/{authId}/Message/{id}/Media/{media_id}/") - Call mmsMediaGet(@Path("authId") String authId, @Path("id") String id, @Path("media_id") String media_id); + // Number - @DELETE("Account/{authId}/Message/{id}/Media/") - Call mmsMediaDelete(@Path("authId") String authId, @Path("id") String id); + @GET("Account/{authId}/Number/") + Call> numberList(@Path("authId") String authId, + @QueryMap Map params); - // Number + @GET("Account/{authId}/Number/{number}/") + Call numberGet(@Path("authId") String authId, @Path("number") String number); - @GET("Account/{authId}/Number/") - Call> numberList(@Path("authId") String authId, - @QueryMap Map params); + @POST("Account/{authId}/Number/") + Call numberCreate(@Path("authId") String authId, + @Body NumberCreator numberCreator); - @GET("Account/{authId}/Number/{number}/") - Call numberGet(@Path("authId") String authId, @Path("number") String number); + @POST("Account/{authId}/Number/{number}/") + Call numberUpdate(@Path("authId") String authId, + @Path("number") String number, @Body NumberUpdater numberUpdater); - @POST("Account/{authId}/Number/") - Call numberCreate(@Path("authId") String authId, - @Body NumberCreator numberCreator); + @DELETE("Account/{authId}/Number/{number}/") + Call numberDelete(@Path("authId") String authId, @Path("number") String number); - @POST("Account/{authId}/Number/{number}/") - Call numberUpdate(@Path("authId") String authId, - @Path("number") String number, @Body NumberUpdater numberUpdater); + @GET("Account/{authId}/PhoneNumber/") + Call> phoneNumberList(@Path("authId") String authId, @QueryMap Map params); - @DELETE("Account/{authId}/Number/{number}/") - Call numberDelete(@Path("authId") String authId, @Path("number") String number); + @POST("Account/{authId}/PhoneNumber/{number}/") + Call phoneNumberCreate(@Path("authId") String authId, + @Path("number") String number, @Body + PhoneNumberCreator creator); - @GET("Account/{authId}/PhoneNumber/") - Call> phoneNumberList(@Path("authId") String authId, @QueryMap Map params); + // Recording - @POST("Account/{authId}/PhoneNumber/{number}/") - Call phoneNumberCreate(@Path("authId") String authId, - @Path("number") String number, @Body - PhoneNumberCreator creator); + @GET("Account/{authId}/Recording/") + Call> recordingList(@Path("authId") String authId, + @QueryMap Map params); - // Recording + @GET("Account/{authId}/Recording/{recordingId}/") + Call recordingGet(@Path("authId") String authId, + @Path("recordingId") String recordingId); - @GET("Account/{authId}/Recording/") - Call> recordingList(@Path("authId") String authId, - @QueryMap Map params); + @DELETE("Account/{authId}/Recording/{recordingId}/") + Call recordingDelete(@Path("authId") String authId, + @Path("recordingId") String recordingId); - @GET("Account/{authId}/Recording/{recordingId}/") - Call recordingGet(@Path("authId") String authId, - @Path("recordingId") String recordingId); + // Endpoint - @DELETE("Account/{authId}/Recording/{recordingId}/") - Call recordingDelete(@Path("authId") String authId, - @Path("recordingId") String recordingId); + @POST("Account/{authId}/Endpoint/") + Call endpointCreate(@Path("authId") String authId, + @Body EndpointCreator endpointCreator); - // Endpoint + @GET("Account/{authId}/Endpoint/") + Call> endpointList(@Path("authId") String authId, + @QueryMap Map params); - @POST("Account/{authId}/Endpoint/") - Call endpointCreate(@Path("authId") String authId, - @Body EndpointCreator endpointCreator); + @GET("Account/{authId}/Endpoint/{endpointId}/") + Call endpointGet(@Path("authId") String authId, @Path("endpointId") String endpointId); - @GET("Account/{authId}/Endpoint/") - Call> endpointList(@Path("authId") String authId, - @QueryMap Map params); + @POST("Account/{authId}/Endpoint/{endpointId}/") + Call endpointUpdate(@Path("authId") String authId, + @Path("endpointId") String endpointId, @Body + EndpointUpdater endpointUpdater); - @GET("Account/{authId}/Endpoint/{endpointId}/") - Call endpointGet(@Path("authId") String authId, @Path("endpointId") String endpointId); + @DELETE("Account/{authId}/Endpoint/{endpointId}/") + Call endpointDelete(@Path("authId") String authId, + @Path("endpointId") String endpointId); - @POST("Account/{authId}/Endpoint/{endpointId}/") - Call endpointUpdate(@Path("authId") String authId, - @Path("endpointId") String endpointId, @Body - EndpointUpdater endpointUpdater); + // Conference - @DELETE("Account/{authId}/Endpoint/{endpointId}/") - Call endpointDelete(@Path("authId") String authId, - @Path("endpointId") String endpointId); + @GET("Account/{authId}/Conference/") + Call conferenceListGet(@Path("authId") String authId); - // Conference + @GET("Account/{authId}/Conference/{conferenceName}/") + Call conferenceGet(@Path("authId") String authId, + @Path("conferenceName") String conferenceName); - @GET("Account/{authId}/Conference/") - Call conferenceListGet(@Path("authId") String authId); + @DELETE("Account/{authId}/Conference/") + Call conferenceDeleteAll(@Path("authId") String authId); - @GET("Account/{authId}/Conference/{conferenceName}/") - Call conferenceGet(@Path("authId") String authId, - @Path("conferenceName") String conferenceName); + @DELETE("Account/{authId}/Conference/{conferenceName}/") + Call conferenceDelete(@Path("authId") String authId, + @Path("conferenceName") String conferenceName); - @DELETE("Account/{authId}/Conference/") - Call conferenceDeleteAll(@Path("authId") String authId); + @DELETE("Account/{authId}/Conference/{conferenceName}/Member/{memberId}/") + Call conferenceMemberDelete(@Path("authId") String authId, + @Path("conferenceName") String conferenceName, @Path("memberId") String memberId); - @DELETE("Account/{authId}/Conference/{conferenceName}/") - Call conferenceDelete(@Path("authId") String authId, - @Path("conferenceName") String conferenceName); + // Required as there is no body + @Headers("Content-Type: application/json") + @POST("Account/{authId}/Conference/{conferenceName}/Member/{memberId}/Kick/") + Call conferenceMemberKickCreate(@Path("authId") String authId, + @Path("conferenceName") String conferenceName, @Path("memberId") String memberId); - @DELETE("Account/{authId}/Conference/{conferenceName}/Member/{memberId}/") - Call conferenceMemberDelete(@Path("authId") String authId, - @Path("conferenceName") String conferenceName, @Path("memberId") String memberId); + // Required as there is no body + @Headers("Content-Type: application/json") + @POST("Account/{authId}/Conference/{conferenceName}/Member/{memberId}/Mute/") + Call conferenceMemberMuteCreate(@Path("authId") String authId, + @Path("conferenceName") String conferenceName, @Path("memberId") String memberId); - // Required as there is no body - @Headers("Content-Type: application/json") - @POST("Account/{authId}/Conference/{conferenceName}/Member/{memberId}/Kick/") - Call conferenceMemberKickCreate(@Path("authId") String authId, - @Path("conferenceName") String conferenceName, @Path("memberId") String memberId); + @DELETE("Account/{authId}/Conference/{conferenceName}/Member/{memberId}/Mute/") + Call conferenceMemberMuteDelete(@Path("authId") String authId, + @Path("conferenceName") String conferenceName, @Path("memberId") String memberId); - // Required as there is no body - @Headers("Content-Type: application/json") - @POST("Account/{authId}/Conference/{conferenceName}/Member/{memberId}/Mute/") - Call conferenceMemberMuteCreate(@Path("authId") String authId, - @Path("conferenceName") String conferenceName, @Path("memberId") String memberId); + @POST("Account/{authId}/Conference/{conferenceName}/Member/{memberId}/Play/") + Call conferenceMemberPlayCreate(@Path("authId") String authId, + @Path("conferenceName") String conferenceName, @Path("memberId") String memberId, + @Body ConferenceMemberPlayCreator conferenceMemberPlayCreator); - @DELETE("Account/{authId}/Conference/{conferenceName}/Member/{memberId}/Mute/") - Call conferenceMemberMuteDelete(@Path("authId") String authId, - @Path("conferenceName") String conferenceName, @Path("memberId") String memberId); + @DELETE("Account/{authId}/Conference/{conferenceName}/Member/{memberId}/Play/") + Call conferenceMemberPlayDelete(@Path("authId") String authId, + @Path("conferenceName") String conferenceName, @Path("memberId") String memberId); - @POST("Account/{authId}/Conference/{conferenceName}/Member/{memberId}/Play/") - Call conferenceMemberPlayCreate(@Path("authId") String authId, - @Path("conferenceName") String conferenceName, @Path("memberId") String memberId, - @Body ConferenceMemberPlayCreator conferenceMemberPlayCreator); + @POST("Account/{authId}/Conference/{conferenceName}/Member/{memberId}/Speak/") + Call conferenceMemberSpeakCreate(@Path("authId") String authId, + @Path("conferenceName") String conferenceName, @Path("memberId") String memberId, + @Body ConferenceMemberSpeakCreator conferenceMemberSpeakCreator); - @DELETE("Account/{authId}/Conference/{conferenceName}/Member/{memberId}/Play/") - Call conferenceMemberPlayDelete(@Path("authId") String authId, - @Path("conferenceName") String conferenceName, @Path("memberId") String memberId); + @DELETE("Account/{authId}/Conference/{conferenceName}/Member/{memberId}/Speak/") + Call conferenceMemberSpeakDelete(@Path("authId") String authId, + @Path("conferenceName") String conferenceName, @Path("memberId") String memberId); - @POST("Account/{authId}/Conference/{conferenceName}/Member/{memberId}/Speak/") - Call conferenceMemberSpeakCreate(@Path("authId") String authId, - @Path("conferenceName") String conferenceName, @Path("memberId") String memberId, - @Body ConferenceMemberSpeakCreator conferenceMemberSpeakCreator); + // Required as there is no body + @Headers("Content-Type: application/json") + @POST("Account/{authId}/Conference/{conferenceName}/Member/{memberId}/Deaf/") + Call conferenceMemberDeafCreate(@Path("authId") String authId, + @Path("conferenceName") String conferenceName, @Path("memberId") String memberId); - @DELETE("Account/{authId}/Conference/{conferenceName}/Member/{memberId}/Speak/") - Call conferenceMemberSpeakDelete(@Path("authId") String authId, - @Path("conferenceName") String conferenceName, @Path("memberId") String memberId); + @DELETE("Account/{authId}/Conference/{conferenceName}/Member/{memberId}/Deaf/") + Call conferenceMemberDeafDelete(@Path("authId") String authId, + @Path("conferenceName") String conferenceName, @Path("memberId") String memberId); - // Required as there is no body - @Headers("Content-Type: application/json") - @POST("Account/{authId}/Conference/{conferenceName}/Member/{memberId}/Deaf/") - Call conferenceMemberDeafCreate(@Path("authId") String authId, - @Path("conferenceName") String conferenceName, @Path("memberId") String memberId); + // Required as there is no body + @Headers("Content-Type: application/json") + @POST("Account/{authId}/Conference/{conferenceName}/Record/") + Call conferenceRecordCreate(@Path("authId") String authId, + @Path("conferenceName") String conferenceName); - @DELETE("Account/{authId}/Conference/{conferenceName}/Member/{memberId}/Deaf/") - Call conferenceMemberDeafDelete(@Path("authId") String authId, - @Path("conferenceName") String conferenceName, @Path("memberId") String memberId); + @DELETE("Account/{authId}/Conference/{conferenceName}/Record/") + Call conferenceRecordDelete(@Path("authId") String authId, + @Path("conferenceName") String conferenceName); - // Required as there is no body - @Headers("Content-Type: application/json") - @POST("Account/{authId}/Conference/{conferenceName}/Record/") - Call conferenceRecordCreate(@Path("authId") String authId, - @Path("conferenceName") String conferenceName); + // Pricing + + @GET("Account/{authId}/Pricing/") + Call pricingGet(@Path("authId") String authId, @Query("country_iso") String countryIso); + + @DELETE("Account/{authId}/Request/{requestUuid}/") + Call requestDelete(@Path("authId") String authId, @Path("requestUuid") String requestUuid); + + // PHLO - server is different from plivo server. Need content-type setting for POST + @GET("phlo/{phloId}") + Call phloGet(@Path("phloId") String phloId); + + @GET("phlo/{phloId}/runs/{runId}") + Call phloRunGet(@Path("phloId") String phloId, @Path("runId") String runId); + + @Headers("Content-Type: application/json") + @POST("phlo/{phloId}/{nodeType}/{nodeId}") + Call nodeAction(@Path("phloId") String phloId, + @Path("nodeType") NodeType nodeType, + @Path("nodeId") String nodeId, + @Body MultiPartyCallUpdatePayload payload); + + @Headers("Content-Type: application/json") + @POST("phlo/{phloId}/{nodeType}/{nodeId}/members/{memberId}") + Call memberAction(@Path("phloId") String phloId, + @Path("nodeType") NodeType nodeType, + @Path("nodeId") String nodeId, + @Path("memberId") String memberId, + @Body MultiPartyCallUpdatePayload payload); - @DELETE("Account/{authId}/Conference/{conferenceName}/Record/") - Call conferenceRecordDelete(@Path("authId") String authId, - @Path("conferenceName") String conferenceName); + @GET("phlo/{phloId}/{nodeType}/{nodeId}") + Call multiPartyCallGet(@Path("phloId") String phloId, + @Path("nodeType") NodeType nodeType, + @Path("nodeId") final String nodeId); - // Pricing + @Headers("Content-Type: application/json") + @POST("account/{authId}/phlo/{phloId}") + Call runPhlo(@Path("authId") String authId, + @Path("phloId") String phloId, + @Body Map payload); - @GET("Account/{authId}/Pricing/") - Call pricingGet(@Path("authId") String authId, @Query("country_iso") String countryIso); + //Powerpack + @POST("Account/{authId}/Powerpack/") + Call createPowerpack(@Path("authId") String authId, @Body PowerpackCreator powerpackCreator); - @DELETE("Account/{authId}/Request/{requestUuid}/") - Call requestDelete(@Path("authId") String authId, @Path("requestUuid") String requestUuid); + @GET("Account/{authId}/Powerpack/{uuid}/") + Call powerpackGet(@Path("authId") String authId, @Path("uuid") String uuid); - // PHLO - server is different from plivo server. Need content-type setting for POST - @GET("phlo/{phloId}") - Call phloGet(@Path("phloId") String phloId); + @GET("Account/{authId}/Powerpack/") + Call> powerpackList(@Path("authId") String authId, + @QueryMap Map powerpackListRequest); - @GET("phlo/{phloId}/runs/{runId}") - Call phloRunGet(@Path("phloId") String phloId, @Path("runId") String runId); - - @Headers("Content-Type: application/json") - @POST("phlo/{phloId}/{nodeType}/{nodeId}") - Call nodeAction(@Path("phloId") String phloId, - @Path("nodeType") NodeType nodeType, - @Path("nodeId") String nodeId, - @Body MultiPartyCallUpdatePayload payload); + // + @POST("Account/{authId}/Powerpack/{uuid}/") + Call powerpackUpdate(@Path("authId") String authId, + @Path("uuid") String uuid, @Body PowerpackUpdater powerpackUpdater); + + // + @HTTP(method = "DELETE", path = "Account/{authId}/Powerpack/{id}/", hasBody = true) + Call powerpackDeleter(@Path("authId") String authId, @Path("id") String id, @Body PowerpackDeleter powerpackDelete); + + @GET("Account/{authId}/NumberPool/{uuid}/Number/") + Call> powerpackNumberList(@Path("authId") String authId, @Path("uuid") String uuid, + @QueryMap Map powerpackNumberListRequest); + + @GET("Account/{authId}/NumberPool/{uuid}/Shortcode/") + Call> powerpackShortcodeList(@Path("authId") String authId, @Path("uuid") String uuid, + @QueryMap Map powerpackShortcodeListRequest); + + // + @GET("Account/{authId}/NumberPool/{uuid}/Tollfree/") + Call> powerpackTollfreeList(@Path("authId") String authId, @Path("uuid") String uuid, + @QueryMap Map powerpackTollfreeListRequest); - @Headers("Content-Type: application/json") - @POST("phlo/{phloId}/{nodeType}/{nodeId}/members/{memberId}") - Call memberAction(@Path("phloId") String phloId, - @Path("nodeType") NodeType nodeType, - @Path("nodeId") String nodeId, - @Path("memberId") String memberId, - @Body MultiPartyCallUpdatePayload payload); + @GET("Account/{authId}/NumberPool/{uuid}/Number/{number}/") + Call powerpackFindNumberGet(@Path("authId") String authId, @Path("uuid") String uuid, @Path("number") String number); - @GET("phlo/{phloId}/{nodeType}/{nodeId}") - Call multiPartyCallGet(@Path("phloId") String phloId, - @Path("nodeType") NodeType nodeType, - @Path("nodeId") final String nodeId); + @GET("Account/{authId}/NumberPool/{uuid}/Shortcode/{shortcode}/") + Call powerpackFindShortcodeGet(@Path("authId") String authId, @Path("uuid") String uuid, @Path("shortcode") String shortcode); - @Headers("Content-Type: application/json") - @POST("account/{authId}/phlo/{phloId}") - Call runPhlo(@Path("authId") String authId, - @Path("phloId") String phloId, - @Body Map payload); + @GET("Account/{authId}/NumberPool/{uuid}/Tollfree/{tollfree}/") + Call powerpackFindTollfreeGet(@Path("authId") String authId, @Path("uuid") String uuid, @Path("tollfree") String tollfree); - //Powerpack - @POST("Account/{authId}/Powerpack/") - Call createPowerpack(@Path("authId") String authId, @Body PowerpackCreator powerpackCreator); + @POST("Account/{authId}/NumberPool/{uuid}/Number/{number}/") + Call powerpackAddNumberCreate(@Path("authId") String authId, @Path("uuid") String uuid, @Path("number") String number, @Body PowerpackAddNumber addnumber); - @GET("Account/{authId}/Powerpack/{uuid}/") - Call powerpackGet(@Path("authId") String authId, @Path("uuid") String uuid); + @POST("Account/{authId}/NumberPool/{uuid}/Tollfree/{tollfree}/") + Call powerpackAddTollfreeCreate(@Path("authId") String authId, @Path("uuid") String uuid, @Path("tollfree") String tollfree, @Body PowerpackAddTollfree addtollfree); - @GET("Account/{authId}/Powerpack/") - Call> powerpackList(@Path("authId") String authId, - @QueryMap Map powerpackListRequest); + @HTTP(method = "DELETE", path = "Account/{authId}/NumberPool/{uuid}/Number/{number}/", hasBody = true) + Call powerpackNumberDelete(@Path("authId") String authId, @Path("uuid") String uuid, @Path("number") String number, @Body RemoveNumber numberDeleter); - // - @POST("Account/{authId}/Powerpack/{uuid}/") - Call powerpackUpdate(@Path("authId") String authId, - @Path("uuid") String uuid, @Body PowerpackUpdater powerpackUpdater); + @HTTP(method = "DELETE", path = "Account/{authId}/NumberPool/{uuid}/Tollfree/{tollfree}/", hasBody = true) + Call powerpackTollfreeDelete(@Path("authId") String authId, @Path("uuid") String uuid, @Path("tollfree") String tollfree, @Body RemoveTollfree tollfreeDeleter); - // - @HTTP(method = "DELETE", path = "Account/{authId}/Powerpack/{id}/", hasBody = true) - Call powerpackDeleter(@Path("authId") String authId, @Path("id") String id, @Body PowerpackDeleter powerpackDelete); + @HTTP(method = "DELETE", path = "Account/{authId}/NumberPool/{uuid}/Shortcode/{shortcode}/", hasBody = true) + Call powerpackShortcodeDelete(@Path("authId") String authId, @Path("uuid") String uuid, @Path("shortcode") String shortcode, @Body RemoveShortcode shortcodeDeleter); - @GET("Account/{authId}/NumberPool/{uuid}/Number/") - Call> powerpackNumberList(@Path("authId") String authId, @Path("uuid") String uuid, - @QueryMap Map powerpackNumberListRequest); + @POST("Account/{authId}/NumberPool/{uuid}/Number/{number}/") + Call powerpackBuyAddNumberCreate(@Path("authId") String authId, @Path("uuid") String uuid, @Path("number") String number, @Body BuyAddNumbers numbers); - @GET("Account/{authId}/NumberPool/{uuid}/Shortcode/") - Call> powerpackShortcodeList(@Path("authId") String authId, @Path("uuid") String uuid, - @QueryMap Map powerpackShortcodeListRequest); + @GET("Account/{authId}/Media/") + Call> mediaList(@Path("authId") String authId, @QueryMap Map mediaListRequest); - // - @GET("Account/{authId}/NumberPool/{uuid}/Tollfree/") - Call> powerpackTollfreeList(@Path("authId") String authId, @Path("uuid") String uuid, - @QueryMap Map powerpackTollfreeListRequest); + @GET("Account/{authId}/Media/{id}/") + Call mediaGet(@Path("authId") String authId, @Path("id") String id); - @GET("Account/{authId}/NumberPool/{uuid}/Number/{number}/") - Call powerpackFindNumberGet(@Path("authId") String authId, @Path("uuid") String uuid, @Path("number") String number); + @POST("Account/{authId}/Media/") + Call uploadMedia(@Path("authId") String authId, @Body RequestBody mediaUploads); - @GET("Account/{authId}/NumberPool/{uuid}/Shortcode/{shortcode}/") - Call powerpackFindShortcodeGet(@Path("authId") String authId, @Path("uuid") String uuid, @Path("shortcode") String shortcode); - @GET("Account/{authId}/NumberPool/{uuid}/Tollfree/{tollfree}/") - Call powerpackFindTollfreeGet(@Path("authId") String authId, @Path("uuid") String uuid, @Path("tollfree") String tollfree); + // Enduser + // Get + @GET("Account/{authId}/EndUser/{id}/") + Call endUserGet(@Path("authId") String authId, @Path("id") String id); - @POST("Account/{authId}/NumberPool/{uuid}/Number/{number}/") - Call powerpackAddNumberCreate(@Path("authId") String authId, @Path("uuid") String uuid, @Path("number") String number, @Body PowerpackAddNumber addnumber); + // Create + @POST("Account/{authId}/EndUser/") + Call endUserCreate(@Path("authId") String authId, + @Body EndUserCreator endUserCreator); - @POST("Account/{authId}/NumberPool/{uuid}/Tollfree/{tollfree}/") - Call powerpackAddTollfreeCreate(@Path("authId") String authId, @Path("uuid") String uuid, @Path("tollfree") String tollfree, @Body PowerpackAddTollfree addtollfree); + // Update + @POST("Account/{authId}/EndUser/{id}/") + Call endUserUpdate(@Path("authId") String authId, @Path("id") String id, + @Body EndUserUpdater endUserUpdater); - @HTTP(method = "DELETE", path = "Account/{authId}/NumberPool/{uuid}/Number/{number}/", hasBody = true) - Call powerpackNumberDelete(@Path("authId") String authId, @Path("uuid") String uuid, @Path("number") String number, @Body RemoveNumber numberDeleter); + // List all end user + @GET("Account/{authId}/EndUser/") + Call> endUserList(@Path("authId") String authId, + @QueryMap Map endUserListRequest); - @HTTP(method = "DELETE", path = "Account/{authId}/NumberPool/{uuid}/Tollfree/{tollfree}/", hasBody = true) - Call powerpackTollfreeDelete(@Path("authId") String authId, @Path("uuid") String uuid, @Path("tollfree") String tollfree, @Body RemoveTollfree tollfreeDeleter); + @DELETE("Account/{authId}/EndUser/{id}/") + Call endUserDelete(@Path("authId") String authId, @Path("id") String endUserId); - @HTTP(method = "DELETE", path = "Account/{authId}/NumberPool/{uuid}/Shortcode/{shortcode}/", hasBody = true) - Call powerpackShortcodeDelete(@Path("authId") String authId, @Path("uuid") String uuid, @Path("shortcode") String shortcode, @Body RemoveShortcode shortcodeDeleter); + // Compliance Document Type + // Get + @GET("Account/{authId}/ComplianceDocumentType/{id}/") + Call complianceDocumentTypeGet(@Path("authId") String authId, @Path("id") String id); - @POST("Account/{authId}/NumberPool/{uuid}/Number/{number}/") - Call powerpackBuyAddNumberCreate(@Path("authId") String authId, @Path("uuid") String uuid, @Path("number") String number, @Body BuyAddNumbers numbers); + // List + @GET("Account/{authId}/ComplianceDocumentType/") + Call> complianceDocumentTypeList(@Path("authId") String authId, + @QueryMap Map complianceDocumentListRequest); - @GET("Account/{authId}/Media/") - Call> mediaList(@Path("authId") String authId, @QueryMap Map mediaListRequest); - @GET("Account/{authId}/Media/{id}/") - Call mediaGet(@Path("authId") String authId, @Path("id") String id); + // Compliance Requirement + // Get + @GET("Account/{authId}/ComplianceRequirement/{id}/") + Call complianceRequirementGet(@Path("authId") String authId, @Path("id") String id); - @POST("Account/{authId}/Media/") - Call uploadMedia(@Path("authId") String authId, @Body RequestBody mediaUploads); + // List + @GET("Account/{authId}/ComplianceRequirement/") + Call complianceRequirementList(@Path("authId") String authId, + @QueryMap Map complianceDocumentListRequest); - // Enduser - // Get - @GET("Account/{authId}/EndUser/{id}/") - Call endUserGet(@Path("authId") String authId, @Path("id") String id); + // Compliance Application + // Get + @GET("Account/{authId}/ComplianceApplication/{id}/") + Call complianceApplicationGet(@Path("authId") String authId, @Path("id") String id); - // Create - @POST("Account/{authId}/EndUser/") - Call endUserCreate(@Path("authId") String authId, - @Body EndUserCreator endUserCreator); + // Create + @POST("Account/{authId}/ComplianceApplication/") + Call complianceApplicationCreate(@Path("authId") String authId, + @Body ComplianceApplicationCreator complianceApplicationCreator); - // Update - @POST("Account/{authId}/EndUser/{id}/") - Call endUserUpdate(@Path("authId") String authId, @Path("id") String id, - @Body EndUserUpdater endUserUpdater); + // Update + @POST("Account/{authId}/ComplianceApplication/{id}/") + Call complianceApplicationUpdate(@Path("authId") String authId, @Path("id") String id, + @Body ComplianceApplicationUpdater complianceApplicationUpdater); - // List all end user - @GET("Account/{authId}/EndUser/") - Call> endUserList(@Path("authId") String authId, - @QueryMap Map endUserListRequest); + // List + @GET("Account/{authId}/ComplianceApplication/") + Call> complianceApplicationList(@Path("authId") String authId, + @QueryMap Map complianceApplicationLister); - @DELETE("Account/{authId}/EndUser/{id}/") - Call endUserDelete(@Path("authId") String authId, @Path("id") String endUserId); - // Compliance Document Type - // Get - @GET("Account/{authId}/ComplianceDocumentType/{id}/") - Call complianceDocumentTypeGet(@Path("authId") String authId, @Path("id") String id); + // Delete + @DELETE("Account/{authId}/ComplianceApplication/{id}/") + Call complianceApplicationDelete(@Path("authId") String authId, @Path("id") String complianceApplicationId); - // List - @GET("Account/{authId}/ComplianceDocumentType/") - Call> complianceDocumentTypeList(@Path("authId") String authId, - @QueryMap Map complianceDocumentListRequest); + // Submit + @POST("Account/{authId}/ComplianceApplication/{id}/Submit/") + Call complianceApplicationSubmit(@Path("authId") String authId, @Path("id") String id, + @Body ComplianceApplicationSubmitter complianceDocumentCreator); - // Compliance Requirement - // Get - @GET("Account/{authId}/ComplianceRequirement/{id}/") - Call complianceRequirementGet(@Path("authId") String authId, @Path("id") String id); + // Compliance Document + // Get + @GET("Account/{authId}/ComplianceDocument/{id}/") + Call complianceDocumentGet(@Path("authId") String authId, @Path("id") String id); - // List - @GET("Account/{authId}/ComplianceRequirement/") - Call complianceRequirementList(@Path("authId") String authId, - @QueryMap Map complianceDocumentListRequest); + // Create + @POST("Account/{authId}/ComplianceDocument/") + Call complianceDocumentCreate(@Path("authId") String authId, + @Body RequestBody complianceDocumentCreator); + // Update + @POST("Account/{authId}/ComplianceDocument/{id}/") + Call complianceDocumentUpdate(@Path("authId") String authId, @Path("id") String id, + @Body RequestBody complianceDocumentUpdater); - // Compliance Application - // Get - @GET("Account/{authId}/ComplianceApplication/{id}/") - Call complianceApplicationGet(@Path("authId") String authId, @Path("id") String id); + // List + @GET("Account/{authId}/ComplianceDocument/") + Call> complianceDocumentList(@Path("authId") String authId, + @QueryMap Map complianceDocumentLister); - // Create - @POST("Account/{authId}/ComplianceApplication/") - Call complianceApplicationCreate(@Path("authId") String authId, - @Body ComplianceApplicationCreator complianceApplicationCreator); - // Update - @POST("Account/{authId}/ComplianceApplication/{id}/") - Call complianceApplicationUpdate(@Path("authId") String authId, @Path("id") String id, - @Body ComplianceApplicationUpdater complianceApplicationUpdater); + // Delete + @DELETE("Account/{authId}/ComplianceDocument/{id}/") + Call complianceDocumentDelete(@Path("authId") String authId, @Path("id") String complianceDocumentId); + + // List multiparty calls + @GET("Account/{authId}/MultiPartyCall/") + Call> mpcList(@Path("authId") String authId, @QueryMap Map params); - // List - @GET("Account/{authId}/ComplianceApplication/") - Call> complianceApplicationList(@Path("authId") String authId, - @QueryMap Map complianceApplicationLister); + // Get multiparty call + @GET("Account/{authId}/MultiPartyCall/{mpcId}/") + Call mpcGet(@Path("authId") String authId, @Path("mpcId") String mpcId); + // Start multiparty call + @POST("Account/{authId}/MultiPartyCall/{mpcId}/") + Call mpcStart(@Path("authId") String authId, @Path("mpcId") String mpcId, @Body Map body); - // Delete - @DELETE("Account/{authId}/ComplianceApplication/{id}/") - Call complianceApplicationDelete(@Path("authId") String authId, @Path("id") String complianceApplicationId); + // End multiparty call + @DELETE("Account/{authId}/MultiPartyCall/{mpcId}/") + Call mpcStop(@Path("authId") String authId, @Path("mpcId") String mpcId); - // Submit - @POST("Account/{authId}/ComplianceApplication/{id}/Submit/") - Call complianceApplicationSubmit(@Path("authId") String authId, @Path("id") String id, - @Body ComplianceApplicationSubmitter complianceDocumentCreator); + // Add new participant to multiparty call + @POST("Account/{authId}/MultiPartyCall/{mpcId}/Participant/") + Call mpcAddParticipant(@Path("authId") String authId, @Path("mpcId") String mpcId, @Body MultiPartyCallParticipantAdd addParticipant); + // List participants of multiparty call + @GET("Account/{authId}/MultiPartyCall/{mpcId}/Participant/") + Call> mpcListParticipants(@Path("authId") String authId, @Path("mpcId") String mpcId, @QueryMap Map params); - // Compliance Document - // Get - @GET("Account/{authId}/ComplianceDocument/{id}/") - Call complianceDocumentGet(@Path("authId") String authId, @Path("id") String id); + // Start recording multiparty call + @POST("Account/{authId}/MultiPartyCall/{mpcId}/Record/") + Call mpcStartRecording(@Path("authId") String authId, @Path("mpcId") String mpcId, @Body MultiPartyCallRecordingStart startRecording); - // Create - @POST("Account/{authId}/ComplianceDocument/") - Call complianceDocumentCreate(@Path("authId") String authId, - @Body RequestBody complianceDocumentCreator); + // Stop recording multiparty call + @DELETE("Account/{authId}/MultiPartyCall/{mpcId}/Record/") + Call mpcRecordStop(@Path("authId") String authId, @Path("mpcId") String mpcId); - // Update - @POST("Account/{authId}/ComplianceDocument/{id}/") - Call complianceDocumentUpdate(@Path("authId") String authId, @Path("id") String id, - @Body RequestBody complianceDocumentUpdater); + // Pause recording multiparty call + @Headers("Content-Type: application/json") + @POST("Account/{authId}/MultiPartyCall/{mpcId}/Record/Pause/") + Call mpcPauseRecording(@Path("authId") String authId, @Path("mpcId") String mpcId); - // List - @GET("Account/{authId}/ComplianceDocument/") - Call> complianceDocumentList(@Path("authId") String authId, - @QueryMap Map complianceDocumentLister); + // Resume recording multiparty call + @Headers("Content-Type: application/json") + @POST("Account/{authId}/MultiPartyCall/{mpcId}/Record/Resume/") + Call mpcResumeRecording(@Path("authId") String authId, @Path("mpcId") String mpcId); + // Get participant of multiparty call + @GET("Account/{authId}/MultiPartyCall/{mpcId}/Participant/{participantId}/") + Call mpcMemberGet(@Path("authId") String authId, @Path("mpcId") String mpcId, @Path("participantId") String participantId); + + // Update participant of multiparty call + @POST("Account/{authId}/MultiPartyCall/{mpcId}/Participant/{participantId}/") + Call mpcMemberUpdate(@Path("authId") String authId, @Path("mpcId") String mpcId, @Path("participantId") String participantId, @Body MultiPartyCallParticipantUpdate updateParticipant); + + // Kick participant of multiparty call + @DELETE("Account/{authId}/MultiPartyCall/{mpcId}/Participant/{participantId}/") + Call mpcMemberKick(@Path("authId") String authId, @Path("mpcId") String mpcId, @Path("participantId") String participantId); - // Delete - @DELETE("Account/{authId}/ComplianceDocument/{id}/") - Call complianceDocumentDelete(@Path("authId") String authId, @Path("id") String complianceDocumentId); - - // List multiparty calls - @GET("Account/{authId}/MultiPartyCall/") - Call> mpcList(@Path("authId") String authId, @QueryMap Map params); - - // Get multiparty call - @GET("Account/{authId}/MultiPartyCall/{mpcId}/") - Call mpcGet(@Path("authId") String authId, @Path("mpcId") String mpcId); - - // Start multiparty call - @POST("Account/{authId}/MultiPartyCall/{mpcId}/") - Call mpcStart(@Path("authId") String authId, @Path("mpcId") String mpcId, @Body Map body); - - // End multiparty call - @DELETE("Account/{authId}/MultiPartyCall/{mpcId}/") - Call mpcStop(@Path("authId") String authId, @Path("mpcId") String mpcId); - - // Add new participant to multiparty call - @POST("Account/{authId}/MultiPartyCall/{mpcId}/Participant/") - Call mpcAddParticipant(@Path("authId") String authId, @Path("mpcId") String mpcId, @Body MultiPartyCallParticipantAdd addParticipant); - - // List participants of multiparty call - @GET("Account/{authId}/MultiPartyCall/{mpcId}/Participant/") - Call> mpcListParticipants(@Path("authId") String authId, @Path("mpcId") String mpcId, @QueryMap Map params); - - // Start recording multiparty call - @POST("Account/{authId}/MultiPartyCall/{mpcId}/Record/") - Call mpcStartRecording(@Path("authId") String authId, @Path("mpcId") String mpcId, @Body MultiPartyCallRecordingStart startRecording); - - // Stop recording multiparty call - @DELETE("Account/{authId}/MultiPartyCall/{mpcId}/Record/") - Call mpcRecordStop(@Path("authId") String authId, @Path("mpcId") String mpcId); - - // Pause recording multiparty call - @Headers("Content-Type: application/json") - @POST("Account/{authId}/MultiPartyCall/{mpcId}/Record/Pause/") - Call mpcPauseRecording(@Path("authId") String authId, @Path("mpcId") String mpcId); + // Start participant recording multiparty call + @POST("Account/{authId}/MultiPartyCall/{mpcId}/Participant/{participantId}/Record/") + Call mpcParticipantStartRecording(@Path("authId") String authId, @Path("mpcId") String mpcId, @Path("participantId") String participantId, @Body MultiPartyCallParticipantRecordingStart startParticipantRecording); - // Resume recording multiparty call - @Headers("Content-Type: application/json") - @POST("Account/{authId}/MultiPartyCall/{mpcId}/Record/Resume/") - Call mpcResumeRecording(@Path("authId") String authId, @Path("mpcId") String mpcId); + // Stop participant recording multiparty call + @DELETE("Account/{authId}/MultiPartyCall/{mpcId}/Participant/{participantId}/Record/") + Call mpcParticipantRecordStop(@Path("authId") String authId, @Path("mpcId") String mpcId, @Path("participantId") String participantId); - // Get participant of multiparty call - @GET("Account/{authId}/MultiPartyCall/{mpcId}/Participant/{participantId}/") - Call mpcMemberGet(@Path("authId") String authId, @Path("mpcId") String mpcId, @Path("participantId") String participantId); - - // Update participant of multiparty call - @POST("Account/{authId}/MultiPartyCall/{mpcId}/Participant/{participantId}/") - Call mpcMemberUpdate(@Path("authId") String authId, @Path("mpcId") String mpcId, @Path("participantId") String participantId, @Body MultiPartyCallParticipantUpdate updateParticipant); - - // Kick participant of multiparty call - @DELETE("Account/{authId}/MultiPartyCall/{mpcId}/Participant/{participantId}/") - Call mpcMemberKick(@Path("authId") String authId, @Path("mpcId") String mpcId, @Path("participantId") String participantId); + // Pause participant recording multiparty call + @Headers("Content-Type: application/json") + @POST("Account/{authId}/MultiPartyCall/{mpcId}/Participant/{participantId}/Record/Pause/") + Call mpcParticipantPauseRecording(@Path("authId") String authId, @Path("mpcId") String mpcId, @Path("participantId") String participantId); - // Start participant recording multiparty call - @POST("Account/{authId}/MultiPartyCall/{mpcId}/Participant/{participantId}/Record/") - Call mpcParticipantStartRecording(@Path("authId") String authId, @Path("mpcId") String mpcId, @Path("participantId") String participantId, @Body MultiPartyCallParticipantRecordingStart startParticipantRecording); + // Resume participant recording multiparty call + @Headers("Content-Type: application/json") + @POST("Account/{authId}/MultiPartyCall/{mpcId}/Participant/{participantId}/Record/Resume/") + Call mpcParticipantResumeRecording(@Path("authId") String authId, @Path("mpcId") String mpcId, @Path("participantId") String participantId); - // Stop participant recording multiparty call - @DELETE("Account/{authId}/MultiPartyCall/{mpcId}/Participant/{participantId}/Record/") - Call mpcParticipantRecordStop(@Path("authId") String authId, @Path("mpcId") String mpcId, @Path("participantId") String participantId); + @POST("Account/{authId}/MultiPartyCall/{mpcId}/Member/{participantId}/Play/") + Call mpcStartPlayAudio(@Path("authId") String authId, @Path("mpcId") String mpcId, @Path("participantId") String participantId, @Body MultiPartyCallStartPlayAudio multiPartyCallStartPlayAudio); - // Pause participant recording multiparty call - @Headers("Content-Type: application/json") - @POST("Account/{authId}/MultiPartyCall/{mpcId}/Participant/{participantId}/Record/Pause/") - Call mpcParticipantPauseRecording(@Path("authId") String authId, @Path("mpcId") String mpcId, @Path("participantId") String participantId); - - // Resume participant recording multiparty call - @Headers("Content-Type: application/json") - @POST("Account/{authId}/MultiPartyCall/{mpcId}/Participant/{participantId}/Record/Resume/") - Call mpcParticipantResumeRecording(@Path("authId") String authId, @Path("mpcId") String mpcId, @Path("participantId") String participantId); + @DELETE("Account/{authId}/MultiPartyCall/{mpcId}/Member/{participantId}/Play/") + Call mpcStopPlayAudio(@Path("authId") String authId, @Path("mpcId") String mpcId, @Path("participantId") String participantId); } diff --git a/src/main/java/com/plivo/api/models/multipartycall/MultiPartyCall.java b/src/main/java/com/plivo/api/models/multipartycall/MultiPartyCall.java index 635ee4a2..aeaf04e2 100644 --- a/src/main/java/com/plivo/api/models/multipartycall/MultiPartyCall.java +++ b/src/main/java/com/plivo/api/models/multipartycall/MultiPartyCall.java @@ -173,6 +173,14 @@ public void participantKick(String participantId) throws PlivoRestException, IOE kicker.delete(); } + public static MultiPartyCallStartPlayAudio startPlayAudio(String mpcId, String participantId) { + return new MultiPartyCallStartPlayAudio(mpcId, participantId); + } + + public static MultiPartyCallStopPlayAudio stopPlayAudio(String mpcId, String participantId) { + return new MultiPartyCallStopPlayAudio(mpcId,participantId); + } + public String getBilledAmount() { return billedAmount; } diff --git a/src/main/java/com/plivo/api/models/multipartycall/MultiPartyCallParticipantAdd.java b/src/main/java/com/plivo/api/models/multipartycall/MultiPartyCallParticipantAdd.java index 2acf4fd4..cdb71166 100644 --- a/src/main/java/com/plivo/api/models/multipartycall/MultiPartyCallParticipantAdd.java +++ b/src/main/java/com/plivo/api/models/multipartycall/MultiPartyCallParticipantAdd.java @@ -56,22 +56,22 @@ public class MultiPartyCallParticipantAdd extends VoiceUpdater statusCallbackEvents = Arrays.asList("mpc-state-changes", "participant-state-changes"); @@ -90,6 +90,15 @@ public class MultiPartyCallParticipantAdd extends VoiceUpdater to) throws PlivoValidationException { super(mpcId); @@ -103,7 +112,7 @@ public MultiPartyCallParticipantAdd(String mpcId, String role, String from, List this.from = from; this.to = to; this.callUuid = null; - if(this.callerName==null){ + if (this.callerName == null) { this.callerName = this.from; } } @@ -132,7 +141,9 @@ public String callUuid() { return callUuid; } - public String callerName(){ return callerName;} + public String callerName() { + return callerName; + } public String callStatusCallbackUrl() { return callStatusCallbackUrl; @@ -166,7 +177,7 @@ public Object ringTimeout() { return ringTimeout; } - public Object delayDial() { + public Object delayDial() { return delayDial; } @@ -282,9 +293,25 @@ public String exitSoundMethod() { return exitSoundMethod; } - public MultiPartyCallParticipantAdd callerName( String callerName) throws PlivoValidationException { + public String startRecordingAudio() { + return startRecordingAudio; + } + + public String startRecordingAudioMethod() { + return startRecordingAudioMethod; + } + + public String stopRecordingAudio() { + return stopRecordingAudio; + } + + public String stopRecordingAudioMethod() { + return stopRecordingAudioMethod; + } + + public MultiPartyCallParticipantAdd callerName(String callerName) throws PlivoValidationException { this.callerName = callerName; - if (callerName.length() > 50){ + if (callerName.length() > 50) { throw new PlivoValidationException("CallerName Length must be in range [0,50]"); } return this; @@ -475,6 +502,26 @@ public MultiPartyCallParticipantAdd exitSoundMethod(String exitSoundMethod) { return this; } + public MultiPartyCallParticipantAdd startRecordingAudio(String startRecordingAudio) { + this.startRecordingAudio = startRecordingAudio; + return this; + } + + public MultiPartyCallParticipantAdd startRecordingAudioMethod(String startRecordingAudioMethod) { + this.startRecordingAudioMethod = startRecordingAudioMethod; + return this; + } + + public MultiPartyCallParticipantAdd stopRecordingAudio(String stopRecordingAudio) { + this.stopRecordingAudio= stopRecordingAudio; + return this; + } + + public MultiPartyCallParticipantAdd stopRecordingAudioMethod(String stopRecordingAudioMethod) { + this.stopRecordingAudioMethod = stopRecordingAudioMethod; + return this; + } + @Override protected Call obtainCall() throws PlivoValidationException { Validate.check(this); diff --git a/src/main/java/com/plivo/api/models/multipartycall/MultiPartyCallStartPlayAudio.java b/src/main/java/com/plivo/api/models/multipartycall/MultiPartyCallStartPlayAudio.java new file mode 100644 index 00000000..cd932971 --- /dev/null +++ b/src/main/java/com/plivo/api/models/multipartycall/MultiPartyCallStartPlayAudio.java @@ -0,0 +1,47 @@ +package com.plivo.api.models.multipartycall; + +import com.plivo.api.exceptions.PlivoValidationException; +import com.plivo.api.models.base.VoiceUpdater; +import com.plivo.api.validators.UrlValues; +import com.plivo.api.validators.Validate; +import retrofit2.Call; + +public class MultiPartyCallStartPlayAudio extends VoiceUpdater { + + @UrlValues + private String url; + + public MultiPartyCallStartPlayAudio(String mpcId, String secondaryId) { + super(mpcId, secondaryId); + } + + @Override + protected Call obtainCall() throws PlivoValidationException { + MultiPartyCallUtils.validMultiPartyCallId(id); + Validate.check(this); + return client().getVoiceApiService().mpcStartPlayAudio(client().getAuthId(), id, secondaryId, this); + } + + @Override + protected Call obtainFallback1Call() throws PlivoValidationException { + MultiPartyCallUtils.validMultiPartyCallId(id); + Validate.check(this); + return client().getVoiceFallback1Service().mpcStartPlayAudio(client().getAuthId(), id, secondaryId, this); + } + + @Override + protected Call obtainFallback2Call() throws PlivoValidationException { + MultiPartyCallUtils.validMultiPartyCallId(id); + Validate.check(this); + return client().getVoiceFallback1Service().mpcStartPlayAudio(client().getAuthId(), id, secondaryId, this); + } + + public String url() { + return url; + } + + public MultiPartyCallStartPlayAudio url(String url) { + this.url = url; + return this; + } +} \ No newline at end of file diff --git a/src/main/java/com/plivo/api/models/multipartycall/MultiPartyCallStartPlayAudioResponse.java b/src/main/java/com/plivo/api/models/multipartycall/MultiPartyCallStartPlayAudioResponse.java new file mode 100644 index 00000000..4da6e9bc --- /dev/null +++ b/src/main/java/com/plivo/api/models/multipartycall/MultiPartyCallStartPlayAudioResponse.java @@ -0,0 +1,18 @@ +package com.plivo.api.models.multipartycall; + +import com.plivo.api.models.base.BaseResponse; + +import java.util.List; + +public class MultiPartyCallStartPlayAudioResponse extends BaseResponse { + + private List mpcMemberId; + private String mpcName; + + public List getMpcMemberId() { + return mpcMemberId; + } + public String mpcName() { + return mpcName; + } +} diff --git a/src/main/java/com/plivo/api/models/multipartycall/MultiPartyCallStopPlayAudio.java b/src/main/java/com/plivo/api/models/multipartycall/MultiPartyCallStopPlayAudio.java new file mode 100644 index 00000000..72fb84f3 --- /dev/null +++ b/src/main/java/com/plivo/api/models/multipartycall/MultiPartyCallStopPlayAudio.java @@ -0,0 +1,34 @@ +package com.plivo.api.models.multipartycall; + +import com.plivo.api.exceptions.PlivoValidationException; +import com.plivo.api.models.base.VoiceDeleter; +import com.plivo.api.validators.Validate; +import okhttp3.ResponseBody; +import retrofit2.Call; + +public class MultiPartyCallStopPlayAudio extends VoiceDeleter { + public MultiPartyCallStopPlayAudio(String id, String secondaryId) { + super(id, secondaryId); + } + + @Override + protected Call obtainCall() throws PlivoValidationException { + MultiPartyCallUtils.validMultiPartyCallId(id); + Validate.check(this); + return client().getVoiceApiService().mpcStopPlayAudio(client().getAuthId(), id, secondaryId); + } + + @Override + protected Call obtainFallback1Call() throws PlivoValidationException { + MultiPartyCallUtils.validMultiPartyCallId(id); + Validate.check(this); + return client().getVoiceFallback1Service().mpcStopPlayAudio(client().getAuthId(), id, secondaryId); + } + + @Override + protected Call obtainFallback2Call() throws PlivoValidationException { + MultiPartyCallUtils.validMultiPartyCallId(id); + Validate.check(this); + return client().getVoiceFallback2Service().mpcStopPlayAudio(client().getAuthId(), id, secondaryId); + } +} diff --git a/src/main/java/com/plivo/api/validators/Validate.java b/src/main/java/com/plivo/api/validators/Validate.java index f71100f0..423baa60 100644 --- a/src/main/java/com/plivo/api/validators/Validate.java +++ b/src/main/java/com/plivo/api/validators/Validate.java @@ -12,7 +12,7 @@ public class Validate { - private static final Pattern urlPattern = Pattern.compile("r'(http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\\(\\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+|None)'"); + private static final Pattern urlPattern = Pattern.compile("(http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\\(\\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+|None)"); private static final String COLON = ": "; diff --git a/src/main/java/com/plivo/api/xml/MultiPartyCall.java b/src/main/java/com/plivo/api/xml/MultiPartyCall.java index 62737f95..afd29661 100644 --- a/src/main/java/com/plivo/api/xml/MultiPartyCall.java +++ b/src/main/java/com/plivo/api/xml/MultiPartyCall.java @@ -1,5 +1,6 @@ package com.plivo.api.xml; +import com.plivo.api.models.multipartycall.MultiPartyCallParticipantAdd; import com.plivo.api.serializers.DelimitedListXMLSerializer; import com.plivo.api.validators.InRange; import com.plivo.api.validators.MultiOf; @@ -127,6 +128,22 @@ public class MultiPartyCall extends PlivoXml implements ResponseNestable { @XmlValue private String name; + @XmlAttribute + @UrlValues + private String startRecordingAudio; + + @XmlAttribute + @OneOf(message = "should be one of['GET',POST']", options = {"GET", "POST"}) + private String startRecordingAudioMethod = "GET"; + + @XmlAttribute + @UrlValues + private String stopRecordingAudio; + + @XmlAttribute + @OneOf(message = "should be one of['GET',POST']", options = {"GET", "POST"}) + private String stopRecordingAudioMethod = "GET"; + private MultiPartyCall() { } @@ -264,6 +281,22 @@ public String name() { return name; } + public String startRecordingAudio() { + return startRecordingAudio; + } + + public String startRecordingAudioMethod() { + return startRecordingAudioMethod; + } + + public String stopRecordingAudio() { + return stopRecordingAudio; + } + + public String stopRecordingAudioMethod() { + return stopRecordingAudioMethod; + } + public MultiPartyCall role(String role) { this.role = role; return this; @@ -413,4 +446,24 @@ public MultiPartyCall name(String name) { this.name = name; return this; } + + public MultiPartyCall startRecordingAudio(String startRecordingAudio) { + this.startRecordingAudio = startRecordingAudio; + return this; + } + + public MultiPartyCall startRecordingAudioMethod(String startRecordingAudioMethod) { + this.startRecordingAudioMethod = startRecordingAudioMethod; + return this; + } + + public MultiPartyCall stopRecordingAudio(String stopRecordingAudio) { + this.stopRecordingAudio= stopRecordingAudio; + return this; + } + + public MultiPartyCall stopRecordingAudioMethod(String stopRecordingAudioMethod) { + this.stopRecordingAudioMethod = stopRecordingAudioMethod; + return this; + } } diff --git a/src/main/resources/com/plivo/api/version.txt b/src/main/resources/com/plivo/api/version.txt index 04edabda..c7ba1e87 100644 --- a/src/main/resources/com/plivo/api/version.txt +++ b/src/main/resources/com/plivo/api/version.txt @@ -1 +1 @@ -5.4.1 \ No newline at end of file +5.5.0 \ No newline at end of file diff --git a/src/test/java/com/plivo/api/MPCTest.java b/src/test/java/com/plivo/api/MPCTest.java index df6fc4f5..c41099c5 100644 --- a/src/test/java/com/plivo/api/MPCTest.java +++ b/src/test/java/com/plivo/api/MPCTest.java @@ -5,6 +5,7 @@ import org.junit.Before; import org.junit.Test; + import java.util.Arrays; import java.util.Collections; import java.util.LinkedHashMap; @@ -69,40 +70,42 @@ public void addParticipant() throws Exception { final String mpcName = "myMpc"; final Map payload = new LinkedHashMap() {{ put("role", "Agent"); - put("from","12345"); - put("to","67890<54321"); - put("call_status_callback_method","POST"); - put("confirm_key_sound_method","GET"); - put("dial_music","Real"); - put("ring_timeout",80); - put("max_duration",20000); - put("max_participants",10); - put("wait_music_method","GET"); - put("agent_hold_music_method","GET"); - put("customer_hold_music_method","GET"); - put("recording_callback_method","GET"); - put("status_callback_method","POST"); - put("on_exit_action_method","POST"); - put("record",false); - put("record_file_format",MultiPartyCallUtils.wav); - put("status_callback_events","mpc-state-changes,participant-state-changes"); - put("stay_alone",false); - put("coach_mode",true); - put("mute",false); - put("hold",false); - put("start_mpc_on_enter",true); - put("end_mpc_on_exit",true); - put("relay_dtmf_inputs",false); - put("enter_sound","beep:2"); - put("enter_sound_method","GET"); - put("exit_sound","beep:2"); - put("exit_sound_method","POST"); + put("from", "12345"); + put("to", "67890<54321"); put("caller_name", "developer"); + put("call_status_callback_method", "POST"); + put("confirm_key_sound_method", "GET"); + put("dial_music", "Real"); + put("ring_timeout", 80); put("delay_dial", 0); + put("max_duration", 20000); + put("max_participants", 10); + put("wait_music_method", "GET"); + put("agent_hold_music_method", "GET"); + put("customer_hold_music_method", "GET"); + put("recording_callback_method", "GET"); + put("status_callback_method", "POST"); + put("on_exit_action_method", "POST"); + put("record", false); + put("record_file_format", MultiPartyCallUtils.wav); + put("status_callback_events", "mpc-state-changes,participant-state-changes"); + put("stay_alone", false); + put("coach_mode", true); + put("mute", false); + put("hold", false); + put("start_mpc_on_enter", true); + put("end_mpc_on_exit", true); + put("relay_dtmf_inputs", false); + put("enter_sound", "beep:2"); + put("enter_sound_method", "GET"); + put("exit_sound", "beep:2"); + put("exit_sound_method", "POST"); + put("start_recording_audio_method", "GET"); + put("stop_recording_audio_method", "GET"); }}; MultiPartyCall.addParticipant(MultiPartyCallUtils.friendlyName(mpcName), - MultiPartyCallUtils.agent, "12345", Arrays.asList("67890", "54321")) + MultiPartyCallUtils.agent, "12345", Arrays.asList("67890", "54321")) .ringTimeout(80) .enterSound("beep:2") .exitSoundMethod("POST") @@ -201,4 +204,66 @@ public void resumeRecording() throws Exception { assertRequest("POST", "MultiPartyCall/name_%s/Record/Resume/", mpcName); } + @Test + public void startParticipantRecording() throws Exception { + expectResponse("mpcParticipantRecordStart.json", 200); + final String mpcName = "mpMPC"; + final String participantId = "10"; + Map expectedPayload = new LinkedHashMap<>(); + expectedPayload.put("file_format", "mp3"); + expectedPayload.put("status_callback_method", "POST"); + + MultiPartyCall.participantRecordStarter(MultiPartyCallUtils.friendlyName(mpcName), participantId).update(); + assertRequestWithPayload("POST", "MultiPartyCall/name_%s/Participant/%s/Record/", expectedPayload, mpcName, participantId); + } + + @Test + public void stopParticipantRecording() throws Exception { + expectResponse(null, 204); + final String mpcName = "mpMPC"; + final String participantId = "10"; + + MultiPartyCall.participantRecordStopper(MultiPartyCallUtils.friendlyName(mpcName), participantId).delete(); + assertRequest("DELETE", "MultiPartyCall/name_%s/Participant/%s/Record/", mpcName, participantId); + } + + @Test + public void pauseParticipantRecording() throws Exception { + expectResponse(null, 204); + final String mpcName = "mpMPC"; + final String participantId = "10"; + MultiPartyCall.participantRecordPause(MultiPartyCallUtils.friendlyName(mpcName), participantId).update(); + assertRequest("POST", "MultiPartyCall/name_%s/Participant/%s/Record/Pause/", mpcName, participantId); + } + + @Test + public void resumeParticipantRecording() throws Exception { + expectResponse(null, 204); + final String mpcName = "mpMPC"; + final String participantId = "10"; + MultiPartyCall.participantRecordResume(MultiPartyCallUtils.friendlyName(mpcName), participantId).update(); + assertRequest("POST", "MultiPartyCall/name_%s/Participant/%s/Record/Resume/", mpcName, participantId); + } + + @Test + public void startPlayAudio() throws Exception { + expectResponse("mpcStartPlayAudio.json",202); + final String mpcName = "mpMPC"; + final String participantId = "10"; + Map expectedPayload = new LinkedHashMap<>(); + expectedPayload.put("url","https://s3.amazonaws.com/plivocloud/music.mp3"); + + MultiPartyCall.startPlayAudio(MultiPartyCallUtils.friendlyName(mpcName),participantId).url("https://s3.amazonaws.com/plivocloud/music.mp3").update(); + assertRequestWithPayload("POST","MultiPartyCall/name_%s/Member/%s/Play/",expectedPayload,mpcName,participantId); + } + + @Test + public void stopPlayAudio() throws Exception { + expectResponse(null,204); + final String mpcName = "mpMPC"; + final String participantId = "10"; + + MultiPartyCall.stopPlayAudio(MultiPartyCallUtils.friendlyName(mpcName),participantId).delete(); + assertRequest("DELETE","MultiPartyCall/name_%s/Member/%s/Play/",mpcName,participantId); + } } diff --git a/src/test/resources/com/plivo/api/mpcParticipantRecordStart.json b/src/test/resources/com/plivo/api/mpcParticipantRecordStart.json new file mode 100644 index 00000000..94891562 --- /dev/null +++ b/src/test/resources/com/plivo/api/mpcParticipantRecordStart.json @@ -0,0 +1,6 @@ +{ + "api_id": "e05b5263-45dc-11eb-9014-0242ac110003", + "message": "MPC: test_mpc_1 record started", + "recording_id": "e06ac332-45dc-11eb-94fe-06dd7f581a50", + "recording_url": "https://media.plivo.com/v1/Account/MAOTE1OWE0MDK0MTLHYW/Recording/e06ac332-45dc-11eb-94fe-06dd7f581a50.mp3" +} \ No newline at end of file diff --git a/src/test/resources/com/plivo/api/mpcStartPlayAudio.json b/src/test/resources/com/plivo/api/mpcStartPlayAudio.json new file mode 100644 index 00000000..8ee107a2 --- /dev/null +++ b/src/test/resources/com/plivo/api/mpcStartPlayAudio.json @@ -0,0 +1,8 @@ +{ + "api_id": "325a5d1c-4380-11ec-b094-0242ac11000f", + "message": "play queued into MPC", + "mpcMemberId": [ + "48" + ], + "mpcName": "MyMPC" +} \ No newline at end of file