人を検知して自動的にビデオ通話を開始させてみる - Cisco Desk Pro 編 -

##  :star: はじめに

この記事は Cisco Systems Japan の有志による Advent Calendar 2022 の
カレンダー1 の 16 日目として投稿しています:tada:
(カレンダー2 もあります:smile:)

< 過去の記事 > 
2017年: https://qiita.com/advent-calendar/2017/cisco
2018年: https://qiita.com/advent-calendar/2018/cisco
2019年: https://qiita.com/advent-calendar/2019/cisco
2020年(1枚目): https://qiita.com/advent-calendar/2020/cisco
2020年(2枚目): https://qiita.com/advent-calendar/2020/cisco2
2021年(1枚目):https://qiita.com/advent-calendar/2021/cisco
2021年(2枚目)https://qiita.com/advent-calendar/2021/cisco2
2022年: https://qiita.com/advent-calendar/2022/cisco --> 今ここ

こんにちは :smiley:　今年も気づいたら、あっという間に12月:snowman:で残りもわずか半月ばかりですね。　そんな時期でもありますので、本年もこちらのアドベントカレンダーに舞い戻ってきました:sweat_smile:　今年は2020年に書いた記事の[「Webex デバイスのマクロを使って朝から元気にお仕事」](https://qiita.com/kazkaz_o3/items/92276ace86c140943d12)の続き的なネタでいこうと思います。

本題に入る前に少し小ネタ情報なんですが、 シスコのビデオ会議端末の製品ブランド名が、"Webex Devices"から "Cisco devices" にリブランディングされています。
これは、ハイブリッドワークを強力に推進していくために、シスコのビデオ端末は、Webex は当然ながら、他のプラットホーム(Microsoft Teams, Google Meet, Zoom 等)にもシームレスに接続して活用出来る**マルチプラットホーム対応**のビデオ端末としてご利用頂けるという事で製品名を "Cisco devices" としてリブランディングしています。
[Cisco Collaboration Endpoints](https://www.webex.com/ja/collaboration-devices.html)

この強化の一環で2023年の第一四半期（CY)には、一部のビデオ端末では、Microsoft Teams Rooms(MTR) にも対応して、シスコビデオ端末 1台で Webex, Microsoft Teams Rooms のフル機能も利用出来きて、尚且つビデオ端末のインテリジェンスな機能も利用することが出来るようになります。
[Webex Blog: Microsoft との新たなパートナーシップ](https://blog.webex.com/ja/%e3%82%b3%e3%83%a9%e3%83%9c%e3%83%ac%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%83%87%e3%83%90%e3%82%a4%e3%82%b9/%e3%83%8f%e3%82%a4%e3%83%ac%e3%83%99%e3%83%ab%e3%81%aa%e3%83%8f%e3%82%a4%e3%83%96%e3%83%aa%e3%83%83%e3%83%89%e3%83%af%e3%83%bc%e3%82%af%e3%82%92%e5%ae%9f%e7%8f%be%e3%80%82%e3%82%b7%e3%82%b9%e3%82%b3/) 日本語訳 
<img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199936/3ca41eb0-695f-e092-4df7-7310d1efc640.jpeg">

## :star: 今回やってみようとしていること
さて本題に戻りまして、Cisco Desk Pro + マクロ機能を使ってやろうとしていることは、People Presense Detection(人の存在を検知）の機能を使って、自動的に予め決められた接続先にコールしようというものになります。　
活用例としては、店舗や病院での無人受付で来訪者はビデオ端末へはタッチレスで予め指定された接続先へコールを接続するといったことが挙げられます。
受付専用端末にする場合は、マクロで通常のビデオ端末のコール発信などのアイコンも消すことも出来ます。　

今回の動作イメージはこんな感じです。（動画）
&emsp;&emsp;:movie_camera:  デモ動画(YouTube)  - iPhone 13 Mini で撮影 

<iframe width="560" height="315" src="https://www.youtube.com/embed/0uIho9LYL4U" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

## :star: 今回使うもの/機能
今回はビデオ端末としては Cisco Desk Pro を利用します。
Cisco Desk Pro には、環境センサーが搭載されていて、室内環境のデータを取ることが出来ます。
部屋の利用状況（Occupied）、部屋に何人いるか(Occupants), 騒音レベル(Sound Level(dBA)　、周囲の騒音(Ambient Noise(dBA)), 温度(Temperature(°C/°F), 湿度(Relative Humidity(%))　などのデータがとるころが出来ます。　  

* RoomOS 11 での Web UIでの情報出力例: 
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199936/91e5feeb-9b5b-c808-63b4-eb85db49745d.jpeg">

今回は部屋にいる人を検知する機能(Occupied/Occupants)を使います。
この設定を有効にするのには Web UI での設定では以下の設定になります。
SETUP --> Settings - Configuration / RoomAnalytics 
* PeopleCountOutOfCall
* PeoplePresenceDetector 
<img width="400"  src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199936/04455efb-16b4-2afd-5026-ff81e299ab13.jpeg">

＊今回はこちらの設定はマクロで有効するようにしています。

自動発信についてはマクロで設定しています。

:star: **マクロの概要**
&emsp;&emsp;・マクロフレームワークが利用可能なビデオ会議端末: CE9.2以降/RoomOS 搭載モデル
&emsp;&emsp;・Cisco Room シリーズ
&emsp;&emsp;・Cisco Desk シリーズ (Desk Pro(CE9.9以降) / Desk / Desk Mini)
&emsp;&emsp;・Cisco Board/Board Pro シリーズ

[「Webex デバイスのマクロを使って朝から元気にお仕事」](https://qiita.com/kazkaz_o3/items/92276ace86c140943d12)の記事より抜粋
&emsp;:sparkles:マクロフレームに関するアーキテクチャーの説明
&emsp;&emsp;&emsp;*ビデオエンドポイント カスタマイズの資料より抜粋
&emsp;&emsp;<img width="640" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199936/a1933e19-8dd7-c78e-d557-04ab6395e982.png">
&emsp;&emsp;<img width="640" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199936/e6c6c021-bf45-38d1-495d-1d333d119405.png">

## :star: 実際に設定してみます
&emsp;:white_check_mark: マクロの設定するために Cisco Desk Proにログインします。
https://(IPアドレス)/web/signin --> Username/Password を入力
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199936/ebea9c1f-bc2f-aa7d-56d6-ead7a19c73d0.png">

:white_check_mark: 端末上でマクロを設定します。
  - Web GUI のメニューより "Macro Editor"を選択します。
&emsp;&emsp;<img width="640" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199936/a26321c6-48a3-9073-0e4a-4a327421e807.png">
&emsp;&emsp;Macro Editor の画面に入ります
&emsp;&emsp;<img width="640" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199936/b80c7dda-0c74-4e3f-8800-497a4e96792e.png">
&emsp;&emsp;新しくマクロを作成するには “Create new macro ”を選択します。
&emsp;&emsp;<img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199936/59026123-0fba-f915-b5b6-035824811156.png">
&emsp;&emsp;こちらのエディタにマクロを入力をして設定します。
&emsp;&emsp;<img width="640" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199936/96269b89-12e0-9494-d255-496633850c99.png">

###今回使ったマクロの設定

:white_check_mark:&emsp;xapiライブラリをインポート
```
import xapi from 'xapi';
```
:white_check_mark:&emsp;アクセス（コール先）先を定義（定数）
&emsp; ミーティング URI ( XXXXX@ktakada-prega.webex.com )
&emsp; もしくはコール先 (1対1通話の場合）
```
const MeetingUri = 'XXXXX@ktakada-prega.webex.com';
```
:white_check_mark: 人を検知（プレゼンス・人数）するセンサーを有効化
&emsp; - PeopleCountOutOfCall
&emsp; - PeoplePresenceDetector
```
xapi.Config.RoomAnalytics.PeopleCountOutOfCall.set("On");
xapi.Config.RoomAnalytics.PeoplePresenceDetector.set("On");
```
:white_check_mark: People Detection のステータスをチェックしてステータスが新たにに変更になった場合にコールへ　(RoomAnalytics Engagement CloseProximityのステータスをチェック）
```
xapi.status.on('RoomAnalytics Engagement CloseProximity' , (newstate) => {
if(newstate === 'True'){
xapi.status.get('SystemUnit State NumberOfActiveCalls')
.then(callIfNotInCall);
}
});
```
&emsp;&emsp;<img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199936/53d131b5-6e32-6f20-4c8d-e3b94055637d.png">
下記でxAPIの詳細なども確認することが出来ます。
https://roomos.cisco.com/xapi/Status.RoomAnalytics.Engagement.CloseProximity/
(Cisco RoomOS for Collaboration Devices: BETA版)

:white_check_mark: 実際にコールを自動で発信（他にアクティブにコールがない場合）
```
function callIfNotInCall(callCount) {
if (callCount < 1) {
xapi.command('Dial' , { Number: MeetingUri});	
}}
```
これで設定は完了です。

####  :radio_button: 今回使ったマクロのコードの全体
```
import xapi from 'xapi';
const MeetingUri = 'admin37@ktakada-prega.webex.com';
// Below this line is Facial Detection logic
// 
// Turn on people detection
xapi.Config.RoomAnalytics.PeopleCountOutOfCall.set("On");
xapi.Config.RoomAnalytics.PeoplePresenceDetector.set("On");

// Facial Detection automatically triggers call;

xapi.status.on('RoomAnalytics Engagement CloseProximity' , (newstate) => {
if(newstate === 'True'){
xapi.status.get('SystemUnit State NumberOfActiveCalls')
.then(callIfNotInCall);
}
});

// This second code block below will not inadvertently dial again if first call is still active.
// If there are no active calls, then dial the number upon facial detection. 

function callIfNotInCall(callCount) {
if (callCount < 1) {
xapi.command('Dial' , { Number: MeetingUri});	

}}
```
## :star: さいごに
最後まで読んで頂き有難うございました :smile: 　
Cisco デバイスで実現出来る自動化の一例としてご参考にして頂けますと幸いです。
近い将来、クラウド登録の端末については管理ポータルの [Webex Control Hub](https://www.webex.com/ja/control-hub.html)でマクロの一括管理も出来るようになる予定があるので、そうなると展開も楽になってもっと利便性も高まりそうですね。

またデバイスを受付端末として利用する観点では、Kioskモードという機能で受付専用端末を構成することも出来ますので、こちらもご参考にして頂ければと思います。
(参考）
[Board および Desk シリーズのデバイスでキヨスク モードを構成する](https://help.webex.com/ja-jp/article/ol1th3/Board-%E3%81%8A%E3%82%88%E3%81%B3-Desk-%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA%E3%81%AE%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%81%A7%E3%82%AD%E3%83%A8%E3%82%B9%E3%82%AF-%E3%83%A2%E3%83%BC%E3%83%89%E3%82%92%E6%A7%8B%E6%88%90%E3%81%99%E3%82%8B) (Webex ヘルプ センター)
[Webex デバイス の Kiosk モードを設定する](https://gblogs.cisco.com/jp/2022/07/settingkioskmode/)(Cisco Blog 記事)

それでは、みなさまもお体に気をつけて、ゆっくりと楽しいクリスマスとお正月をお迎えくださいませ:santa: :ski:

##参考資料 
&emsp;-[Cisco RoomOS for Collaboration Devices](https://roomos.cisco.com/doc/Welcome/Welcome) / RoomOS 11のドキュメント BETA版
&emsp;- Cisco Collaboration Endpoint Software API Reference Guide
&emsp;&emsp; - [Cisco Desk Series](https://www.cisco.com/c/en/us/support/collaboration-endpoints/desktop-collaboration-experience-dx600-series/products-command-reference-list.html)
&emsp;&emsp; - [Cisco Room Series](https://www.cisco.com/c/en/us/support/collaboration-endpoints/spark-room-kit-series/products-command-reference-list.html)
&emsp;- GitHub リソース : [Cisco DevNet/room-devices-macros-sample](https://github.com/CiscoDevNet/roomdevices-macros-samples)

##免責事項
本サイトおよび対応するコメントにおいて表明される意見は、投稿者本人の個人的意見であり、シスコの意見ではありません。本サイトの内容は、情報の提供のみを目的として掲載されており、シスコや他の関係者による推奨や表明を目的としたものではありません。各利用者は、本Webサイトへの掲載により、投稿、リンクその他の方法でアップロードした全ての情報の内容に対して全責任を負い、本Web サイトの利用に関するあらゆる責任からシスコを免責することに同意したものとします。