Author Archive: Jim Johnson

XML API Tips: User Manager Associations

A common workflow for Adobe Connect admins is to associate users to managers via the UI.

In the UI, you can navigate to the Administration > Users and Groups > {select a user} > Edit Team Members area to select users who will be direct reports of that manager.

This information will show up in the ‘My Profile‘ > Organization area for the user, where they will be able to see their Manager information (if they have a manager set) and their Team Members (if they are a manager themselves).

But with the XML API, this process is undocumented. Here’s how you accomplish this:

How do I associate a user to a Manager?

http://connectURL/api/xml?action=user-manager-update&manager-id=XXXXXXX&principal-id=XXXXXXX

Where:
action=user-manager-update
manager-id= principal-id of user who is going to be the manager
principal-id= principal-id of the user who is being assigned a manager

Note:
The user-manager-update call is UNDOCUMENTED.

Results:

<results>
<status code="ok"/>
</results>

How do I disassociate a user from a Manager?

http://connectURL/api/xml?action=user-manager-update&manager-id=XXXXXXX&principal-id=XXXXXXX

Where:
action=user-manager-update
manager-id= the account-id (’7′ if an on-prem/Licensed customer or a longer numeric value for an Adobe Hosted customer)
principal-id= principal-id of the user who is being assigned a manager

Note:
The user-manager-update call is UNDOCUMENTED.

Results:

<results>
<status code="ok"/>
</results>

 

The below IS documented, however it is applicable to this post, so I will include it:

How do I list all direct reports of a Manager?

http://connectURL/api/xml?action=principal-list&filter-manager-id=XXXXXX

Where:
action=principal-list
filter-manager-id= the sco-id of the user who is the manager

Results:

<results>

<status code="ok"/>
<principal-list>
<principal principal-id="XXXXXXXXX" account-id="XXXXXXXXX" type="user" has-children="false" is-primary="false" is-hidden="false" manager-id="XXXXXXXXX" training-group-id="">
<name>USER NAME (FIRST AND LAST)</name>
<login>USER LOGIN VALUE</login>
<email>USER EMAIL VALUE</email>
<display-uid>USER LOGIN VALUE</display-uid>
</principal>
</principal-list>
</results>

 

XML API Tips: Adding a Telephony Profile to a Meeting Room

Another one of the undocumented workflows for Adobe Connect with regards to the XML API is adding telephony profiles to Adobe Connect Meeting rooms.

How do I add a telephony profile to a meeting?

https://connectURL/api/xml?action=acl-field-update&field-id=telephony-profile&value=XXXXXXXX&acl-id=XXXXXXXX

Where:
action=acl-field-update
field-id = set to ‘telephony-profile’
value = profile-id value
acl-id = meeting sco-id value

Results:

<results><results>
<status code=”ok”/>
</results>

To find the profile-id, you can run the telephony-profile-list API call, which will list the API caller’s telephony profiles.

XML API Tips: Setting/Changing Recording Permissions

One of the undocumented workflows for Adobe Connect with regards to the XML API is working with permission levels of recordings (archives).  A recording can either be Public or Private.

The workflow is similar to that of the permission level for Meetings.  See below for the steps for making a recording Public or Private in Adobe Connect 9.1:

How do I make a Private Adobe Connect Recording Public?

https://connectURL/api/xml?action=permissions-update&principal-id=public-access&permission-id=view&acl-id=XXXXXXX

Where:
action=permissions-update
acl-id= ‘sco-id’ of the recording.
principal-id=public-access
permission-id=view

Results:

<results>
<status code=”ok”/>
</results>

 

How do I make a Public Adobe Connect Recording Private?

https://connectURL/api/xml?action=permissions-update&principal-id=public-access&permission-id=remove&acl-id=XXXXXXX

Where:
action=permissions-update
acl-id= ‘sco-id’ of the recording.
principal-id=public-access
permission-id=remove

Results:

<results>
<status code=”ok”/>
</results>

Working with Chat Transcripts

As part of the Compliance and Control settings in Adobe Connect, administrators have the ability to enable Chat Transcripts for logging all chat happening on the Adobe Connect server.  This setting is located at: Administration > Compliance and Control > Recordings and Notice > Enable Chat Transcripts.

chattranscript-1

This transcript is stored on the Adobe Connect server in XML format.  One file for each meeting session.  Each file contains the chat from all chat pods used during that session.  When a meeting session has begun, the chat transcript is not created until someone first starts typing in the chat pod.  At the moment the first chat begins, a new sco (unrelated to the meeting sco itself) is created in the file system ({root}\Connect\content\7\XXXXX-1 where XXXXX = the unique sco-id that gets assigned by Connect for this item). The folder inside of the sco folder will be named ‘input‘ for the duration of the meeting session and will then change to ‘output‘ once the session is ended and fully unloads from memory.  Once the session is over, the chat transcript is available for retrieval.

chattrans2

Only administrators have the ability to navigate to and obtain these chat transcripts.  Here is the workflow you can use to download chat transcripts from the server, if the chat transcripts are enabled:

1) Find the folder for Chat Transcripts on the Connect system.  This is actually a hidden folder and you cannot navigate to it by the normal UI.  To do this, run the following API call:

http://{myServer}/api/xml?action=sco-contents&sco-id=7&filter-like-name=Chat

where sco-contents = the api call.
where sco-id = the account-id of the system (for On Prem Connect licenses this will be ’7′)
where filter-like-name=Chat

It will return the location of the Chat Transcripts folder.

Results will look like this:

<results>
<status code=”ok”/>
<scos>
<sco sco-id=”11011″ source-sco-id=”” folder-id=”7″ type=”tree” icon=”folder” display-seq=”0″ duration=”” is-folder=”0″>
<name>Chat Transcripts</name>
<url-path>/f88952271-4-14/</url-path>
<date-created>2013-10-24T07:30:08.460-07:00</date-created>
<date-modified>2013-10-24T07:30:08.460-07:00</date-modified>
<is-seminar>false</is-seminar>
</sco>
</scos>
</results>

2) Take the sco-id from this result set (in the above example it’s 11011) and run the following call:

http://{myServer}/api/xml?action=sco-contents&sco-id=11011

where the call is again ‘sco-contents’
where sco-id = the sco-id from the result of the first call.

This will list out all the Chat Transcripts on the system and the result will look like this:

<results>
<status code=”ok”/>
<scos>
<sco sco-id=”11140″ source-sco-id=”11137″ folder-id=”11011″ type=”content” icon=”transcript” display-seq=”0″ duration=”645″ is-folder=”0″><name>r35s9d4oskg_0</name>
<url-path>/p16jb8mcs6v/</url-path>
<date-begin>2013-10-24T12:17:15.127-07:00</date-begin>
<date-end>2013-10-24T12:28:00.263-07:00</date-end>
<date-created>2013-10-24T12:17:15.127-07:00</date-created>
<date-modified>2013-10-24T12:28:00.263-07:00</date-modified>
<is-seminar>false</is-seminar>
</sco>
</scos>
</results>

(in this example, I ONLY have 1 transcript on the system, so it only shows 1 above).

If you have a lot of transcripts (which you will after you enable this setting), you may want to filter on the meeting for which the transcripts were from.  This can be done by filtering on the ‘source-sco-id’ which is the sco-id of the meeting that was held.   So if you know the sco-id of the meeting, and you know the date range for which you had the session, you can filter on either the source-sco-id value (which will = the sco-id of the meeting) and/or the date/time fields to limit the data returned and find the transcripts you are looking for.

Now, the URL-path you see above in the second XML result is NOT accessible directly.  You cannot just append the value above (like ‘/p16jb8mcs6v/‘) to the Connect domain and expect to get the transcript.  This is what you need to do to download the file directly:

3)  Take your Connect domain + the url-path value + ‘output/foo.zip?download=zip‘ so the URL example would be:

http://mycomany.connect.com/p16jb8mcs6v/output/foo.zip?download=zip

This will get you a downloaded zip file that contains the Chat Transcript (in XML format).

 

 

 

Issue with upgrading CQ (Events) on standalone server

Note:

This article is for On-Premise (Licensed) Adobe Connect customers with the Events module who may be thinking of upgrading to 9.1.

This only applies to customers who meet ALL of the following criteria:

  • Customers who have installed CQ at the Adobe Connect 9.0 level (officially 9.0.0.1) and who are upgrading to 9.1 (officially 9.1.1)
  • Customers who have installed CQ on a standalone machine (so not on the same server or servers as Adobe Connect)
  • Customers who have installed CQ on a drive other than C:/.  

We have uncovered an issue with upgrading CQ (Events Module) from 9.0 version to 9.1 version on a standalone server where you would have installed CQ on a drive other than the C:/ drive.

With Adobe Connect 9.0.0.1 (the full 9.0 installer’s actual version), we introduced Adobe CQ as the backend for the Events module in Adobe Connect.  This required you to install CQ on either the same server as Adobe Connect, or on it’s own dedicated (preferred) server or servers (if in a cluster).  A typical workflow would have been to install the CQ application for both the Author and the Publisher instances of CQ on a drive other than the C:/ drive on the server (or servers).  The full installation of the original 9.0 version of CQ would have given  you the option of installing CQ wherever you wanted (say for this example, the ‘E:/’ drive).

With the latest (as of October, 2013) version of Adobe Connect and CQ (9.1.1 officially), we introduced a new version of CQ.  So customers who already installed CQ at version 9.0, would have already had CQ on a machine and would be upgrading CQ by running the new 9.1 .1 Adobe Connect installer on that server.  This is where the problem is.  The installer, for an upgrade to CQ will not give you the option to choose the installation folder/location. It just goes through and installs in the C:/ drive, which is obviously not correct if you installed in another location.

There is a workaround for this.

For now, you can work around this problem by adding a property value – USER_INSTALL_DIR=<old Installation directory> to the file <INSTALLER_ROOT>\Standard_DVD\Connect\9.1.1\Disk1\InstData\VM\cps.properties. Any valid installation path can be provided but format of the old installation path has to be either E:/Connect or E:\\CONNECT (or whatever drive letter you are using).

Note: Again, the full installation of 9.1 will allow you to choose the installation directory. The issue detailed above is only for upgrades from 9.0 to 9.1 CQ.

This issue with the installer will be addressed in Adobe Connect 9.2, which will be coming in Q1 of 2014.

 

Using the XML API and Microsoft Excel to obtain additional reporting from Adobe Connect

Sometimes customers need a custom report that is not included in the normal reports in the Adobe Connect UI.   They can obtain this data by running an API call, however the results get displayed in a browser (in an XML result set) and is not in a user-friendly format as-is.  In lieu of actually building an application that can parse and display the XML in a nice format for the user to be able to display in a useful manner, we can simply use Microsoft Excel to display the data in a nice tabbed report format.

An example of this would be as follows:

Say, you want to report on what users are in a particular group within Adobe Connect, and there is no good established report to actually display this data (other than in the datagrid in the Users and Groups area)…

Here’s what you can do.

Log into the account in a browser, as an admin.

Run the following API (or any API you need to run to obtain the data you are looking for):
http://connectURL/api/xml?action=principal-list&group-id=XXXXXXX&filter-is-member=true

Where:

action=principal-list
group-id= principal-id of group you want to report on
filter-is-member=true

 The results will get returned in the browser in XML format (as seen in the screenshot below):

Save the current page as an XML file by going into the browser options and select ‘Save As’ and make sure you save the page as ‘.xml’.

xml-1

 

After saving the XML locally, open up Microsoft Excel (on Windows) and select Data > From XML Data Import.

xml-2

 

Click OK through all the next pop ups that show up after selecting the XML file and just select the defaults:

xml-3 xml-4

 

Once the data loads in the worksheet, it will be formatted in a nice tabbed display as you see below:

xml-5

Passing a user into an Adobe Connect Meeting without the Login Page

Periodically customers want to be able to pass in Guest users into an Adobe Connect Meeting without having those users actually have to pass in a guest name in the Meeting login page.  The scenario here may be that organizations may have an external registration system where users put in their email address, first name, last name, and other data, into a form on their registration portal and they do not want users to have to register (externally) for a Meeting and then put their name or login value in again a second time, on the Meeting login page.  Also, the organization may want to keep close tabs on how the guest name is entered, so it will match their own registration system, for reporting later.  For this, we have a quick and simple solution.

If the meeting is setup for public access (‘Anyone who has the URL for the meeting can enter the room‘) or for the default access level (‘Only registered users and accepted guests may enter the room), then you can simply append ‘?guestName=XXXXXXX‘ to the end of the meeting URL (where ‘XXXXXXX’ would be the value of their name that you want to display in the Attendee List Pod when they are in the meeting).  It would look something like this: https://{connectDomain}/{meetingURL}?guestName=Jim Johnson

The behavior will be:

For access level: ‘Only registered users and accepted guests may enter the room’: the user will be let right into the room’s lobby (without seeing the login page) and will see the message: ‘This is a private meeting. Your request to enter has been sent to the host. Please wait for a response.’  Then a host can accept them and they will be let into the meeting as whatever value was appended to the ‘?guestName=’ parameter.

For access level: ‘Anyone who has the URL for the meeting can enter the room’: the user will be let right into the room itself, as they normally would, but they never see the login page and their name value in the Attendee List Pod is whatever was passed in in the ‘?guestName=’ parameter.

 

From the integration perspective, the external registration system which mines the user data (name, email, etc.) you’d need to programmatically set this guestName value in the URL for each user.  This can be done in the application which presents the URL to the end users from the registration system and you can put the first name + last name, email address, or whatever other value you want to set in there.

 

API Change in 9.1 for Report-Meeting-Attendance-Details

Stemming from a previous known issue which was corrected in 9.1, we have made a change to one specific API call for reporting meeting session information.

Previously in Adobe Connect 9.0.4, the two APIs “report-meeting-sessions” and “report-meeting-attendance-details” used completely different queries, and returned different results in many legitimate use cases.

The goal was to reconcile them by making sure that the “num_participants” value returned by the former matches the number of entries returned by the latter.

The change consisted of using the main query used by report-meeting-sessions as the inside/main query for report-meeting-attendance-details as well. Previously, this was not the case, and the two queries were completely different.

However, in the course of making this change, one change was required in the report-meeting-sessions query itself in order to ensure that the numbers are in alignment.

The changes are detailed below.

report-meeting-sessions: the query has been modified slightly to return unique transcript IDs; in the vast majority of cases, this will not make a difference – however, if the same user gets a different transcript ID (e.g., if there are multiple user instances) then these will be counted as two separate user instances.

report-meeting-attendance-details: the main query in use here is now identical to the one used for report-meeting-sessions. Consequently, the number of entries returned here will be identical to the “num-participants” returned by the report-meeting-sessions API above. In addition to the fields returned earlier, this API now also returns session_date_created and session_date_end indicating when the meeting session itself started and ended.

Note that, in either case, passing ‘&report-version=deprecated’ as a separate parameter with the URL will bypass these changes and retain the older form of both these queries, should you need the calls to work as they previously did in prior Adobe Connect versions.

Specifically, if you are looking for each individual ‘start’ and ‘end’ time of a user’s session with the ‘report-meeting-attendance-details‘ API call in Adobe Connect 9.1 you need to append the ‘&report-version=deprecated‘ to the end of the call.  Otherwise, you will get the start and end time of the meeting session itself and not the user  session start/end times.

Event vs. Session Expected Number of Participants for Seminars

When you create a Seminar SESSION, depending on your Seminar License quota for the number of concurrent users, it will give you the Expected Number of Participants drop down (to select over or under 600 users).

The values are:

  • Large Seminar Session (> 600 participants)
  • Regular Seminar Session (Up to 600 Participants)

If your Seminar License allows for over 600 concurrent seats, you get this option when you create a Seminar Session for a Seminar Room that exists under that License. If the quota on the License is under 600 for a maximum concurrency, you do not see this option when creating a session and it defaults to a ‘Regular’ session.

sessionload

 

However when creating an EVENT in the Event Management area and point it to a Seminar Room, you do not get presented with an option to select a Large Seminar Session (> 600 participants) or Regular Seminar Session (Up to 600 Participants).  It will just assume the maximum for the License.  So if you select a Room to point an Event to, which resides in a Seminar License folder, which has a quota of over 600, the default for the Event ‘Session’ will be ‘Large Seminar Session (> 600 participants)’ (although you won’t see this referenced in the information for the Event).

 

 

Seminar Room Information Access for Seminar Hosts

In Adobe Connect 9.1, there seems to a misconception sometimes among Seminar Hosts that a user in the Seminar Host group can view and modify any Seminar Room (and their recordings, etc.) on the system. This is actually not the case.  Here is a summary of the permissions and scenarios in which a user who is in ONLY the Seminar Hosts group can view and modify Seminar Room information and related content/recordings.

When the permission of a Seminar Room itself is changed to:

a) Only registered users may enter the room (guest access is blocked) 

Or

b) Anyone who has the URL for the meeting can enter the room

Then we explicitly set “denied” or ”view-hidden” permission for All Users in the database for this Seminar. In that case, a Seminar Host or user performing the operation no longer has any more permissions (as he is also part of All Users) unless that user is explicitly part of the Participant list either as host or presenter OR has Administrator or Limited Administrator permissions.

What this means is that if you select any of the two above access levels for the Seminar Room when you create it (so NOT ‘Registered Users AND Accepted Guests’), then ONLY admins, limited admins, and users who have been added to the meeting as a Host or Presenter can actually edit that meeting (and change recording access levels, etc.).

The bottom line is the person who is modifying Seminar Room access should be either part of Seminar Participants or should have Administrator / Limited Administrator permissions.

So in a nutshell, these are the scenarios where Seminar Host Group members can change recording access for a seminar:

  • Creators of the Seminar Room (who are obviously the host) – no matter what the access level of the room is set to.  If they created it, they can edit/change things in that Seminar Room.
  • A Seminar Host Group member who has been added to a room (that they didn’t create) ‘s Participant List as a Host or Presenter of the room – no matter what the access level of the room is set to.
  • A Seminar Host Group member who doesn’t have any Host permissions for the room but if the room is set to ‘Only registered users and accepted guests may enter the room’.
  • A Seminar Host Group member who is also a Limited Administrator.
  • A Seminar Host Group member who is also an Administrator.

Here are the scenarios where a Seminar Host Group member can NOT edit a room or change recording access, etc.:

  • A Seminar Host Group member who is NOT also in Limited Admins Group or Admins Group and who is not a Participant (Host) in the room and the room is set to “Only registered users may enter the room (guest access is blocked) “
  • A Seminar Host Group member who is NOT also in Limited Admins Group or Admins Group and who is not a Participant (Host) in the room and the room is set to “Anyone who has the URL for the meeting can enter the room”