diff --git a/.gitignore b/.gitignore index bdc3535..5ba57bc 100644 --- a/.gitignore +++ b/.gitignore @@ -91,7 +91,7 @@ AppPackages/ # Others [Bb]in [Oo]bj -sql + TestResults [Tt]est[Rr]esult* *.Cache diff --git a/handlers/CustomGenericObjectDisconnect.ihd b/handlers/CustomGenericObjectDisconnect.ihd new file mode 100644 index 0000000..56f771d Binary files /dev/null and b/handlers/CustomGenericObjectDisconnect.ihd differ diff --git a/handlers/Vidyo_SetRecordingAttributes.ihd b/handlers/Vidyo_SetRecordingAttributes.ihd new file mode 100644 index 0000000..f231aac Binary files /dev/null and b/handlers/Vidyo_SetRecordingAttributes.ihd differ diff --git a/postman/Vidyo-soapui-project.xml b/postman/Vidyo-soapui-project.xml new file mode 100644 index 0000000..cba79ff --- /dev/null +++ b/postman/Vidyo-soapui-project.xml @@ -0,0 +1,3788 @@ + +http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService?wsdl + + + + + + + + String representation of successful operation - 'OK' + + + + + + + + + + String presentation of fault + + + + + Languages supported by VidyoPortal + + + + + + + + + + + + + + + + + + + + + + + + Member's Role supported by VidyoPortal + + + + + + + + + + + + + + + + + + + + + + Filter for search queries. + getMembers and getRooms will throw a SOAP fault if limit exceeds 200. Default value for limit is 40. + Anything higher than 40 may result in poor system performance. + + + + + + + + + + + + + + There are three types of entities in VidyoPortal: + 1. Member - A member is an authorized user of VidyoPortal with a user account. + - A member may have at the most one personal room. + - A member has a display name + - A member has an extension that can also be used for search purposes. + 2. Rooom - It is a meeting place. Rooms are of two kinds: + - Personal, as explained above + - Public. Each room has a owner assigned who can control the room. + 3. Legacy - This entity represents external endpoints. Think of it as a label to identify and search external devices. + Legacy entity does not have an account on the VidyoPortal. There is no owner assigned to legacy devices. + + + + + + + + + + + + The Member can override the current status with these possible values. Changing a mode will impact VidyoPortal operations. + For e.g. if the mode is set to DoNotDisturb for a member, this member will not get any incoming requests to join a meeting or a direct call. + + + + + + + + + + + + Describes the member status based on the + operation state of the endpoint in + use by the member: + - Status is 'Offline' and hence can't be reached for a conference. + - Status is 'Online' and can be reached for a conference or a direct call. + - Status is 'Busy' in conference and can't can be reached for another conference or a direct call. + - Status is 'BusyInOwnRoom' in conference in own personal room and can't can be reached for another conference. + - Status is 'Ringing' endpoint associated with member start to ring on receive direct call or invite event from other part. + - Status is 'RingAccepted' endpoint associated with member accept the call from other part. + - Status is 'RingRejected' endpoint associated with member reject the call from other part. + - Status is 'RingNoAnswer' endpoint associated with member is not answered in some period of time. + - Status is 'Alerting' endpoint associated with member is alerting about income call. + - Status is 'AlertCancelled' endpoint associated with member is stop to be alerting about income call. + + + + + + + + + + + + + + + + + + + Status is 'Empty' and hence can be used for meeting. + Status is 'Full' and is not accepting any more participants to the meeting. + Status is 'Occupied' some participants use the room for meeting. + + + + + + + + + + + + - 'roomURL' (optional) means that room has an URL to be used to join the meeting. Typically used for sending invitations to users via mail, etc. + - 'roomLocked' means the owner is not allowing any more participants to join the room. + - is 'hasPIN' means that the participant is required to enter a PIN in order to join this room. + - 'roomPIN' is the actual PIN that participant uses to enter the room. + - 'hasModeratorPIN' (optional) means that the participant is required to enter a Moderator PIN in order to control this room. + - 'moderatorPIN' (optional) is the actual Moderator PIN that participant uses to control the room. + + + + + + + + + + + + + + + This is an ID of addressing object in VidyoPortal (Member, Room, or Legacy device). + + + + + + This object is returned as a result of search for member, public room, or legacy device. + + + + + + + + + + + + + + + + + + + + + + + + + + This means that the Faults happens in system. + + + + + + + + + + This means that the arguments which are passed into services are wrong. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Member Description on VidyoPortal. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Room Description on VidyoPortal. + + + + + + + + + + + + + + + Group Description on VidyoPortal. + All the members and rooms belong to the same group share the same properties. + + + + + + + + + + + + + + Tenant Description on VidyoPortal in Multitenant configuration. + + + + + + + + + + + + + + + + + + + + Returns Members meeting a search criterion (optional) + + + + + + + + + + + + + + + + + + Get details of a Member. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Returns Rooms meeting a search criterion (optional) + + + + + + + + + + + + + + + + + + Get details of a Room. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Returns Groups meeting a search criterion (optional) + + + + + + + + + + + + + + + + + + Get details of a Group. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Request to list the participants in a meeting as idenfied by EntityId. + To list the participants in a personal room belonging to a Member, the EntityID must be set to the Member. + + + + + + + + + + + + + + + + + + + + + + + Invites a Member to a room. + + + + + + + + + + + + + + + + + + + + + Request to remove the EntityID (Endpoint) from the conference. + + + + + + + + + + + + + + + + + + Request to mute the audio for a given EntityID (Endpoint) in the conference. + + + + + + + + + + + + + + + + + + Request to unmute the audio for a given EntityID (Endpoint) in the conference. + + + + + + + + + + + + + + + + + + Request to start the video for a given EntityID (Endpoint) in the conference. + + + + + + + + + + + + + + + + + + Request to stop the video for a given EntityID (Endpoint) in the conference. + + + + + + + + + + + + + + + + + + Request to create a URL for a Room or a Member's personal room. + + + + + + + + + + + + + + + + + Request to delete a URL for a Room or a Member's personal room. + + + + + + + + + + + + + + + + + Create a PIN for a Room or a Member's personal room. + + + + + + + + + + + + + + + + + + Removes a PIN for a Room or a Member's personal room. + + + + + + + + + + + + + + + + + Updates a Member's password. + + + + + + + + + + + + + + + + + Updates a Member's language settings. + + + + + + + + + + + + + + + + + Request for currently effective licese data + + + + + + + + License Data currently in effect. Feature names 'Ports', 'Seats', 'Installs' + + + + + + + + + + Available Recording Profile + + + + + + + + + Recording Profiles Request + + + + + Recording Profiles Response + + + + + + + + + + + Request to record the video for a given roomId + and profileId. + + + + + + + + + + + + + + + + + + + Portal Version Request + + + + + Portal Version Response + + + + + + + + + + Resources are not available for the requested operation. + + + + + + + + + + Request to pause the recording for a given participantID (Endpoint) in the conference. + + + + + + + + + + + + + + + + + + Request to resume the recording for a given participantID (Endpoint) in the conference. + + + + + + + + + + + + + + + + + + Request to stop the recording for a given participantID (Endpoint) in the conference. + + + + + + + + + + + + + + + + + + Location Tag + + + + + + + + Request to get the available Location Tags + + + + + + + + + + Response containing available Location Tags + + + + + + + + + + + Request to get the Webcast URL and Pin Indicator for a Room + + + + + + + + + + Response containing the Webcast URL and Pin Indicator for a Room + + + + + + + + + + + Request to create a URL for a Webcast + + + + + + + + + + + + + + + + + Request to create a PIN for a Webcast + + + + + + + + + + + + + + + + + + Request to remove Webcast URL for a Room + + + + + + + + + + + + + + + + + Request to remove PIN for a Webcast + + + + + + + + + + + + + + + + + Available Room Profile + + + + + + + + + Room Profiles Request + + + + + Room Profiles Response + + + + + + + + + + + Request to get a Profile for a room + + + + + + + + + + + + + + + + + Request to set a Profile for a room + + + + + + + + + + + + + + + + + + Request to remove RoomProfile for a room + + + + + + + + + + + + + + + + + Create a Moderator PIN for a Room or a Member's personal room. + + + + + + + + + + + + + + + + + + Removes a Moderator PIN for a Room or a Member's personal room. + + + + + + + + + + + + + + + + + Provides the user the Conference ID to which the user is associated. + + + + + + + + + + + + + + + + + Request to find if Scheduled Room feature is available or not. + + + + + + + + + + + + Request to enable/disable Scheduled Room feature for the Tenant. Scheduled Room is enabled by Default. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]>http://schemas.xmlsoap.org/wsdl/http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + \r + \r + ?\r + ?\r + ?\r + ?\r + ?\r + \r + ?\r + \r + ?\r + \r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + \r + \r + ?\r + ?\r + \r + ?\r + ?\r + ?\r + ?\r + ?\r + ?\r + \r + ?\r + ?\r + \r + ?\r + \r + ?\r + \r + ?\r + \r + ?\r + ?\r + \r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + \r + \r + ?\r + ?\r + ?\r + ?\r + ?\r + ?\r + \r + \r + ?\r + ?\r + ?\r + \r + ?\r + ?\r + \r + ?\r + \r + \r + ?\r + \r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + ?\r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + ?\r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + ?\r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + \r + ?\r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + \r + \r + \r + ?\r + \r + ?\r + \r + ?\r + \r + ?\r + \r + ?\r + \r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + \r + \r + \r + ?\r + \r + ?\r + \r + ?\r + \r + ?\r + \r + ?\r + \r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + \r + \r + \r + ?\r + \r + ?\r + \r + ?\r + \r + ?\r + \r + ?\r + \r + \r + \r +]]><xml-fragment/>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + 40796\r + \r + \r +]]>pierrick.lozachpasswordNo AuthorizationUTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + ?\r + \r +]]><xml-fragment/>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + ?\r + \r +]]>pierrick.lozachpasswordNo AuthorizationUTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + ?\r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + \r + \r + \r + ?\r + \r + ?\r + \r + ?\r + \r + ?\r + \r + ?\r + \r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + \r + ?\r + ?\r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + ?\r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + ?\r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + ?\r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + ?\r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + ?\r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + ?\r + \r + \r +]]><xml-fragment/>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + 40796\r + 02\r + \r + \r + \r +]]>pierrick.lozachpasswordNo AuthorizationUTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + ?\r + \r + \r +]]><xml-fragment/>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + ?\r + \r + \r +]]>pierrick.lozachNo AuthorizationUTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + ?\r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + ?\r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + \r + \r + ?\r + ?\r + ?\r + ?\r + ?\r + \r + ?\r + \r + ?\r + \r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + \r + \r + ?\r + ?\r + \r + ?\r + ?\r + ?\r + ?\r + ?\r + ?\r + \r + ?\r + ?\r + \r + ?\r + \r + ?\r + \r + ?\r + \r + ?\r + ?\r + \r + \r + \r +]]>UTF-8http://inin.sandbox.vidyo.com/services/v1_1/VidyoPortalAdminService/\r + \r + \r + \r + ?\r + \r + \r + ?\r + ?\r + ?\r + ?\r + ?\r + ?\r + \r + \r + ?\r + ?\r + ?\r + \r + ?\r + ?\r + \r + ?\r + \r + \r + ?\r + \r + \r + \r +]]>http://inin.sandboxreplay.vidyo.com/replay/services/VidyoReplayContentManagementService?wsdl + + + + + + + + String representation of successfull operation - "OK" + + + + + + + + + sortBy enumeration of possible values; + + + + + + + + + + sortDirection enumeration of possible values; + + + + + + + + + recordScope enumeration of possible values; + "all" do not filter based on recordScope(includes all user records plus all organizational and public records from other users) + "allUser" filter all records for particular User + "new" new records filter for particular User + "private" private records filter for particular User + "organizational" organizational records filter for particular User + "public" public records filter for particular User + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This means that the exceptions happens in system. + + + + + + + + + + This means that the exceptions happens in system. + + + + + + + + + + This elements array will be returned after user search request + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This Record elements array will be returned after user search request + + + + + + + + + + This Record elements array plus counters will be returned after user search request + allVideosCount - total available user records count including public and organizational records from other users + searchCount - available user records count after applying search filtering + myVideosCount - total user records count for user own records.\n + note: admin user has access for all available user records under particular tenant + webcastCount - total webcasts count for particular user + newCount - total new records count for particular user + privateCount - total private records count for particular user + organizationalCount - total organizational records count for particular user + publicCount - total public records count for particular user + records - records array returned based on limit and offset criteria. Maximum output limit is 200 records. + + + + + + + + + + + + + + + + + + This elements returnes search records based on different criteria plus access levels. + Can be used for output records paging via offset and limit parameters in a conjunction with + a previous GetRecordsSearchCountRequest element. + userName is detected based on username loggged in and current tenant. + tenantName is optional and can be used for super user only. + default sorting criteria is by date descending + Max output records number will be limited to 200 records + + sortBy valid values: 'date', 'title', 'room', defaulted to 'date' if no value present + + + + + + + + + + + + + + + + + + + This elements requests a record id's array for input + Note: only records, which user has view access to, will be returned + + + + + + + + + + This elements requests to update a record fields such as: + title if not provided, will be retained without changes + comments if not provided, will be retained without changes + tags if not provided, will be retained without changes + recordScope if not provided, will be retained without changes + 1 - New + 2 - Private + 3 - Organization + 4 - Public + pin if not provided, will be retained without changes, empty string - pin removed from record + based on record id. + If record value is not provided, the same value will be retained + locked if not provided, will be retained without changes + true - record will be locked + false - record will be unlocked + + + + + + + + + + + + + + + + This elements requests a record deletion based on record id. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]>http://schemas.xmlsoap.org/wsdl/http://inin.sandboxreplay.vidyo.com/replay/services/VidyoReplayContentManagementService/UTF-8http://inin.sandboxreplay.vidyo.com/replay/services/VidyoReplayContentManagementService/\r + \r + \r + \r + ?\r + \r + \r +]]>UTF-8http://inin.sandboxreplay.vidyo.com/replay/services/VidyoReplayContentManagementService/\r + \r + \r + \r + \r + ?\r + \r + \r +]]><xml-fragment/>UTF-8http://inin.sandboxreplay.vidyo.com/replay/services/VidyoReplayContentManagementService/\r + \r + \r + \r + \r + \r + \r + \r + \r + \r + \r + \r + \r + \r + \r + \r +]]>pierrick.lozachpasswordNo AuthorizationUTF-8http://inin.sandboxreplay.vidyo.com/replay/services/VidyoReplayContentManagementService/\r + \r + \r + \r + ?\r + \r + ?\r + \r + ?\r + \r + ?\r + \r + ?\r + \r + ?\r + \r + ?\r + \r + \r +]]> \ No newline at end of file diff --git a/postman/Vidyo.json.postman_collection b/postman/Vidyo.json.postman_collection new file mode 100644 index 0000000..db68566 --- /dev/null +++ b/postman/Vidyo.json.postman_collection @@ -0,0 +1,534 @@ +{ + "id": "031c3a17-40bd-8f31-fedd-185a58ca697f", + "name": "Vidyo", + "description": "", + "order": [ + "d247d09f-582b-dddf-6813-27342cfaba35", + "8d25f720-1694-6f95-b63c-d47ada8ef778", + "61b05db5-dca6-4d1b-c04e-0abaacd43e0b", + "da46ff25-fbf2-b42d-fea6-00e546754485", + "e2889949-11b0-e3cc-ae85-99d16dd1801f", + "a58873af-bcbc-a09b-9886-59c30dc08132", + "e82cf60d-8775-75f7-5f66-0248c52f94d2", + "3344c2c3-0fe4-618d-7cf5-ca1ca268704a", + "a87adf50-02b9-feee-9f03-6b6cdc27604f", + "388334c9-b3ea-5911-1ccd-869726ce258b", + "2e672496-c938-d020-651b-0cdcca594bc7", + "e218dfe0-b073-8101-e4f9-9c7b1dd80ddd", + "312d842f-b3b9-f3db-db8b-9ad0a1c6d1ab", + "05fb6d89-8883-986c-2bf6-51a3b222ed11", + "b44f552a-45a7-af30-79c9-7a902b614b66", + "55c34088-0208-2131-a99d-d897898b5750", + "8a3785a7-3dc8-60b5-1cc5-55416fd83644", + "aab786c9-0f55-f99b-a6d1-1879c7e3fc45", + "9c212a87-5af6-6567-d548-70d5f433fef4", + "07fdaba4-9aaa-2044-9fc5-8d869f88e35f", + "d8b5da53-bd48-4100-2213-e80c0687f7d9", + "d709200d-8ebf-98e3-eacf-a90125070181", + "f59ebe4d-16a8-e08b-83f5-ef0c23757c0a", + "120d71b6-a52b-d9c2-cacc-279097abf85c", + "09410442-e2e8-f0db-9e86-03d79bffc2a0", + "8baab497-094e-8533-3079-0ea3e9608b46" + ], + "folders": [], + "timestamp": 1444727620461, + "owner": 0, + "remoteLink": "", + "public": false, + "requests": [ + { + "id": "05fb6d89-8883-986c-2bf6-51a3b222ed11", + "headers": "Content-Type: application/json\n", + "url": "{{ininvid_ApiBase}}/rooms/6896/participants/287", + "preRequestScript": "", + "pathVariables": {}, + "method": "DELETE", + "data": [], + "dataMode": "params", + "version": 2, + "tests": "", + "currentHelper": "normal", + "helperAttributes": {}, + "time": 1421193229846, + "name": "/rooms/{roomId}/participants/{participantId}", + "description": "Kicks a participant from the room", + "collectionId": "031c3a17-40bd-8f31-fedd-185a58ca697f", + "responses": [] + }, + { + "id": "07fdaba4-9aaa-2044-9fc5-8d869f88e35f", + "headers": "Content-Type: application/json\n", + "url": "{{ininvid_ApiBase}}/conversations/attach", + "preRequestScript": "", + "pathVariables": {}, + "method": "POST", + "data": [], + "dataMode": "raw", + "version": 2, + "tests": "", + "currentHelper": "normal", + "helperAttributes": {}, + "time": 1421193538109, + "name": "/conversations/attach", + "description": "Attaches a conversation to an interaction", + "collectionId": "031c3a17-40bd-8f31-fedd-185a58ca697f", + "responses": [], + "rawModeData": "{\n interactionId:2001401225,\n additionalAttributes:[\n {\n key:'Eic_RemoteName',\n value:'Vidyo chat attached from postman'\n }\n ],\n guestName:'Walter White'\n}" + }, + { + "collectionId": "031c3a17-40bd-8f31-fedd-185a58ca697f", + "id": "09410442-e2e8-f0db-9e86-03d79bffc2a0", + "name": "GetRoomStatus", + "description": "", + "url": "http://{{ininvid_ApiBase}}:8000/VidyoIntegrationService/json/GetRoomStatus/{CONVERSATIONID}", + "method": "GET", + "headers": "", + "data": [], + "dataMode": "params", + "timestamp": 0, + "responses": [], + "version": 2, + "preRequestScript": "", + "tests": "" + }, + { + "collectionId": "031c3a17-40bd-8f31-fedd-185a58ca697f", + "id": "120d71b6-a52b-d9c2-cacc-279097abf85c", + "name": "InitiateVidyoChat", + "description": "", + "url": "http://{{ininvid_ApiBase}}/VidyoIntegrationService/json/InitiateVidyoChat", + "method": "POST", + "headers": "Content-Type: application/json\n", + "data": [], + "dataMode": "raw", + "timestamp": 0, + "responses": [], + "version": 2, + "rawModeData": "{\n\t\"AdditionalAttributes\":[{\n\t\t\"key\":\"String content\",\n\t\t\"value\":\"String content\"\n\t}],\n\t\"GuestName\":\"String content\",\n\t\"IcWorkgroup\":\"sales\"\n}", + "preRequestScript": "", + "tests": "" + }, + { + "id": "2e672496-c938-d020-651b-0cdcca594bc7", + "headers": "Content-Type: application/json\n", + "url": "{{ininvid_ApiBase}}/rooms/6895", + "preRequestScript": "", + "pathVariables": {}, + "method": "DELETE", + "data": [], + "dataMode": "params", + "version": 2, + "tests": "", + "currentHelper": "normal", + "helperAttributes": {}, + "time": 1421192922115, + "name": "/rooms/{roomId}", + "description": "Deletes a Vidyo room", + "collectionId": "031c3a17-40bd-8f31-fedd-185a58ca697f", + "responses": [] + }, + { + "id": "312d842f-b3b9-f3db-db8b-9ad0a1c6d1ab", + "headers": "Content-Type: application/json\n", + "url": "{{ininvid_ApiBase}}/rooms/6899/participants", + "preRequestScript": "", + "pathVariables": {}, + "method": "GET", + "data": [], + "dataMode": "params", + "version": 2, + "tests": "", + "currentHelper": "normal", + "helperAttributes": {}, + "time": 1421194548681, + "name": "/rooms/{roomId}/participants", + "description": "Gets the list of people in the room\n", + "collectionId": "031c3a17-40bd-8f31-fedd-185a58ca697f", + "responses": [] + }, + { + "id": "3344c2c3-0fe4-618d-7cf5-ca1ca268704a", + "headers": "Content-Type: application/json\n", + "url": "{{ininvid_ApiBase}}/rooms", + "preRequestScript": "", + "pathVariables": {}, + "method": "POST", + "data": [], + "dataMode": "params", + "version": 2, + "tests": "", + "currentHelper": "normal", + "helperAttributes": {}, + "time": 1421192886430, + "name": "/rooms", + "description": "Creates a new Vidyo room", + "collectionId": "031c3a17-40bd-8f31-fedd-185a58ca697f", + "responses": [] + }, + { + "id": "388334c9-b3ea-5911-1ccd-869726ce258b", + "headers": "Content-Type: application/json\n", + "url": "{{ininvid_ApiBase}}/rooms/6895", + "preRequestScript": "", + "pathVariables": {}, + "method": "GET", + "data": [], + "dataMode": "params", + "version": 2, + "tests": "", + "currentHelper": "normal", + "helperAttributes": {}, + "time": 1444727605562, + "name": "/rooms/{roomId}", + "description": "Gets information about a Vidyo room", + "collectionId": "031c3a17-40bd-8f31-fedd-185a58ca697f", + "responses": [] + }, + { + "id": "55c34088-0208-2131-a99d-d897898b5750", + "headers": "Content-Type: application/json\n", + "url": "{{ininvid_ApiBase}}/rooms/6896/actions/287", + "preRequestScript": "", + "pathVariables": {}, + "method": "PATCH", + "data": [], + "dataMode": "raw", + "version": 2, + "tests": "", + "currentHelper": "normal", + "helperAttributes": {}, + "time": 1421193234516, + "name": "/rooms/{roomId}/actions/{participantId}", + "description": "Performs an action on a participant in a room. \n\nActions:\n\n* MuteAudio - 'true' to mute the participant's audio stream, 'false' to unmute\n* MuteVideo - 'true' to mute the participant's video stream, 'false' to unmute\n* MuteBoth - 'true' to mute both the participant's video and audio stream, 'false' to unmute both", + "collectionId": "031c3a17-40bd-8f31-fedd-185a58ca697f", + "responses": [], + "rawModeData": "{\n action:'MuteVideo',\n data:'true'\n}" + }, + { + "id": "61b05db5-dca6-4d1b-c04e-0abaacd43e0b", + "headers": "Content-Type: application/json\n", + "url": "{{ininvid_ApiBase}}/coreservice/info/routes", + "preRequestScript": "", + "pathVariables": {}, + "method": "GET", + "data": [], + "dataMode": "params", + "version": 2, + "tests": "", + "currentHelper": "normal", + "helperAttributes": {}, + "time": 1421195540637, + "name": "/coreservice/info/routes", + "description": "Gets the routes for the Core Service", + "collectionId": "031c3a17-40bd-8f31-fedd-185a58ca697f", + "responses": [] + }, + { + "id": "8a3785a7-3dc8-60b5-1cc5-55416fd83644", + "headers": "Content-Type: application/json\n", + "url": "{{ininvid_ApiBase}}/conversations", + "preRequestScript": "", + "pathVariables": {}, + "method": "POST", + "data": [], + "dataMode": "raw", + "version": 2, + "tests": "", + "currentHelper": "normal", + "helperAttributes": {}, + "time": 1445276913688, + "name": "/conversations (generic)", + "description": "Creates a new conversation using a generic object", + "collectionId": "031c3a17-40bd-8f31-fedd-185a58ca697f", + "responses": [], + "rawModeData": "{\n queueName:'support',\n queueType: 'Workgroup',\n mediaTypeParameters:{\n mediaType: 'GenericInteraction',\n initialState: 'Offering',\n additionalAttributes:[\n {\n key:'Eic_RemoteName',\n value:'Vidyo chat from postman'\n }\n ]\n },\n record:true\n}" + }, + { + "collectionId": "031c3a17-40bd-8f31-fedd-185a58ca697f", + "id": "8baab497-094e-8533-3079-0ea3e9608b46", + "name": "GetVidyoGuestLink", + "description": "", + "url": "http://{{ininvid_ApiBase}}:8000/VidyoIntegrationService/json/GetVidyoGuestLink", + "method": "POST", + "headers": "Content-Type: application/json\n", + "data": [], + "dataMode": "raw", + "timestamp": 0, + "responses": [], + "version": 2, + "rawModeData": "{\n\t\"ConversationId\":\"GUID\",\n\t\"GuestName\":\"String content\"\n}", + "preRequestScript": "", + "tests": "" + }, + { + "id": "8d25f720-1694-6f95-b63c-d47ada8ef778", + "headers": "Content-Type: application/json\n", + "url": "{{ininvid_ApiBase}}/coreservice/info", + "preRequestScript": "", + "pathVariables": {}, + "method": "GET", + "data": [], + "dataMode": "params", + "version": 2, + "tests": "", + "currentHelper": "normal", + "helperAttributes": {}, + "time": 1421195523970, + "name": "/coreservice/info", + "description": "Gets information about the Core Service", + "collectionId": "031c3a17-40bd-8f31-fedd-185a58ca697f", + "responses": [] + }, + { + "id": "9c212a87-5af6-6567-d548-70d5f433fef4", + "headers": "Content-Type: application/json\n", + "url": "{{ininvid_ApiBase}}/conversations", + "preRequestScript": "", + "pathVariables": {}, + "method": "POST", + "data": [], + "dataMode": "raw", + "version": 2, + "tests": "", + "currentHelper": "normal", + "helperAttributes": {}, + "time": 1445196888791, + "name": "/conversations (email)", + "description": "Creates a new conversation using an email interaction", + "collectionId": "031c3a17-40bd-8f31-fedd-185a58ca697f", + "responses": [], + "rawModeData": "{\n queueName:'support',\n queueType: 'Workgroup',\n mediaTypeParameters:{\n mediaType: 'Email',\n additionalAttributes:[\n {\n key:'Eic_RemoteName',\n value:'Vidyo chat from postman'\n }\n ]\n },\n record: true\n}" + }, + { + "id": "a58873af-bcbc-a09b-9886-59c30dc08132", + "headers": "Content-Type: application/json\n", + "url": "{{ininvid_ApiBase}}/vidyoservice/info/routes", + "preRequestScript": "", + "pathVariables": {}, + "method": "GET", + "data": [], + "dataMode": "params", + "version": 2, + "tests": "", + "currentHelper": "normal", + "helperAttributes": {}, + "time": 1421195626497, + "name": "/vidyoservice/info/routes", + "description": "Gets the routes for the Vidyo service", + "collectionId": "031c3a17-40bd-8f31-fedd-185a58ca697f", + "responses": [] + }, + { + "id": "a87adf50-02b9-feee-9f03-6b6cdc27604f", + "headers": "Content-Type: application/json\n", + "url": "{{ininvid_ApiBase}}/rooms", + "preRequestScript": "", + "pathVariables": {}, + "method": "GET", + "data": [], + "dataMode": "params", + "version": 2, + "tests": "", + "currentHelper": "normal", + "helperAttributes": {}, + "time": 1421192892187, + "name": "/rooms", + "description": "Gets information about all Vidyo rooms currently in use by the integration", + "collectionId": "031c3a17-40bd-8f31-fedd-185a58ca697f", + "responses": [] + }, + { + "id": "aab786c9-0f55-f99b-a6d1-1879c7e3fc45", + "headers": "Content-Type: application/json\n", + "url": "{{ininvid_ApiBase}}/conversations", + "preRequestScript": "", + "pathVariables": {}, + "method": "POST", + "data": [], + "dataMode": "raw", + "version": 2, + "tests": "", + "currentHelper": "normal", + "helperAttributes": {}, + "time": 1445171326712, + "name": "/conversations (callback)", + "description": "Creates a new conversation", + "collectionId": "031c3a17-40bd-8f31-fedd-185a58ca697f", + "responses": [], + "rawModeData": "{\n queueName:'support',\n queueType: 'Workgroup',\n mediaTypeParameters:{\n mediaType: 'Callback',\n initialState: 'Offering',\n additionalAttributes:[\n {\n key:'Eic_RemoteName',\n value:'Vidyo chat from postman'\n }\n ]\n }\n}" + }, + { + "id": "b44f552a-45a7-af30-79c9-7a902b614b66", + "headers": "Content-Type: application/json\n", + "url": "{{ininvid_ApiBase}}/rooms/6899/participantCount", + "preRequestScript": "", + "pathVariables": {}, + "method": "GET", + "data": [], + "dataMode": "params", + "version": 2, + "tests": "", + "currentHelper": "normal", + "helperAttributes": {}, + "time": 1421194538111, + "name": "/rooms/{roomId}/participantCount", + "description": "Gets the count of participants in the Vidyo room", + "collectionId": "031c3a17-40bd-8f31-fedd-185a58ca697f", + "responses": [] + }, + { + "id": "d247d09f-582b-dddf-6813-27342cfaba35", + "headers": "Content-Type: application/json\n", + "url": "{{ininvid_ApiBase}}/coreservice/initialize", + "preRequestScript": "", + "pathVariables": {}, + "method": "POST", + "data": [], + "dataMode": "params", + "version": 2, + "tests": "", + "currentHelper": "normal", + "helperAttributes": {}, + "time": 1421195504509, + "name": "/coreservice/initialize", + "description": "Initializes the service", + "collectionId": "031c3a17-40bd-8f31-fedd-185a58ca697f", + "responses": [] + }, + { + "id": "d709200d-8ebf-98e3-eacf-a90125070181", + "headers": "Content-Type: application/json\n", + "url": "http://{{ininvid_ApiBase}}:8000/ininvid/v1/conversations/39198537-150b-457b-9e1b-5d2f55577085", + "preRequestScript": "", + "pathVariables": {}, + "method": "GET", + "data": [], + "dataMode": "params", + "version": 2, + "tests": "", + "currentHelper": "normal", + "helperAttributes": {}, + "time": 1421193571411, + "name": "/conversations/{conversationId}", + "description": "Gets\nthe conversation", + "collectionId": "031c3a17-40bd-8f31-fedd-185a58ca697f", + "responses": [] + }, + { + "id": "d8b5da53-bd48-4100-2213-e80c0687f7d9", + "headers": "Content-Type: application/json\n", + "url": "{{ininvid_ApiBase}}/conversations", + "preRequestScript": "", + "pathVariables": {}, + "method": "GET", + "data": [], + "dataMode": "params", + "version": 2, + "tests": "", + "currentHelper": "normal", + "helperAttributes": {}, + "time": 1421193580452, + "name": "/conversations", + "description": "Gets the conversations", + "collectionId": "031c3a17-40bd-8f31-fedd-185a58ca697f", + "responses": [] + }, + { + "id": "da46ff25-fbf2-b42d-fea6-00e546754485", + "headers": "Content-Type: application/json\n", + "url": "{{ininvid_ApiBase}}/queues/stats?queues=sales&queues=support&queues=screenrec&queues=chat&waitForData=false", + "preRequestScript": "", + "pathVariables": {}, + "method": "GET", + "data": [], + "dataMode": "params", + "version": 2, + "tests": "", + "currentHelper": "normal", + "helperAttributes": {}, + "time": 1421195584897, + "name": "/queues/stats?queues={queue}", + "description": "Gets statistics about CIC queues", + "collectionId": "031c3a17-40bd-8f31-fedd-185a58ca697f", + "responses": [] + }, + { + "id": "e218dfe0-b073-8101-e4f9-9c7b1dd80ddd", + "headers": "Content-Type: application/json\n", + "url": "{{ininvid_ApiBase}}/replay/40757", + "preRequestScript": "", + "pathVariables": {}, + "method": "PUT", + "data": [], + "dataMode": "raw", + "version": 2, + "tests": "", + "currentHelper": "normal", + "helperAttributes": {}, + "time": 1445196660121, + "name": "/replay/{roomid}", + "description": "Records the room", + "collectionId": "031c3a17-40bd-8f31-fedd-185a58ca697f", + "responses": [], + "rawModeData": "{\n}" + }, + { + "id": "e2889949-11b0-e3cc-ae85-99d16dd1801f", + "headers": "Content-Type: application/json\n", + "url": "{{ininvid_ApiBase}}/vidyoservice/info", + "preRequestScript": "", + "pathVariables": {}, + "method": "GET", + "data": [], + "dataMode": "params", + "version": 2, + "tests": "", + "currentHelper": "normal", + "helperAttributes": {}, + "time": 1421195609348, + "name": "/vidyoservice/info", + "description": "Gets information about the Vidyo service", + "collectionId": "031c3a17-40bd-8f31-fedd-185a58ca697f", + "responses": [] + }, + { + "id": "e82cf60d-8775-75f7-5f66-0248c52f94d2", + "headers": "Content-Type: application/json\n", + "url": "{{ininvid_ApiBase}}/replay/622", + "preRequestScript": "", + "pathVariables": {}, + "method": "GET", + "data": [], + "dataMode": "params", + "version": 2, + "tests": "", + "currentHelper": "normal", + "helperAttributes": {}, + "time": 1444728459942, + "name": "/replay/{roomId}", + "description": "Gets the recording URL from a Vidyo room", + "collectionId": "031c3a17-40bd-8f31-fedd-185a58ca697f", + "responses": [] + }, + { + "id": "f59ebe4d-16a8-e08b-83f5-ef0c23757c0a", + "headers": "Content-Type: application/json\n", + "url": "{{ininvid_ApiBase}}/conversations/39198537-150b-457b-9e1b-5d2f55577085", + "preRequestScript": "", + "pathVariables": {}, + "method": "DELETE", + "data": [], + "dataMode": "raw", + "version": 2, + "tests": "", + "currentHelper": "normal", + "helperAttributes": {}, + "time": 1421193613405, + "name": "/conversations/{conversationId}", + "description": "Ends the conversation", + "collectionId": "031c3a17-40bd-8f31-fedd-185a58ca697f", + "responses": [], + "rawModeData": "" + } + ] +} \ No newline at end of file diff --git a/sql/vidyo_set_custom_attribute.sql b/sql/vidyo_set_custom_attribute.sql new file mode 100644 index 0000000..85775bc --- /dev/null +++ b/sql/vidyo_set_custom_attribute.sql @@ -0,0 +1,41 @@ +-- ================================================ +-- Stores a custom attribute from an interaction +-- to a screen recording +-- ================================================ +USE I3_IC + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +-- ============================================= +-- Author: Pierrick Lozach +-- Create date: 10/19/2015 +-- ============================================= +CREATE PROCEDURE vidyo_set_custom_attribute + @RecordingGuid uniqueidentifier, + @CustomAttributeName nvarchar(255), + @CustomAttributeValue nvarchar(255) +AS +BEGIN + + SET NOCOUNT ON; + + DECLARE @CustomAttributeNameId int + + -- Insert AttributeName if it does not exist + IF (SELECT COUNT(*) FROM IR_CustomAttributeName WHERE Name=@CustomAttributeName) = 0 + BEGIN + INSERT INTO IR_CustomAttributeName (Name) VALUES (@CustomAttributeName) + END + + -- Get Custom Attribute Name Id + SET @CustomAttributeNameId = (SELECT CustomAttributeNameId FROM IR_CustomAttributeName WHERE Name = @CustomAttributeName) + + -- Insert Custom Attribute Value + INSERT INTO IR_CustomAttribute + (RecordingId, CustomAttributeNameId, Value, Version) VALUES + (@RecordingGuid, @CustomAttributeNameId, @CustomAttributeValue, 1) + +END +GO diff --git a/src/VidyoIntegration/.nuget/NuGet.Config b/src/VidyoIntegration/.nuget/NuGet.Config new file mode 100644 index 0000000..67f8ea0 --- /dev/null +++ b/src/VidyoIntegration/.nuget/NuGet.Config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/VidyoIntegration/.nuget/NuGet.exe b/src/VidyoIntegration/.nuget/NuGet.exe new file mode 100644 index 0000000..324daa8 Binary files /dev/null and b/src/VidyoIntegration/.nuget/NuGet.exe differ diff --git a/src/VidyoIntegration/.nuget/NuGet.targets b/src/VidyoIntegration/.nuget/NuGet.targets new file mode 100644 index 0000000..3f8c37b --- /dev/null +++ b/src/VidyoIntegration/.nuget/NuGet.targets @@ -0,0 +1,144 @@ + + + + $(MSBuildProjectDirectory)\..\ + + + false + + + false + + + true + + + false + + + + + + + + + + + $([System.IO.Path]::Combine($(SolutionDir), ".nuget")) + + + + + $(SolutionDir).nuget + + + + $(MSBuildProjectDirectory)\packages.$(MSBuildProjectName.Replace(' ', '_')).config + $(MSBuildProjectDirectory)\packages.$(MSBuildProjectName).config + + + + $(MSBuildProjectDirectory)\packages.config + $(PackagesProjectConfig) + + + + + $(NuGetToolsPath)\NuGet.exe + @(PackageSource) + + "$(NuGetExePath)" + mono --runtime=v4.0.30319 "$(NuGetExePath)" + + $(TargetDir.Trim('\\')) + + -RequireConsent + -NonInteractive + + "$(SolutionDir) " + "$(SolutionDir)" + + + $(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir) + $(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols + + + + RestorePackages; + $(BuildDependsOn); + + + + + $(BuildDependsOn); + BuildPackage; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/VidyoIntegration/Addin/VidyoAddin/VidyoAddin.cs b/src/VidyoIntegration/Addin/VidyoAddin/VidyoAddin.cs index 116a75a..c7cf976 100644 --- a/src/VidyoIntegration/Addin/VidyoAddin/VidyoAddin.cs +++ b/src/VidyoIntegration/Addin/VidyoAddin/VidyoAddin.cs @@ -1,15 +1,20 @@ -using System; +using ININ.IceLib.Connection; +using ININ.IceLib.Interactions; +using ININ.InteractionClient; +using ININ.InteractionClient.AddIn; +using ININ.InteractionClient.Messages.Interactions; +using ININ.Messaging; +using System; using System.Management.Instrumentation; using System.Threading; using System.Windows; using System.Windows.Forms; using System.Windows.Forms.Integration; -using ININ.IceLib.Connection; -using ININ.InteractionClient.AddIn; using VidyoIntegration.TraceLib; using VidyoIntegration.VidyoAddin.View; using VidyoIntegration.VidyoAddin.ViewModel; using MessageBox = System.Windows.Forms.MessageBox; +using InteractionType = ININ.Client.Common.Interactions.InteractionType; namespace VidyoIntegration.VidyoAddin { @@ -21,6 +26,7 @@ public class VidyoAddin : AddInWindow private IInteractionSelector _interactionSelector; private Session _session; private readonly Window _window = null; + private IMessageBroker _messageBroker; protected override string Id { @@ -76,6 +82,10 @@ protected override void OnLoad(IServiceProvider serviceProvider) // Store service provider reference _serviceProvider = serviceProvider; + // Get Message Broker + _messageBroker = ServiceLocator.Current.GetInstance(); + _messageBroker.Subscribe(SupressEmailForms); + // Get Session _session = _serviceProvider.GetService(typeof (Session)) as Session; if (_session == null) @@ -124,5 +134,13 @@ protected override void OnUnload() base.OnUnload(); } } + + private void SupressEmailForms(ShowCommonFormMessage showCommonFormMessage) + { + if (showCommonFormMessage.InteractionType == InteractionType.Email) + { + showCommonFormMessage.ShouldCancel = true; + } + } } } diff --git a/src/VidyoIntegration/Addin/VidyoAddin/VidyoAddin.csproj b/src/VidyoIntegration/Addin/VidyoAddin/VidyoAddin.csproj index b8efb68..12e9de0 100644 --- a/src/VidyoIntegration/Addin/VidyoAddin/VidyoAddin.csproj +++ b/src/VidyoIntegration/Addin/VidyoAddin/VidyoAddin.csproj @@ -34,25 +34,37 @@ - ..\..\..\..\..\..\lib\IceLib\IC4_2015_R4_P0 (x86)\bin\i3trace_dotnet_tracing-w32r-4-0.dll + C:\Program Files (x86)\Interactive Intelligence\ICUserApps\i3trace_dotnet_tracing-w32r-4-0.dll False + + C:\Program Files (x86)\Interactive Intelligence\ICUserApps\ININ.Client.Common.dll + + + C:\Program Files (x86)\Interactive Intelligence\ICUserApps\ININ.Common.dll + - ..\..\..\..\..\..\lib\IceLib\IC4_2015_R4_P0 (x86)\bin\ININ.IceLib.dll + C:\Program Files (x86)\Interactive Intelligence\ICUserApps\ININ.IceLib.dll False - ..\..\..\..\..\..\lib\IceLib\IC4_2015_R4_P0 (x86)\bin\ININ.IceLib.Interactions.dll + C:\Program Files (x86)\Interactive Intelligence\ICUserApps\ININ.IceLib.Interactions.dll False - ..\..\..\..\..\..\lib\IceLib\IC4_2015_R4_P0 (x86)\bin\ININ.IceLib.People.dll + C:\Program Files (x86)\Interactive Intelligence\ICUserApps\ININ.IceLib.People.dll False C:\Program Files (x86)\Interactive Intelligence\ICUserApps\ININ.InteractionClient.Addin.dll False + + C:\Program Files (x86)\Interactive Intelligence\ICUserApps\ININ.InteractionClient.Contracts.dll + + + C:\Program Files (x86)\Interactive Intelligence\ICUserApps\ININ.InteractionClient.Core.dll + @@ -197,4 +209,4 @@ --> - + \ No newline at end of file diff --git a/src/VidyoIntegration/Addin/VidyoAddin/ViewModel/Helpers/ParticipantCollection.cs b/src/VidyoIntegration/Addin/VidyoAddin/ViewModel/Helpers/ParticipantCollection.cs index 696fc94..d8cea57 100644 --- a/src/VidyoIntegration/Addin/VidyoAddin/ViewModel/Helpers/ParticipantCollection.cs +++ b/src/VidyoIntegration/Addin/VidyoAddin/ViewModel/Helpers/ParticipantCollection.cs @@ -13,6 +13,8 @@ public void AddRange(IEnumerable items, bool replace = false) // Optionally clear first if (replace) Items.Clear(); + if (items == null) return; + // Privately set the items foreach (var item in items) { diff --git a/src/VidyoIntegration/Addin/VidyoAddin/ViewModel/InteractionViewModel.cs b/src/VidyoIntegration/Addin/VidyoAddin/ViewModel/InteractionViewModel.cs index 1158993..7d764ab 100644 --- a/src/VidyoIntegration/Addin/VidyoAddin/ViewModel/InteractionViewModel.cs +++ b/src/VidyoIntegration/Addin/VidyoAddin/ViewModel/InteractionViewModel.cs @@ -151,7 +151,12 @@ private void ParticipantCheckerTimerOnElapsed(object sender, ElapsedEventArgs el // Call web service to get participant list var participants = VidyoServiceClient.GetParticipants(VidyoRoomId); - //Console.WriteLine("Participants (" + participants.Count + "): " + participants.Select(p => p.DisplayName).Aggregate((a, b) => a + "; " + b)); + + if (participants == null) + { + // This is due to a bug in Vidyo not setting the correct URL + return; + } // Update list Context.Send(s => Participants.AddRange(participants, true), null); diff --git a/src/VidyoIntegration/Addin/VidyoAddin/ViewModel/VidyoPanelViewModel.cs b/src/VidyoIntegration/Addin/VidyoAddin/ViewModel/VidyoPanelViewModel.cs index 340bc60..a1aaab5 100644 --- a/src/VidyoIntegration/Addin/VidyoAddin/ViewModel/VidyoPanelViewModel.cs +++ b/src/VidyoIntegration/Addin/VidyoAddin/ViewModel/VidyoPanelViewModel.cs @@ -21,6 +21,7 @@ using VidyoIntegration.VidyoAddin.ViewModel.Helpers; using InteractionEventArgs = ININ.IceLib.Interactions.InteractionEventArgs; using MessageBox = System.Windows.MessageBox; +using System.Runtime.InteropServices; namespace VidyoIntegration.VidyoAddin.ViewModel { @@ -62,9 +63,10 @@ public class VidyoPanelViewModel : ViewModelBase private ObservableCollection _interactions; - #endregion - + private Process[] processes; + private string procName = "Video Chat Reply - "; + #endregion #region Public Properties @@ -80,7 +82,7 @@ public bool IsInitialized get { return _isInitialized; } set { - _isInitialized = value; + _isInitialized = value; OnPropertyChanged(); } } @@ -90,7 +92,7 @@ public ObservableCollection Interactions get { return _interactions; } set { - _interactions = value; + _interactions = value; OnPropertyChanged(); } } @@ -100,7 +102,7 @@ public InteractionViewModel SelectedInteraction get { return _selectedInteraction; } set { - _selectedInteraction = value; + _selectedInteraction = value; OnPropertyChanged(); } } @@ -273,6 +275,17 @@ private void MyInteractionsOnInteractionChanged(object sender, InteractionAttrib e.InteractionAttributeNames.Contains(InteractionAttributeName.State)) // Due to pickup { TryScreenPop(e.Interaction); + + if (e.Interaction is EmailInteraction) + { + Trace.Main.note("Interaction is an email"); + if (e.Interaction.GetStringAttribute(VideoIntegrationAttributeNames.VideoRoomUrl).Length > 0) + { + Trace.Main.note("Suppress disconnect confirmation dialog. Does not appear to be working though."); + // Supress disconnect confirmation + e.Interaction.SetStringAttribute("Eic_EmailHasBeenRespondedTo", "1"); + } + } } } catch (Exception ex) @@ -539,7 +552,7 @@ private void FilterForTransfer(object data) try { // Cast args - var args = (FilterTextChangedEventArgs) data; + var args = (FilterTextChangedEventArgs)data; // Get entries from server var entries = PeopleManager.GetInstance(_session).GetLookupEntries(new LookupParameters @@ -564,7 +577,7 @@ private void FilterForTransfer(object data) }); // Complete the filter - args.Source.CompleteDeferredFilter(entries.LookupEntries.Select(entry=>(LookupEntryViewModel)entry), args.EventId); + args.Source.CompleteDeferredFilter(entries.LookupEntries.Select(entry => (LookupEntryViewModel)entry), args.EventId); } catch (Exception ex) { @@ -587,30 +600,30 @@ private void SendCustomNotification(CustomMessageType messageType, string object switch (messageType) { case CustomMessageType.ServerNotification: - { - var requestServerNotification = - new CustomRequest(new CustomMessageHeader(messageType, objectId, eventId)); - if (data != null && data.Length > 0) requestServerNotification.Write(data); - _customNotification.SendServerRequestNoResponse(requestServerNotification); - break; - } + { + var requestServerNotification = + new CustomRequest(new CustomMessageHeader(messageType, objectId, eventId)); + if (data != null && data.Length > 0) requestServerNotification.Write(data); + _customNotification.SendServerRequestNoResponse(requestServerNotification); + break; + } case CustomMessageType.ApplicationRequest: - { - var requestApplicationRequest = - new CustomRequest(new CustomMessageHeader(messageType, objectId, eventId)); - if (data != null && data.Length > 0) requestApplicationRequest.Write(data); - _customNotification.SendApplicationRequest(requestApplicationRequest); - break; - } + { + var requestApplicationRequest = + new CustomRequest(new CustomMessageHeader(messageType, objectId, eventId)); + if (data != null && data.Length > 0) requestApplicationRequest.Write(data); + _customNotification.SendApplicationRequest(requestApplicationRequest); + break; + } case CustomMessageType.ApplicationResponse: - { - var responseApplicationResponse = - new CustomResponse( - new CustomMessage(new CustomMessageHeader(messageType, objectId, eventId))); - if (data != null && data.Length > 0) responseApplicationResponse.Write(data); - _customNotification.SendApplicationResponse(responseApplicationResponse); - break; - } + { + var responseApplicationResponse = + new CustomResponse( + new CustomMessage(new CustomMessageHeader(messageType, objectId, eventId))); + if (data != null && data.Length > 0) responseApplicationResponse.Write(data); + _customNotification.SendApplicationResponse(responseApplicationResponse); + break; + } default: throw new Exception("Unsupported message type: " + messageType); } diff --git a/src/VidyoIntegration/CicComponents/CicManagerLib/CicManager.cs b/src/VidyoIntegration/CicComponents/CicManagerLib/CicManager.cs index b8a95cc..76018fd 100644 --- a/src/VidyoIntegration/CicComponents/CicManagerLib/CicManager.cs +++ b/src/VidyoIntegration/CicComponents/CicManagerLib/CicManager.cs @@ -10,6 +10,7 @@ using VidyoIntegration.CommonLib.CicTypes; using VidyoIntegration.CommonLib.CicTypes.TransportClasses; using VidyoIntegration.CommonLib.ConversationTypes; +using ININ.IceLib.QualityManagement; namespace VidyoIntegration.CicManagerLib { @@ -394,6 +395,9 @@ private void GenericInteractionOnAttributesChanged(object sender, AttributesEven } else Trace.Cic.verbose("New assignment not detected."); + + // Start Screen Recording + StartScreenRecording(interaction); } // Disconnected @@ -614,26 +618,14 @@ private void InitializeInteraction(Interaction interaction, string[] attributesT try { // Make list to watch - //var newAttributesToWatch = new string[WatchedAttributes.Length + attributesToWatch.Length]; - //WatchedAttributes.CopyTo(newAttributesToWatch,0); - //attributesToWatch.CopyTo(newAttributesToWatch, WatchedAttributes.Length); var newAttributesToWatch = new List(); newAttributesToWatch.AddRange(WatchedAttributes); newAttributesToWatch.AddRange(attributesToWatch); if (interaction is CallbackInteraction) { - //new[] - //{ - // CallbackInteractionAttributeName.CallbackMessage, - // CallbackInteractionAttributeName.CallbackPhone - //}.CopyTo(newAttributesToWatch, - // newAttributesToWatch.Length); - - //var attrList = newAttributesToWatch.ToList(); newAttributesToWatch.Add(CallbackInteractionAttributeName.CallbackMessage); newAttributesToWatch.Add(CallbackInteractionAttributeName.CallbackPhone); - //newAttributesToWatch = attrList.ToArray(); } // Add interaction to list @@ -763,6 +755,57 @@ private CallbackInteraction DoMakeCallbackInteraction(QueueId queue, string call } } + private EmailInteraction DoMakeEmailInteraction(QueueId queue, IEnumerable> additionalAttributes) + { + using (Trace.Cic.scope()) + { + try + { + // Store in list to prevent multiple enumeration of IEnumerable + var additionalAttributesList = additionalAttributes == null + ? new List>() + : additionalAttributes.ToList(); + + // Create parameters + var emailContent = new EmailContent(); + emailContent.Subject = "Test subject"; + emailContent.Sender = new EmailAddress("chat@inin.com", "Video Chat"); + emailContent.Body = "Test body"; + emailContent.ToRecipients.Add(new EmailAddress("chatreply@inin.com", "Video Chat Reply")); + + var emParams = new EmailInteractionParameters(emailContent); + + // Add additional attributes + var newWatchedAttributes = new List(WatchedAttributes); + foreach (var kvp in additionalAttributesList) + { + // Add as additional attribute if it's not a protected CIC attribute + if (!_cicProtectedAttributes.Any(s => s.ToLower().Equals(kvp.Key.ToLower()))) + emParams.AdditionalAttributes.Add(kvp.Key, kvp.Value); + + // Add to our list of things we're going to watch + newWatchedAttributes.Add(kvp.Key); + } + + // Make email + var interaction = InteractionsManager.GetInstance(_session).MakeEmail(emParams); + + // Set up stuff + InitializeInteraction(interaction, additionalAttributesList.Select(x => x.Key).ToArray()); + + // Transfer to queue + interaction.BlindTransfer(queue); + + return interaction; + } + catch (Exception ex) + { + Trace.Cic.exception(ex, "Failed to create email interaction! Error: {}", ex.Message); + return null; + } + } + } + private Interaction DoMakeInteraction(VideoConversationInitializationParameters parameters) { using (Trace.Cic.scope()) @@ -791,18 +834,55 @@ private Interaction DoMakeInteraction(VideoConversationInitializationParameters callbackParameters.CallbackPhoneNumber, callbackParameters.CallbackMessage, parameters.AdditionalAttributes); } + case VideoConversationMediaType.Email: + { + // Cast parameters + var emailParameters = parameters as EmailVideoConversationInitializationParameters; + + // Create interaction + return DoMakeEmailInteraction(new QueueId(emailParameters.ScopedQueueName), parameters.AdditionalAttributes); + } default: throw new Exception("Unable to make interaction for media type: " + parameters.MediaType); } } catch (Exception ex) { - Trace.Cic.exception(ex, "Failed to create callback interaction! Error: {}", ex.Message); + Trace.Cic.exception(ex, "Failed to create interaction! Error: {}", ex.Message); return null; } } } + private bool StartScreenRecording(Interaction interaction) + { + using (Trace.Cic.scope()) + { + try + { + if (!String.IsNullOrEmpty(interaction.GetStringAttribute("Recorder_ScreenRecordingGuid"))) + { + return true; // Recording is already started + } + Trace.Main.note("Starting screen recording"); + var qualityManagementManager = QualityManagementManager.GetInstance(_session); + var screenRecorder = new ScreenRecorder(qualityManagementManager); + var guids = screenRecorder.StartRecording(interaction.UserQueueNames[0]); + if (guids != null && guids.Count() > 0) + { + // Used by a custom handler to set custom attributes to the screen recording entry in Interaction Recorder + interaction.SetStringAttribute("Recorder_ScreenRecordingGuid", guids.ElementAt(0).ToString()); + } + return true; + } + catch (Exception ex) + { + Trace.Cic.exception(ex, "Failed to start screen recording! Error: {}", ex.Message); + } + return false; + } + } + #endregion @@ -1138,6 +1218,8 @@ public VideoConversationMediaType GetInteractionType(long interactionId) return VideoConversationMediaType.Chat; case InteractionType.Generic: return VideoConversationMediaType.GenericInteraction; + case InteractionType.Email: + return VideoConversationMediaType.Email; default: return VideoConversationMediaType.Other; } diff --git a/src/VidyoIntegration/CicComponents/CicManagerLib/CicManagerLib.csproj b/src/VidyoIntegration/CicComponents/CicManagerLib/CicManagerLib.csproj index d6bd16a..23d50ed 100644 --- a/src/VidyoIntegration/CicComponents/CicManagerLib/CicManagerLib.csproj +++ b/src/VidyoIntegration/CicComponents/CicManagerLib/CicManagerLib.csproj @@ -34,19 +34,22 @@ - ..\..\..\..\..\..\lib\IceLib\IC4_2015_R4_P0 (x86)\bin\i3trace_dotnet_tracing-w32r-4-0.dll + C:\Program Files (x86)\Interactive Intelligence\ICUserApps\i3trace_dotnet_tracing-w32r-4-0.dll - ..\..\..\..\..\..\lib\IceLib\IC4_2015_R4_P0 (x86)\bin\ININ.IceLib.dll + C:\Program Files (x86)\Interactive Intelligence\ICUserApps\ININ.IceLib.dll - ..\..\..\..\..\..\lib\IceLib\IC4_2015_R4_P0 (x86)\bin\ININ.IceLib.Interactions.dll + C:\Program Files (x86)\Interactive Intelligence\ICUserApps\ININ.IceLib.Interactions.dll - ..\..\..\..\..\..\lib\IceLib\IC4_2015_R4_P0 (x86)\bin\ININ.IceLib.People.dll + C:\Program Files (x86)\Interactive Intelligence\ICUserApps\ININ.IceLib.People.dll + + + C:\Program Files (x86)\Interactive Intelligence\ICUserApps\ININ.IceLib.QualityManagement.dll - ..\..\..\..\..\..\lib\IceLib\IC4_2015_R4_P0 (x86)\bin\ININ.IceLib.Statistics.dll + C:\Program Files (x86)\Interactive Intelligence\ICUserApps\ININ.IceLib.Statistics.dll diff --git a/src/VidyoIntegration/CicComponents/ConversationManagerLib/ConversationManager.cs b/src/VidyoIntegration/CicComponents/ConversationManagerLib/ConversationManager.cs index fc22ad1..0650f5a 100644 --- a/src/VidyoIntegration/CicComponents/ConversationManagerLib/ConversationManager.cs +++ b/src/VidyoIntegration/CicComponents/ConversationManagerLib/ConversationManager.cs @@ -250,7 +250,7 @@ public static VidyoConversation CreateVideoConversation(VideoConversationInitial Room = VidyoServiceClient.CreateRoom(), InitializationParameters = parameters }; - + // Commit the conversation Save(conversation); @@ -326,6 +326,16 @@ public static VidyoConversation GetConversation(Guid conversationId) } } + public static bool StartRecording(int roomId) + { + return VidyoServiceClient.StartRecording(roomId); + } + + public static bool StopRecording(VidyoConversation conversation) + { + return VidyoServiceClient.StopRecording(conversation.Room.RoomId); + } + #endregion } } diff --git a/src/VidyoIntegration/CicComponents/ConversationManagerLib/ConversationManagerLib.csproj b/src/VidyoIntegration/CicComponents/ConversationManagerLib/ConversationManagerLib.csproj index a069156..f1b252d 100644 --- a/src/VidyoIntegration/CicComponents/ConversationManagerLib/ConversationManagerLib.csproj +++ b/src/VidyoIntegration/CicComponents/ConversationManagerLib/ConversationManagerLib.csproj @@ -12,6 +12,8 @@ v4.5.1 512 + ..\..\ + true true @@ -34,7 +36,7 @@ - ..\..\..\..\..\..\lib\IceLib\IC4_2015_R4_P0 (x86)\bin\i3trace_dotnet_tracing-w32r-4-0.dll + C:\Program Files (x86)\Interactive Intelligence\ICUserApps\i3trace_dotnet_tracing-w32r-4-0.dll ..\..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll @@ -69,6 +71,13 @@ + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + - + \ No newline at end of file diff --git a/src/VidyoIntegration/Common/VidyoIntegrationTestConsole/App.config b/src/VidyoIntegration/Common/VidyoIntegrationTestConsole/App.config index 27dc5a9..b49fa0e 100644 --- a/src/VidyoIntegration/Common/VidyoIntegrationTestConsole/App.config +++ b/src/VidyoIntegration/Common/VidyoIntegrationTestConsole/App.config @@ -18,41 +18,49 @@ + - - - + - + - - - + + + - - - - - - - + + + + + + + + + diff --git a/src/VidyoIntegration/Common/VidyoIntegrationTestConsole/Bootstrapper.cs b/src/VidyoIntegration/Common/VidyoIntegrationTestConsole/Bootstrapper.cs index f51f581..0b89c93 100644 --- a/src/VidyoIntegration/Common/VidyoIntegrationTestConsole/Bootstrapper.cs +++ b/src/VidyoIntegration/Common/VidyoIntegrationTestConsole/Bootstrapper.cs @@ -20,8 +20,8 @@ protected override void RequestStartup(TinyIoCContainer container, IPipelines pi pipelines.AfterRequest.AddItemToEndOfPipeline((ctx) => { ctx.Response.WithHeader("Access-Control-Allow-Origin", "*") - .WithHeader("Access-Control-Allow-Methods", "POST,GET") - .WithHeader("Access-Control-Allow-Headers", "Accept, Origin, Content-type"); + .WithHeader("Access-Control-Allow-Methods", "POST,GET,PUT,DELETE") + .WithHeader("Access-Control-Allow-Headers", "Accept, Origin, Content-type, x-requested-with, ow-ajax"); }); diff --git a/src/VidyoIntegration/Common/VidyoIntegrationTestConsole/VidyoIntegrationTestConsole.csproj b/src/VidyoIntegration/Common/VidyoIntegrationTestConsole/VidyoIntegrationTestConsole.csproj index 87618f6..450a944 100644 --- a/src/VidyoIntegration/Common/VidyoIntegrationTestConsole/VidyoIntegrationTestConsole.csproj +++ b/src/VidyoIntegration/Common/VidyoIntegrationTestConsole/VidyoIntegrationTestConsole.csproj @@ -12,6 +12,8 @@ v4.5.1 512 + ..\..\ + true x86 @@ -41,7 +43,7 @@ - ..\..\..\..\..\..\lib\IceLib\IC4_2015_R4_P0 (x86)\bin\i3trace_dotnet_tracing-w32r-4-0.dll + C:\Program Files (x86)\Interactive Intelligence\ICUserApps\i3trace_dotnet_tracing-w32r-4-0.dll ..\..\packages\Nancy.1.3.0\lib\net40\Nancy.dll @@ -71,7 +73,9 @@ - + + Designer + @@ -88,6 +92,13 @@ + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + @@ -54,5 +61,6 @@ + diff --git a/src/VidyoIntegration/Common/VidyoIntegrationWindowsService/Bootstrapper.cs b/src/VidyoIntegration/Common/VidyoIntegrationWindowsService/Bootstrapper.cs index f51f581..0b89c93 100644 --- a/src/VidyoIntegration/Common/VidyoIntegrationWindowsService/Bootstrapper.cs +++ b/src/VidyoIntegration/Common/VidyoIntegrationWindowsService/Bootstrapper.cs @@ -20,8 +20,8 @@ protected override void RequestStartup(TinyIoCContainer container, IPipelines pi pipelines.AfterRequest.AddItemToEndOfPipeline((ctx) => { ctx.Response.WithHeader("Access-Control-Allow-Origin", "*") - .WithHeader("Access-Control-Allow-Methods", "POST,GET") - .WithHeader("Access-Control-Allow-Headers", "Accept, Origin, Content-type"); + .WithHeader("Access-Control-Allow-Methods", "POST,GET,PUT,DELETE") + .WithHeader("Access-Control-Allow-Headers", "Accept, Origin, Content-type, x-requested-with, ow-ajax"); }); diff --git a/src/VidyoIntegration/Common/VidyoIntegrationWindowsService/VidyoIntegrationWindowsService.csproj b/src/VidyoIntegration/Common/VidyoIntegrationWindowsService/VidyoIntegrationWindowsService.csproj index c02ed7b..80abd81 100644 --- a/src/VidyoIntegration/Common/VidyoIntegrationWindowsService/VidyoIntegrationWindowsService.csproj +++ b/src/VidyoIntegration/Common/VidyoIntegrationWindowsService/VidyoIntegrationWindowsService.csproj @@ -12,6 +12,8 @@ v4.5.1 512 + ..\..\ + true true @@ -34,7 +36,7 @@ - ..\..\..\..\..\..\lib\IceLib\IC4_2015_R4_P0 (x86)\bin\i3trace_dotnet_tracing-w32r-4-0.dll + C:\Program Files (x86)\Interactive Intelligence\ICUserApps\i3trace_dotnet_tracing-w32r-4-0.dll ..\..\packages\Nancy.1.3.0\lib\net40\Nancy.dll @@ -87,6 +89,13 @@ + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + VidyoIntegration.VidyoService.VidyoPortalReplayService.DeleteRecordResponse, Service References.VidyoPortalReplayService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/VidyoIntegration.VidyoService.VidyoPortalReplayService.DeleteRecordResponse1.datasource b/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/VidyoIntegration.VidyoService.VidyoPortalReplayService.DeleteRecordResponse1.datasource new file mode 100644 index 0000000..a7f4270 --- /dev/null +++ b/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/VidyoIntegration.VidyoService.VidyoPortalReplayService.DeleteRecordResponse1.datasource @@ -0,0 +1,10 @@ + + + + VidyoIntegration.VidyoService.VidyoPortalReplayService.DeleteRecordResponse1, Service References.VidyoPortalReplayService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/VidyoIntegration.VidyoService.VidyoPortalReplayService.Record.datasource b/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/VidyoIntegration.VidyoService.VidyoPortalReplayService.Record.datasource new file mode 100644 index 0000000..35a81da --- /dev/null +++ b/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/VidyoIntegration.VidyoService.VidyoPortalReplayService.Record.datasource @@ -0,0 +1,10 @@ + + + + VidyoIntegration.VidyoService.VidyoPortalReplayService.Record, Service References.VidyoPortalReplayService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/VidyoIntegration.VidyoService.VidyoPortalReplayService.RecordsByIdResponse.datasource b/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/VidyoIntegration.VidyoService.VidyoPortalReplayService.RecordsByIdResponse.datasource new file mode 100644 index 0000000..9d444e8 --- /dev/null +++ b/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/VidyoIntegration.VidyoService.VidyoPortalReplayService.RecordsByIdResponse.datasource @@ -0,0 +1,10 @@ + + + + VidyoIntegration.VidyoService.VidyoPortalReplayService.RecordsByIdResponse, Service References.VidyoPortalReplayService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/VidyoIntegration.VidyoService.VidyoPortalReplayService.RecordsSearchResponse.datasource b/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/VidyoIntegration.VidyoService.VidyoPortalReplayService.RecordsSearchResponse.datasource new file mode 100644 index 0000000..1f7cabe --- /dev/null +++ b/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/VidyoIntegration.VidyoService.VidyoPortalReplayService.RecordsSearchResponse.datasource @@ -0,0 +1,10 @@ + + + + VidyoIntegration.VidyoService.VidyoPortalReplayService.RecordsSearchResponse, Service References.VidyoPortalReplayService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/VidyoIntegration.VidyoService.VidyoPortalReplayService.RecordsSearchResponse1.datasource b/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/VidyoIntegration.VidyoService.VidyoPortalReplayService.RecordsSearchResponse1.datasource new file mode 100644 index 0000000..7fb45ad --- /dev/null +++ b/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/VidyoIntegration.VidyoService.VidyoPortalReplayService.RecordsSearchResponse1.datasource @@ -0,0 +1,10 @@ + + + + VidyoIntegration.VidyoService.VidyoPortalReplayService.RecordsSearchResponse1, Service References.VidyoPortalReplayService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/VidyoIntegration.VidyoService.VidyoPortalReplayService.UpdateRecordResponse.datasource b/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/VidyoIntegration.VidyoService.VidyoPortalReplayService.UpdateRecordResponse.datasource new file mode 100644 index 0000000..ece066e --- /dev/null +++ b/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/VidyoIntegration.VidyoService.VidyoPortalReplayService.UpdateRecordResponse.datasource @@ -0,0 +1,10 @@ + + + + VidyoIntegration.VidyoService.VidyoPortalReplayService.UpdateRecordResponse, Service References.VidyoPortalReplayService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/VidyoIntegration.VidyoService.VidyoPortalReplayService.UpdateRecordResponse1.datasource b/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/VidyoIntegration.VidyoService.VidyoPortalReplayService.UpdateRecordResponse1.datasource new file mode 100644 index 0000000..a1d63d6 --- /dev/null +++ b/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/VidyoIntegration.VidyoService.VidyoPortalReplayService.UpdateRecordResponse1.datasource @@ -0,0 +1,10 @@ + + + + VidyoIntegration.VidyoService.VidyoPortalReplayService.UpdateRecordResponse1, Service References.VidyoPortalReplayService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/VidyoReplayContentManagementService1.wsdl b/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/VidyoReplayContentManagementService1.wsdl new file mode 100644 index 0000000..6c937c2 --- /dev/null +++ b/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/VidyoReplayContentManagementService1.wsdl @@ -0,0 +1,385 @@ + + + + + + + + + + String representation of successfull operation - "OK" + + + + + + + + + sortBy enumeration of possible values; + + + + + + + + + + sortDirection enumeration of possible values; + + + + + + + + + recordScope enumeration of possible values; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This means that the exceptions happens in system. + + + + + + + + + + + + This means that the exceptions happens in system. + + + + + + + + + + + + This elements array will be returned after user search request + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This Record elements array will be returned after user search request + + + + + + + + + + + + This Record elements array plus counters will be returned after user search request + allVideosCount - total available user records count including public and organizational records from other users + searchCount - available user records count after applying search filtering + myVideosCount - total user records count for user own records.\n + note: admin user has access for all available user records under particular tenant + webcastCount - total webcasts count for particular user + newCount - total new records count for particular user + privateCount - total private records count for particular user + organizationalCount - total organizational records count for particular user + publicCount - total public records count for particular user + records - records array returned based on limit and offset criteria. Maximum output limit is 200 records. + + + + + + + + + + + + + + + + + + + + This elements returnes search records based on different criteria plus access levels. + Can be used for output records paging via offset and limit parameters in a conjunction with + a previous GetRecordsSearchCountRequest element. + userName is detected based on username loggged in and current tenant. + tenantName is optional and can be used for super user only. + default sorting criteria is by date descending + Max output records number will be limited to 200 records + + sortBy valid values: 'date', 'title', 'room', defaulted to 'date' if no value present + + + + + + + + + + + + + + + + + + + + + + This elements requests a record id's array for input + Note: only records, which user has view access to, will be returned + + + + + + + + + + + + This elements requests to update a record fields such as: + title if not provided, will be retained without changes + comments if not provided, will be retained without changes + tags if not provided, will be retained without changes + recordScope if not provided, will be retained without changes + 1 - New + 2 - Private + 3 - Organization + 4 - Public + pin if not provided, will be retained without changes, empty string - pin removed from record + based on record id. + If record value is not provided, the same value will be retained + locked if not provided, will be retained without changes + true - record will be locked + false - record will be unlocked + + + + + + + + + + + + + + + + + + This elements requests a record deletion based on record id. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/configuration.svcinfo b/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/configuration.svcinfo new file mode 100644 index 0000000..0d2c9c9 --- /dev/null +++ b/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/configuration.svcinfo @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/configuration91.svcinfo b/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/configuration91.svcinfo new file mode 100644 index 0000000..6604f43 --- /dev/null +++ b/src/VidyoIntegration/VidyoComponents/VidyoService/Service References/VidyoPortalReplayService/configuration91.svcinfo @@ -0,0 +1,201 @@ + + + + + + + VidyoReplayContentManagementServiceBinding + + + + + + + + + + + + + + + + + + + + + StrongWildcard + + + + + + 65536 + + + + + + + + + System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + System.Text.UTF8Encoding + + + Buffered + + + + + + Text + + + System.ServiceModel.Configuration.BasicHttpSecurityElement + + + None + + + System.ServiceModel.Configuration.HttpTransportSecurityElement + + + None + + + None + + + System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement + + + Never + + + TransportSelected + + + (Collection) + + + + + + System.ServiceModel.Configuration.BasicHttpMessageSecurityElement + + + UserName + + + Default + + + + + + + + + http://inin.sandboxgareplay.vidyo.com/replay/services/VidyoReplayContentManagementService/ + + + + + + basicHttpBinding + + + VidyoReplayContentManagementServiceBinding + + + VidyoPortalReplayService.VidyoReplayContentManagementServicePortType + + + System.ServiceModel.Configuration.AddressHeaderCollectionElement + + + <Header /> + + + System.ServiceModel.Configuration.IdentityElement + + + System.ServiceModel.Configuration.UserPrincipalNameElement + + + + + + System.ServiceModel.Configuration.ServicePrincipalNameElement + + + + + + System.ServiceModel.Configuration.DnsElement + + + + + + System.ServiceModel.Configuration.RsaElement + + + + + + System.ServiceModel.Configuration.CertificateElement + + + + + + System.ServiceModel.Configuration.CertificateReferenceElement + + + My + + + LocalMachine + + + FindBySubjectDistinguishedName + + + + + + False + + + VidyoReplayContentManagementServicePort + + + + + + + + + + + \ No newline at end of file diff --git a/src/VidyoIntegration/VidyoComponents/VidyoService/VidyoRequestRouter.cs b/src/VidyoIntegration/VidyoComponents/VidyoService/VidyoRequestRouter.cs index 1e77109..22e37ab 100644 --- a/src/VidyoIntegration/VidyoComponents/VidyoService/VidyoRequestRouter.cs +++ b/src/VidyoIntegration/VidyoComponents/VidyoService/VidyoRequestRouter.cs @@ -1,17 +1,14 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Timers; -using VidyoIntegration.TraceLib; -using Nancy; +using Nancy; using Nancy.ModelBinding; using Nancy.Routing; +using System; +using System.Collections.Generic; +using System.Linq; using VidyoIntegration.CommonLib; using VidyoIntegration.CommonLib.CommonTypes; using VidyoIntegration.CommonLib.VidyoTypes.RequestClasses; using VidyoIntegration.CommonLib.VidyoTypes.TransportClasses; -using Timer = System.Timers.Timer; +using VidyoIntegration.TraceLib; namespace VidyoIntegration.VidyoService { @@ -492,6 +489,136 @@ public VidyoRequestRouter(IRouteCacheProvider routeCacheProvider) }; #endregion + // Section: /replay + #region GET /replay/{roomId} + Get[UriPrefix + "/replay/{roomId}"] = _p => + { + using (Trace.Vidyo.scope("GET /replay/{roomId}")) + { + try + { + UpdateCount("get /replay/{roomId}"); + + if (!ConfigurationProperties.HasReplayServer) + { + return new Response + { + StatusCode = HttpStatusCode.ServiceUnavailable, + ReasonPhrase = "No replay server specified in the .config file (HasReplayServer is false)" + }; + } + + // Validate input + if (_p.roomId <= 0) + return new Response + { + StatusCode = HttpStatusCode.BadRequest, + ReasonPhrase = "Value cannot be empty: roomId" + }; + + var record = Vidyo.GetRecord(_p.roomId); + return record ?? new Response + { + StatusCode = HttpStatusCode.Gone, + ReasonPhrase = "Record not found" + }; + } + catch (FormatException ex) + { + Trace.WriteEventError(ex, "Error in GET /replay/{roomId}: " + ex.Message, + EventId.GenericError); + return new Response + { + StatusCode = HttpStatusCode.BadRequest, + ReasonPhrase = "Invalid data format" + }; + } + catch (Exception ex) + { + Trace.WriteEventError(ex, "Error in GET /replay/{roomId}: " + ex.Message, + EventId.GenericError); + return new Response + { + StatusCode = HttpStatusCode.InternalServerError, + ReasonPhrase = ex.Message + }; + } + } + }; + #endregion + #region PUT /replay/{roomid} + Put[UriPrefix + "/replay/{roomid}"] = _p => + { + using (Trace.Vidyo.scope("PUT /replay/{roomid}")) + { + try + { + UpdateCount("put /replay/{roomid}"); + + // Validate input + if (_p.roomId <= 0) + return new Response + { + StatusCode = HttpStatusCode.BadRequest, + ReasonPhrase = "Value cannot be empty: roomId" + }; + + // Start recording + var recordStatus = Vidyo.StartRecording(_p.roomId); + return recordStatus ?? new Response + { + StatusCode = HttpStatusCode.Gone, + ReasonPhrase = "Failed to start recording room" + }; + } + catch (Exception ex) + { + Trace.WriteEventError(ex, "Error in PUT /replay/{roomid}: " + ex.Message, + EventId.GenericError); + return new Response + { + StatusCode = HttpStatusCode.InternalServerError, + ReasonPhrase = ex.Message + }; + } + } + }; + #endregion + #region DELETE /replay/{roomid} + Delete[UriPrefix + "/replay/{roomid}"] = _p => + { + using (Trace.Vidyo.scope("DELETE /replay/{roomid}")) + { + try + { + UpdateCount("delete /replay/{roomid}"); + + // Validate input + if (_p.roomId <= 0) + return new Response + { + StatusCode = HttpStatusCode.BadRequest, + ReasonPhrase = "Value cannot be empty: roomId" + }; + + // Stop recording + return Vidyo.StopRecording(_p.roomId); + + } + catch (Exception ex) + { + Trace.WriteEventError(ex, "Error in DELETE /replay/{roomid}: " + ex.Message, + EventId.GenericError); + return new Response + { + StatusCode = HttpStatusCode.InternalServerError, + ReasonPhrase = ex.Message + }; + } + } + }; + #endregion + } private static void UpdateCount(string key) diff --git a/src/VidyoIntegration/VidyoComponents/VidyoService/VidyoService.csproj b/src/VidyoIntegration/VidyoComponents/VidyoService/VidyoService.csproj index 818e437..31ea461 100644 --- a/src/VidyoIntegration/VidyoComponents/VidyoService/VidyoService.csproj +++ b/src/VidyoIntegration/VidyoComponents/VidyoService/VidyoService.csproj @@ -12,6 +12,8 @@ v4.5.1 512 + ..\..\ + true true @@ -34,7 +36,7 @@ - ..\..\..\..\..\..\lib\IceLib\IC4_2015_R4_P0 (x86)\bin\i3trace_dotnet_tracing-w32r-4-0.dll + C:\Program Files (x86)\Interactive Intelligence\ICUserApps\i3trace_dotnet_tracing-w32r-4-0.dll ..\..\packages\Nancy.1.3.0\lib\net40\Nancy.dll @@ -57,6 +59,11 @@ + + True + True + Reference.svcmap + @@ -395,6 +402,31 @@ Reference.svcmap + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + Reference.svcmap @@ -763,6 +795,7 @@ + @@ -811,10 +844,29 @@ TraceLib + + + + + + + + + WCF Proxy Generator + Reference.cs + + xcopy "$(TargetDir)*.*" "$(SolutionDir)Common\VidyoIntegrationTestConsole\$(OutDir)*.*" /f /e /y + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + + + + + + + Class Index +| File Index + +Classes + + + _global_ + + vidyoClient + + vidyoClientMessages + + + + + + + + + + + Built-In Namespace _global_ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Documentation generated by JsDoc Toolkit 2.4.0 on Thu Dec 11 2014 15:01:15 GMT-0500 (EST) + +
+ +
+ + + + + + +