Twilio Programmable Voice 系のアップデート

:::note alert
2023年5月1日を持ちまして、株式会社KDDIウェブコミュニケーションズのTwilioリセール事業が終了したため、本記事に記載されている内容は正確ではないことを予めご了承ください。
:::

# はじめに

みなさん、こんにちは。
KDDIウェブコミュニケーションズの Twilio事業部エバンジェリストの高橋です。

今回は、最近発表された Twilio Programmable Voice 系の以下のアップデートについて解説します。

1. SIP インターフェースが東京リージョンでもつかえるようになりました。
2. \<Dial> 動詞内に、\<Sip> 名詞が列挙できるようになりました。
3. \<Dial> 動詞で、`sequential` 属性が正式サポートされました。

## SIP インターフェースの Edge Locations 対応

Twilio の Programmable Voice には、SIP に対応するための機能として [SIP Interface](https://www.twilio.com/docs/voice/api/sip-interface) があります。この機能を使うことで、外部の SIP サーバーと Twilio の Programmable Voice を連携させたシステムを構築することができます。
また、SIP Interface には [SIP Registration](https://jp.twilio.com/docs/voice/api/sip-registration) をいうオプションが用意されており、この機能によって SIP サーバーを用意しないで SIP に対応した電話機を利用することなどが可能になります。
[SIPレジストを使って、Twilioで固定電話をつかってみる](https://qiita.com/mobilebiz/items/26f91550556088545c49)

ただし、この SIP Interface は今まで US1 リージョンにしか対応しておらず、日本で利用すると発信者番号が非通知になったり、通話の遅延が発生したりしました。
[SIP Registrationで確実に発信者番号を通知させる](https://qiita.com/mobilebiz/items/4293e35ebb8de9ca8cc3)

今回、この SIP Interface が [Edge Locations](https://www.twilio.com/docs/global-infrastructure/edge-locations) に対応したことにより、東京リージョンでも利用できるようになりました。

これでますます SIP Registration が使いやすくなりますね。

## \<Dial> 動詞内の複数 \<Sip> 対応

上記でも說明した SIP 連携ですが、今までは \<Dial> 動詞には \<Sip> 名詞が一つしかかけませんでした。そのため、同時に複数台の SIP 端末を呼び出したいときは、SIP 端末に同じ SIP ドメインを付与することで対応するしかありませんでした。

```xml
<Dial>
  <Sip>sip:2001@example.sip.twilio.com</Sip>
</Dial>
```

しかし今回のアップデートで \<Sip> 名詞を最大10件まで列挙することが可能になりました。

```xml
<Dial>
  <Sip>sip:2001@example.sip.twilio.com</Sip>
  <Sip>sip:2002@example.sip.twilio.com</Sip>
  <Sip>sip:2003@example.sip.twilio.com</Sip>
</Dial>
```

このように指定することで、2001、2002、2003の端末が同時に鳴動します。いずれか先に取った方と通話が確立し、取らなかった端末の鳴動が停止します（一斉着信）。

**＜重要＞**
この \<Sip> の列挙を許可するには、管理コンソール上の [Programmable Voice の設定画面](https://jp.twilio.com/console/voice/settings)で **Enhanced Programmable SIP Features** を有効にする必要があります。

![スクリーンショット 2020-12-30 6.34.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86046/0f3e04a1-b386-ebce-db9d-b3922673d514.png)

## \<Dial> 動詞の `sequential` 属性対応

上記のように、\<Dial> 動詞内で \<Sip> 名詞が列挙できるようになりましたが、この列挙機能は元々 \<Number> 名詞や \<Client> 名詞でも利用可能でした。

```xml
<Dial callerId="+815012345678">
  <Number>+81311111111</Number>
  <Number>+81322222222</Number>
  <Number>+81333333333</Number>
</Dial>
```

ただ、いずれのケースもすべて**一斉着信**となります。
今回、\<Dial> 動詞に `sequential` 属性が正式にサポートされることになり、**順次着信**が可能になりました。具体的には以下のように記述します。

```xml
<Dial callerId="+815012345678" timeout="15" sequential="true">
  <Number>+81311111111</Number>
  <Number>+81322222222</Number>
  <Number>+81333333333</Number>
</Dial>
```

上記のように指定すると、まず最初に`+81311111111`に電話がかかり、この端末が着信拒否、もしくは応答しないと`+81322222222`に電話がかかります。このように、一斉ではなく順番に電話がかかるので、**順次着信**と呼ばれます。`timeout` 属性を付与することで、応答するまでの時間を指定することができます。
実はこの属性、今までも存在していたのですが、非公式属性になっていたものです。今回のアップデートによって、正式にサポートされることになりました。

この属性は、列挙が可能なすべて名詞で利用が可能ですので、\<Number> だけでなく、 \<Client> や \<Sip> でも利用できます。
詳しいドキュメントは[こちら](https://jp.twilio.com/docs/voice/twiml/sip?code-sample=code-serial-calling-11&code-language=Node.js&code-sdk-version=3.x#examples-7)をご覧ください。

# まとめ

今回のアップデートによって、SIP 連携機能がだいぶ使いやすくなりました。
とくに SIP 固定電話や、SIP ソフトフォンとの連携の幅が広がるので、ぜひ皆さんも色々と試してみてください。

---
### Twilio（トゥイリオ）とは

https://cloudapi.kddi-web.com
Twilio は音声通話、メッセージング（SMS /チャット）、ビデオなどの 様々なコミュニケーション手段をアプリケーションやビジネスへ容易に組み込むことのできるクラウド API サービスです。初期費用不要な従量課金制で、各種開発言語に対応しているため、多くのハッカソンイベントやスタートアップなどにも、ご利用いただいております。

自己紹介|　
:--|:--
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86046/b51a8b88-abd5-ce5e-195a-de3564ba2ae6.png" height='200' width='150'/>|高橋克己（Katsumi Takahashi） 自称「<font color='red'>赤い芸人</font>」<br />グローバル・インターネット・ジャパン株式会社　代表取締役<br />株式会社KDDIウェブコミュニケーションズ　Twilio事業部エバンジェリスト<br /><br />2001年より大手通信事業者の法人サービスの教育に携わり、企業における電話のしくみや重要性を研究。2016年よりTwilio事業部にジョインし、Twilioを使ったスマートコミュニケーションの普及活動を精力的に行っている。<br />2015 Hall of Doers<br />2019 Twilio Champions