Archive for September, 2012

Using mode=xml to Debug or Obtain Additional Information in ACP

Introduction:

While navigating and performing tasks in the Adobe Connect Manager (all server versions), it is sometimes useful to further identify properties of the account, the item(s) you are viewing, the server you are currently connected to, the session, and any error messages you may be encountering.  Using an additional URL query string in the browser’s address bar, you can display additional XML data in the bottom of each browser page you visit in your active Adobe Connect Manager session.

Using mode=xml

A typical URL to an Adobe Connect login page would look like this (using Adobe Hosted as an example):

http://my.adobeconnect.com/

If you wish to also get the XML data displayed at the bottom of the page, you can append ‘?mode=xml‘ to the URL above and hit enter or go on your browser to navigate to that page.

(so the url would now be: http://my.connectURL.com?mode=xml)

The current page and each page after this (during this browser session) will have the XML data displayed in a nice debugging window in the bottom of the page (scroll all the way down after navigating to the page, to view).  You will notice now the ‘mode=xml’ will be present in each subsequent URL in the address bar during your session in the Adobe Connect Manager.  It will automatically get added to each query after this, in that session.

If you are already logged into Adobe Connect and are browsing around in the Adobe Connect Manager and wish to add the XML data at the bottom of an existing page, you can add ‘&mode=xml‘ (not the ‘&’ in place of the ‘?’) to the end of the URL you are currently on (and hit refresh in the browser to resend the query and obtain the debugging window at the bottom of the browser session).  This is because you would already have a ‘?’ present in the query string in the URL.  Everything parameter added after that initial query will have the ‘&’ preceding it.

So a an example would be if you were actively viewing the Home page in your Adobe Connect account at:

http://my.connectURL.com/admin/home/homepage?account-id=XXXXXXX&principal-id=XXXXX&showNotif=true

You would then add ‘&mode=xml‘ to the end so it would now appear as this:

http://my.connectURL.com/admin/home/homepage?account-id=XXXXXXX&principal-id=XXXXX&showNotif=true&mode=xml

Results

Some useful information returned from this XML output is:

  • status code: This will generally have an ‘ok’ value unless an error is encountered.
  • cookie: This is your current session value
  • host: This is the Adobe Connect URL (domain)
  • local host: This is the actual server name you are connected to
  • version: The Adobe Connect Server version
  • account-id: The account ID (only applicable to Hosted accounts as a Licensed/On Premise account is always = ’7′)
  • user information (user-id, name, login of the user currently connect to the Adobe Connect session)

…along with many other parameters and data for the current page/account you are connected to and viewing.

Use Cases

Debugging

  • When doing this, one thing you’ll recognize is that in Internet Explorer, Firefox, Chrome, Opera, and Safari (all the browsers I’ve tested) you will get the server name (Local Host value) in the Tab’s description of the page you are viewing.  This is very helpful in quickly testing (for example) an Adobe Connect cluster.  You may want to make sure all servers in the cluster are accepting requests for the web application piece of Adobe Connect.  You can append the ?mode=xml parameter to the URL, hit refresh on the browser, and see the actual server that is handling that request to the web application.  You can keep hitting refresh and see what servers you are on in subsequent requests.
  • While using an Adobe Connect cluster (whether it is a Licensed/On Premise deployment or an Adobe Connect Hosted account), you may want to see what local host you are on when making a request, so you can go back and look at server logs (or notify Adobe support with specific information regarding what server you were connected to).  For Licensed/On-Premise installations, it is very useful because if you run into an error or problem with a specific function of the Adobe Connect web application, you can identify what server you are on and that will help you pinpoint exactly what server in the cluster handled the request.  You can then go straight to that server to review the applicable server logs.
  • You can also obtain a little more information to an existing/visible error message that may be appearing in the UI.  Sometimes you may have a situation where you get a ‘Request Not Processed’ or other non-descript error message in the browser.  To get more information on what could be happening, you can get some additional logging by looking at the response and status in the XML results that get printed in that XML debugging window by adding the mode=xml parameter to the URL.

 

 

Using the Built-in Bulk Import Utility in ACP to Provision Audio Profiles

In order to create a user base programmatically in Adobe Connect and also provision audio profiles at the same time, we have an Audio Profile Import Utility built to run in Adobe Air here.  However, you can actually use the built-in Import functionality in the Administrators>Users and Groups area of Adobe Connect to do the exact same thing.  This is a ‘backdoor’ way of creating profiles.

 

Introduction: 

The bulk upload feature in Adobe Connect (Administration  > Users and Groups > Import) provides the functionality to create telephony profiles for a number of Connect users at the same time. This makes it extremely easy for a Connect administrator to provision telephony profiles for a large number of users via an already existing list (in CSV format).  This can be new users or existing users.

At present Connect provides a user-interface (My Profile-> My Audio Profile-> New Profile) where a user can create his telephony profile. But with this UI option only one user profile can be created at a time and this option would take a lot of effort if the administrator wants to create telephony profiles for many users. In this case, the build-in bulk import feature would be very useful.

 

Feature Spec/Work-Flow:

i.        In this feature, we are just extending the existing “import users” functionality. So the same CSV file which was being used for creating new users (via import users functionality), would be used to contain telephony profile information.

ii.       Administrator creates a CSV text file which contains information about new user and the associated telephony profile.  Administrator can choose either the adaptor-id or provider-id as parameter for creating telephony profile.  Code first tries to get provider-id field and if provider-id is not present in CSV header then code looks for adaptor-id field. We are supporting adaptor-id input option because getting adaptor-id would be convenient for Administrator (also adaptor-id would be less error-prone than provider-id). CSV file should look like as follow:

(CSV Format i: Using telephony adaptor-id as csv input)

first-name, last-name, login, email, password, adaptor-id, profile-name, telephony-field-1, telephony-field-2, telephony-field-3

Mulder,  Fox,  fox@company.com, fox@company.com, breeze, avaya-adaptor, Avaya-profile1, x-tel-avaya-conference-number=6001, x-tel-avaya-moderator-code=7777, x-tel-avaya-participant-code=777

Scully, Dana, dana@company.com, dana@company.com, breeze, avaya-adaptor, Avaya-profile2, x-tel-avaya-conference-number=6000, x-tel-avaya-moderator-code=9090, x-tel-avaya-participant-code=909

Skinner,  Walter,  walter@company.com, walter@company.com, breeze, avaya-adaptor, Avaya-profile2, x-tel-avaya-conference-number=6000, x-tel-avaya-moderator-code=1234, x-tel-avaya-participant-code=123

OR

(CSV Format ii: Using telephony provider-id as csv input)

first-name, last-name, login, email, password, provider-id, profile-name, telephony-field-1, telephony-field-2, telephony-field-3

Mulder,  Fox,  fox@company.com, fox@company.com, breeze, 11035, Avaya-profile1, x-tel-avaya-conference-number=6001, x-tel-avaya-moderator-code=7777, x-tel-avaya-participant-code=777

First line is the header which specifies different fields required for user-entry (new telephony fields are written in green). After the header-line, user information can be written in new lines. Number of fields in header and values in user’s entry should be exactly same.

In user’s entry telephony-field and value should be separated by “=” delimiter.

iii.          Number of telephony fields could be different for different adaptors, so one CSV file should have entries specific to only one adaptor. Above example contains Avaya adaptor specific fields( like “x-tel-avaya-conference-number”), similarly Premiere Adaptor can have different telephony fields. There is no restriction on number of telephony fields.

Note- How to get telephony profile information?:

Administrator can get the adaptor-id and provider-id using the “telephony-provider-list” api. Alternatively adaptor-id can be taken directly from telephony-setting.xml.

 Telephony fields of an adaptor can be found using “telephony-provider-field-list” api. Choose field-ids for those telephony-fields which are displayed in UI of (My Profile-> My Audio Profile-> New Profile).

iv.         Once CSV file is prepared, administrator can go to Administration->Users and Groups->Import. Select the import type as “Create New Users”.  Browse CSV file and click upload button. (Look at the snapshot attached in the bottom).

v.         After upload, Connect creates new users with telephony profiles.

vi.         We can also create new telephony profile for existing users. But we are not going to provide any extra radio button as such “Create profile for existing Users”. To create profiles for existing users, you use the fourth Import option, which is ‘Add Existing Users to a Group’.  This will allow you to take a csv of existing users, and create telephony profiles for them in bulk.  You need to add them to an existing group you would have already created (‘Imported Users’ for example).

vii.         Multiple Telephony Profile creation for a user: If we want to create multiple telephony profiles (of same adaptor) for a user, just provide same user’s entry in multiple lines with different telephony profile information.

viii.         As per error handling in the existing Connect code, if more than 10 errors are found in the CSV file then we stop the operation and don’t process next line. User gets an error message saying “The import operation exceeded the maximum number of errors and was aborted. All valid entries prior to the abort have been commited to the system. Invalid lines were found in the CSV import file. List of 10 invalid entries:…” . As we don’t process any entry after 10th error, we don’t know whether there would be some more error in the file. Once user corrects first 10 errors and uploads file again, we would show him next errors in files.

 

Technical Spec:

i.     We would use the existing code which is being used to create new users from CSV file.

ii     CSV file would be uploaded using “csv-import” api (PrincipalManager.java).

iii    Following fields are considered as telephony fields (which would be sent in telephony-profile-update api):

-        provider-id/adaptor-id

-        profile-name,

-        Fields with prefix: “telephony-field-“

iv.   If CSV file contains provider-id field then code directly uses it for calling telephony api. If provider-id is not given then code looks for adaptor-id and fetches provider-id for given adaptor-id.

v.     After parsing an entry (line), “principal-update” api would be called to create a new user. If user doesn’t exist then new user would be created else principal id of the existing user would be used for further operation.

vi.    Once we get the principal-id of new user, we would call “telephony-profile-update” api (TelephonyManager.java) with telephony map created in step iii.

vii.   After this telephony-profile-update api would create a profile for the user.

viii.  Error Handling: If any errors occur while parsing CSV file or calling any internal api, we add this entry(line) in an error-array. If the size of this array reaches max error limit of 10 then we stop the operation and don’t parse further entries.  Administrator would get the error message with a list of 10 invalid entries.

 

Assumptions/Limitations:

i.     One CSV file upload would require profile creation for only one Adaptor. To create profile for different adaptor, separate CSV file should be uploaded.

ii.    Existing telephony profile can’t be edited using this feature. Only new telephony profiles can be created.

iii.   As we are using “=” character as delimiter to identify telephony-filed name and value, the delimiter (=) shouldn’t be part of the telephony field’s name or value.

 

Troubleshooting:

i.      Make sure the number of fields in header and in the user-entry are exactly same.

ii.     Profile-name should be unique for a user. Make sure the user doesn’t have any existing telephony profile with same profile-name.

iii.    In user entry, telephony-field and value should be separated by single “=” delimiter.

iv.     No blank line in CSV file.

 

Screenshot below:

Applicable for Adobe Connect 7.5.x, 8.x and 9.x.

Adobe Connect Offline Recording FLV plays incorrectly; audio track fails to get recognized

Problem :

I have made my Adobe Connect recording offline and when I attempt to play the FLV, the audio doesn’t get recognized by my audio player.

The audio in this file is not recognized even with most standard FLV players. If I attempt to convert it to any other format like MP4, MOV etc, the converted file doesn’t have any audio in that case.

 

Environment :

Adobe Connect 7.x,8.x,9.x Hosted/Licensed

 

Reason :

You might sometimes end up creating such an FLV file by making Connect Recording Offline. You are likely to run into this issue if you happen to resize the Adobe Connect  add-in window while your recording is being made offline.

Audio tracks in the offline recording FLV might become unrecognizable partially or completely at varying timestamps within the FLV, in any normal player. The offline FLV might also fail to play correctly sometimes on some standard players like VLC.

Our research indicated that this can be caused to happen because of resizing the Connect add-in window during the process while a recording is being made offline.

To avoid running into this problem of generating a corrupt FLV as a result of your offline recording process, you should ensure you only resize the connect add-in window prior to starting the offline making process. You can set the add-in window size to whatever size/resolution suits your requirement, however you should only do this before the offline making process starts. You can do this before hitting the button of “Proceed with offline recording” that shows up as a prompt in the below screenshot  :

 

Offline Recording Prompt

Offline Recording Prompt

 

Note that you certainly can minimize and restore the Connect add-in window while making a recording offline, however you should always avoid doing so. The reason behind this is the fact, that the size of the Connect add-in window, while making recording offline, determines the video resolution of the offline FLV being created.

Resizing it during the process, causes inconsistency of video resolution in the FLV file. And this inconsistency, sometimes results in an unrecognizable audio track in the FLV file (especially if this inconsistency is there before any audible audio in the recording).

You may also find such audio inconsistencies if you decide to edit/split the output FLV file into parts.

 

 

Adobe Connect 9 Installer Fails; SMTP Settings; Invalid email error

Problem :

I am running the Adobe Connect 9 installer on my server and I am unable to go beyond the mail settings window.

My SMTP host works fine with other applications, but it somehow doesn’t work with the Adobe Connect. I am putting a valid email address under System Email field, however, it still comes up with an “Invalid Email ” error.

 

Error-Screenshot

Error-Screenshot

 

Environment :

Adobe Connect 9.0.0.1 Licensed

Reason :

If your company has a three level domain email address or greater and you are trying to configure that with Adobe Connect 9 installer; like, xyz@abc.xx.xx, you might run into this issue.

Solution :

This has been identified as a known issue in the Connect 9 installer. Here’s how we can workaround this & complete the install :

1- Run the Connect 9 installer normally until you get to the Mail Settings window

2- Leave all the SMTP Settings fields empty

3- Put a two level test email address in the System email & Support email address fields, like, test@test.com 

4- Carry on with the rest of the installation steps and complete the installation.

5- You would encounter the same issue on Create Administrator screen. You may apply the same workaround there as well.

6- Once the installation completes successfully, open the Connect console page, http://localhost:8510/console

7- Open the Server settings page & put the values of your valid smtp server settings and email address under Mail Settings section now.

8- You will be able to enter the correct details(three level or greater domain) of your smtp server now.

9- Contact support for any help or questions.

 

 

 

Connect 9 Services fail to start for server’s having time zone set to east of Japan

PROBLEM -: I have upgraded/installed Connect 9 on my server having timezone set to east of Japan.

When i start the connect services i get the error -:

“The Adobe connect service service on local computed started and then stopped.Some services stop automatically if they are not in use by other services or programs”.

On checking the ConnectProService.log file you have the following error

2012/08/23 09:56:32 | STATUS | wrapper | --> Wrapper Started as Service
2012/08/23 09:56:32 | STATUS | wrapper | Java Service Wrapper Standard Edition 64-bit 3.3.9
2012/08/23 09:56:32 | STATUS | wrapper | Copyright 1999-2009 Tanuki Software, Ltd. All Rights Reserved.
2012/08/23 09:56:32 | STATUS | wrapper | http://wrapper.tanukisoftware.org
2012/08/23 09:56:32 | STATUS | wrapper |
2012/08/23 09:56:32 | ERROR | wrapper | License Error:
2012/08/23 09:56:32 | ERROR | wrapper | The license keys are incorrect.
2012/08/23 09:56:32 | ERROR | wrapper | Please verify that the wrapper.license.* properties match exactly
2012/08/23 09:56:32 | ERROR | wrapper | and that the following property values match those required for the license:
2012/08/23 09:56:32 | ERROR | wrapper | wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperStartStopApp
2012/08/23 09:56:32 | ERROR | wrapper | wrapper.app.parameter.1=org.apache.catalina.startup.Bootstrap
2012/08/23 09:56:32 | ERROR | wrapper |
2012/08/23 09:56:32 | ERROR | wrapper | A license can be obtained from the Java Service Wrapper site:
2012/08/23 09:56:32 | ERROR | wrapper | http://wrapper.tanukisoftware.org/doc/english/purchase.html
2012/08/23 09:56:32 | ERROR | wrapper |
2012/08/23 09:56:32 | ERROR | wrapper | Licenses can be generated for any of the following Host Ids.
2012/08/23 09:56:32 | ERROR | wrapper | The first Host Id is recommended.
2012/08/23 09:56:32 | ERROR | wrapper | Host Ids:
2012/08/23 09:56:32 | ERROR | wrapper | 005056af0080 (#1)
2012/08/23 09:56:32 | ERROR | wrapper | 005056af000b (#2)
2012/08/23 09:56:32 | ERROR | wrapper |
2012/08/23 09:56:32 | ERROR | wrapper | Optional host name for license: Breeze20
2012/08/23 09:56:32 | STATUS | wrapper | <-- Wrapper Stopped

REASON -: This is being caused by the bug within Tanuki Java Service Wrapper that is used with Connect 9 causing the failure of connect services when the server timezone is set to east of Japan.

You can cross check by setting the server timezone to west of Japan, The connect services would start.

 

SOLUTION -: Applicable only for Connect 9 servers  having timezone east of Japan. 

1. Download http://wrapper.tanukisoftware.com/download/3.5.15/wrapper-windows-x86-64-3.5.15-st.zip

2. Extract the file wrapper-windows-x86-64-3.5.15-st.zip

3. Locate the wrapper.exe on wrapper-windows-x86-64-3.5.15-st\bin  folder

4. Navigate to directory /breeze/9.0.0.1/appserv and rename the file ConnectProSvc.exe to ConnectProSvc.exe.orig

5. Copy the file wrapper.exe from step 3 and paste it to /breeze/9.0.0.1/appserv folder.

6. Rename the file /breeze/9.0.0.1/appserv/wrapper.exe to ConnectProSvc.exe

7. Navigate to /breeze/9.0.0.1/TelephonyService folder and rename TelephonyService.exe to TelephonyService.exe.orig

8. Copy wrapper.exe from step 3 and paste it to /breeze/9.0.0.1/TelephonyService folder.

9. Navigate to /breeze/9.0.0.1/TelephonyService/  folder and rename wrapper.exe to TelephonyService.exe

10. Start Connect and Telephony services

 

The problem only affects servers with time zones between +10:00 and +11:59 UTC. Therefore, the problem can affect licensed customers in Australia (East coast) and New Zealand.

How to list members of a group using the principal-list API.

In order to list members of a particular group using the principal-list API you will first need to call the principal-list to list all the groups:

Here is how the API call should be made:

http://FQDN/api/xml?action=principal-list&filter-has-children=true

Here is a sample output:

<principal principal-id="56001" account-id="7" type="group" has-children="true" is-primary="false" is-hidden="false" training-group-id="">
     <name>aaa</name>
     <login>aaa</login>
     <display-uid>aaa</display-uid>
     <description>AAA</description>
</principal>

From the above call you will need to parse the principal-id of the group whose members you want to list:

Once you have parsed the principal-id, which in this example will be “56001“, you will need to call the principal-list again like this:

http://FQDN/api/xml?action=principal-list&group-id=56001&filter-is-member=true

This will list all the users who are members of the group labeled as “aaa”.

Here is a sample output:

<results>
  <status code=”ok” />
 <principal-list>
     <principal principal-id=”11822″ account-id=”7″ type=”user” has-children=”false” is-primary=”false” is-hidden=”false” training-group-id=””>
             <name>test one</name>
             <login>test1@adobe.com</login>
             <email>test1@adobe.com</email>
             <display-uid>test1@adobe.com</display-uid>
             <is-member>true</is-member>
    </principal>
    <principal principal-id=”11823″ account-id=”7″ type=”user” has-children=”false” is-primary=”false” is-hidden=”false” training-group-id=””>
            <name>test two</name>
            <login>test2@adobe.com</login>
            <email>test2@adobe.com</email>
            <display-uid>test2@adobe.com</display-uid>
            <is-member>true</is-member>
    </principal>
    <principal principal-id=”187801″ account-id=”7″ type=”user” has-children=”false” is-primary=”false” is-hidden=”false” training-group-id=””>
           <name>test three</name>
           <login>test3@adobe.com</login>
           <email>test3@adobe.com</email>
           <display-uid>test3@adobe.com</display-uid>
           <is-member>true</is-member>
    </principal>
  </principal-list>
  </results>

 

 

Applicable for Connect 6.x, 7.x, 8.x and 9.x.