Agent routes caller back into script

Not sure if this is possible but I have a script that does a DB dip  to authenticate a caller if they want their password reset.  It asks  them for their Employee ID then will get the last 4 of their SSN.  The  caller is then asked to enter the last 4 of their SSN and I compare it  to my query result.  I then pass the caller information to the agent  desktop and let the agent know if the user was authenticated or not. 
The customer wants to be able to do this on the fly as well.  If a  caller happens to get to the agent for some other reason that didn't  require authentication and then wants to have their password reset, we  want to be able to have the agent send the caller back into the script,  go through the authentication process then route back to the same agent  that was just helping them.  I could do this with a blind conference but  I can't get the results to appear on the agent desktop.  If I do a  transfer then the caller will probably get a different agent. 
How can I have the agent initiate this, place the agent in reserved  mode or not ready if I have to, then display the results of the DB query  into the agents desktop?
Thanks in advance,
Chris

Hi Chris,
This is an interesting question.  I do not think what you are wanting to do is really possible though. I'll try to explain why.
You are corect that there really isn't a way to have the agent do a conference with the customer back into the script to do the authentication process.  It's just not supported.  Additionally if the agent does send the call back into the script, the agent is released and will either go back into ready or go into work mode.  Either way they are back in the queue and if they are Ready they are able to get any call.  There is no way to reserve them either.
The only possibility, and honestly I don't really know how you might do this, but in CCX 8.5.1 you can set CAD to have non-ICD line appearances.  Maybe you could have some non-ICD line assigned to the agents that they contol in CAD and could route the caller back to that agent on the non-ICD line??  This has it's drawbacks.  The agent can still receive calls from the system on the ICD line.  I am also not confident the enterprise data will push to the non-ICD line.  This may be a killer for this idea.  This is probably the only remote possibility though on what you are wanting to do.

Similar Messages

  • How do I Translation Route a call back into CVP?

    This is ICM 8.5, CVP 8.5 and Avaya CM 5.2.  I'm trying to configure the system to be able to Translation Route a call back into CVP that originally started in CVP.  I've read and read Cisco documentation that talk about various ways it can be done but I think I really need step-by-step instructions to figure out what I've done wrong.  I'm happy to explain it in gory details if anyone wants to help me troubleshoot.  However, I think it would be simpler if someone can point me to a document that outlines a successful configuration and I can find my own mistake.

    Thanks clearbluelou, some of this was very helpful, but I had to set my translation routes up differently. Kris Lambrecht's post was very helpful, but also introduced some confusion, which looking back was very simple...hindsight is always that way right?!?!
    I am going to list out the configurations I used to make this work, most of which are what's listed in the Type
    8 setup in Kris's post starting with Step 7 except its for a Type 10 Network VRU; you don't use Type 8 anywhere, but the configuration is very similar.
    Assumption is that you already have an existing system and are routing calls to CVP already so a lot of the steps in the config guide are already done.
    References below are to "Configuration and Administration Guide for Cisco Unified Customer Voice Portal Release 8.5(1)" starting on page 109, step 7:
    http://www.cisco.com/en/US/docs/voice_ip_comm/cust_contact/contact_center/customer_voice_portal/cvp8_5/configuration/guide/ConfigAdminGuide_8.5.pdf
    Here's the details of my implementation:
    ICM 7.2.7
    CVP H323, Type 10
    Avaya PBX connected with a PG also running CTIOS
    Destination is the CVP Servers/CVP PGs (PG1), call transfer is originating from an Avaya PBX connected to ICM via a PG/CTIOS server (PG2).
    1. Build a new Service under destination PG, CVP in this case, as outlined in Step 7 from the CVP Config Guide.
    - Service
    Peripheral Number: 2
    Peripheral Name: Pre_Route
    Name: CVP_PG1.Pre_Route
    - Route
    Name: CVP_PG1.Pre_Route
    -Peripheral Target
    Not required
    Labels
    Not Required
    2. Build Network Trunk Groups, as outlined in Step 8 from the CVP Config Guide:
    - Network Trunk Group
    Name: CVP1_NTG
    Peripheral: CVP_PG1
    PeripheralNumber: 200
    PeripheralName: CVP1_NTG
    Name: CVP_PG1.CVP_NTG
    Trunk Count: Use Trunk Data
    3. Build Translation Routes using the TransRoute wizard, I built a pool of 10 DNIS 1000-1010; these are dummy DNIS; outlined in Step 9 from CVP Config Guide; here's what they should look like in
    the TransRoute explorer when finished:
    -Translation Route
    Name: TR2CVP1
    Type: DNIS
    -Route
    Name: CVP1.1 - CVP1.10
    Service Name: CVP_PG1.Pre_Route
    -Peripheral Target
    DNIS's: 1000-1010
    NTG: CVP1_NTG 
    -Label
    Routing Client: PBX_PG2
    Labels: 1000-1010
    Label Type: Normal
    Customer: None
    4. Configure Trans Route DNs 1000-1010:
    - Have to be built on the Avaya pointed to a VOIP gateway with Session Target equal to the CVP Call Server (or GK).
    - Add Translation Route DNISs in CVP Call Server Configuration under ICM Tab.   
    !!!Make sure you "Save and Deploy"!!!---->If you don't calls will show up on the ICM as new calls on the Translation 
    Route DNIS's under your CVP Peripheral.
    5. Build Dialed Numbers in ICM:
    -Extension 2000 is the dialed number Agents on the Avaya transfer to.
    -VDN 2000 on Avaya PBX should be routed to an Adjunct Route step which will send a route request to PG2 and kick off a script in ICM.
    -You have to build a dialed number in ICM Dialed Number Explorer under the PBX peripheral (PG2 in my example) PG2.2000, and point it to a CallType and subsequently a script, for example "Avaya2CVP".
    6. Build your ICM Call Routing Script: (follow's ClearBlueLou's description)
    - Route the call through typical CVP call setup initialization nodes
    -Route to Trans Route to VRU node with "CVP_PG1.Pre_Route" as the service selected, and "TR2CVP1" Trans Routes 
    selected.
    -Then send to a microapp.
    Your test call should have exited the success connection of the TrasRoute to VRU node and will continue routing with all call variable information will route (and show up in TCDs and RCDs) under Dialed Number PG2.2000.

  • Agent route call to IVR and retrieve back

    Hi all,
    I'm currently using UCCE with CVP v8.5. In this scenario, i would like the agent to transfer the current call to the IVR for the caller to perform authentication. The agent shouldn't be allowed to hear the dtmf tones that is being entered by the caller. During the IVR process, the agent should not be allowed to receive any other call. Once completed, the caller will go back to the same agent.
    Other than using conference (where the agent will hear the dtmf tones), is there any other method to achieve this?
    Thanks!
    -JT-

    Hi Loh,
    Hope you are doing well.
    Create an enterprise skill group and assoiciate it with the skill group you want for this flow. In ICM script there is a node called queue to agent. Under that node use agent selection by skill target ID. and in the expression use the prefered agent id variable. It will make sure that tha call goes to the same agent. just before the queue node set the priority highest for this caller. For this you can use the priority node. Below link will help to configure it properly.
    http://docwiki.cisco.com/wiki/Sticky_Agent_Configuration
    Now in the agent desktop setting change the wrapup time accordingly. Let say for pin authentication you need 20 sec then make the wrapup time 25 sec. This extra 5 sec will allow the caller in the queue (to hear pls wait while we transfer to the agent) and the call will land to the same agent.
    Thanks and Regards,
    Ashfaque

  • Problem implementing call back script

    I'm having problems getting my message call back script to work.  The idea is that someone makes a call and if no agents are available after a few minutes they'll get a prompt asking them to leave their phone number for an agent to call them back.  The bulk of the script is taken from Cisco's script repository.  Everything works except for when the call terminates and is supposed to place a call to the BaseLineMessageCallback.aef script which will seek out the next available agent and then play a message stating the caller's phone number and a brief message.  Seems like no matter what I try when it goes to redirect the call to the BaseLineMessageCallback script the status is BUSY.  Here are the steps that I've done so far
    1.) Created trigger for BaseLineMessageCallBack with the phone number of 6580
    2.) Created a 2nd Call Control Group with the ID of 5, CTI route points are 7300 and 7301
    3.) Created separate Dialog Group with the ID of 1
    4.) The AdvMessageQueueing script is using the same CSS and Partition as BaseLineMessageCallBack, phone number is 6507
    5.) Set Media Termination Point to True for Call Control Group 5.
    6.) AdvMessageQueueing and BaseLineMessageCallBack are using different call control group and dialog group
    I'm able to call both the 6580 and 6507 numbers without a problem from my phone.  The problem is just the redirecting from 6507 to 6580.
    Any ideas?

    There's a lot more that we'll need to know, to properly figure this out for you.  I would suggest this: start out small, and validate that you can even make a call with the Place Call step to a trigger, since that seems to be the area you've highlighted as a problem.
    You can do this very easily by creating a brand new script with a single variable and two steps.  It's really just that simple.  No extra trigger, no application, just the one script, with its one variable, and two steps.  You can think of it like a disposible napkin that you'll use one time and then throw away.
    Script1
    Variables
    Contact c = null
    Steps
    StartPlace Call (dest = "6507"; timeout = 30; CCG ID = 5; dialog group = 1; contact = c)  Successful    /* Place a comment step here, so when the called script answers, we should see this highlight in red. */  ...End
    Start a reactive debug in the script editor: CTRL+Shift+R
    For the Script, select: AdvMessageQueueing.aef (I think I read your post correctly and 6507 is the AdvMessageQueueing.aef script, right?  If not, let me know because that's important for this test)
    For the Timeout, select: 60
    Click OK
    Now, make sure your Script1 window is the active window and press F10 three times (1 time to start active debugging; 1 time execute the Start step; 1 time to execute the Place Call step - Note 1: the Place Call Step will remain highlighted in red for now - Note 2: If you press F10 too quickly, the editor may not recognize your key press, so be sure to pause between key presses at this juncture).
    What you should see happen is, a new window should open, and it should be the AdvMessageQueueing.aef script, but in reactive debug mode.  Since this is a phone call test, you will need to make sure the AdvMessageQueueing.aef script window is active and press F10 until the red highlighted step is whatever step immediately after the Accept step.  This answers the call and back in Script1 you should see the comment step highlighted now.
    If you don't see that, then you know there is a problem with a CTI Port in CCG 5 calling a CTI Port in whatever CCG 6507 is associated with.  I know you said the Partitions and CSSes are the same, but I would ask that you just double check that the CSS on CCG5 contains the Partitions for both the 6507 Trigger and the CCG 6507 is associated with.
    Let me know if you get past that part, or if we need to address any problems you encounter.
    Good luck.
    Anthony Holloway
    Please use the star ratings to help drive great content to the top of searches.

  • Post call survey subflow script after agent hangs up?

    Hi,
    I am trying to have the caller, whom is remaining on the line, sent to a post call survey subflow after the agent hangs up. However, the main script terminates upon the agent hanging up so the subflow script is not being called.
    I have been doing a lot of searching and scratching my head and I'm leading to believe that the On Exception Goto step may work? Although, it seems that this step is intended if the caller hangs up, not the agent. Or does it matter?
    I want the main script to call the subflow script seamlessly without any agent intervention (although this may have to be my last resort). Any insight?
    Thank you so very much.

    Simply stated, what you are trying to do is not possible.  The reason is because when the caller is connected to an Agent, the Contact for that script (--Triggering Contact--) is not active any longer, and therefore you have no control over it.  The caller would have to land on a Trigger a second time, in order for the Contact to become active once more.
    Now, let's talk about what options do exist.
    You can either:
    Have the Agent send the caller to the survey trigger via transfer
    Have the caller call back in to the survey trigger via verbal instructions during the initial IVR
    Have the IVR dial the caller back at a later time to take the survey (could use HTTP triggers or Outbound Campaign)
    This is a limitation of UCCX.  UCCE on the other hand maintains call control the entire time, so when the caller disconnects from the Agent, it can route the caller through another routing script if desred.
    Anthony Holloway
    Please use the star ratings to help drive great content to the top of searches.

  • UCCE: Forceful Release an Agent Call from ICM Script, Can I?

    Hi, let me explain the requirement first. Customer wants to make their IVR free of cost but they want to start billing only when the call is landed to skill group/agent. So far I can think to make it possible by triggering their billing server by ODBC gateway through Application Gateway process. But also the customer wants to release that particular call when that pre-paid caller is out of charge. They might trigger one of my application or can modify any particular database field and put the calling# into there and my task would be release that call.
    I have thought an idea to develop a TCL script run into the voice gateways and release the call from there by searching the particular call with calling#, but I do not know TCL scripting or any idea how to develope TCL , can't I release that call from ICM script? Do I have any control on calls from ICM when the call is landed and connected to agent?
    Any help would be hightly appreciated.

    That's a nasty piece of work. Just imagine how jacked off you would be if you are the customer, you have enough in your bank account to get to an agent who is then starting to help you, and in the middle of your conversation you are simply cut off!
    I don't think it's possible - although CVP would be your best shot because of the switch leg.
    But not only that, I don't think it is desirable. If you check the customer's balance before going to an agent, that should be sufficient. Anything else is just terrible customer service.
    Regards,
    Geoff

  • UCCX v9 Call back script

    Hi everyone,
    I have built some scripts on earlier versions that work ok.  The first script I am building on v9 has a callback feature on it.  I have started with the script_repository_701 files as a basis and the 'normal' call flow works fine.  I have implemented the call back feature, the script captures the callers details and then hangs up, makes an outbound call and then gets stuck with the following loop as documented on the attached word doc.  i have searched for a solution online but haven't found any pointers.  I have attached the scripts for your review too.
    Thanks in advance

    Hey Brian,
    I have a working script
    call back is configured on the menu option 1 only for testing.
    once selected it prompts for a contact number and then a short message from the caller, once confirmed it hangs up.  the script holds the callers place in the queue and waits for an agent to respond by making an outbound call to the CBAgentLoop script.
    Once an agent responds they get a prompt to press any key listen to the message, and then a menu to repeat the message, hear the number read out, or dial the stored number with some conditions applied.
    If the caller is busy or the number is incorrect the script will read out an error message, the attempted dialled number and loop back to the agent menu.
    This seems to work ok for me but I would appreciate any feedback, tips or questions you may have.

  • Route call to Agent before Accept step

    Hi all,
    our customer has the following requirement:
    If a call comes in and there is an available agent, the caller should hear normal ringback until the call is answered- no announcements, no hold music.
    Only if the call is queued, announcements and hold music should be played.
    I tried to put the "Accept" under the "queued" branch of the select resource step. This does not work, the call is dopped when it goes to the agent phone.
    As far as I understand it, the Accept step must happen before the select resource step or connect step.
    Any ideas if this requirement can be fulfilled using UCCX 8.5?
    Thanks in advance
    Jörg

    Why don't you just put all the logic (announcements, etc) into the Queued
    branch then? It should accomplish the same thing. Call is accepted and
    immediately routed to an agent, if none are available then you begin
    planning your messages and what not.

  • I have my itunes media stored on my external hard drive.  On this external drive I have a folder called "TV shows".  How do I incorporate this folder back into the itunes library?

    I have my itunes media stored on my external hard drive.  On this external drive I have a folder called "TV shows".  I previously cut and pasted itunes TV shows to this folder to free up some space.  How do I incorporate this folder (TV shows) back into the itunes library?

    assuming the copy files ... when adding option is checkmarked in preferences > advanced, drag the folder into an open iTunes window while holding option (⌥).

  • How to call backing bean method from java script

    Hi,
    I would like to know how to call backing bean method from java script.
    I am aware of serverListener and [AjaxAutoSuggest article|http://www.oracle.com/technology/products/jdev/tips/mills/AjaxAutoSuggest/AjaxAutoSuggest.html]
    but i am running in to some issues with [AjaxAutoSuggest article|http://www.oracle.com/technology/products/jdev/tips/mills/AjaxAutoSuggest/AjaxAutoSuggest.html]
    regarding which i asked for help in other thread with subject ....Question on AjaxAutoSuggest article (Ajax Transactions Using ADF and J...)
    The reason why i posted is ( though i realise both are duplicates) .. that threads looks as a specific question to that article hence i would like to ask the quantified problem is asked in this thread.
    So could any please letme know how to call backing bean method from java script
    Thanks
    Murali
    Edited by: mchepuri on Oct 24, 2009 6:17 PM
    Edited by: mchepuri on Oct 24, 2009 6:20 PM

    Hello,
    May know how to submit a button autoamtically on onload of page with clicking a welcome alert box. the submit button has managed button too to show a message on console using SOP.
    the problem is.
    1. before loading the page a javascript comes on which i clicked ok
    2. the page gets loaded and the button is there which gets automatically clicked and the managed bean associated with prints a message on console using SOP.
    I m trying to do this through server listener and click listener. the code is(adf jspx page)
    <?xml version='1.0' encoding='UTF-8'?>
    <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:af="http://xmlns.oracle.com/adf/faces/rich">
    <jsp:directive.page contentType="text/html;charset=UTF-8"/>
    <f:view>
    <af:document id="d1" binding="#{backingBeanScope.backing_check4.d1}">
    <af:form id="f1" binding="#{backingBeanScope.backing_check4.f1}">
    <af:commandButton text="commandButton 1"
    binding="#{backingBeanScope.backing_check4.cb1}"
    id="cb1" action="#{beanCheck4.submit1}"/>
    <af:clientListener type="click" method="delRow"/>
    <af:serverListener type= "jsServerListener"
    method="#{backingBeanScope.backing_check4.submit1}"/>
    <f:facet name="metaContainer">
    <af:resource type ="javascript">
    x=confirm("hi");
    // if(x){
    delRow = function(event){
    AdfCustomEvent.queue(event.getSource(), "jsServerListener", {}, false);
    return true;
    </af:resource>
    </f:facet>
    </af:form>
    </af:document>
    </f:view>
    <!--oracle-jdev-comment:auto-binding-backing-bean-name:backing_check4-->
    </jsp:root>
    the backing bean code is -----
    public class classCheck4 {
    public classCheck4() {
    public String submit1() {
    System.out.println("hello");
    return null;
    }

  • IVR sample scripts that routes calls base on States?

    Does anyone have a sample IVR script which can route calls to different queues base on the States or ZIP code enter by the user?
    Thanks.

    Yes, I read this document. 
    I've created ccm group, sccp local interface, dspfarm profile, and registered it to telephony-service. It's ok. 
    Yes, IVR still be availible under SRST, it runs as vxml script on router flash.
    I configured router for inbound/outbound calls in g711a, and it works fine. But when using IVR with .wav file in g711u codec I've got a problem. I decided to use translation-profile on incoming dial-peer, from incoming number to internal IVR number, but it doesn't work. 
    I attached config of xcoder, dial-peers and translation rules.
    In normal mode (without IVR) I receive calls in dial-peer voice 30804242 voip and after it translate them to dial-peers 1 or 2 to CUCM phones.

  • How to call a shell script from a java code

    Hello can any one suggest me how to call a shell script from a java program that takes three parameters.
    i have a shell script (msp_restore_gui) when i run this script in the command line in a RHEL5 ,SUSE10 and Debian machine it works fine .I even tested to call it from a java program and it also worked fine but when i used the same in a J2ee application where the user when clicks the restore button in a webserver this inturn sends the request to a java file named BackupManager.java where i call the shell script.But here it fails.Waiting for your suggestions.If you want i can put the code also here

    yes the script is in /usr/local/mss/tools/backup and the script (msp_restore_gui) is as follows
    #!/bin/sh
    TIMESTAMP=`date +%d_%b_%y-%H-%M`
    touch /var/backups/mss/mss_restore_"$TIMESTAMP".log
    LOGFILE="/var/backups/mss/mss_restore_"$TIMESTAMP".log"
    ### Explode tgz file
    cd /
    # Checks to be done:
    # root login
    # assume he passes the parameter as msp_backup_<timestamp>
    # check for the existence of the .tz and fileList.txt
    # Checking for the root login and if not logged on as root
    # permission will be denied to execute this script
    logmsg(){
    echo "`date`: $*" >> $LOGFILE 2>&1
    echo "$*"
    #usage of this script
    while [ $#  -ne 0 ]
    do
    case $1 in
    -n)
    shift
    ARCHIVE_NAME=`find / \( -name "$1.tz" -o -name "$1.tgz" \) 2>/dev/null`
    FILE_NAME=`find / -name $1_filesList.txt 2>/dev/null`
    if [ x$ARCHIVE_NAME = x -a y$FILE_NAME = y ]
    then
    logmsg "ERROR: Files not found, Restore cannot proceed"
    usage
    else
    tar tvzf $ARCHIVE_NAME > /dev/null 2>&1
    if [ $? -ne 0 ]
    then
    echo "ERROR: The tar file $ARCHIVE_NAME is not proper. Restore cannot proceed"
    exit 1
    else
              echo "Backedup files are present, proceeding with restore......" >> $LOGFILE 2>&1
    fi
    fi
    usage
    SKIP_CLEANUP=1
    STATUS=1
    exit
    esac
    shift
    done
    rm -rf ./newfile
    curr_ver_file="/usr/local/mss/etc/version"
    /usr/local/mss/tools/backup/check_version $curr_ver_file $FILE_NAME
    ret_code=$?
    echo "Exit value of check_version is $ret_code"
    if [ "$ret_code" != 0 ]
    then
    logmsg "MSP Version not matching. Exiting from restore now...."
    errormsg=`cat /usr/local/mss/temp/ver_err_mesg`
    logmsg $errormsg
    rm -f /usr/local/mss/temp/ver_err_mesg
    exit 1
    else
    echo "Version check is successful"
    fi
    #### ShutDown MSS########
    /etc/init.d/mss stop
    sleep 2
    ### Shutdown semm
    /etc/init.d/semm stop
    sleep 2
    rm -rf `grep -v "MSP Version:" $FILE_NAME`
    logmsg "MSP restore in progress......"
    tar mxvfz $ARCHIVE_NAME >> $LOGFILE
    sleep 5
    ### Call mysql restore script
    /usr/local/mss/bin/mysql_alldb_restore.sh >> $LOGFILE 2>&1
    if [ $? -ne 0 ]; then
    logmsg "Database restore Failed. Cannot proceed further"
    exit 1 ;
    else
    logmsg "Database restore Succeeded."
    fi
    ### Remove DB Dump Files
    rm -f /var/lib/mysql-dumps/*
    ### Trigger cleanup of airprism database tables
    #touch /usr/local/mss/airprism/server/config/reinitdb
    ### Trigger re-import of software packages
    touch /usr/local/mss/swdepot/reimport
    ### Remove log files under the "apps" directory
    find /usr/local/mss/apps -name '*.log*' | xargs rm -f
    find /usr/local/mss/logs -follow -name '*[._]log*' | xargs rm -f
    if [ $? -ne 0 ]; then
    logmsg "MSP restore Failed. Cannot proceed further"
    exit 1 ;
    else
    logmsg "MSP restore Succeeded."
    fi
    # reinstall_patch is touched so that patches are re-installed after restoring of MSP.
    touch /usr/local/mss/patch/bin/reinstall_patch
    ##### Start MSS
    logmsg "restarting MSP server "
    /etc/init.d/mss start
    sleep 5
    ### Start semm
    /etc/init.d/semm start
    sleep 5
    logmsg "MSP server is now restarted"
    my jsp page backup.jsp is as follows
    <%@taglib uri="portlet.tld" prefix="uif" %>
    <%@taglib uri="msp-console.tld" prefix="msp" %>
    <uif:defineObjects/>
    <%@page import="javax.portlet.*" %>
    <%@ page import="java.util.Date" %>
    <%@ page import="java.util.Vector" %>
    <%@ page import="java.text.DateFormat" %>
    <%@ page import="com.symbol.mss.console.admin.backup.BackupManager" %>
    <%@ page import="com.symbol.mss.console.admin.system.SystemInfoPortlet" %>
    <%
         String STYLE_NAME = request.getParameter("style");
         if (STYLE_NAME == null) STYLE_NAME = STYLE_DEFAULT;
         final String ua = request.getHeader("User-Agent");
         BackupManager helper = null;
         PortletSession portletSession = renderRequest.getPortletSession();
         helper = (BackupManager)portletSession.getAttribute("helper");
         if (helper == null) {
              //System.err.println("Created new BackupManager");
              helper = new BackupManager();
              portletSession.setAttribute("helper", helper);
         final BackupManager backupManager = helper;
         String action = "";
         final String backupName = renderRequest.getParameter("backupName");
         String completePath = backupManager.getBackupDir() + backupName + backupManager.getBackupFileExt();
         if (backupName != null) {
              action = "backup";
         if(backupManager.backup(backupName)) {
              SystemInfoPortlet.beginRestartMSP();
              } else {
                   action = "backuperror";          
         final String cmd = renderRequest.getParameter("submitButton");
    final String selectedBackup = renderRequest.getParameter("selectedBackup");
    int tarFileStatus =0;
    String backupTarFile ="";
    String backupFileList ="";
         if ("Restore".equals(cmd)) {
    if (selectedBackup != null) {
         tarFileStatus = backupManager.verifyTarFile(selectedBackup);
         //backupTarFile = backupManager.getRestoreFile(Integer.parseInt(selectedBackup));
         //backupFileList = backupTarFile.substring(0, backupTarFile.lastIndexOf(backupManager.getBackupFileExt()))+"_filesList.txt";
                   if (tarFileStatus == 0){
         action = "restore";
         backupManager.restore(selectedBackup);
                        SystemInfoPortlet.beginRestartMSP();
              } else {
                   action = "error";
    } else if ("Remove".equals(cmd)) {
    backupManager.remove(Integer.parseInt(selectedBackup));
         DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT);
         PortletURL restoreURL = renderResponse.createActionURL();
    %>
    <%@ include file="/jsp/core/constants.jspf" %>
    <% if (action.length() > 0) {
         if ("backup".equals(action))
    %>
         <p>The MSP Appliance has been shut down in order to create the <%=backupName %> backup file,
              and will automatically restart as soon as the file has been created.
              To continue your work, please log out of the MSP Console, wait for the appliance
              to restart, and then log back in. The amount of time you'll have to wait for the
              MSP Appliance to come back online depends on the amount of information you have
              stored in the MSP Database.</p>
         <p>The full pathname for the backup file is: <%=completePath %></p>     
    <%     }
         else if ("restore".equals(action))
    %>
         <p>The MSP Appliance has been shut down in order to restore from the <%=backupTarFile%> backup file,
              and will automatically restart as soon as the restore is complete.
              To continue your work, please log out of the MSP Console, wait for the appliance
              to restart, and then log back in. The amount of time you'll have to wait for the
              MSP Appliance to come back online depends on the amount of information you have
              stored in the MSP Database.</p>     
    <%     } else if ("backuperror".equals(action)) { %>
              <p><img src="images/dialogue/error_16.gif" class="icon" alt="Notify" /> Errors occurred while taking back up of MSP. Please see the backup service log file for more details.
              </P>
    <%     } else if ("error".equals(action)) {
              if (tarFileStatus == 4) { %>
                   <p><img src="images/dialogue/error_16.gif" class="icon" alt="Notify" /> The backup file <%=backupTarFile%> contains errors. This backup can't be restored. Please restore a valid back up.
                   </P>
              <%} else if (tarFileStatus == 3) { %>
                   <p><img src="images/dialogue/error_16.gif" class="icon" alt="Notify" /> The backup file list <%=backupFileList %> is missing. This file is required to restoring backup. Please get the backup file list and proceed with restoring backup.</p>
              <%} else if (tarFileStatus == 2) { %>
                   <p> <img src="images/dialogue/error_16.gif" class="icon" alt="Notify" /> The backup file <%=backupTarFile%> contains errors and the backup file list <%=backupFileList%> is missing. This backup can't be restored. </p>
              <%} %>
    <%     }
    } else { %>
    <p><strong>Note</strong>: Both backup and restore will shut down MSP temporarily. MSP will be unable to collect data from devices, send notifications, or provide MSP Console access during this time. When the backup or restore operation is complete, MSP will come back online automatically.</p>
    <h3>Backup</h3>
    <form action="<%= restoreURL.toString() %>" method="post">
    <p>Please provide a name for your backup. MSP will provide the date automatically in the list of backups.</p>
    <p><label for="<uif:namespace />backupName">Name</label> <input type="text" name="<uif:namespace />backupName" id="<uif:namespace />backupName" size="20" maxlength="256" /> <input type="submit" name="<uif:namespace />submitButton" value="Back up now" onclick="return <uif:namespace/>validateName()"/></p>
    </form>
    <h3>Restore</h3>
    <p>This will restore all databases (device assets, collected device data, software packages, policies, etc.) to their state as of the time the backup was made. Changes since then <em>except for backups</em> will be destroyed.</p>
    <%
    Vector restoreList = helper.getRestoreEntries();
    Vector restoreDates = helper.getRestoreDates();
    Vector restoreVersions = helper.getRestoreVersions();
    Vector filesStatus = helper.getBackupFilesStatus();
    %>
    <% if (restoreList.size() == 0) { %>
    <p>There are no backups currently available.</p>
    <% } else { %>
    <form action="<%= restoreURL.toString() %>" method="post">
    <table class="input-radios" id="<uif:namespace />existingBackups">
    <thead>
    <tr>
    <th></th>
    <th>Name</th>
    <th>Date</th>
    <th>MSP Version</th>
    <th>Remarks </th>
    </tr>
    </thead>
    <tfoot>
    <tr>
    <td colspan="4" class="actionsOnSelected">
    <input type="submit" name="<uif:namespace />submitButton" value="Restore" onclick="return confirm('This action requires MSP and all related services to be shut down. Console will be unavailable if the request is submitted. The server will restart automatically once restore has been completed.');" />
    <input type="submit" name="<uif:namespace />submitButton" value="Remove" onclick="return confirm('This action will remove the backup archive. You will no longer be able to restore this backup. Continue?');" />
    </td>
    </tr>
    </tfoot>
    <tbody><%-- First one (most recent) is checked by default. Every other row has class="portlet-section-alternate". Note that each ID must be unique and must match the value of the "for" attribute on the corresponding "label" element. --%>
    <%
    for (int i = 0; i < restoreList.size(); i++) {
    %>
    <tr <%= (i % 2 == 1) ? " class=\"portlet-section-alternate\"" : "" %>>
    <td><input type="radio" name="<uif:namespace />selectedBackup" value="<%= i %>" id="<uif:namespace />selectedBackup-<%= i %>" <%= (i == 0) ? "checked=\"checked\"" : "" %> /></td>
    <td><label for="<uif:namespace />selectedBackup-<%= i %>"><%= restoreList.elementAt(i) %></label></td>
    <td><%= dateFormat.format((Date)restoreDates.elementAt(i)) %></td>
    <td><%= restoreVersions.elementAt(i) %></td>
    <td><%= filesStatus.elementAt(i) %></td>
    </tr>
    <%
    %>
    </tbody>
    </table>
    </form>
    <% } %>
    <% } %>
    <script type="text/javascript">
    <!--//--><![CDATA[//><!--
    function <uif:namespace/>validateName() {
    var name =document.getElementById("<uif:namespace />backupName");
    var msg= "<msp:i18n key="BackupMsg"/>";
    var str=name.value;
    var re = /^[A-Za-z0-9_]+$/;
    if (!str.match(re)) {
         alert(msg);
         name.focus();
         return false;
         } else {
    return confirm('This action requires MSP and all related services to be shutdown. Console will be unavailable if the request is submitted. The server will restart automatically once backup has been completed.');
    //--><!]]>
    </script>
    and my BackupManager.java is as follows where the code in bold and italic is called the restore()
    //============================================================================
    // Symbol Technologies P R O P R I E T A R Y S O U R C E C O D E
    // C O N F I D E N T I A L
    // Copyright (c) 2003 Symbol Technologies. All Rights Reserved.
    // All information contained herein is the property of Symbol Technologies,
    // or its Licensors, and are protected copyrights and trade secrets, and may
    // be covered by U.S. patents. Any reproduction or dissemination of any
    // portion of this document, of the software, or other works derived from it
    // is strictly forbidden unless prior written permission is obtained from
    // Symbol Technologies.
    //============================================================================
    package com.symbol.mss.sdf.services.backup;
    import java.io.*;
    import java.sql.Time;
    import java.text.DateFormat;
    import java.util.logging.FileHandler;
    import java.util.logging.Formatter;
    import java.util.logging.LogRecord;
    import java.lang.Process;
    import java.util.*;
    import org.apache.avalon.framework.configuration.Configurable;
    import org.apache.avalon.framework.configuration.Configuration;
    import org.apache.avalon.framework.configuration.ConfigurationException;
    import org.apache.avalon.framework.logger.LogEnabled;
    import org.apache.avalon.framework.logger.Logger;
    import com.symbol.mss.sdf.admin.AdministratorService;
    import com.symbol.mss.sdf.backup.*;
    import com.symbol.mss.sdf.data.*;
    * @author nramaiah
    * Service to perform scheduled backups of the system state.
    public class BackupManager implements BackupService, DataHandler,
    LogEnabled, Configurable {
    // MSS Home Path
    private static String mssHome = System.getProperty("phoenix.home", File.separator + "usr" +
    File.separator + "local" +
    File.separator + "mss" +
    File.separator);
    // Backup related definitions
    private static final String BACKUP_LIST_FILE_NAME = "conf" + File.separator + "files_to_backup.txt";
    private static final String BACKED_UP_LIST_FILE_NAME_SUFFIX = "_filesList.txt";
    private static final String BACKUP_LOCATION = File.separator + "var" + File.separator + "lib" +
    File.separator + "mss-backups" + File.separator;
    private static final String BACKUP_PARTITION = File.separator + "var" + File.separator + "lib";
    private static final String VERIFY_BACKUP = File.separator + "usr" + File.separator + "local" +
                                                           File.separator + "mss" + File.separator+"tools"+
                                                           File.separator+"backup"+File.separator+"verifyBackup.sh";
    // DB backup/restore related definitions
    private static final String DB_DUMP_LOCATION = File.separator + "var" + File.separator +
    "lib" + File.separator +
    "mysql-dumps" + File.separator;
    private static final String DB_BACKUP_SCRIPT = "bin" + File.separator + "mysql_alldb_backup.sh";
    private static final String DB_RESTORE_SCRIPT = "bin" + File.separator + "mysql_alldb_restore.sh";
    // Private variables
    private AdministratorService m_admin = null;
    private Logger m_logger = null;
    private String backupLocation = null;
    private String backupListFileName = null;
    private String backupPartition = null;
    private int backupPartitionLimit = 90;
    private String dbDumpLocation = null;
    private String dbBackupScript = null;
    private String dbRestoreScript = null;
    private List servicesBackupList = null;
    private String tarFileExtension =".tgz";
    private String errFileExtension =".err";
    private int exitValue=0;
    * Default Constructor
    public BackupManager() {
    servicesBackupList = new ArrayList();
    * Set the administrator service implementation. Link established by Broker service.
    * @param admin reference to an implementation of AdministratorService
    public void setAdministrator(AdministratorService admin) {
    m_admin = admin;
    * Set the job publisher service implementation. Link established by Broker service.
    * @param jobPublisher reference to an implementation of JobPublisherService
    public void setJobPublisher(DataChannel jobPublisher) {
    jobPublisher.subscribe(this);
    * Gets the backup manager object.
    * @return backup manager object
    public BackupService getBackupService() {
    return this;
    * Service lifecycle method.
    * @param logger logger object to be used by the service
    public void enableLogging(Logger logger) {
    m_logger = logger;
    * Service lifecycle method.
    * @param configuration service configuration object
    public void configure(Configuration configuration) throws ConfigurationException {
    // Verify MSS Home path
    if (!mssHome.endsWith(File.separator))
    mssHome += File.separator;
    // Get the location where the backup file needs to be placed
    backupLocation = configuration.getChild("BackupLocation").getValue(BACKUP_LOCATION);
    // Verify backup directory path
    if (!backupLocation.startsWith(File.separator))
    backupLocation = mssHome + backupLocation;
    if (!backupLocation.endsWith(File.separator))
    backupLocation += File.separator;
    // Get the file listing the files/directories to be backed up
    backupListFileName = configuration.getChild("FilesList").getValue(BACKUP_LIST_FILE_NAME);
    // Verify backup list file name path
    if (!backupListFileName.startsWith(File.separator))
    backupListFileName = mssHome + backupListFileName;
    // Get the partition where the backups are kept
    backupPartition = configuration.getChild("BackupPartition").getValue(BACKUP_PARTITION);
    // Verify backup partition path
    if (!backupPartition.startsWith(File.separator))
    backupPartition = File.separator + backupPartition;
    if (backupPartition.endsWith(File.separator))
    backupPartition = backupPartition.substring(0, (backupPartition.length()-1));
    // Get the limit on the amount of free space on the backup partition
    backupPartitionLimit = configuration.getChild("BackupPartitionLimit").getValueAsInteger(backupPartitionLimit);
    // Get the location where the DB dump files will be placed
    dbDumpLocation = configuration.getChild("DBDumpLocation").getValue(DB_DUMP_LOCATION);
    // Verify DB dump directory path
    if (!dbDumpLocation.startsWith(File.separator))
    dbDumpLocation = mssHome + dbDumpLocation;
    if (!dbDumpLocation.endsWith(File.separator))
    dbDumpLocation += File.separator;
    // Get the name of DB dump backup script
    dbBackupScript = configuration.getChild("DBBackupScript").getValue(DB_BACKUP_SCRIPT);
    // Verify backup script path
    if (!dbBackupScript.startsWith(File.separator))
    dbBackupScript = mssHome + dbBackupScript;
    // Get the name of DB dump restore script
    dbRestoreScript = configuration.getChild("DBRestoreScript").getValue(DB_RESTORE_SCRIPT);
    // Verify restore script path
    if (!dbRestoreScript.startsWith(File.separator))
    dbRestoreScript = mssHome + dbRestoreScript;
    * Individual services can supply a list of files/directories to be backed up.
    * These are files apart from the files specified in conf/files_to_backup.txt and
    * will be backed up as well.
    * @param files list of files/directories
    public void filesToBackup(List files) {
    synchronized(this) {
    if (files != null) {
    if (files.size() > 0) {
    // Add the list contents to the current backup list
    for (int i=0; i<files.size(); i++) {
    String tStr = (String)files.get(i);
    // Check for absolute or relative path
    if (tStr.startsWith(File.separator))
    servicesBackupList.add(tStr);
    else
    servicesBackupList.add(mssHome + tStr);
    else
    m_logger.info("Empty list of filenames. Nothing added.");
    else
    m_logger.info("Null list of filenames. Nothing added.");
    * Individual services can supply a list of files/directories to be backed up.
    * Specified files will be added to the file defining the list of files to be backed up.
    * @param files list of files/directories
    private void persistFilesToBackup(List files) {
    synchronized(this) {
    if (files != null) {
    if (files.size() > 0) {
    // Add the list of files provided to the end of file
    try {
    File file = new File(backupListFileName);
    if ((file == null) || (!file.exists()))
    file.createNewFile();
    // Seek to the end of the file
    RandomAccessFile rFile = new RandomAccessFile(file, "rw");
    if (rFile != null) {
    rFile.seek(rFile.length());
    // Write the list contents to the file
    for (int i=0; i<files.size(); i++) {
    String tStr = (String)files.get(i);
    // Check for absolute or relative path
    if (tStr.startsWith(File.separator))
    rFile.writeBytes(tStr + "\n");
    else
    rFile.writeBytes(mssHome + tStr + "\n");
    else
    m_logger.error("Error opening file " + backupListFileName);
    rFile.close();
    catch (Exception ex) {
    ex.printStackTrace();
    m_logger.error("Error adding entries to file " + backupListFileName, ex);
    else
    m_logger.info("Empty list of filenames. Nothing added.");
    else
    m_logger.info("Null list of filenames. Nothing added.");
    * Command to be run during the backup process. Individual services can
    * provide shell commands that will be executed before backing up the files.
    * @param command shell command to be executed
    private void runCommand(String command) {
    * Creates a shell script at the specified location that will backup the
    * files listed in the List passed in.
    * @param scriptFileName location where the script needs to be created
    * @param backupFileName name for the tar file being created
    * @param backupList list of files to be backed up
    private void createBackupScript(String scriptFileName, String backupFileName, ArrayList backupList) throws Exception {
    // Create a new StringBuffer to build the contents to be written to the script file
    StringBuffer buffer = new StringBuffer();
    // Add the initial comment in the start script
    buffer.append("#!/bin/sh\n" + "set -x\n\n");
    // Check if the partition has enough space
    buffer.append("### Check if the partition has enough space\n" +
    // "diskUsed=`df -k | grep \"" + backupPartition + "\" | awk '{print $5}' | cut -d\"%\" -f1`\n" +
                   " diskUsed=`df -k \"" + backupPartition + "\" | awk '{print $5}' | cut -d\"%\" -f1 | grep -v Use`\n" +     
    "echo \"Partition " + backupPartition + " is $diskUsed% used.\"\n" +
    "if [ \"$diskUsed\" -lt \"" + backupPartitionLimit + "\" ]\nthen\n" +
    " echo \"Starting backup...\"\n\n");
    // Shutdown semmd
    buffer.append(" ### Shutdown semm\n" + " /etc/init.d/semm stop\n" +
    " sleep 2\n\n");
    // MSP Limited release and earlier builds stop mysql DB and backup the
    // /var/lib/mysql directory as it is. Starting MSP 1.0 GA release, mysql
    // dump script will be integrated which will create sql scripts to
    // restore the database.
    // Check if mysql dump creation script exists
    File mysqlDumpScript = new File(dbBackupScript);
    if (mysqlDumpScript.exists()) {
    // MSP 1.0 GA and later releases
    // Run the script that will generate sql scripts that would re-create the DB as it is
    buffer.append(" ### Call mysql dump script\n" +
    " " + dbBackupScript + "\n\n");
    else {
    // MSP Limited release
    // Add command to shutdown mysql
    buffer.append(" ### Shutdown mysql\n" + " /etc/init.d/mysql stop\n\n");
    // Change to root directory and create the tgz file
    buffer.append(" ### Create tgz file\n" + " cd /\n");
    // Build up the tar file name from the current date and time
    String fileName = null;
    if ((backupFileName != null) && (backupFileName.length() > 0))
    fileName = backupFileName;
    else {
    // File name not provided by user, build one using the timestamp
    Calendar cal = Calendar.getInstance();
    Date date = cal.getTime();
    fileName = "MSS-"
    + DateFormat.getDateInstance().format(date).replaceAll(" ", "").replaceAll(",", "")+ "-"
    + (new Time(cal.getTimeInMillis())).toString().replaceAll(":", "").substring(0,4);
    String tarFileName = fileName + ".tgz";
    // Get the current MSP Version
    String mspVersion = getMSPVersion();
    // Gather all the files to be backed up. Add them to the tar command and
    // also dump them into the file maintaining the list of files being backed up
    String listStr = "";
    for (int i=0; i<backupList.size(); i++)
    listStr += (String)backupList.get(i) + "\n";
    // Dump the current MSP version and the list of files being backed up into a manifest file
    String listFileName = fileName + BACKED_UP_LIST_FILE_NAME_SUFFIX;
    RandomAccessFile file = new RandomAccessFile(backupLocation + listFileName, "rw");
    m_logger.info("List of files/directories being backed up:\n" + listStr);
    file.writeBytes("### MSP Version: " + mspVersion + " ###\n");
    file.writeBytes(listStr);
    file.close();
    // Add the tar command to the script
    buffer.append(" echo \"Creating " + backupLocation + tarFileName + "...\"\n" +
    " tar cvhfz " + backupLocation + tarFileName + " `grep -v \"MSP Version:\" " +
    backupLocation + listFileName + "`\n\n");
    // Check if free space on the backup partition has reduced below the limit
    // If enough space left, backup is retained, "mss" is made the owner of the files,
    // "backup" is made the group the files belong to,
    // permissions changed to be "0660" and
    // backup action declared a success
    // Else, backup files are deleted and declared a failure
    buffer.append(" ### Check if the partition has enough space left\n" +
    //" diskLeft=`df -k | grep \"" + backupPartition + "\" | awk '{print $5}' | cut -d\"%\" -f1`\n" +
    " diskLeft=`df -k \"" + backupPartition + "\" | awk '{print $5}' | cut -d\"%\" -f1 | grep -v Use`\n" +
    " echo \"Partition " + backupPartition + " is $diskLeft% used.\"\n" +
    " if [ \"$diskLeft\" -gt \"" + backupPartitionLimit + "\" ]\n" +
    " then\n" +
    " ### Failure\n" +
    " echo \"Partition " + backupPartition + " does not have enough space.\"\n" +
    " echo \"Backup " + backupLocation + tarFileName + " will be removed.\"\n" +
    " rm -f " + backupLocation + fileName + "*\n" +
    " echo \"Backup Failed.\"\n" +
    " else\n" +
                        " tar tvzf " + backupLocation + tarFileName + " > /dev/null 2>&1\n" +
    " if [ ! -s " + backupLocation + tarFileName + " -o $? -ne 0 ] \n" +
                        " then\n" +
                        " echo \"MSP Backup operation is not successful. The tar file " + backupLocation + tarFileName + " contains errors.\"\n" +
                        " echo \"Please take the backup again\"\n" +
                        "     touch "+backupLocation+fileName+".err\n" +
    " else \n" +
    " ### Success\n" +
    " ### Change the owner, group and permissions for the backup files\n" +
    " chown mss " + backupLocation + fileName + "*\n" +
    " chgrp backup " + backupLocation + fileName + "*\n" +
    " chmod 0660 " + backupLocation + fileName + "*\n" +
    " echo \"Backup Completed.\"\n" +
    " fi\n" +
    " fi\n\n");
    // MSP Limited release and earlier builds re-start mysql. Starting
    // MSP 1.0 GA release, mysql is not stopped and so re-start is not
    // needed. sql scripts created by the dump script get packed into
    // the tar file and so are deleted.
    // Check if mysql dump creation script exists
    if (mysqlDumpScript.exists()) {
    // MSP 1.0 GA and later releases
    // Remove DB dump files
    buffer.append(" ### Remove DB Dump Files\n" + " rm -f " + dbDumpLocation + "*\n\n");
    else {
    // MSP Limited release
    // Start mysql
    buffer.append(" ### Start mysql\n" + " /etc/init

  • Informing agent how call originated

    I have calls originating from several different WATS numbers that are routed to the same loop.
    Calls from 800-xxx-aaaa are routed to a script that queues and redirects the call to the customer service loop via script aaaa.
    Calls from 800-xxx-bbbb are routed to a different script that queues and redirects the call to the same customer service loop as above.
    Our customer service staff need to know which calls originate from the bbbb number, but in either case what they see is the caller ID of the calling party. Changing the caller ID mask for the CTI route point associated with the script doesn't affect what the customer service representative sees.
    How can I pass on the information, either by modifying Caller ID or some other method, so the agent can see how the call originated?
    We are running UCCX 8.5.1 and CM 8.5.1.
    Thanks!

    Unless you're using IPPA, it is assumed that the agent would look at CAD to get this information. The CSQ is shown in the bottom-right quadrant and/or Enterprise Data you chose to show in the bottom-left quadrant can convey this.
    If that's not viable, you can split the Call Control Groups (CCG) ports into small groups and assign the Triggers to a discrete CCG. This would allow you to set the Alerting Name field on each CCG to reflect its use. The downside to this is that CCG ports are licensed in CCX Premium to twice the number of seats licensed and even if you're using CCX Standard/Enhanced, there are system capacity limits. So, if you had a single CCG of 100 then any/all of your Triggers/Applications could have a total of 100 calls in IVR treatment/ACD queue. If you divide that in two, then the Triggers assigned to a CCG cannot exceed 50 concurrent calls, even if the other group has capacity remaining.

  • Courtesy call Back to a different Skill Group

    Am running UCCE 8.5 + CVP 8.5
    How does the courtesy call back application gets the value of the skill group it needs to be routed to or  the caller has been queued to? Is it possible to make some changes so that when the call back is done the caller should be connected to a different skill group rather than the original one with a higher priority?

    Hello,
    May i ask why do you want to do that ? the courtesy call back is used so that the call can stay where it is in the queue, the system calculate the Estimated Wait Time (EWT) for this speicific skill group so it can be routed directly to agent, if in case it is routed to another skill group (which i am not sure it can be done) how do you want to go to the same place it enters the queue, it will be as new call ?
    If a specific call you need to route to another skill group, i suggest for you not to use the courtesy call back script, just re-route it and raise the priority of the call.
    Amer

  • IVR Unity Call Back??

    I'm quite new to using unity and IVR so sorry if this is a stupid question. I have a group of users who have asked If a client called and no free agent is avaliable or busy that the IVR will prompt the agent if they would like a call back. Then callcenter should automatically do call back for these clients (who select call back) but when agents become free. Is it possible and how?
    Thanks

    Where does Unity fit into IVR, scripted call backs, and etc?  Is this a CUE deployment?  What type of setup do you have going?

Maybe you are looking for

  • Error When Opening iTunes

      Windows XP SP2  This suddenly started happening and I don't know why. When I open iTunes it says "iTunes has encountered a problem and needs to close." then it closes. No iTunes window pops up or anything, just this error window. It has no relevant

  • How to retrieve the procedure value and pass the value to a form field

    How to retrieve the procedure value and pass the value to a form field?

  • Oi vay! a mac thats too slow to use DVDs, quicktime, imovi,

    OI VAY!!I believe I was sold a mac, by a mac expert nonetheless, that is far too slow and lacking in memory to watch videos in any form, dvd, file, with quicktime, etc. And it seems too old for the updates available. its a iBook G4 version 10.4.11 pr

  • Chat messages from all contacts

    I use Skype 5.8 for Iphone. I would like to get messages - chat messages from all contacts, not only from which I have in my contact list. Is anybody can help me how to do it on Iphone?

  • Sorting Timestamp Column in Datagid

    HI All, How can we Sort the TimeStamp Column (Ex: containing 02/05/2007 16:44:03) in a DataGrid. Please help me Thanks a lot PSamanth