「UserEndpoint」で OCS に接続する UCMA 2.0 アプリケーションを作成しています。プレゼンス メッセージをカスタム プレゼンス メッセージと一緒に設定できるようにしたいです。
途中でいくつかの問題に遭遇し、グーグルに多くの時間を費やし、いくつかの記事を試しましたが、大部分は同じことを言っているようです(MS自体を含む):
XML を使用して「userState」アクティビティをカスタムに設定し、メッセージを含めてから、エンドポイントの「LocalOwnerPresence.BeginPublishPresence」メソッドを介してカスタム カテゴリで公開します。
これを行っても OCS からエラーは返されませんが (以下の XML の例を参照)、Office Communicator (MOC) のプレゼンスを見ると、問題のユーザーは引き続きオフラインのように見えます。「machineState」も公開すると、MOC にプレゼンス アイコンが表示されることを意味することがわかりましたが、残念ながら、カスタム アクティビティ メッセージを機能させることができません。
さらに読むと、これを可能にするために実行する必要がある OCS DB 内のストアド プロシージャなど、野生のガチョウの追跡に私が送られました (単なるカスタム メッセージを既存の状態に追加するのではなく、新しいプレゼンス カテゴリを追加するように聞こえます)。私は「オンライン」で 1 日を過ごした後、自分のテザーの終わりにいるようなものです。
ヘルプや落とし穴を指摘していただければ幸いです。これを読んだときに使用したサイトのいくつかを含めました。
プレゼンスの概要: http://msdn.microsoft.com/en-us/library/dd253506(v=office.13).aspx
パブリッシング プレゼンス: http://msdn.microsoft.com/en-us/library/dd253494(v=office.13).aspx
プレゼンス + カスタム メッセージ: http://blogs.claritycon.com/blog/2009/03/04/how-to-publish-presence-using-ucma-v2-0-and-have-a-clever-communicator-status /
マシン状態のアイデア: http://social.msdn.microsoft.com/Forums/en-US/ucmanagedsdk/thread/d3bd3569-66c0-4b52-86f0-900d2fb6d22e/
プレゼンス スキーマ ドキュメント: http://msdn.microsoft.com/en-us/library/dd941536(v=office.13).aspx
これが私のコードで使用している XML (文字列) です。オンザフライで文字列を作成します。カスタム メッセージと可用性の整数値 ("テスト メッセージ" と引数のために 3500) を使用してプレースホルダーをフォーマットします。
string userStateXmlFormat = "<state xmlns=\"http://schemas.microsoft.com/2006/09/sip/state\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" manual=\"true\" xsi:type=\"userState\">\n"
+ "<availability>{0}</availability>\n"
+ "<activity>\n"
+ "<custom xmlns=\"http://schemas.microsoft.com/2006/09/sip/state\">{1}</custom>\n"
+ "</activity>\n"
+ "</state>";
フォーマットを行い、プレゼンスを公開しようとする C# は次のとおりです。
var machineStateXml = string.Format(machineStateXmlFormat, 3500);
var userStateXml = string.Format(userStateXmlFormat, 3500, "Test Message");
var machineState = new CustomPresenceCategory("state", machineStateXml);
var userState = new CustomPresenceCategory("state", userStateXml);
PresenceCategory[] categoriesToPublish = new PresenceCategory[] { machineState, userState };
this.Endpoint.LocalOwnerPresence.BeginPublishPresence(categoriesToPublish, this.PublishPresenceCompleted, null);
何も抜けていないことを願っています。何か欠けていると思われる場合はコメントしてください。
乾杯ピート