Azure Communication Services ことはじめ 2022 : 音声&ビデオ通話、チャット、Teams 会議参加機能を試す

Azure Communication Services は、リアルタイム コミュニケーション基盤となるサービスで、テキスト | 音声 | ビデオ によるコミュニケーションのハブとなり、接続やコントロールを行うアプリやサービスを SDK などを用いて容易に開発できます。また、Microsoft Teams 会議への参加 (Teams Interoperability) 機能を活用して、外部のユーザーがアカウントなどの準備なしに Teams 会議へ参加できるようになります。

今回は Azure Communication Services (以下 ACS) の [Web Calling Sample (Web 通話サンプル)](https://docs.microsoft.com/ja-jp/azure/communication-services/samples/web-calling-sample) のサンプルアプリ (Node.JS) を用いて、基本機能を試してみるまでの手順を紹介します。

- 概要＆説明: [Microsoft Docs > Azure > Communication Services : Web 通話サンプルの概要](https://docs.microsoft.com/ja-jp/azure/communication-services/samples/web-calling-sample)
- ソースコード: [GitHub > Azure Samples > Comminication Services Web Calling Tutorial](https://github.com/Azure-Samples/communication-services-web-calling-tutorial/)


# 開発環境

[Node.js](https://nodejs.org/ja/download/) & npm

以下、こちらの環境で操作しています
- Windows 11 Enterprise (21H2)
- Visual Studio Code (ver 1.63.2)
- Node.js: v16.13.1
- npm: v8.4.0

# 0. 事前準備

[Azure Communication Services ことはじめ (1) 0. 事前準備](https://qiita.com/annie/items/8ba0afe731dc9be589c8#0-%E4%BA%8B%E5%89%8D%E6%BA%96%E5%82%99) の手順に従って、Azure Portal から ACS のサービスを作成し、接続文字列を取得しておきます。

# 1. アプリの起動

[ソースコード](https://github.com/Azure-Samples/communication-services-web-calling-tutorial/) を取得します。(Git-clone または ZIP ダウンロードなどお好みの方法で)

ソースコード communication-services-web-calling-tutorial 配下にある **Project** を Visual Studio Code で開きます。

config.json を開き、connectionString の値として、0.事前準備で取得しておいた 接続文字列をペーストし、保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/86e0fe56-9fbb-4219-c206-9fa47cc47fab.png)


Visual Studio Code でターミナルを開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/7b7f4726-584e-c1c8-42c8-5150f8b1d393.png)

npm install で必要なパッケージをインストールします。

```
> npm install
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/fdcfab86-0668-5891-4769-c2b15833906e.png)

いろいろ Warning が出ていますが．．．とりあえずそのまま続けます。
npm run build でビルドします。

```
> npm run build
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/9201e48e-8553-e55f-b7ad-e279fa83ca06.png)

無事ビルドできたら、npm run start で起動します。

```
> npm run start
```

ブラウザーが立ち上がり、http://localhost:5000 で画面が表示されたらOKです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/64ed732e-6298-1b89-f5cd-89f353d5326d.png)

> 終わったら、コンソールから **Ctrl + C** で終了できます。 

# 2. ACS の基本機能を試す

## 2-1. ACS ユーザーの作成

**Optional display name** に識別できるように名前を入力して　**[Provision user and inifialize SDK]** をクリックし、ACS ユーザーを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/51558a0f-5868-7414-816a-6da411b87e83.png)

表示される ID (**8:acs:xxxxxxx...** で始まる文字列)が、このユーザーの ACS UserId になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/5eb2d2b7-b47e-4b6d-814c-41e6889a31b1.png)

> **Optional Tag** で ACS への課金を振り分けるための利用プランをタグ付けすることができます (任意のGUID を設定)

ACS での通話、ビデオ会議をひとりで試すには、別ブラウザーで同じURL (localhost:5000) にアクセスし、2-1 の手順でACSユーザーを作成しておきます。

## 2-2. ACS での通話、ビデオ通話 (Call, Call with video) を試す

**Placing and Receiving Calls** の欄にある **Place a call** の機能を使います。
宛先の ACS User Id を入力して、**Place Call** をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/8613d64e-85a2-62af-78c4-c3683f57acc7.png)

**Incoming Call...** と表示されて Call がかかってきたら、通話ボタンをクリックして受信します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/9c2075dc-7c69-acb8-71c4-7bd6dfe76fd8.png)

通話が繋がると、それぞれ相手の名前が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/8656d9a7-241f-a7f0-087f-2691d3b5b074.png)

ビデオボタンをクリックするとブラウザーで認識されているカメラの画像が相手の画面に出力されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/e204ede7-57f7-6b55-4a45-51a4fbe6a60b.png)

通話終了ボタンをクリックして通話を終了します。


## 2-3. Teams 会議への参加を試す

**Placing and Receiving Calls** の欄にある **Join a Teams meeting** の機能を使います。
Microsoft Teams 側で会議を作成し、会議 URL (**https://teams.microsoft.com/...** で始まる URL) を取得、**Meeting Link** にペーストして **[Join Teams meeting]** (または **[Join Teams meeting with video]**)をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/5426a803-f9a0-8894-25c8-bb61713fba10.png)

Teams 側で ACS ユーザーがロビー待機している旨が通知されます。**[参加許可]** をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/40af7a72-7d5e-271d-cf2b-54a42bc75956.png)

ACS ユーザーが参加すると、Teams 側には ACS ユーザーの情報、ACS 側には Teams 側の参加者情報 がそれぞれ表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/208b7d23-08cc-a4ba-2d42-1ac5ec2747c0.png)

通話終了ボタンをクリックして通話を終了します。