JTAPI and vg224

Anyone know if JTAPI supports call control on the vg224. I know that it works on the vg248 but since the 224 is IOS based, was wondering if there is a difference.
Mark

@gpulos: are you sure about that? The protocols you listed are signalling protocols.. jtapi is a cti protocol.. I'm pretty sure you won't find jtapi mentioned on any phone/device product page .. it's a feature the call manager offers.
I don't have a VG224 device to test, but I added one to my ccm, configured one of the ports, added a line to it, and then I was able to create a device association via my cti user.. so if that's possible, the device should be monitor-able via JTAPI and TAPI.

Similar Messages

  • JTAPI AND Call Load?

    Hello,
    I have been getting mixed responses and would like to know what the actual experts say on JTAPI and the potential "load" it places on CUCM. What I am specifically referring to is FPC (1st party control) and TPC (3rd party control), but more specifically just adding a user then adding devices to be monitored for the lone purpose of getting device presence information. This means no CTI route points or CTI ports actually being used.
    Since this means that an actual JTAPI session would need to be open (I am using a simple JTAPI listener to get OnHook/OffHook events), I understand that there will be *some* load, but I cannot see where this would cause a significant increase in resource use on CUCM.
    Would someone please share their thoughts on this? Thank you.

    You can get alot of information as to whats going on in the callcenter via the HDS database. You can also connect into the CTI interface on the CTIOS server. To get information via the ctitoolkit. Remember that JTAPI can way heavily on the CPU load on a server, and the agents add additional overhead to a standard CUCM box as well. You might run into a device weight issue if you get too carried away.

  • JTAPI and AXL interfering with each other

    This has been driving me crazy today.
    I had to write a custom callforward app, which upon setting the call forward, modifies some line properties as well (remove any pickup group that may be present).
    To set the callforward, I've been using JTAPI and I've had this operation operational for over a year in a productive environment. Now I've added the updateLine axl command, and all of a sudden, the application no longer does what it's supposed to.
    Here is what happens: via the phone interface, I enter the number I want to forward to, then send the request to my webserver. There, the forward is set via JTAPI without exceptions being thrown (since setting / removing a cfwd gets no feedback, getting an exception = it didn't work). Then, I send the updateLine for the lines I've just forwarded. It all works out nicely, the apps comes back telling the user all his calls have been forwarded to number X.
    However, no callforwarding is actually made even though JTAPI came through telling me everything was okay. However, the pickup group does get removed from the line.
    If you then try the same operation again, this time there's only the JTAPI part as the line no longer is in the pickup group, and now the operation works like as reliable as it has always done before.
    Writing a sample app is going to be a bitch because this thing isn't quite so simple (and I'm re-using a lot of class libs of other projects so I can't just send the source code of everything to cisco) so I might not open a case on this but I thought I'd let you know.. and if Cisco employees visit this forum maybe they could spare some time trying to replicate.
    Now I'm stick having to rewrite the whole callforwarding via axl which technically isn't a problem, but it's just going to take up time that wasn't forseen in this particular project :(

    In order to modify a package, the developer would need to acquire a lock on the package. So Oracle would prevent two developers from modifying a package simultaneously. It would do nothing, though, to prevent two developers from serially overwriting each other's changes. That's one of the many reasons that you use an external source control system when developing any code, including database packages.
    Justin

  • Help needed- Caller tone application using JTAPI and JMF

    Hi to All,
    I want to make a Caller Tone Application for Cisco IP phone.
    For that application I am using JTAPI and JMF.
    I am new to this two technologies.
    Can somebody help me for how to accomplish this?
    ---Ashish

    Hi Jerry,
    You can run analog input and counter tasks concurrently.  You can start them using software timing basically at the same time which may be fine for your needs and is the easiest to implement.  You also can use a hardware start trigger to start the tasks if you prefer.  It all depends on the level of synchronization you need. 
    You have not mentioned at what rate you will be acquiring data on your analog inputs.  The M Series PCI-6225 has 80 analog inputs and may suit your needs.  You will need to know what sampling rate you are trying to achieve.  Any M Series device will definitely give you the best value. 
    Hope this helps!
    Laura

  • QOS on 1861 and VG224 FXS Interfaces

    I will be connecting a couple of 1861's...and also some VG224's to 2821 and 3825 routers. If i am plugging analog phones into the FXS ports on the 1861's and VG224's do they automatically mark the packets coming from the FXS interfaces as voice packets (EF) or do i need to do this manually?...if so i am not sure how i would because the interfaces are voice ports which i havent assigned ip addresses to...I would imagine that if i was using an IP phone instead of analogue i would be able to set the QOS on the phone itself so as to get end to end packet marking, but how does this happen with an analogue phone that has no QOS or IP capabilities?
    Thanks and regards,

    if u have voip dial peer point to ur CCM then u can make the marking through this dial peer
    for example
    dial-peer voice 1 voip
    distination-patren [ccm ip]
    codec g711ulaw
    no vad
    ip qos dscp ef media
    ip qos dscp cs3 signaling
    however what i sugest u is because u have the VG will be on one vlan which is the vlan that belongs to voice lets say vlan 20
    so just creat an ACL that match all traffic coming fron that vlan for example the range will be like 10.1.1.0/24
    so make somthing not exactly but similer to :
    ip access-list extended call-signaling
    permit tcp any any range 1719 1720
    permit tcp any any range 2428
    ip access-list extended VVLAN
    permit udp 10.1.1.0 0.0.0.255 any range 16384 32767
    class-map match-all VVLAN-VOICE
    match access-group VVLAN
    class VVLAN-CALL-SIGNALING
    match access-group call-signaling
    policy-map VG-marking
    class VVLAN-VOICE
    set ip dscp 46
    class VVLAN-CALL-SIGNALING
    set ip dscp 24
    here the interface gos from the VG to the lan
    interface [port number]
    service-policy input VG-marking
    u can chose from the above to ways which one suit u
    good luck
    please, if helpful Rate

  • JTAPI and call center

    Hi,
    does Cisco provide call center classes with their JTAPI? For instance, i would like to monitor Call center events with the JTAPI application, the same way i can monitor events on Call manager.
    Regards,
    Marko

    You can get alot of information as to whats going on in the callcenter via the HDS database. You can also connect into the CTI interface on the CTIOS server. To get information via the ctitoolkit. Remember that JTAPI can way heavily on the CPU load on a server, and the agents add additional overhead to a standard CUCM box as well. You might run into a device weight issue if you get too carried away.

  • JTAPI and Firewall

    Do we need to open specific port to allow JTAPI client outside of corporate firewall to communicate with CUCM?

    it depends on where your application server sits.. if it's in the voice zone you shouldn't need any changes, but if not, you definitely need to open ports. The ports needed are mentioned in the JTAPI developer guide (it's a single one.. and another one if you use secure JTAPI). Of course, if you want to do media (cti ports, cti routepoints) then you'll need a whole bunch of ports (the JTAPI port plus whatever ports the phones use.. I don't have the link handy but it's part of the callmanager documentation.. a single PDF that lists all ports the callmanager ever uses, including the JTAPI port).

  • Cisco JTAPI and JTAPI 1.4

    Hello,
    -Are there any Classes from Cisco JTAPI, implementing the javax.telephony.* Interfaces?
    _Where can I get the com.cisco.ipphone (for JTAPI 1.4) and com.cisco.jtapi packages?
    - Are there better Specifications like the one on :
    http://www.cisco.com/en/US/products/sw/voicesw/ps556/products_programming_reference_guide_chapter09186a00801ea3b3.html
    Thanx for help

    Cisco JTAPI does implement much of the javax.telephony series of interfaces. You pick up the actual JTAPI classes and such when you install the JTAPI plugin from CallManager. You go into CCMAdmin, to the Plugins menu, and then pick JTAPI off the list.
    You can find some pretty good documentation over in Developer Support:
    http://www.cisco.com/cgi-bin/dev_support/access_level/product_support

  • JTapi and Xtapi

    Hi,
    If anyone can please help with the following. (Please let me know if the questions are unclear or ignorantly asked).
    I have limited experiance with JTAPI, i have a program that monitors phones in our company and this uses Jtapi (with Avaya's Jtapi implementation) to monitor and make phone calls, which is send to a specific terminal (In this case a physical phone at the user's desk).
    Now i want to make a phone call, but not send it to a phone, but play it through the users earphone on the pc using MSTAPI.
    Questions:
    1. If a phone call is made using openH323, do you require a modem attached to the PC? (preferably we would not want to connect a modem to each persons pc)
    2. If we can do it without a modem, what is the call actually connected to (What converts the data into voice format).
    I will have more questions, but if someone could help me with these 2 first please, then i will be able to have a better idea of how to ask the other questions.
    I have searched the web for 3 days straight now without finding a real solution to my problems.
    Thanks in advance.

    The problem is that they want an inhouse written one, that way we will be able incorporate it into our database and add functionality that is related to our database and current system. (for example, if a client phones a user, and the user does not answer, we can create a reminder to phone back the number if we got the caller id, to phone the client back as soon as he logs onto our main system, with the client's information. We will also be able to create our own reports on the calls that was made, eg clients that falls under a specific category. if this makes sense.

  • PG JTAPI and CM failure, how to connect with others?

    Hi All;
    The main site has UCCE side A (RGR-a,PG-a, HDS&ICM&Webview-a), CVP servers and VXML Servers, Gatekeeper, two Voice Gateways and Cluster of CUCM (publisher and 3 subscribers).
    Disaster Recovery site has UCCE side B (RGR-a, PG-a, HDS&ICM&Webview-a), CVP Servers and VXML Servers, Gatekeeper, two Voice Gateways and 3 CUCM all subscribers while the publisher in the main site, so the CUCM are clustered with main site.
    If the CUCM in the main site had a failure (the publisher and the 3 subscribers), what are the needed configuration need to be done in the main site at the UCCE side A to let it able to communicate with the CUCM subscribers in the Disaster Recovery? Is this failover possible to be autmatic or I have to do it manual?
    Your kindly advise is highly appreciated.
    Regards
    Bilal

    Hi Bilal,
    one PG can connect to only one CUCM CTI Manager. The redundancy is within the PG A and PG B.
    So, if the CTI Manager that the PG A connects fails, PG B JGW process will be become active and will communicate with CTI Manager that PG B connects.
    Now, that the connectivity of PG to CTI Manager. But the CTI RP's may register to different Subscriber depending on how the callmanager group is defined on device pool that is assigned to CTI RP.
    You should have the Callmanager group for the CTI RP such that it contains both main site and fail over site call managers.
    Here are some scenarios.
    lets say, you have
    sub1 and sub2 on main site
    sub3 and sub4 on recovery site
    PGA connect to sub1 CTI manager, and PGB connects to sub3 CTI manager. Callmanager group (sub1, sub2, sub3 and sub4 in order) for the CTI RP contains all the call managers
    Failure Scenario:
    1. If sub2 fails - JGW process on PG B will be active. But CTI RPs will be registered to sub2
    2. if sub1 fails, JGW process will reamin active on PG A. but RPs will be registered to sub2
    3. if both sub1 and sub2 fails, JGW process will be active on PG B and RPs will be registered on sub3
    Hope this helps.
    Thanks
    - abu

  • JTAPI and Pilot Points

    Hi
    We have developped a simple java application which can read the addres (phone number) of an incoming call on a terminal.
    Now we've installed a pilot point which redirects to multiple terminals and we can't read the address anymore (for example: pilot point with number 2233 redirects to terminals with number 9337, 9248, .....). We always get an "unkown" number.
    We've used someting like tcev.getCall().getConnections()[1].getAddress().getName(); to get the address (where tcev is TermConnEv). We also looped through all Connections but can't find the callers address.
    Tried different ways but found no conclusion...
    Any idea?
    Many thanks!
    Chris

    The problem is that they want an inhouse written one, that way we will be able incorporate it into our database and add functionality that is related to our database and current system. (for example, if a client phones a user, and the user does not answer, we can create a reminder to phone back the number if we got the caller id, to phone the client back as soon as he logs onto our main system, with the client's information. We will also be able to create our own reports on the calls that was made, eg clients that falls under a specific category. if this makes sense.

  • JTAPI performance and limits

    If you are monitoring all call and terminal events for all phones via JTAPI, does it burden your CUCM since it has to respond to your app about these events -- specially when you have more than a thousand phone. Are there some guidelines about JTAPI performance and limits -- i.e maximum number of phones/JTAPI client, etc.

    Please check you have enabled AXL updates on the Call Manager side:
    For CUCM 4.x
    http://www.cisco.com/en/US/docs/voice_ip_comm/cucm/dir_plugin/plug413.html
    Do you have the CTI Manager service running on the server you're attempting to make a JTAPI Provider?
    In CRS 4.x and later, it should create the JTAPI and RM JTAPI users, but it may prompt for CCM 'administrator' credentials to add the users. If you have MLA enabled, this really means the 'ccmadministrator' user or a user with similar privileges.

  • Change CUCM PIM in Package CCE and JTAPI Client

    Hi All,
    I have PCCE 10.5 here. In PCCE there is 1 CUCM PIM in PG A and 1 in side B. I want to change CUCM PIM in side B to another CUCM. What's impact if I change ip address of CUCM PIM and then re install JTAPI client? Do I need restarted some services or anything else? Thank you.
    BR,
    Roy

    then you can just change the IP address in pim configuration while installing PG.
    if the CUCM version subscriber running is different then previous one, re install the JTAPI and restart PG side B service. that should be enough.
    Regards
    Chintan

  • JTAPI

    Hi friends I want to use Voice modem with JTAPI is it possible.
    I have downloaded following code but it gives me error �cant get provider�
    What I have to do plz reply me soon [email protected]
    CODE
    =============PlacingPhoneCallGUI=====
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.border.*;
    import javax.swing.event.*;
    import javax.telephony.*;
    import javax.telephony.events.*;
    /* This class provides the graphical user interface for the placing call application. */
    public class PlacingPhoneCallGUI extends JFrame implements ActionListener
         /* Declaring the GUI variables. */
         JButton getProvider_button;
         JButton zero_button, one_button, two_button, three_button, four_button, five_button, six_button, seven_button, eight_button, nine_button, star_button, hash_button;
         JButton call_button, hang_button, redial_button, status_button;
         JTextField phoneNumText; /* Contains the destination phone number. */
         JComboBox lines_combo;
         JLabel oconn_label, otconn_label, conn_label, tconn_label;
         String phNumber = null;
         int maxPhoneLength = 15;
         /* Declaring the JTAPI variables. */
         Provider jtapiprovider = null; /* Contains the default JTAPI provider. */
         Terminal ph_terminal = null; /* The phone terminal attached to the system. */
         JTAPIOutCallObserver callobserver = null; /* Behaves as the call observer for this application. */
         Connection connection[] = null;/* This array holds the phone call connections objects. */
         Call phonecall = null; /* Behaves as the phone call. */
         TerminalConnection m_destTerminalConnection = null; /* Holds the destination terminal connection. */
         TerminalConnection m_terminalConnection = null; /* Holds the originating terminal connection. */
         /* Public constructor takes no input parameter. */
         public PlacingPhoneCallGUI()
              setTitle("Placing Phone Call");
              addWindowListener(new WindowAdapter()
                   public void windowClosing(WindowEvent we)
                        exit_from_application();
              buildGUI();
              callobserver = new JTAPIOutCallObserver(this);
              setSize(380, 300);
              setLocation(250, 100);
              setVisible(true);
         /* This method is called in the constructor. This method creates the GUI to place the Phone Call application. */
         public void buildGUI()
              /* Initializing the menu and menu items. */
              JMenu menu = new JMenu("File");
              JMenuBar menubar = new JMenuBar();
              JMenuItem exit_item = new JMenuItem("Exit");
              exit_item.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        exit_from_application();
              /* Adding the menu and the menu items in the menu bar. */
              menu.add(exit_item);
              menubar.add(menu);
              setJMenuBar(menubar);
              /* Get the content pane of the JFrame. Set the layout and the background color of the content pane. */
              Container cont = this.getContentPane();
              cont.setLayout(null);
              cont.setBackground(Color.gray);
              JLabel label = new JLabel("Please click the Get Providers button to get the list of providers.");
              label.setBounds(10,10,380,20);
              cont.add(label);
              JLabel provider_label = new JLabel("Providers");
              provider_label.setBounds(10,30,60,20);
              cont.add(provider_label);
              lines_combo = new JComboBox();
              lines_combo.setBounds(75,30, 235,20);
              lines_combo.addActionListener(this);
              cont.add(lines_combo);
              getProvider_button = new JButton("Get Providers");
              getProvider_button.addActionListener(this);
              getProvider_button.setBounds(190, 60, 120,20);
              cont.add(getProvider_button);
              JLabel dialer_label = new JLabel("Phone Dialer");
              dialer_label.setBounds(10,90, 100,20);
              cont.add(dialer_label);
              /* This panel contains the buttons from 0 -9, * and #. */
              JPanel dialer_panel = new JPanel();
              dialer_panel.setBackground(Color.gray);
              dialer_panel.setLayout(new GridLayout(4, 3, 3, 3));
              one_button = new JButton("1");
              two_button = new JButton("2");
              three_button = new JButton("3");
              four_button = new JButton("4");
              five_button = new JButton("5");
              six_button = new JButton("6");
              seven_button = new JButton("7");
              eight_button = new JButton("8");
              nine_button = new JButton("9");
              star_button = new JButton("*");
              zero_button = new JButton("0");
              hash_button = new JButton("#");
              one_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appening the phone number by 1 in the text field named phoneNumText. */
                        phoneNumText.setText(phoneNumText.getText()+"1");
              two_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 2. */
                        phoneNumText.setText(phoneNumText.getText()+"2");
              three_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 3. */
                        phoneNumText.setText(phoneNumText.getText()+"3");
              four_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 4. */
                        phoneNumText.setText(phoneNumText.getText()+"4");
              five_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 5. */
                        phoneNumText.setText(phoneNumText.getText()+"5");
              six_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 6. */
                        phoneNumText.setText(phoneNumText.getText()+"6");
              seven_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 7. */
                        phoneNumText.setText(phoneNumText.getText()+"7");
              eight_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 8. */
                        phoneNumText.setText(phoneNumText.getText()+"8");
              nine_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 9. */
                        phoneNumText.setText(phoneNumText.getText()+"9");
              zero_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 0. */
                        phoneNumText.setText(phoneNumText.getText()+"0");
              star_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appening the phone number by *. */
                        phoneNumText.setText(phoneNumText.getText()+"*");
              hash_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appening the phone number by #. */
                        phoneNumText.setText(phoneNumText.getText()+"#");
              /* Adding all the numbered buttons in the dialer_panel. */
              dialer_panel.add(one_button);
              dialer_panel.add(two_button);
              dialer_panel.add(three_button);
              dialer_panel.add(four_button);
              dialer_panel.add(five_button);
              dialer_panel.add(six_button);
              dialer_panel.add(seven_button);
              dialer_panel.add(eight_button);
              dialer_panel.add(nine_button);
              dialer_panel.add(star_button);
              dialer_panel.add(zero_button);
              dialer_panel.add(hash_button);
              /* Setting the position of the dialer panel and add it to the content pane. */
              dialer_panel.setBounds(10,115,140,110);
              cont.add(dialer_panel);
              JLabel ph_no = new JLabel("Phone Number");
              phoneNumText = new JTextField();
              phoneNumText.addKeyListener(new KeyAdapter()
                        public void keyReleased(KeyEvent ke)
                             if(phoneNumText.getText().length()>=maxPhoneLength)
                                  String str = phoneNumText.getText();
                                  phoneNumText.setText(str.substring(0,15));
              /* Initializing the Call, Hangup, Redial, and Show Status buttons. Add the action listener to the buttons. */
              call_button = new JButton("Call");
              hang_button = new JButton("Hangup");
              redial_button = new JButton("Redial");
              status_button = new JButton("Show Status");
              call_button.addActionListener(this);
              hang_button.addActionListener(this);
              redial_button.addActionListener(this);
              status_button.addActionListener(this);
              /* Setting the position of the Call, Hangup, Redial and Show Status buttons. Add the buttons to the content pane of the frame. */
              ph_no.setBounds(200, 90, 100,20);
              phoneNumText.setBounds(200, 115, 110, 20);
              call_button.setBounds(200, 140, 110, 20);
              hang_button.setBounds(200, 165, 110, 20);
              redial_button.setBounds(200, 190, 110, 20);
              status_button.setBounds(200, 215, 110, 20);
              cont.add(ph_no);
              cont.add(phoneNumText);
              cont.add(call_button);
              cont.add(hang_button);
              cont.add(redial_button);
              cont.add(status_button);
              /* Initializing the status panel. This panel can be shown or hidden by clicking on the Show Status button. */
              JPanel status_panel = new JPanel();
              status_panel.setBackground(Color.cyan);
              status_panel.setBorder(new EtchedBorder());
              status_panel.setLayout(null);
              /* Initializing the labels for the status panel. */
              JLabel label1 = new JLabel("Origin Connection");
              JLabel label2 = new JLabel("Origin Terminal Connection");
              JLabel label3 = new JLabel("Connection");
              JLabel label4 = new JLabel("Terminal Connection");
              oconn_label = new JLabel("Unknown");
              otconn_label = new JLabel("Unknown");
              conn_label = new JLabel("Unknown");
              tconn_label = new JLabel("Unknown");
              oconn_label.setForeground(Color.blue);
              otconn_label.setForeground(Color.blue);
              conn_label.setForeground(Color.blue);
              tconn_label.setForeground(Color.blue);
              /* Setting the position of different labels to be added in the status panel. */
              label1.setBounds(7, 7, 140, 20);
              label2.setBounds(157, 7, 180, 20);
              oconn_label.setBounds(7, 32, 140, 20);
              otconn_label.setBounds(157, 32, 180, 20);
              label3.setBounds(7, 67, 140, 20);
              label4.setBounds(157, 67, 180, 20);
              conn_label.setBounds(7, 92, 140, 20);
              tconn_label.setBounds(157, 92, 180, 20);
              /* Add different labels to the status panel. */
              status_panel.add(label1);
              status_panel.add(label2);
              status_panel.add(oconn_label);
              status_panel.add(otconn_label);
              status_panel.add(label3);
              status_panel.add(label4);
              status_panel.add(conn_label);
              status_panel.add(tconn_label);
              status_panel.setBounds(10, 250, 350, 120);
              cont.add(status_panel);
         /* This method is invoked when end user clicks on any button provides in the user interface. */
         public void actionPerformed(ActionEvent ae)
              /* If end user user clicks on the Call button. */
              if (ae.getSource() == call_button)
                   /* Shows the error message if an outgoing call is already placing. */
                   if (phonecall != null)
                        JOptionPane.showMessageDialog(null, "Please hangup the call first.", "Error", JOptionPane.ERROR_MESSAGE);
                        return;
                   /* Shows the error message if the end user did not specify the phone number. */
                   if (phoneNumText.getText() == null || phoneNumText.getText().trim().equals(""))
                        JOptionPane.showMessageDialog(null, "Invalid phone number entry!", "Error", JOptionPane.ERROR_MESSAGE);
                        return;
                   phNumber = ""+phoneNumText.getText().trim();
                   Address address = null;
                   /* Shows the error message if the terminal is not selected by the end user. */
                   if (ph_terminal == null)
                        JOptionPane.showMessageDialog(null, "Please select a terminal first.", "Error", JOptionPane.ERROR_MESSAGE);
                        return;
                   try
                        /* Getting the addresses associated with the particular terminal. */
                        Address addresses[] = ph_terminal.getAddresses();
                        address = addresses[0];
                   catch (Exception excp)
                        System.err.println("Exception in ph_terminal.getAddresses(): "+excp) ;
                   try
                        /* Creating the Call object and adding the observer to that Call object. */
                        phonecall = jtapiprovider.createCall();
                        phonecall.addObserver(callobserver);
                   catch (Exception excp)
                        System.err.println("Exception in jtapiprovider.createCall(): "+excp) ;
                   /* Place the telephone call. */
                   try
                        connection = phonecall.connect(ph_terminal, address, phNumber);
                   catch (Exception excp)
                        System.out.println("Exception in placing the phone call: "+excp.toString());
                   try
                        TerminalConnection[] tconnection = connection[1].getTerminalConnections();
                        m_destTerminalConnection = tconnection[0];
                        Terminal t = m_destTerminalConnection.getTerminal();
                        tconnection = connection[0].getTerminalConnections();
                        TerminalConnection m_terminalConnection = tconnection[0];
                        t.addCallObserver(callobserver);
                   catch(Exception e)
                        System.out.println("Exception getting remote terminal");
                   //StatusWindow status_window = new StatusWindow(new JFrame("parent"), false);
              else if (ae.getSource() == getProvider_button)
                   /* Create a provider by first obtaining the XTAPI implementation of JTAPI and then the default provider of the XTAPI implementation. */
                   try
                        /* Creating the provider by obtaining the XTAPI implementation of JTAPI. */
                        JtapiPeer jtapipeer = JtapiPeerFactory.getJtapiPeer("net.sourceforge.gjtapi.raw.modem.ModemProvider");
                        /* Obtaining the default provider of the selected implementation. */
                        jtapiprovider = jtapipeer.getProvider(null);
                        Terminal[] terminals = jtapiprovider.getTerminals();
                        for(int i = 0; i < terminals.length; i++)
                             /* Populating the combo box with the present terminals. */
                             lines_combo.insertItemAt(terminals, i);
                        getProvider_button.setEnabled(false);
                   catch (Exception excp)
                        JOptionPane.showMessageDialog(this, "Unable to get the provider.");
              else if (ae.getSource() == lines_combo)
                   /* This code invokes when end user selects an item from the combo box. */
                   try
                        if (ph_terminal != null)
                             /* Removing the call observer object associated with that terminal. */
                             ph_terminal.removeCallObserver(callobserver);
                        /* Instantiate the terminal object and adding the call observer to that terminal. */
                        ph_terminal = (Terminal)lines_combo.getSelectedItem();
                        ph_terminal.addCallObserver(callobserver);
                   catch (Exception e)
                        JOptionPane.showMessageDialog(this, "Unable to add the call observer to the selected terminal.");
              else if (ae.getSource() == hang_button)
                   /* This code invokes when end user clicks on the Hangup button in the user interface. */
                   try
                        for (int i=0; i<connection.length; i++)
                             try
                                  /* Closing all the connections and set the Call object to null. */
                                  connection[i].disconnect();
                                  phonecall = null;
                             catch(Exception ex)
                                  System.out.println("Exception in closing the phone call. ");
                   catch (Exception ex){}
              else if (ae.getSource() == redial_button)
                   /* This method invokes when end user clicks on the Redial button. */
                   call_button.doClick();
              else if (ae.getSource() == status_button)
                   if (status_button.getText().equals("Show Status"))
                        /* Maximize the size of the frame when end user clicks on the Show Status button. */
                        setSize(380, 440);
                        status_button.setText("Hide Status");
                   else
                        /* Minimize the size of the frame when end user clicks on the Hide Status button. */
                        setSize(380, 300);
                        status_button.setText("Show Status");
         /* This method is used to terminate the application. */
         void exit_from_application()
              hang_button.doClick();
              System.exit(0);
         /* Main method. */
         public static void main(String[] args)
              PlacingPhoneCallGUI ppc = new PlacingPhoneCallGUI();
    ====JTAPIOutCallObserver================
    import javax.telephony.*;
    import javax.telephony.events.*;
    /* The MyOutCallObserver class implements the CallObserver interface. */
    public class JTAPIOutCallObserver implements CallObserver
         PlacingPhoneCallGUI gui = null;
         /* Public constructor takes the object of PlacingPhoneCallGUI class as parameter. */
         public JTAPIOutCallObserver(PlacingPhoneCallGUI gui)
              this.gui = gui;
         /* The callChangedEvent() method is called every time an associated event with the call is raised. */
         public void callChangedEvent(CallEv[] evlist)
              for (int i = 0; i < evlist.length; i++)
                   /* Checking if the event occured is the connection event. */
                   if (evlist[i] instanceof ConnEv)
                        if (evlist[i].getID() == ConnAlertingEv.ID)
                             /* This event indicates that the state of the connection is changed to the Connection.ALERTING. */
                             gui.oconn_label.setText("ALERTING");
                             gui.conn_label.setText("ALERTING");
                        else if (evlist[i].getID() == ConnInProgressEv.ID)
                             /* This event indicates that the state of the connection is changed to the Connection.IN_PROGRESS. */
                             gui.oconn_label.setText("INPROGRESS");
                             gui.conn_label.setText("INPROGRESS");
                        else if (evlist[i].getID() == ConnConnectedEv.ID)
                             /* This event indicates that the state of the connection is changed to the Connection.CONNECTED. */
                             gui.oconn_label.setText("CONNECTED");
                             gui.conn_label.setText("CONNECTED");
                        else if (evlist[i].getID() == ConnDisconnectedEv.ID)
                             /* This event indicates that the state of the connection is changed to the Connection.DISCONNECTED. */
                             gui.oconn_label.setText("DISCONNECTED");
                             gui.conn_label.setText("DISCONNECTED");
                        else if (evlist[i].getID() == ConnUnknownEv.ID)
                             /* This event indicates that the state of the connection is changed to the Connection.UNKNOWN. */
                             gui.oconn_label.setText("UNKNOWN");
                             gui.conn_label.setText("UNKNOWN");
                        else if (evlist[i].getID() == ConnCreatedEv.ID)
                             /* This event indicates that the new connection has been created. */
                             gui.oconn_label.setText("IDLE");
                             gui.conn_label.setText("IDLE");
                   /* Checking if the event occured is the terminal connection event. */
                   else if (evlist[i] instanceof TermConnEv)
                        if (evlist[i].getID() == TermConnActiveEv.ID)
                             /* This event indicates that the state of the terminal connection object is changed to the TerminalConnection.ACTIVE. */
                             gui.otconn_label.setText("ACTIVE");
                             gui.tconn_label.setText("ACTIVE");
                        else if (evlist[i].getID() == TermConnRingingEv.ID)
                             /* This event indicates that the state of the terminal connection object is changed to the TerminalConnection.RINGING. */
                             gui.otconn_label.setText("RINGING");
                             gui.tconn_label.setText("RINGING");
                        else if (evlist[i].getID() == TermConnDroppedEv.ID)
                             /* This event indicates that the state of the terminal connection object is changed to the TerminalConnection.DROPPED. */
                             gui.otconn_label.setText("DROPPED");
                             gui.tconn_label.setText("DROPPED");
                        else if (evlist[i].getID() == TermConnUnknownEv.ID)
                             /* This event indicates that the state of the terminal connection object is changed to the TerminalConnection.UNKNOWN. */
                             gui.otconn_label.setText("UNKNOWN");
                             gui.tconn_label.setText("UNKNOWN");
                        else if (evlist[i].getID() == TermConnCreatedEv.ID)
                             /* This event indicates that a new terminal connection object has been created. */
                             gui.otconn_label.setText("IDLE");
                             gui.tconn_label.setText("IDLE");
    Hi friends I want to use Voice modem with JTAPI is it possible.
    I have downloaded following code but it gives me error �cant get provider�
    What I have to do plz reply me soon [email protected]
    CODE
    =============PlacingPhoneCallGUI=====
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.border.*;
    import javax.swing.event.*;
    import javax.telephony.*;
    import javax.telephony.events.*;
    /* This class provides the graphical user interface for the placing call application. */
    public class PlacingPhoneCallGUI extends JFrame implements ActionListener
         /* Declaring the GUI variables. */
         JButton getProvider_button;
         JButton zero_button, one_button, two_button, three_button, four_button, five_button, six_button, seven_button, eight_button, nine_button, star_button, hash_button;
         JButton call_button, hang_button, redial_button, status_button;
         JTextField phoneNumText; /* Contains the destination phone number. */
         JComboBox lines_combo;
         JLabel oconn_label, otconn_label, conn_label, tconn_label;
         String phNumber = null;
         int maxPhoneLength = 15;
         /* Declaring the JTAPI variables. */
         Provider jtapiprovider = null; /* Contains the default JTAPI provider. */
         Terminal ph_terminal = null; /* The phone terminal attached to the system. */
         JTAPIOutCallObserver callobserver = null; /* Behaves as the call observer for this application. */
         Connection connection[] = null;/* This array holds the phone call connections objects. */
         Call phonecall = null; /* Behaves as the phone call. */
         TerminalConnection m_destTerminalConnection = null; /* Holds the destination terminal connection. */
         TerminalConnection m_terminalConnection = null; /* Holds the originating terminal connection. */
         /* Public constructor takes no input parameter. */
         public PlacingPhoneCallGUI()
              setTitle("Placing Phone Call");
              addWindowListener(new WindowAdapter()
                   public void windowClosing(WindowEvent we)
                        exit_from_application();
              buildGUI();
              callobserver = new JTAPIOutCallObserver(this);
              setSize(380, 300);
              setLocation(250, 100);
              setVisible(true);
         /* This method is called in the constructor. This method creates the GUI to place the Phone Call application. */
         public void buildGUI()
              /* Initializing the menu and menu items. */
              JMenu menu = new JMenu("File");
              JMenuBar menubar = new JMenuBar();
              JMenuItem exit_item = new JMenuItem("Exit");
              exit_item.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        exit_from_application();
              /* Adding the menu and the menu items in the menu bar. */
              menu.add(exit_item);
              menubar.add(menu);
              setJMenuBar(menubar);
              /* Get the content pane of the JFrame. Set the layout and the background color of the content pane. */
              Container cont = this.getContentPane();
              cont.setLayout(null);
              cont.setBackground(Color.gray);
              JLabel label = new JLabel("Please click the Get Providers button to get the list of providers.");
              label.setBounds(10,10,380,20);
              cont.add(label);
              JLabel provider_label = new JLabel("Providers");
              provider_label.setBounds(10,30,60,20);
              cont.add(provider_label);
              lines_combo = new JComboBox();
              lines_combo.setBounds(75,30, 235,20);
              lines_combo.addActionListener(this);
              cont.add(lines_combo);
              getProvider_button = new JButton("Get Providers");
              getProvider_button.addActionListener(this);
              getProvider_button.setBounds(190, 60, 120,20);
              cont.add(getProvider_button);
              JLabel dialer_label = new JLabel("Phone Dialer");
              dialer_label.setBounds(10,90, 100,20);
              cont.add(dialer_label);
              /* This panel contains the buttons from 0 -9, * and #. */
              JPanel dialer_panel = new JPanel();
              dialer_panel.setBackground(Color.gray);
              dialer_panel.setLayout(new GridLayout(4, 3, 3, 3));
              one_button = new JButton("1");
              two_button = new JButton("2");
              three_button = new JButton("3");
              four_button = new JButton("4");
              five_button = new JButton("5");
              six_button = new JButton("6");
              seven_button = new JButton("7");
              eight_button = new JButton("8");
              nine_button = new JButton("9");
              star_button = new JButton("*");
              zero_button = new JButton("0");
              hash_button = new JButton("#");
              one_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appening the phone number by 1 in the text field named phoneNumText. */
                        phoneNumText.setText(phoneNumText.getText()+"1");
              two_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 2. */
                        phoneNumText.setText(phoneNumText.getText()+"2");
              three_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 3. */
                        phoneNumText.setText(phoneNumText.getText()+"3");
              four_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 4. */
                        phoneNumText.setText(phoneNumText.getText()+"4");
              five_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 5. */
                        phoneNumText.setText(phoneNumText.getText()+"5");
              six_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 6. */
                        phoneNumText.setText(phoneNumText.getText()+"6");
              seven_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 7. */
                        phoneNumText.setText(phoneNumText.getText()+"7");
              eight_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 8. */
                        phoneNumText.setText(phoneNumText.getText()+"8");
              nine_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 9. */
                        phoneNumText.setText(phoneNumText.getText()+"9");
              zero_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 0. */
                        phoneNumText.setText(phoneNumText.getText()+"0");
              star_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appening the phone number by *. */
                        phoneNumText.setText(phoneNumText.getText()+"*");
              hash_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appening the phone number by #. */
                        phoneNumText.setText(phoneNumText.getText()+"#");
              /* Adding all the numbered buttons in the dialer_panel. */
              dialer_panel.add(one_button);
              dialer_panel.add(two_button);
              dialer_panel.add(three_button);
              dialer_panel.add(four_button);
              dialer_panel.add(five_button);
              dialer_panel.add(six_button);
              dialer_panel.add(seven_button);
              dialer_panel.add(eight_button);
              dialer_panel.add(nine_button);
              dialer_panel.add(star_button);
              dialer_panel.add(zero_button);
              dialer_panel.add(hash_button);
              /* Setting the position of the dialer panel and add it to the content pane. */
              dialer_panel.setBounds(10,115,140,110);
              cont.add(dialer_panel);
              JLabel ph_no = new JLabel("Phone Number");
              phoneNumText = new JTextField();
              phoneNumText.addKeyListener(new KeyAdapter()
                        public void keyReleased(KeyEvent ke)
                             if(phoneNumText.getText().length()>=maxPhoneLength)
                                  String str = phoneNumText.getText();
                                  phoneNumText.setText(str.substring(0,15));
              /* Initializing the Call, Hangup, Redial, and Show Status buttons. Add the action listener to the buttons. */
              call_button = new JButton("Call");
              hang_button = new JButton("Hangup");
              redial_button = new JButton("Redial");
              status_button = new JButton("Show Status");
              call_button.addActionListener(this);
              hang_button.addActionListener(this);
              redial_button.addActionListener(this);
              status_button.addActionListener(this);
              /* Setting the position of the Call, Hangup, Redial and Show Status buttons. Add the buttons to the content pane of the frame. */
              ph_no.setBounds(200, 90, 100,20);
              phoneNumText.setBounds(200, 115, 110, 20);
              call_button.setBounds(200, 140, 110, 20);
              hang_button.setBounds(200, 165, 110, 20);
              redial_button.setBounds(200, 190, 110, 20);
              status_button.setBounds(200, 215, 110, 20);
              cont.add(ph_no);
              cont.add(phoneNumText);
              cont.add(call_button);
              cont.add(hang_button);
              cont.add(redial_button);
              cont.add(status_button);
              /* Initializing the status panel. This panel can be shown or hidden by clicking on the Show Status button. */
              JPanel status_panel = new JPanel();
              status_panel.setBackground(Color.cyan);
              status_panel.setBorder(new EtchedBorder());
              status_panel.setLayout(null);
              /* Initializing the labels for the status panel. */
              JLabel label1 = new JLabel("Origin Connection");
              JLabel label2 = new JLabel("Origin Terminal Connection");
              JLabel label3 = new JLabel("Connection");
              JLabel label4 = new JLabel("Terminal Connection");
              oconn_label = new JLabel("Unknown");
              otconn_label = new JLabel("Unknown");
              conn_label = new JLabel("Unknown");
              tconn_label = new JLabel("Unknown");
              oconn_label.setForeground(Color.blue);
              otconn_label.setForeground(Color.blue);
              conn_label.setForeground(Color.blue);
              tconn_label.setForeground(Color.blue);
              /* Setting the position of different labels to be added in the status panel. */
              label1.setBounds(7, 7, 140, 20);
              label2.setBounds(157, 7, 180, 20);
              oconn_label.setBounds(7, 32, 140, 20);
              otconn_label.setBounds(157, 32, 180, 20);
              label3.setBounds(7, 67, 140, 20);
              label4.setBounds(157, 67, 180, 20);
              conn_label.setBounds(7, 92, 140, 20);
              tconn_label.setBounds(157, 92, 180, 20);
              /* Add different labels to the status panel. */
              status_panel.add(label1);
              status_panel.add(label2);
              status_panel.add(oconn_label);
              status_panel.add(otconn_label);
              status_panel.add(label3);
              status_panel.add(label4);
              status_panel.add(conn_label);
              status_panel.add(tconn_label);
              status_panel.setBounds(10, 250, 350, 120);
              cont.add(status_panel);
         /* This method is invoked when end user c

    He, the code is in there twice so it's not as big as it first seems.
    Your problem doesn't seem to be programming related however, it's more of a hardware problem. If the code can't get a provider, then you need to figure out why it can't. Maybe there are applications out there that you can use to test if you can get to a provider from your workstation?

  • RTP streaming and Cisco IP phones problem

    Hello,
    I'm trying to write an application that should dial some numbers and play the voice message from the file into the phone line using Cisco JTAPI and Java Media Framework.
    I've found some samples, that seems useful for me, but unfortunately they does not work. There are no any errors and no exceptions, I have no idea what to do.
    Small brief: I make a call from one Cisco IP phone (7960) to another using Cisco JTAPI, then I catch the CiscoRTPInputStartedEv event, get the IP and port of the IP Phone and call the RTPStreamer class constuctor with them. It gives no any errors or exceptions (just a message shown below), but there is only silence in the phone line. Message:
    Should b streamin'...
    Encoding ok?: true
    streams is [Lcom.sun.media.multiplexer.RawBufferMux$RawBufferSourceStream;@53d : 1
    sink: setOutputLocator rtp://192.168.1.22:20794/audio
    Please see the RTFStreamer class code below.
    I set the packet size to 160 as reccomended for Cisco IP phones, I use the greeting.wav from Cisco example that properties are 8Khz 8bit mono, but it still doesn't work.
    Could you help me? Thank you for any advice!
    import java.io.* ;
    import java.util.* ;
    import java.net.* ;
    import javax.media.* ;
    import javax.media.control.* ;
    import javax.media.format.* ;
    import javax.media.protocol.* ;
    import stream.*;
    public class RtpStreamer
         public static int PlayCounter = 0;
         private RtpStreamer()
              // not supported
         public RtpStreamer(String IP, String Port)
              PlayCounter++;
              new RtpStreamer("rtp://" + IP + ":" + Port + "/");
         public RtpStreamer(String CurrentMediaUrl)
              PlayCounter++;
         System.out.println("Should b streamin'...");
         // Create a Processor for the selected file. Exit if the
         // Processor cannot be created.
         Processor processor = null;
         StateHelper sh = null;
         try
                   String mediaUrl = "file:\\C:\\greetings.wav";
         processor = Manager.createProcessor( new MediaLocator(mediaUrl));
         sh = new StateHelper(processor);
         catch (IOException e)
         System.out.println("Exception occured (1a): " + e);
         catch (NoProcessorException e)
         System.out.println("Exception occured (1b): " + e);
         // for loggin purpose
         //sh.setContext( getServletContext() );
         // configure the processor
         if (!sh.configure(10000))
         System.out.println("Configuration failed!!");
         // Block until the Processor has been configured
         TrackControl track[] = processor.getTrackControls();
         boolean encodingOk = false;
         // Go through the tracks and try to program one of them to
         // output ulaw data.
         for (int i = 0; i < track.length; i++)
         if (!encodingOk && track[i] instanceof FormatControl)
         if (((FormatControl)track).setFormat( new AudioFormat(AudioFormat.ULAW_RTP,8000,8,1)) == null)
         track[i].setEnabled(false);
         else
         encodingOk = true;
         else
         // we could not set this track to ulaw, so disable it
         track[i].setEnabled(false);
                   // set packet size to 160
                   try
                        Codec codec[] = new Codec[3];
                        codec[0] = new com.ibm.media.codec.audio.rc.RCModule();
                        codec[1] = new com.ibm.media.codec.audio.ulaw.JavaEncoder();
                        codec[2] = new com.sun.media.codec.audio.ulaw.Packetizer();
                        ((com.sun.media.codec.audio.ulaw.Packetizer)codec[2]).setPacketSize(160);
                        ((TrackControl)track[i]).setCodecChain(codec);
                   catch (Exception e)
                        System.out.println("Error setting packet size in 160: " + e + " in " + e.getMessage());
         System.out.println("Encoding ok?: " + encodingOk );
         // At this point, we have determined where we can send out
         // ulaw data or not.
         // realize the processor
         if (encodingOk)
         if (!sh.realize(10000))
         System.out.println("Realization failed!!");
         // block until realized.
         // get the output datasource of the processor and exit
         // if we fail
         DataSource ds = null;
         try
         ds = processor.getDataOutput();
         catch (NotRealizedError e)
         System.out.println("Exception occured(2): "+e);
         // hand this datasource to manager for creating an RTP
         // datasink.
         // our RTP datasink will multicast the audio
         try
         //String mediaUrl= "rtp://192.168.1.12:20002/audio/1"; // it works without errors
                        String mediaUrl= CurrentMediaUrl + "audio";
         MediaLocator m = new MediaLocator(mediaUrl);
         DataSink d = Manager.createDataSink(ds, m);
         d.open();
         d.start();
         catch (Exception e)
         System.out.println("Exception occured(3): "+e);

    BTW is there any solution to figure out if the RTP application makes any network activity or not?

Maybe you are looking for

  • How can I delete devices from icloud account?

    How can I delete devices from icloud account?

  • Can't get Mail- Gmail- Drafts(And Sent Items) to mirror online or my iphone

    I have read the posts here and elsewhere on how to get this to work, but for some reason my 'Drafts'(and 'Sent' items) folder in Mail.app is still not the same as online or on my iphone. What exactly do i need to do to make Mail.app folders for Draft

  • Importing AVCHD files to Macbook Pro / FCPX for archiving

    I recently bought the Sony HDR-cx570e videocamera and was quite upset when I found out how difficult the relation between the camera and my macbook pro was. (mid 2010 - running ML). When the sd card reaches maximum capacity, I usually (with other cam

  • Simple question about slideshows

    I'd like to create a very basic slideshow that can be viewed on TV. I don't need music, themes, or transitions. I just want to be able to click on the DVD player's remote and advance through the images manually. What I don't know is which application

  • My iBook won't turn on! PLEASE HELP!

    I was having problems with the CD drive last week, then, this morning, I went to turn him back on and he won't turn on. I push the power button and he starts to start, but nothing happens. The processor starts whirring and doesn't stop until I remove