Uncategorized

Lync 2010 の Online Meeting (Web 会議)

2016/04 追記 : API を使った Online Meeting の処理は、最新の UCWA (REST Web API)、または Skype Web SDK などをお使いください。
詳細を「Skype Meeting を API (REST, Web) で処理する (Skype for Business)」に記載しました。

 

環境 : Lync Server 2010, Lync 2010, Visual Studio 2010, Lync 2010 SDK

Lync 2010 クライアント開発入門

こんにちは。

ここでは、Lync SDK を使って Online Meeting (Web Conferencing) を操作する方法について記載します。
まずは、開発の前に、Lync のオンライン ミーティングに関する基本をおさえておきましょう。

 

Lync オンライン ミーティングの概要と背景

従来の Office Communications Server 2007 / Office Live Meeting 2007 では、IM (Instant Messaging)、Audio Conversation などの Conversation をおこなうインフラと、Meeting をおこなうインフラはそれぞれ分かれていました。ユーザー (利用者) は、Conversation をおこなう際には Office Communicator を使用し、Meeting をおこなう場合には Office Live Meeting Client を使用して、2 つの異なるアプリケーションの利用方法を習得する必要がありました。

Lync 2010 では、これら 2 つのインフラが統合され、Conversation をおこなう場合も、Meeting をおこなう場合も、Lync クライアントを同一のユーザー体験 (Experience) として使用できます。ユーザー は、Lync の機能を使って、音声とプレゼンテーションの共有や、アンケートの作成 (実施)、レコーディングなどをおこなうことができます。

[TechNet] Migration Consideratoins for Meetings

http://technet.microsoft.com/en-us/library/gg520965.aspx

※ 注記 : ただし、ドキュメントを読むと、250 ユーザーを超える大規模なミーティング (例えば、企業内の全従業員を対象とした発表会など) の目的で使用する場合は、従来通り、Office Live Meeting を使用することが推奨されているようです。Lync は、あくまでも会議 (Meeting, Conference) の目的で使用すると良いでしょう。

開発 (カスタマイズ) を理解する前に、この新しい Lync の Online Meeting について理解しておきましょう。

まず、Lync の Online Meeting には、以下の Scheduled Meeting と Ad-hoc Meeting の 2 種類のミーティングがあります。

  • Scheduled Meeting
    あらかじめ Meeting の予定を組んでおき、事前に Meeting の招待をおこなって参加する方法です。
    この Scheduled Meeting を作成するには、Exchange / Outlook と統合された UCAddin を使用します。Outlook と Lync がインストールされた環境で Outlook を起動して、予定表を表示すると、下図の通り [新しいオンラインミーティング] コマンドがリボンに表示されるので、このコマンドを選択 (クリック) して、予定されたオンライン ミーティング (Scheduled Meeting) を作成します。
    メールを受け取ったユーザーは、メールに記載されている URL (リンク) をクリックすることでミーティングに参加できます。
  • Ad-hoc Meeting
    一方、あらかじめ予約をおこなわず、その場で作成する Meeting を Ad-hoc Meeting と呼びます。
    Ad-hoc Meeting は、下図の通り、Lync クライアントから [今すぐミーティング] (Meet Now) を選択すると開始できます。(なお、この Ad-hoc Meeting の有効期限は、既定で 8 時間です。)

また、Meeting (Conference) には、誰にでも公開された (anonymous な) Public Meeting と、特定の参加者のみに公開された Private Meeting があり、既定では Public Meeting として作成されるので注意してください。
Private Meeting の場合、もし権限のないユーザーが会議に参加すると、権限を持つユーザー (会議のリーダー、発表者など) の承認があるまで、下図のように、ロビー (Lobby) で待たされ、会話に参加することはできません。

Scheduled Meeting では、必要に応じ、下図の [会議オプション] をクリックして、Private Meetring を作成できます。また Ad-hoc Meeting でも、Lync クライアントを使用して、会議中にこのオプションを変更できます。(無論、Scheduled Meeting でも、会議の途中でアクセス権を変更できます。)

補足 : Outlook から作成される Public Meeting では、上図の Meeting URL は、(同一ユーザーの範囲内で) 常に同一の Meeting Url になります。(上図で 8F7PNYLW の箇所は、ConferenceID と呼ばれます。)

会議 (Meeting, Conference) が作成されたら、Conversation Window の [E メールで招待] コマンドを実行することで、会議の途中に、他のユーザーを招待 (Invite) できます。(Outlook Add-in が構成されている環境では、上図のような Outlook の画面が起動し、その以外の場合には Meeting Link の URL が表示されます。)

オンライン ミーティングの優れた特徴の 1 つとして、Lync のクライアントやアカウントを持たない外部のゲスト ユーザーも参加できるという点があります。Lync を持っていない外部のユーザーがこの Meeting Link に接続すると、ブラウザ版の Lync Web Apps を使用してこのミーティングに参加することができます。(または、Lync Attendee という専用の無償クライアントを使用して Meeting に参加できます。)

補足 : ただし、Lync Web App では音声連携はできません。このため、Lync Web App 起動時に表示されるダイアログボックスに電話番号を入力して送信することで、電話や Communicator などの既存の音声インフラを使用して双方向の音声連携をおこないます。(下記を参照してください。)
[Lync チームブログ] Joining Meeting Audio from Lync Web App
http://communicatorteam.com/archive/2010/10/26/1906.aspx

また、冒頭に記載した通り、Lync では、Conversation も Meeting も同一のインフラに統合されているため、Lync を使うと、通常の Conversation (Peer-to-Peer の IM など) を Conference (Meeting) に昇格 (Escalate) させることもできます。

補足: Lync クライアントで 2 人以上が参加 (リーダーも含め 3 人以上) して会話をおこなったときや、2 つの会話をマージしたときや、Lync クライアントで [E メールで招待] (上図参照) をおこなったときなどに、会議 (Conference) に昇格 (Escalate) されます。

Online Meeting を使った開発 (Development)

では、上記を踏まえて、この Online Meeting のインフラを使用した開発について説明していきましょう。

まず、開発者の方にとって残念なお知らせですが、基本的に、高度な Conferencing を扱う開発では、第 1 回 で説明した UCMA 3.0 を使用して開発 (カスタマイズ) をおこなう必要があります 。Lync クライアントから Scheduled Meeting の作成ができないのと同様、Lync SDK からも Scheduled Meeting の作成はおこなえません。

補足 : 厳密には、Lync SDK (クライアント側の SDK) の Microsoft.Lync.Model.Utilities.BeginScheduleMeeting メソッドを使うと Scheduled Meeting の作成が可能です。(ただし、Outlook の UC アドインを呼び出すため、Outlook の画面が起動します。)
また、Lync Server の Windows PowerShell を使って、コマンドラインで Scheduled Meeting を作成することもできます。

このため、この連載で紹介している Lync SDK で Online Meeting を扱うには、以下に記載する方法で Ad-hoc Meeting を作成します。(UCMA アプリケーションは Lync Online 2010 ではサポートされない予定です。このため、以降では、可能な限り Lync SDK を使って Online Meeting を処理します。)

今回は、サンプル アプリケーションとして、参加者のアドレスを設定して会議開始 (Start and Invite Online Meeting) をおこなうことで、Ad-hoc Meeting を作成し、参加できないユーザーに招待メール (E-Mail) を送信する WPF アプリケーション (下図) を構築してみましょう。

※ サーバー側の環境構築について :
ここでは詳細を述べませんが、Lync Server をインストールすると、http://meet.[ドメイン名] などの形式の Meeting 用の URL (Simple URL) が既定で設定されます。このため、この設定にあわせて、DNS などの設定を事前におこなっておいてください。(インターネット上に接続ポイントを公開している場合など、環境にあわせ、下記以外に追加の設定も必要です。)

1. [DNS マネージャ] を開き、ドメイン名 (ex. example.jp) を右クリックして、[新しいホスト (A または AAAA)] を選択します。
2.表示されるダイアログボックスで、[名前] 欄に「meet」、[IP アドレス] 欄にサーバーの IP アドレスを設定します。
3.サーバーを再起動します。

また、以下の方法で、Lync Server の Simple URL を変更することもできます。

[TechNet] Edit or Configure Simple URLs (Lync Server 2010)
http://technet.microsoft.com/en-us/library/gg398063.aspx

まず、いつものように、Visual Studio で [WPF アプリケーション] を新規作成し、アセンブリの参照追加で、以下の dll を追加します。

Microsoft.Lync.Controls.dll

Microsoft.Lync.Controls.Framework.dll

Microsoft.Lync.Model.dll

Microsoft.Lync.Utilities.dll

つぎに、上図の画面をデザインし、必要な処理を作成しておきます。(今回、アドレス リストへの項目追加の処理など、基本的なコードについては省略します。)

そして、上図の [Start and Invite Online Meeting] ボタンを押したときの処理として、Meeting (Conference) を作成します。

Lync SDK では、連絡先 (Contact) を扱ったさまざまな処理や、オプション ウィンドウの起動など、Lync クライアントが可能なほとんどの操作が実行できますが、残念ながら、上記の [今すぐミーティング] (Meet Now) の機能はないようです。このため、以降では、Conversation を作成し、参加者に 2 人以上 (本人も含め 3 人以上) を追加することで、会議 (Conference) に昇格させます。(上述の通り、2 人以上の参加者が居る場合、会議に昇格されます。)
[Start and Invite Online Meeting] ボタンを押したときの処理として、以下の通り実装します。

. . .using Microsoft.Lync.Model;using Microsoft.Lync.Model.Conversation;using System.Text.RegularExpressions;. . .private LyncClient cl = null;private Conversation con;private void startMeetingButton_Click(object sender, RoutedEventArgs e){    // The conference must be more than 2 participants !    if (addressListBox.Items.Count < 2)    {        MessageBox.Show("Needed more than 2 participants !");        return;    }    // Create conversation    cl = (cl ?? LyncClient.GetClient());    cl.ConversationManager.ConversationAdded += new EventHandler<ConversationManagerEventArgs>(ConversationManager_ConversationAdded);    con = cl.ConversationManager.AddConversation();}void ConversationManager_ConversationAdded(object sender, ConversationManagerEventArgs e){    // If not connected to a participant, the participant is removed by Lync.    e.Conversation.ParticipantRemoved += new EventHandler<ParticipantCollectionChangedEventArgs>(Conversation_ParticipantRemoved);    // Add participants    foreach (string address in addressListBox.Items)        e.Conversation.AddParticipant(cl.ContactManager.GetContactByUri(address));    // Send first message (Create a conference)    string firstMessage = "Start online meeting !";    ((InstantMessageModality)con.Modalities[ModalityTypes.InstantMessage]).BeginSendMessage(        firstMessage,        null,        null);}void Conversation_ParticipantRemoved(object sender, ParticipantCollectionChangedEventArgs e){    // Get address (sip:user1@example.jp -> user1@example.jp)    Regex re = new Regex(@"^sip:");    string addressUri = re.Replace(e.Participant.Contact.Uri, "");    // Get meeting url (ex. https://meet.example.jp/user1/4QT8YFM3)    ConferenceAccessInformation accinfo =        (ConferenceAccessInformation)con.Properties[ConversationProperty.ConferenceAccessInformation];    string meetingLink = accinfo.ExternalUrl;    // Confirm and send mail    string message = string.Format(        "{0} is disconnected.nDo you send E-mail to {0} ?",        addressUri);    if (MessageBox.Show(message, "Invitation !", MessageBoxButton.YesNo)        == MessageBoxResult.Yes)        SendInvitationMail(addressUri, meetingLink);}private void SendInvitationMail(string address, string meetingLink){    //    // 省略 . . . . .    //}

上述の通り、2 人以上参加しなければ会議 (Conference) に昇格 (Escalate) されないため、最初にこのチェックをおこなっています。そして、最初のメッセージ送信 (上記の BeginSendMessage) によって Conference が新規作成されます。
外部のゲスト ユーザーなど、Contact の接続に失敗すると、Lync は、参加者 (Participants) の一覧からこのユーザーを削除します。このため、この削除のタイミングで、ユーザーに、Conference (Online Meeting) 参加用のリンクの記載された招待メール (E-Mail) を送信しています。

実行結果は下図のようになります。

また、この会議を Private Meeting に変更するには、下記 太字の通り追記すれば OK です。
最初のメッセージ送信によって Conference が新規作成されるので、下記の通り、このメッセージ送信後のタイミングで ConferencingAccessType プロパティを設定しています。

. . .void ConversationManager_ConversationAdded(object sender, ConversationManagerEventArgs e){    . . .    // Send first message (Create a conference)    string firstMessage = "Start online meeting !";    ((InstantMessageModality)con.Modalities[ModalityTypes.InstantMessage]).BeginSendMessage(        firstMessage,        SendFirstMessageCallback,        null);}private void SendFirstMessageCallback(IAsyncResult ar){    // Change the conference to private meeting after created    con.BeginSetProperty(        ConversationProperty.ConferencingAccessType,        16, // Contacted person only (Other is lobby)        null,        null);}. . .

この場合、新たに参加するユーザーは、上述の通り、すべてロビー (Lobby) で待たされます。ですから、あとは、Conversation クラスの ParticipantAdded イベントなどを実装して、BeginAdmin / BeginDeny メソッド (または BeginAdmitParticipants / BeginDenyParticipants メソッド) などで承認や拒否をおこなう処理を実装すると良いでしょう。(このサンプル コードは省略します。)

また、Lync SDK の JoinConference メソッドを使用すると、作成された Conference (Online Meeting) に接続することも可能です。(この際、引数には、<ConversationProperty.ConferencingUri>?<ConversationProperty.Id> の形式の Uri を設定します。)

 

ここでは、Lync SDK を使ってどこまで Conference の操作ができるか見てきました。繰り返しになりますが、Conference に関する高度な機能の開発 (例えば、Scheduled Meeting の作成、音声のルーティングのカスタマイズ、など) をおこなうには、UCMA 3.0 を使用してサーバー側で機能を実装する必要がありますが、上記のような基本的な処理であれば、Lync SDK のみで構築することも可能です。

 

Categories: Uncategorized

Tagged as:

5 replies»

Leave a Reply