Vonageとは
Vonage(ボネージ)は電話や SMS、Video を REST API で扱える CPaaS です。
Vonage は2001年より IP 電話サービスをメイン事業としていましたが、2013年頃から CPaaS 事業に注力し始め、Nexmo 社や TokBox 社などを買収して CPaaS 業界でも指折りの企業となりました。(※Vonage 社が提供しているドキュメントに Nexmo の記述が残っているのはこのためです)
そして2022年にエリクソンの完全子会社となっています。
サインアップとサポート
紙による契約書は不要です。Web からサインアップするだけで利用できます。
Vonage の代理店である弊社 Web から申し込んでいただくことで、完全日本語サポートが提供されます。なおVonage でご契約いただいた場合と、弊社でご契約いただいた場合とで、提供されるAPI機能に違いは生じません。価格については弊社窓口へお問い合わせください。
Vonage と弊社でログイン URL が異なります。ログイン時に 403 エラーになる場合は下記 URL からログインしてください。
https://kwc.dashboard.vonage.com/
※Vonage 社とのご契約の場合は弊社による日本語サポートをご提供できません。
機能概要と料金体系
Voice API、SMS / Messages API、Verify API、In-App は、初期費用や月額固定費用がかかりません。
お支払いは請求書払いになります。
Voice API
通話の送受信や IVR、録音、転送、TTS/SSML(テキストの音声合成)、SIP といった各種機能は完全従量課金制です。ご利用のない月は 0 円になります。
ただし電話番号は月額課金制となります。アメリカを含む海外の電話番号は Web/API から取得可能ですが、日本国内の電話番号についてはWeb/API からは取得できない仕様となっているため、ご入用の際は弊社へお問い合わせください。
また0800/0120 のお持ち込みをご希望の場合も弊社までお問い合わせください。無料でお持ち込み可能です。
SMS / Messages API
SMS送信サービスは大きく分けて「国際経由」と「国内直収」の2つの接続方式があり、両方式に対応しています。SMS は日本語であれば最大 660 文字を送信可能です。課金は 70 文字単位になります。国内直収や送信元専用番号、双方向 SMS は別途オプションになります。
SMSを送信できるAPIは SMS API と Messages API の2種類がありますが、 SMS API は SMS 専用となるため、 Messages API を推奨します。Messages API は SMS 以外にも WhatsApp や Facebook Messenger、MMS、Viber に対応しており、LINE も計画中です。
Verify API
Verify は 2FA/MFA を簡単に組み込めるサービスです。自前で実装する場合に必要なコードの生成や突合はもちろん、入力回数や時間制限といった不正アクセスの検知、SMS不達時の電話・メールへの自動切り替えなども簡単に設定できます。
現状、Verify API v1のみのご提供になります。
In-App
WebRTC を利用したブラウザやアプリに組み込める音声通話です。電話回線ではなくインターネット回線を利用した通話のため、電話回線より安価に利用できます。
Video
Video には tokbox.com と vonage.com/nexmo.com の2種類があります。両方同じ Video API という名前ですが、URL がvonage.com/nexmo.com の方の Video をご利用ください。
TokBox 社の OpenTok は Vonage が 2018 年に買収したサービスです。 URLが tokbox.com の方のVideoが残っていたり、vonage.com/nexmo.com のドキュメントや API に TokBox/OpenTok の記述があったりするのはそのためです。
Video はさらにいくつかのサービスに分かれます。
Video API | 25 人と通話可能。バーチャル背景や E2E 暗号、録画にも対応 |
VIdeo Express | Video API の簡易版。Video API と互換はありません |
Intractive Broadcat | 1.5 万人に配信可能 |
その他
下記は初期費用、月額費用がかかります。Web からのサインアップではなく、弊社までお問い合わせください。
・Vonage Social Commerce
下記は現在、日本では提供しておりません。
・Unified Communications API
・Contact Center API
Vonage 利用方法サンプル
電話着信サンプル
Vonage には着信した電話に対してアクションを行う NCCO (エヌシーシーオー:Nexmo Call Control Objects)があります。カスタマーダッシュボードで NCCO と電話番号を紐づけることで、着信時のアクションを定義します。
なおNCCO は JSON です。NCCO は Vonage から HTTPS でアクセス可能である必要があります。
下記は着信時にメッセージを流すサンプルです。styles に指定できる 6 種類の日本語の男女の音声があり、発話の速度やブレイクなど、より細かい設定ができる SSML が利用可能です。
[
{
"action": "talk",
"text": "<speak>日本語も利用可能です。複数ある読みは漢字ではなくイチ<break time='1s' />ニ<break time='1s' />サンのようにカタカナで書くと読み間違いがありません。</speak>",
"language": "ja-JP",
"style": 5
}
]
Python と ngrok を利用した簡単なテストを紹介します。
上記の NCCO を answer.json として保存し、別途 event.json と fallback.json を用意します。こちらは空で問題ありません。
ngrok の xxxx-xx-xxx-xxx-xx.ngrok-free.app/answer.json が見られることをブラウザで確認してください。
$ touch event.json fallback.json
$ ls
answer.json event.json fallback.json
$ python -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/)
$ ngrok http 8000
(中略)
Web Interface http://127.0.0.1:4040
Forwarding https://xxxx-xx-xxx-xxx-xx.ngrok-free.app -> http://localhost:8000
NCCO が用意できたため、カスタマーダッシュボードで電話番号と紐づけます。
1.電話番号の取得は弊社までお問い合わせください
2.カスタマーダッシュボードの左側にある「アプリケーション」から「新しいアプリケーションを作成する」を選択
3.下記「アプリケーションを作成する」を設定
a.「名前」は「電話発着信サンプル」など分かりやすい識別子を登録
b.「認証」には新規もしくは既存の公開鍵を登録
c.「機能」の「音声」にチェックを入れ、「回答 URL」に https://xxxx-xx-xxx-xxx-xx.ngrok-free.app/answer.json を登録
d.「イベント URL」に https://xxxx-xx-xxx-xxx-xx.ngrok-free.app/event.json を登録
e.「フォールバック URL」に https://xxxx-xx-xxx-xxx-xx.ngrok-free.app/fallback.json を登録(必須ではありません)
4.画面右下の「新しいアプリケーションの生成」を押す
5.画面に「アプリケーション ID」が発行されます。電話発信に必要になるため、大切に管理してください
6.電話番号の右にある「リンク」ボタンを押して電話番号を紐づけます
以上で電話番号と NCCO が紐づきました。リンクした電話番号に電話し、メッセージが流れれば成功です。
ngrok の http://127.0.0.1:4040 を確認することで Vonage からのアクセスが分かります。イベント URL に設定した /event.json には started → ringing → answered と電話の状態(Call Statuses)が記録されます。
もし回答 URL かイベント URL にエラーが発生した場合は、フォールバック URL に設定した /fallback.json に通知されます。
※NCCO を置くサーバーや、回答 URL やイベント URL に利用できるサーバーとして VCR(Vonage Cloud Runtime)を提供しております。
電話番号発信サンプル
Vonage は REST API で電話発信ができます。curl で電話発信するには認証に JWT が必要なため、 Vonage CLI をインストールしてください。
$TO_NUMBER に指定する発信先は MSISDN 形式である必要があります。MSISDN は電話番号が 080-XXXX-YYYY なら国番号の 81 を追加し、先頭の 0 を消して 8180XXXXYYYY になります(E.164 形式と異なり頭に + は不要です)。
環境変数を定義し、answer_url に先ほどの ngrok の URL を指定してください。
export VONAGE_APP_ID=カスタマーダッシュボードのアプリケーション ID
export VONAGE_PRIVATE_KEY=秘密鍵のファイルパス
export VONAGE_NUMBER=取得した Vonage の電話番号
export TO_NUMBER=81からはじまる発信先電話番号
export JWT=$(vonage jwt --key_file=$VONAGE_PRIVATE_KEY --app_id=$VONAGE_APP_ID)
curl -X POST https://api.nexmo.com/v1/calls\
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json"\
-d '{"to":[{"type": "phone","number": "'$TO_NUMBER'"}],
"from": {"type": "phone","number": "'$VONAGE_NUMBER'"},
"answer_url":["https://xxxx-xx-xxx-xxx-xx.ngrok-free.app/answer.json"]}'
これで $TO_NUMBER に電話が発信され、NCCO に書かれたメッセージが流れます。
※初期は 1 秒間に 3 コールの通話制限があります ( 3 CPS )。3 CPS 以上必要な場合は弊社までお問い合わせください
※トールフリーへの発信はできません
※JWT の生成には Vonage CLI 以外に、各種言語の SDK と JWT を生成するライブラリがあります。言語ごとのサンプルは code snippets にあります
IVRサンプル
電話で数字の入力(DTMF)を受け付ける IVR の NCCO のサンプルは下記です。answer.json を変更してください。
[
{
"action": "talk",
"text": "お問い合わせありがとうございます。営業はイチ、サポートはニを押してください",
"language": "ja-JP",
"style": 1
},
{
"action": "input",
"eventUrl": [
"https://xxxx-xx-xxx-xxx-xx.ngrok-free.app/event.json"
],
"type": ["dtmf"],
"dtmf": {
"maxDigits": 1
},
"submitOnHash": true
}
]
以上で 1 もしくは 2 を押すと、 eventUrl に指定した URL に押した数字が送られます。
DTMF に加え、音声認識も数行の追加で実現できます。answer.json を変更してください。
[
{
"action": "talk",
"text": "お問い合わせありがとうございます。営業はイチ、サポートはニを押すか、営業またはサポートと言ってください",
"language": "ja-JP",
"style": 1
},
{
"action": "input",
"eventUrl": [
"https://xxxx-xx-xxx-xxx-xx.ngrok-free.app/event.json"
],
"type": [ "dtmf", "speech" ],
"dtmf": {
"maxDigits": 1
},
"submitOnHash": true,
"speech": {
"language": "ja-JP",
"maxDuration": 10,
"context": ["営業", "セールス", "サポート"]
}
}
]
音声は「サポートをお願いします」のように、発声した内容全体が漢字やカタカナを含んだ日本語で届きます。
SMS送信サンプル
SMS 送信に電話番号の取得は不要です。国内直収ではなく海外ルートの場合は日本国内向けの送信元には英数字(Alphanumeric Sender ID)を利用します。11 桁の a ~ z、A ~ Z、0 ~ 9 が利用可能です。送信元に電話番号は利用したい場合は国内直収をお申し込みください。
認証は Voice と異なり、API キーと API シークレットを利用します。それぞれカスタマーダッシュボードのトップページから取得できます。
SMSを送信できるAPIは SMS API と Messages API の2種類がありますが、 SMS API はSMS専用となるため、 Messages API を推奨します。Messages API は SMS 以外にも WhatsApp や Facebook Messenger、MMS、Viber に対応しており、LINE も計画中です。
export VONAGE_APP_ID=カスタマーダッシュボードのアプリケーション ID
export VONAGE_PRIVATE_KEY=秘密鍵のファイルパス
export TO_NUMBER=8190...
export FROM_NUMBER=SMSTest1234
export JWT=$(vonage jwt --key_file=$VONAGE_PRIVATE_KEY --app_id=$VONAGE_APP_ID)
curl -X POST https://api.nexmo.com/v1/messages \
-H "Authorization: Bearer $JWT" \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"message_type": "text",
"text": "日本語のテスト",
"to": "'$TO_NUMBER'",
"from": "'$FROM_NUMBER'",
"webhook_url": "https://xxxx-xx-xxx-xxx-xx.ngrok-free.app/event.json",
"channel": "sms"
}'
※初期は 1 秒間に 30 通の送信制限があります ( 30 MPS )。30 MPS 以上必要な場合はお問い合わせください。数十万件の送信実績があります
※Vonage で取得したアメリカ電話番号を from に指定しても NXSMS になります。Alphanumeric Sender ID をご利用ください
※国内直収 SMS をご希望の場合はお問い合わせください
※Vonage は日本の携帯電話からの SMS 受信ができません。アメリカ番号なら受信可能ですが、キャリアによる SMS 送信料金は高額のためご注意ください。
Video通話サンプル
下記 HTML の appId に「アプリケーション ID」、sessionId と token に先ほど発行された値を設定します。これで Video 通話が可能です。もし一人なら Chrome と Safara/Edge など別ブラウザで開くか、別の人にこの HTML を送ると Video 通話ができます。有効期限(expireTime)を 2 時間に設定しているため、2 時間経過すると Video 通話できません。
<!-- OpenTok.js library -->
<script src="https://unpkg.com/@vonage/client-sdk-video@latest/dist/js/opentok.js"></script>
<script>
// credentials
const appId = 'アプリケーション ID を設定'
const sessionId = 'sessionId を設定'
const token = 'token を設定'
// connect to session
const session = OT.initSession(appId, sessionId)
// create publisher
const publisher = OT.initPublisher()
session.connect(token, (err) => {
console.error(err)
// publish publisher
session.publish(publisher)
})
// create subscriber
session.on('streamCreated', (event) => {
session.subscribe(event.stream)
})
</script>
Webhook/ログ
Webhook は電話の着信や終了、SMS の送信有無を、お客様が指定した URL にリアルタイムに通知します。デバッグやログとしてご利用ください。
Webhook 以外に API で過去 30 日間のログは取得可能です。
ネットワーク要件
Vonage は下記 IP アドレスの範囲でデータ(Webhook、WebSocket、SIP、RTP)を送信します。そのため受信許可の設定が必要です。IP アドレスとポートの変更がある場合は弊社から事前にご連絡いたします。
IP アドレス
・216.147.0.0/18
・168.100.64.0/18
ポート
ご利用サービスについて異なります。電話、SMS であれば TCP 80/443 です。
機能 | ポート | 備考 |
Webhook | TCP 80 TCP、TCP 443 | |
WebSocket | TCP 443 | In-App で利用。電話/SMS は不要 |
SIP | UDP 5060 TCP 5060 TLS 5061 |
SIP で利用。電話/SMS は不要 |
RTP/Media | UDP 10000-50000 | SIP、In-App で利用。電話/SMS は不要 |
アカウント管理
Vonage の持つサブアカウントやアプリケーション、ユーザー単位の機能制限により、たとえば以下のようにきめ細かなアカウント管理が可能です。設定についてはお気軽に弊社までご相談ください。
・本番環境、ステージング環境、開発環境を分けたい
・支払いを貴社プロジェクトやサービス、環境単位でまとめたい、分けたい
・ユーザーごとに支払い状況だけ見せたい、支払い状況だけ見せたくない
アカウント/サブアカウント
・API でのみ作成可能。API キーが異なる別の環境になります。
支払いをまとめることも、支払い方法を別々にすることも可能。
・別環境になるため、電話番号のアカウント間移動については弊社までお問い合わせください。なお対応には数営業日が必要となります。
アプリケーション
・アカウント/サブアカウント内で簡易に環境を分けることができます。
・API キーとは別にアプリケーション ID が発行され、アプリケーション ID で API を利用します。
・アプリケーションごとに利用できる電話番号をカスタマーダッシュボードからいつでも設定可能です。
ユーザー単位の機能制限
・支払い履歴の表示有無や、アプリケーション作成有無など、ユーザー単位でカスタマーダッシュボードの機能制限が可能です。プロジェクト管理者や
開発ベンダー、経理担当といった役割に応じて、細かく機能を制限できます