Twilio Studioで営業時間判定を行う

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

# はじめに

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

今回は、Twilio Studio から営業時間判定をする方法を解説します。
Twilio Studio はドラッグ・アンド・ドロップでフローが作成できるため簡単にコールフローが作れますが、今回のようなケースでは Stdio だけではなかなかうまくいきません。
そこで、Studio と Twilio Functions を連携させて、Functions 側で営業日や営業時間を判定するようにします。

## 準備

以下の準備が必要です。

- [Twilio アカウント](https://cloudapi.kddi-web.com/signup)
- [Twilio CLI](https://qiita.com/mobilebiz/items/456ce8b455f6aa84cc1e)
- [Twilio CLI サーバーレスプラグイン](https://qiita.com/mobilebiz/items/fb4439bf162098e345ae)

## インストール方法

```sh
git clone https://github.com/mobilebiz/business-hours.git
cd business-hours
npm install
```

## 環境変数の設定

```sh
cp .env.sample .env
```

コピーした`.env`をエディタで開き、以下の項目を設定します。

| 項目        | 設定内容                |
| :---------- | :---------------------- |
| ACCOUNT_SID | Twilio のアカウント SID |
| AUTH_TOKEN  | 上記に対する AuthToken  |

## 営業日の設定

エディタで、`functions/check-open.js`を開きます。  
以下の部分が営業日の設定になりますので、コメントを見ながら適宜編集してください。

```javascript
// 営業日、営業時間の設定
const BUSINESS_HOURS = {
  dayOfWeek: ["月", "火", "水", "木", "金", "土", "日"], // 営業日を記述、休業日は削除（例： ["月", "火", "水"]）
  startTime: "9:00", // 営業開始時間を24時間表記で指定
  endTime: "18:00", // 営業終了時間を24時間表記で指定
  holiday: true, // 祝日営業するならtrue
};
```

## デプロイ

<font color='red'>デプロイするときは、Twilio CLI プロファイルが対象の Twilio プロジェクトのものであることを確認してください。</font>
違うプロファイルでデプロイをすると、間違ったプロジェクト内に Functions ができてしまいます。プロファイルを切り替えるときは、twilio profiles:use プロファイル名で行います。

以下のコマンドでデプロイします。

```sh
npm run deploy
```

## Studio からの呼び出し

以下のコマンドを使うとサンプルの Studio Flow がインストールされます。

```sh
twilio api:studio:v2:flows:create --friendly-name 'BusinessHours' --status published --definition "`cat ./studio/BusinessHours.json`"
```

- Twilio 管理コンソールにログインし、Studio メニューを開きます。
- 今作成された`BusinessHours`という名前のフローを開きます。
- `checkOpen`ウィジェットを選択し、**SERVICE**プルダウンから、`business-hours`を選択します。
- **ENVIRONMENT**プルダウンから、`dev-environment`を選択します。
- **FUNCTION**プルダウンから、`/check-open`を選択します。
- **Save**ボタンを押して保存します。
- 画面上部にある**Publish**ボタンを押して、フローをパブリッシュします。
 
![RUN FUNCTION.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86046/830175bb-b64a-f96a-41ce-667bd5ef9b48.png)

以上でフローは完成です。

## テスト

購入済みの Twilio 番号に、上記のフローを割り当ててテストしてください。  
営業時間外の場合は、その旨のガイダンスが流れます。営業時間内の場合は、コールはキューに入ります（発信者には音楽が聞こえます）。  
必要に応じて、最後の`Enqueue`ウィジェットを、**Connect Call To**ウィジェットなどに変更してください。

## 謝辞

祝日判定には、[こちら](http://s-proj.com/utils/holiday.html)の API を利用させていただいております。

## 免責事項

本プログラムの動作についての保証はいたしませんので、自己責任の範疇でご利用ください。
# まとめ

---
### 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