Communicator API

Diese Seite ist noch nicht fertig. Ich wollte ihnen aber die ein oder andere Information nicht vorenthalten.

Natürlich können Sie selbst auch die API, welcher mit der Installation des Communicator auf ihrem PC installiert wird, in eigenen Anwendungen nutzen. Schon in der Registrierung finden Sie die Verweise auf die entsprechenden COM-Objekte, die angesprochen werden können:

Interessant sind hier die Einträge zum Communicator und die weniger naheliegenden Einträge zu "Name.nameCtrl". Gerade das letzte COM-Objekte kommt in Webseiten z.B. sehr gut zum Einsatz, spricht es doch den lokal installieren OCS-Client (oder einen anderen Instant Messenger Client) an, um, den Status anderer Personen anzuzeigen. Schauen wir uns ein paar Beispiele an -

Zugriff mit VBScript und COM

Zu OCS-Zeiten war PowerShell noch nicht weit verbreitet und daher der VBScript-Zugriff eher üblich

wscript.echo "Binding Communicator.uIAutomation"
set oc = createobject("Communicator.uIAutomation")

wscript.echo "Enumerate Contacts" 
foreach contact in oc.mycontacts
   wscript.echo "Anzeigename" & contact.Friendlyname
   wscript.echo "Anmeldename" & contact.signinname
next

wscript.echo "Start instant Message Session"
set im = oc.InstantMessage("user2@msxfaq.de")

im.sendtext("test")

Zugriff mit COM und PowerShell

Hier ein paar Beispiele mit der damals verfügbaren PowerShell:

Windows PowerShell
Copyright (C) 2006 Microsoft Corporation. Alle Rechte vorbehalten.

PS C:\> $oc = New-Object -com Communicator.UIAutomation
PS C:\> $oc

Window               : System.__ComObject
ReceiveFileDirectory :
MyContacts           : {Frank Carius (test), xxxxx, xxxxxx...}
MySigninName         : frank.carius@netatworkxxxx.de
MyFriendlyName       : Carius, Frank
MyStatus             : 10
MyServiceName        :
MyServiceId          : {83D4679F-B6D7-11D2-BF36-00C04FB90A03}
Services             : {Kommunikationsdienst}
ContactsSortOrder    :
MyGroups             :


PS C:\> $oc.MyContacts

FriendlyName       : Carius, Test
Status             : 1
SigninName         : test.carius@netatworkxxxx.de
ServiceName        : Kommunikationsdienst
Blocked            :
CanPage            :
IsSelf             : False
ServiceId          : {83D4679F-B6D7-11D2-BF36-00C04FB90A03}
IsTagged           :
PresenceProperties :

PS C:\> $im = $oc.InstantMessage("Mario.Zaljec@netatwork.de")
Fenster zum chat öffnet sich !!!

PS C:\> $im.SendText("hallo")
Ausnahme beim Aufrufen von "SendText" mit 1 Argument(en): "Die Methode oder der Vorgang sind nicht implementiert."
Bei Zeile:1 Zeichen:13
+ $im.SendText( <<<< "halo")

PS C:\> $im.close()
Ausnahme beim Aufrufen von "Close" mit 0 Argument(en): "Die Methode oder der Vorgang sind nicht implementiert."
Bei Zeile:1 Zeichen:10
+ $im.close( <<<< )

# Powershell für Lync ClientSDK
# Microsoft.Lync.Model.Dll einbinden
[Reflection.Assembly]::LoadFile("C:\temp\Microsoft.Lync.Model.dll")
[Reflection.Assembly]::LoadFile("C:\temp\microsoft.office.uc.dll")
#import-module "C:\Program Files (x86)\Microsoft Lync\SDK\Assemblies\Desktop\Microsoft.Lync.Controls.Dll"

# Lync Client binden
$lyncclient = [Microsoft.Lync.Model.LyncClient]::GetClient() 
# Schon angemeldet ?
if ($lyncclient.State -ne [Microsoft.Lync.Model.ClientState]::SignedIn) {
	write-error "nicht angemeldet"
	break;
}
else {
	write-host "Angemeldeter User:" $lyncclient.Self.Contact.uri
}

 

 

OCS Status in Webseiten

Wer schon mal Sharepoint oder andere Webseiten geöffnet hat, kann bei installiertem OCS-Client sehr einfach den Status der Mitarbeiter sehen. Dabei muss man unterscheiden, ob der Webserver den Status aufbereitet und einfach nur farblich in den ausgelieferten HTML-Daten hinterlegt oder ob der Internet Explorer auf dem Desktop mittels ActiveX den Status anzeigt. Die lokale Anzeige erfordert natürlich eine aktive funktionierenden OCS-Client-Installation. Allerdings erlaubt diese dann natürlich auch einfach weitere Aktionen über das Kontextmenü. Hier ein Beispiel einer Einbindung

<html>
  <head>
    <title>OCS Integrationstest</title>
    <script type="text/javascript" language="JavaScript"> 
    var nameCtrl = new ActiveXObject("Name.NameCtrl");
    </script>
  </head>

  <body>
    <h1>OCs Integrationstest</h1>
    <span 
     onmouseover="nameCtrl.ShowOOuI('User@msxfaq.test',0,this.offsetLeft,this.offsetTop)"
     onmouseout="nameCtrl.HideOOuI()">Hover your mouse over this text to retrieve presence information.
    </span>
  </body>
</html>

Der einfachste Weg ist eine direkte Einbindung als Bild

<script type="text/javascript" src="/profiles/javascript/NameControl.js"></script>

Next, you need to have this code somewhere in your HTML file:

<img id="imgStatus ${email}_status" 
src="/profiles/images/namecontrol_images/unknown.gif" 
onload="PresenceControl('User-email');"/>
<IMG id=g_d1b3e494_5731_4ee2_bf38_f97a17ede7ce82CommonManager_im,type=sip 
border=0 name=imnmark alt="" src="/_layouts/images/imnhdr.gif" width=12 
onload="QueuePopulateIMNRC('úser@firma.tld', this)" height=12 
ShowOfflinePawn="1">

Alternative habe ich natürlich auch mal versucht, einfach über folgende Zeilen ein OCS-Status-Feld zu addieren

<object classid="clsid:E18FEC31-2EA1-49A2-A7A6-902DC0D1FF05"
  id="msgr"
  name="msgr"
  type="application/x-oleobject"
  width="1" height="1"
  style="display: none;" events="true">
  OCS Control wurde nicht geladen
</object>

Das Ganze kann man auch einfach in Sharepoint Designer als "Web Komponente" addieren.

Allerdings habe ich bislang nicht heraus gefunden, wie direkt der Kontaktname zu übergeben ist

Weitere Links