Cisco Push2Phone Service

Rheinhesse89

Neuer User
Mitglied seit
23 Mrz 2011
Beiträge
13
Punkte für Reaktionen
0
Punkte
0
Hey Leute,

ich versuche gerade den Push2Phone Service aus dem Cisco SDK einzurichten, habe aber noch einige Verständnisprobleme bei denen Ihr mir hoffentlich weiterhelfen könnt.

Man kann im CM ja seine Services einrichten und dann für die Telefone „subscriben“. Das habe ich nun auch mit den Push2Phone Service eingerichtet und auf unseren Webserver geladen.
Wenn ich den Service im Telefonmenü nun auswähle, dann wird mir im Display lediglich der Quellcode der jsp-Datei angezeigt.
Ich verstehe auch nicht warum ich den Service im Telefonmenü überhaupt auswählen muss, der Sinn liegt doch gerade darin, dass der Service gepusht wird oder nicht ?


Code:
<%@ page language="java" import="com.cisco.ipphone.sdk.*, com.cisco.ipphone.sdk.push2phone.PushMessage, java.net.InetAddress, java.util.*" %>

<%
///////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Title:  		Push2Phone
// Author: 		kstearns
// Source File(s):  	push2phone.jsp
//
///////////////////////////////////////////////////////////////////////////////////////////////////////
//  Description:
//
//  Push2Phone provides a form to enter a message to be sent to a group of phones.
//  A text message is entered, a group of phones are selected from a list, and Send send's the
//  message.
//  The list of phones is generated by query the CallManager database via the AVVID XML-Layer Database
//  API (AXL).
//  Once the message is entered and the phones are selected, the submit action of the form POSTs the
//  information back to this same .jsp script which handles PUSHing the message to the phones.
//
///////////////////////////////////////////////////////////////////////////////////////////////////////
//  Requirements and Caveats:
//
// -  Client: HTML Browser (PC-based web browser)
//
//  - In order for the user names to appear next to the phone names, the phones must be associated
//    to the users in the CallManager directory.
//
// - In order for Push2Phone to work, the PUSH userID and PUSH password hard-coded below
//   MUST have authority to PUSH to all phones used by the application.
//   For example, a new application user ID of 'sdkapps' could be created in the Global Directory.
//   All phones using the application are then selected as Associated Devices for user 'sdkapps'.
//
//   NOTE: For large-scale PUSH applications, associating hundreds or even thousands of devices to a single user
//         (for purposes of PUSH authentication) is *NOT ACCEPTABLE*.
//         In this case, the PUSH authentication *MUST* be offloaded from the CallManager server to an external
//         web server - see the PushAuthenticate ASP sample script for more information.
//
///////////////////////////////////////////////////////////////////////////////////////////////////////

//
//  Edit the following Strings for your environment.
//  This is for sample purposes only - placing passwords and other
//  sensitive information in an open text file is obviously NOT recommended !!!
//

String thisServer = InetAddress.getLocalHost().getHostAddress();
String thisPath = request.getRequestURI();
String messageURL = "http://" + thisServer + ":8080" + thisPath + "?action=get";

String callManager = "172.99.5.256";
String callManagerUserId = "phoneservicepush";
String callManagerPassword = "test123";

String ldapServer = "";
String ldapRoot = "";
String ldapUserId = "";
String ldapPassword = "";
int ldapPort = "";

String pushUserId = "phoneservicepush";
String pushPassword = "ewrag";

IPAddressProvider ipProv = new IPAddressProvider(callManager, callManagerUserId, callManagerPassword);
LDAPProvider ldapProv = new LDAPProvider(ldapServer, ldapUserId, ldapPassword, ldapPort, ldapRoot);

String action = request.getParameter("action");
if (action == null) action="list";

/////////////////////////////////////////////////////////////////
// If no action was specified, then create the PhonePush form
/////////////////////////////////////////////////////////////////

if (action.equals("list"))
{
  out.println("<html>");
  out.println("<body>");
  out.println("<h1>Push2Phone</h1>");

  out.println("<form method=\"POST\" action=push2phone.jsp?action=push>");
  out.println("<textarea rows=\"20\" name=\"message\">Type your\nurgent message\nhere !!!</textarea>");
  out.println("<select size=\"20\" name=\"phones\" multiple>");

  // Exclude the 'sdkapps' user because it will be associated with all phones
  // The only other associated User should be the real owner of the phone

  String[] excludedUsers = { pushUserId };

  HashMap registeredDevices = ipProv.getAllIPAddresses();
  Iterator deviceIter = registeredDevices.keySet().iterator();

  while (deviceIter.hasNext()) {
    String deviceName = (String)deviceIter.next();
    out.print("<option>" + deviceName + ": ");
    Phone thePhone = Phone.getPhone(deviceName);
    User[] users = thePhone.getControllingUsers(ldapProv, excludedUsers);
    // Get the first user - it should be the only one
    if (users.length > 0) {
      User user = users[0];
      user.loadAttributes(ldapProv);
      out.print(user.getFirstName() + " " + user.getLastName());
      out.print(" (" + user.getUserId() + ")");
      out.println("</option>");
    }
  }

  %>
  </select>
  <p><input type="submit" value="Send" name="B1">&nbsp;&nbsp;&nbsp;&nbsp;<input type="reset" value="Reset" name="B2"></p>
  </form>
  </body>
  </html>
  <%

}

////////////////////////////////////////////////////////////
// If action = push then PUSH the message to the phones
////////////////////////////////////////////////////////////

if (action.equals("push"))
{
  response.setHeader("Refresh", "3; URL=push2phone.jsp");
  out.println("<html>");
  out.println("<body>");
  out.println("<h1>Push2Phone</h1>");
  out.println("<br><br><b>Sending Message ...</b>");

  if (request.getParameterValues("phones") != null)
  {
     // Inform the PushMessage class to update the message
     PushMessage.setMessageText(request.getParameter("message"));

     String[] phoneNames = request.getParameterValues("phones");
     String phoneIP;

     // Step thru the list of phones specified, getting their active IP address, and
     // PUSHing a URL command to retrieve the message

     Phone[] phones = new Phone[phoneNames.length];
     for (int i=0; i < phones.length; i++)
       phones[i] = Phone.getPhone(phoneNames[i].substring(0, phoneNames[i].indexOf(":")));

     String[] ipAddrs = ipProv.getIPAddresses(phones);

     String[] uris = { messageURL, "Play:chime.raw" };
     for (int i=0; i < phones.length;i++) {
       if (ipAddrs[i] != null) {
         out.println("<br>Sent: " + phones[i].getDeviceName() + " at " + ipAddrs[i]);
         phones[i].push(uris, ipAddrs[i], pushUserId, pushPassword, false);
       }
     }
  }
  out.println("</body>");
  out.println("</html>");
}

//////////////////////////////////////////////////////////////////////////////
// If action = get then this is a request from an IP phone for the message
//////////////////////////////////////////////////////////////////////////////

if (action.equals("get"))
{
  // So read the XML object from the text file and return it to the phone

  response.setContentType("text/xml");
  out.print(PushMessage.getMessageXML());
}

%>

Kann mir evtl. jemand den grundsätzlichen Ablauf dieses Push-Services erklären, aus der Beschreibung oben wird man nicht ganz schlau.

Vielen Dank!


Gruß
 
Warum trägst Du einen push service auf dem callmanager ein?

Dein Beispiel ist ein frontend um einem phone eine push message zu senden, wenn Du das als service einträgst, wirst du wenig freude damit haben.
Hast Du verstanden wis die jsp macht?
 
Hey,

danke für Deine Antwort.

mittlerweile habe ich auch gecheckt, dass es keinen Sinn macht den Service direkt auf dem CM einzuplanen, aber wie kann ich das Skript sonst aufrufen ? :(

Ich verstehe halt generell noch nicht so ganz wie das mit dem pushen funktioniert...

was die Datei genau macht habe ich auch nicht verstanden, da wäre eine kleine Erläuterung sehr nett!

Vielen Dank!

gruß
 
Zuletzt bearbeitet:
Aufrufen solltest du die seite mit deinem webbrowser. Dann bekommst Du eine Form, in der du devices auswählen kannst.

Um die jsp zu erklären, reicht glaub ich die Zeit nicht.
Push ist nichts anderes, als das du dem phone mittels http post dem device eine xml sendest.
 
Es gibt 2 verschiedene Baustellen:

1.) XML-Services. Das sind XML-Seiten, die Du mit dem Telefon aufrufen kannst und die dann Textseiten, Grafiken, Menüs oder Telefonbücher anzeigen.
2.) Push Services. Das sind XML-Seiten, die vom Server aus an das Telefon gepusht werden, bzw. genaugenommen wird die URL zu einem XML-Service mit einer Aufforderung zum Laden gepusht.
 
Hey,

@chaos2000
Ich hab die jsp mal auf unseren Webserver geladen, wenn ich sie über meinen Webbrowser aufrufe wird lediglich der Quellcode angezeigt, Devices konnte ich nicht auswählen.

Habe ich vlt. etwas falsch gemacht ?!

Gruß
 
mit was hast du das laufen lassen?
 
Hey,

wie meinst du das genau ?

Unser Webserver ist ein Apache soweit ich weiß, ansonsten habe ich es sowohl mit Mozilla als auch mit dem normalen IE ausprobiert, irgendwie komisch -.-

LG
 
Hey,

japp, das hatte ich auch schon ausprobiert, aber irgendwie auch nicht ganz verstanden, vorallem dieser "/CGI/Execute" -Pfad exisitiert auf unserem Webserver nicht, was hat es damit überhaupt auf sich ?

Grüße
 
Der soll ich nicht auf deinem Webserver exisitieren.
Schau Dir mal den Code an:

$ip ist die ip deines devices;
$fp = fsockopen ( $ip, 80, $errno, $errstr, 30)öffnet einen stream zum device

somit wird:
$post = "POST /CGI/Execute HTTP/1.0\r\n";

auf dem device ausgeführt.
Also nichts anderes als ein POST auf eine URL auf dem device


Schöne Ostern ;)
 
Hey,

zunächst mal dankeschön für Deinen letzten Beitrag!

Dieses Script klingt mal sehr interessant, wie genau könnte ich das dann verwenden ?

Ich stelle mir das so vor, dass ich ein PHP-Script erstelle in dem diese Funktion aufgerufen wird. Anschließend plane ich das Script als Service ein. Würde das so gehen ?

Tricky wird es allerdings wenn ich zu Hunderten von Telefonen pushen will, ich kann ja nicht jedesmal die ganzen IP's dort eintragen ...

Grüße
 
Dieses Script klingt mal sehr interessant, wie genau könnte ich das dann verwenden ?
Was Du damit anstellen möchtest, da kann ich Dir nicht helfen.

Ich stelle mir das so vor, dass ich ein PHP-Script erstelle in dem diese Funktion aufgerufen wird. Anschließend plane ich das Script als Service ein. Würde das so gehen ?
Ich weiss nicht was das script machen soll und ob es sinn macht das als Service anzubieten, daher kann ich dazu nichts sagen.

Tricky wird es allerdings wenn ich zu Hunderten von Telefonen pushen will, ich kann ja nicht jedesmal die ganzen IP's dort eintragen ...
DU könntest Dir die IPs ja aus einer DB holen, oder aus dem LDAP vom CUCM
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.