プログラマブル音声 API
PaaSoo プログラマブル音声 API は、XML 構文に基づく音声スクリプト言語である PML(PaaSoo Voice Markup Language)を提供します。PML を活用することで、発信、着信、IVR(自動音声応答)、多言語リアルタイム翻訳、録音、通話制御などの多様な機能を網羅した、高度にカスタマイズ可能な音声フローを構築できます。これらの機能を同じプログラマブル音声 API 内で使用することで、さまざまなシナリオのビジネス要件を満たし、柔軟で効率的な音声通信体験を得ることができます。
1. 概要
PaaSoo プログラマブル音声 API は、PML スクリプト言語に基づいています。この API を通じて、発信フローの編成、IVR ロジックの設定、多言語翻訳、録音、および自発的な通話終了などの操作を柔軟に行うことができます。代表的な使用シナリオには、カスタマーサービスホットライン、自動発信通知、電話会議、言語の壁を越えたコミュニケーション、音声認証コード、録音による品質管理などがあります。
2. 機能一覧
3.1 通話発信:マーケティング通知や認証コードなどに広く使用される自動発信を行います。
3.2 通話着信:着信を自動的に振り分けるか、インテリジェントなカスタマーサービス IVR フローを実現します。
3.3 通話イベントコールバック:通話ステータス(呼び出し中、接続、切断、異常など)をいつでも監視できます。
4.1 PML メインプロセス(Process):メインコントローラーとして、各サブプロセスの実行を調整します。
4.2 PML サブプロセス(SubProcess):具体的なビジネス機能モジュールを実現します。
4.3 条件項目(Items):インテリジェントなルーティング決定を提供し、動的なフローの遷移を実現します。
4.4 テキスト音声合成(TTS):テキストを即座に自然でスムーズな音声に変換して再生します。
4.5 音声再生(Play):指定した音声ファイルを再生します。プロンプト音やBGMなどのシナリオで使用できます。
4.6 一時停止(Pause):音声フラグメントやオーディオの間に一時停止を挿入し、読み上げをよりスムーズにします。
4.7 キー入力キャプチャ(Catch):DTMF または音声入力を通じてユーザー情報を収集し、ロジックを実行します。
4.8 通話転送(Forward):通話を他の番号またはコールセンターシステムに転送します。
4.9 リアルタイム音声翻訳(Translation):通話中に即座に多言語翻訳を行います。
4.10 録音(Record):通話を録音するかどうかを柔軟に選択し、コールバックで録音アドレスを取得できます。
4.11 録音コールバック:録音終了後のコールバック通知。
4.12 スケジュールプロセス(Schedule):時間条件に基づいて異なるサブプロセスを実行します。
5 通話中断(終了):通話を自発的に終了するか、カウントダウン後に自動的に終了するように設定できます。
3. API の説明
以下は、プログラマブル音声 API における発信、着信、およびイベントコールバックの3つの重要なステップに関する技術的な説明です。その中の機能特性(翻訳、録音など)は PML スクリプトで設定する必要があります。
3.1 通話発信
この機能を通じて自動的に発信を行います。一括通知、音声認証コード、リモート会議の招待などのシナリオで使用できます。1回のリクエストで PML スクリプトを含めて対話フローを指定し、マルチレベルの音声ガイダンスやキー入力対話を柔軟に実現できます。
- HTTP Method:
POST - リクエスト URL:
https://api.paasoo.jp/api/calls - Content-Type:
application/x-www-form-urlencoded
3.1.1 リクエストパラメータの説明
| パラメータ | 型 | 必須 | 説明 | サンプル |
|---|---|---|---|---|
| key | string | はい | API Key(英数字8桁)。アカウントの一意の識別子として使用します。PaaSoo の管理コンソールで取得できます。 | Abcdefgh |
| secret | string | はい | API Secret(英数字8桁)。key と組み合わせて認証に使用します。PaaSoo の管理コンソールで取得できます。 | Abc123EF |
| from | string | はい | 発信元番号(Caller ID)。カスタマイズが必要な場合は、テクニカルサポートにご連絡ください。 | +815012345678 |
| to | string | はい | 宛先番号。国際形式を使用する必要があります:国番号+携帯電話番号。 | 819011111111 |
| pml | string | はい | XML 構文に基づく PML スクリプト。通話のロジックと機能を定義します。 | <pml> <process> <tts voice="woman" language="ja-JP">こんにちは。</tts> </process> </pml> |
| callback_url | string | いいえ | イベントコールバック URL。通話ステータスの変更を受信するために使用します。 | https://example.com/callback |
| callback_event | string | いいえ | コールバック URL に送信されるイベント。複数のイベントを同時に設定でき、半角カンマで区切ります。
| ringing |
| record | boolean | いいえ | 録音を有効にするかどうか。 | true |
| recording_callback_url | string | いいえ | 録音を有効にした場合、録音通知を受信するコールバック URL。 | https://example.com/record_callback |
| timeout | integer | いいえ | 宛先の呼び出し時間(秒)。
| 15 |
| time_limit | integer | いいえ | 最大通話時間制限(未入力または0は制限なしを意味します)。通話時間がこの制限に達すると、システムは直ちに自発的に通話を切断します。 時間は秒単位です。 | 120 |
cURL サンプル
curl -X POST https://api.paasoo.jp/api/calls \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "key=Abcdefgh" \
-d "secret=Abc123EF" \
-d "from=815012345678" \
-d "to=819011111111" \
-d "pml=<pml><process><tts language="ja-JP">こんにちは。</tts></process></pml>" \
-d "callback_url=https://example.com/call_events" \
-d "callback_event=ringing,answered,completed"
3.1.2 レスポンスパラメータの説明
3.1.2.1 成功サンプル
{
"status": "0",
"call_id": "400157-3d1875-7000"
}
3.1.2.2 失敗サンプル
{
"status": "2",
"status_details":"Missing parameters"
}
3.1.2.3 レスポンスパラメータの説明
| パラメータ | 型 | 説明 | サンプル |
|---|---|---|---|
| call_id | string | バッチ全体の処理結果。0 はリクエストを正常に受信して処理したことを示します。 | 0 |
| status | string | レスポンスステータス。PaaSoo クラウド通信プラットフォームに送信されたステータスコード。通常、0 は成功を表します。 | 0 - success |
| status_details | string | ステータスの説明情報。エラーの原因や詳細なステータスを説明するために使用します。 | Missing parameters |
3.1.3 API ステータスコード一覧
- 0 - success:成功
- 2 - Missing parameters:必須パラメータの欠落
- 3 - Invalid parameters:パラメータ形式のエラー
- 4 - Invalid credentials:Key または Secret のエラー
- 5 - Unauthorized IP:IP 制限
- 6 - Invalid phone number:番号形式のエラー
- 7 - Invalid sender id:from パラメータの形式エラー
- 8 - Message bombing detected:3 秒以内の重複リクエスト
- 9 - Quota exceeded:残高不足またはクレジット制限の超過
- 10 - Throttling error:レート制限の超過
- 11 - System error:システムエラー
3.2 通話着信
ユーザーが設定済みの電話番号または仮想中間番号に着信すると、PaaSoo は設定された Webhook に1回リクエストを送信し、その着信をどのように処理すべきか(つまり、PML スクリプトまたはサブプロセスを返すか)を取得します。 これにより、自動ルーティング、身元確認、セルフサービスなど、柔軟性の高い IVR シナリオを実現できます。
- HTTP Method:
GET - リクエスト URL:
https://example.com/webhook?key=Abcdefgh&caller=819011111111&mo_number=815012345678&callid=400157-3d1875-7000
3.2.1 リクエストパラメータの説明
| パラメータ | 型 | 必須 | 説明 | サンプル |
|---|---|---|---|---|
| key | string | はい | API Key(英数字8桁)。アカウントの一意の識別子として使用します。PaaSoo の管理コンソールで取得できます。 | Abcdefgh |
| caller | string | はい | 発信元番号(CLI)。 | 819011111111 |
| mo_number | string | はい | ユーザーがダイヤルした番号(仮想または直接接続)。 | 815012345678 |
| callid | string | はい | 呼び出しの一意の ID。 | 400157-3d1875-7000 |
このリクエストを受信した後、お客様のサービスは後続の IVR または自動音声操作アクションを指示するための PML または XML を返す必要があります。 有効な PML を返せない場合、着信は終了します。
HTTP/1.1 200 OK
Content-Type: text/xml
<process>
<tts voice="woman" language="ja-JP">テクニカルサポートへのお問い合わせは1を、ご注文の確認は2を押してください。</tts>
</process>
3.3 通話イベントコールバック
通話プロセス全体を通じて、PaaSoo プラットフォームは発信時または番号設定に入力された callback_url に基づいて、通話ステータス(ringing、answered、completed、rejected など)を送信し、後続のビジネスロジックを実行できるようにします。
- HTTP Method:
POST - Content-Type:
application/x-www-form-urlencoded
3.3.1 リクエストパラメータの説明
| パラメータ | 型 | 必須 | 説明 | サンプル |
|---|---|---|---|---|
| key | string | はい | API Key(英数字8桁)。アカウントの一意の識別子として使用します。PaaSoo の管理コンソールで取得できます。 | Abcdefgh |
| call_id | string | はい | 一意の通話 ID。 | 015bd4-d6dfa7-58w |
| event | string | はい | 現在の通話イベント。複数のイベントを同時に設定でき、半角カンマで区切ります。
| answered |
| event_time | string | はい | イベント発生時間(UTC+0)。 | 2024-12-01 00:00:00 |
| parent_id | string | いいえ | 転送またはサブ通話がある場合、ここに親の通話 ID を示します。 | 400157-3d1875-7000 |
| hangup_cause | string | いいえ | 切断理由の説明。《SIP 切断理由コード対応表》 を参照できます。 | USER_BUSY |
| hangup_code | string | いいえ | 切断理由コード。《SIP 切断理由コード対応表》 を参照できます。 | USER_BUSY |
| error_code | string | いいえ | エラーがある場合、ここにエラーコードを示します。 | 1001 |
| error_msg | string | いいえ | エラーの説明。 | Insufficient sessions |
POST https://example.com/call_events
Content-Type: application/x-www-form-urlencoded
call_id=015bd4-d6dfa7-58w&event=completed&event_time=2024-12-01+10%3A18%3A06
4. PML - タグと使用法
PML は XML 構造に基づくスクリプト言語であり、シンプルな方法で音声フローを設計するのに役立ちます。 ルート要素は通常 <pml>...</pml> であり、内部にいくつかの <process> や <subprocess> などのノードを含みます。 一般的な機能タグの説明は以下の通りです:
4.1 Process (PML のメインプロセス)
PML のルート要素であり、ビジネスプロセスの入り口として機能します。各 PML スクリプトには <process> ルート要素を1つだけ含めることができます。
<pml>
<process id="main">
<tts voice="woman" language="ja-JP">こんにちは。</tts>
</process>
</pml>
4.1.1 プロセス ID
プロセス ID はプロセスの識別子であり、あるプロセスから別のプロセスへ遷移する必要がある場合、この ID が遷移先として参照されます。
- 順次実行シナリオ:
<process>と<subprocess>が順次実行され遷移が不要な場合、ID を指定しなくても構いません。 - プロセス遷移シナリオ:遷移が必要な場合は、
<process>と各<subprocess>に一意の ID を設定する必要があります。
サンプル
<pml>
<process id="main">
.....
</process>
<subprocess id="proc-ja-jp">
.....
</subprocess >
<subprocess id="proc-en-us">
.....
</subprocess >
</pml>
4.2 SubProcess(PML のサブプロセス)
再利用可能なビジネスロジックモジュールを表します。特定の機能(認証、メニューナビゲーションなど)をサブプロセスとしてカプセル化することで、メインプロセスの構造を簡素化し、コードの再利用性と保守性を向上させることができます。
サンプル
<subprocess>
<play>https://example.com/audio/welcome.mp3</play>
</subprocess>
4.3 Items(条件項目)
複雑なアプリケーションシナリオでは、1つの <process> と複数の <subprocess> を組み合わせて、要件を満たす完全なビジネスフローを構築できます。実行中、システムはユーザー入力(キー選択や音声コマンドなど)に基づいて条件判断を行い、<process> から <subprocess> へ、または異なる <subprocess> 間での柔軟な遷移を実現し、ユーザーの操作に動的に応答します。
<items> タグは通常、他のタグと組み合わせて使用されます。例えば、<catch> と組み合わせて、ユーザーの入力内容と <item> の条件を照合し、対応するサブプロセス <subprocess> に遷移します。
サンプル
<pml>
<process id="main">
<catch timeout="60" keys="1" end_key="#" input="DTMF">
<tts voice="woman" language="ja-JP">ようこそ。日本語を選ぶには1を押してください。</tts>
<tts voice="woman" language="en-US">For English, please press 2。</tts>
<tts voice="woman" language="zh-CN">若要选择普通话,请按3。</tts>
<tts voice="woman" language="zh-HK">如需廣東話,請按4。</tts>
<tts voice="woman" language="ko-KR">한국어를 선택하려면 5를 누르세요。 </tts>
<tts voice="woman" language="fr-FR"> Pour discuter en français, appuyez sur 6.</tts>
<items>
<item value="1" next_process="@proc-ja-jp"></item>
<item value="2" next_process="@proc-en-us"></item>
<item value="3" next_process="@proc-zh-cn"></item>
<item value="4" next_process="@proc-zh-hk"></item>
<item value="5" next_process="@proc-ko-kr"></item>
<item value="6" next_process="@proc-fr-fr"></item>
</items>
</catch>
</process>
<subprocess id="proc-ja-jp">
<forward from="815030322222">
<tts voice="woman" language="ja-JP">転送中。</tts>
<play>https://example.com/phone-call.mp3>
<to>819012345678</to>
</forward>
</subprocess >
......
</pml>
4.3.1 条件マッチングメカニズム
<items> には複数の <item> 条件項目が含まれ、システムは順にユーザー入力と各 <item> の value 値を照合します。一致した場合、対応するサブプロセスを実行します。
マッチング方法:
- 文字列の完全一致:入力内容が value 値と完全に一致する場合に成功します。
- 正規表現マッチング:入力内容が value 値の正規表現ルールに一致する場合に成功します。
4.3.2 プロセス遷移
条件が一致した場合、next_process 属性を通じて遷移先のターゲットプロセスを指定できます。
next_process:一致が成功した後に遷移するターゲットプロセスを指定します。- 遷移構文:
@proc-ja-jpはid="proc-ja-jp"のサブプロセスへの遷移を示します。@記号はターゲットプロセスの ID を示すために使用されます。
4.3.3 プロセスの実行
システムは <item> の順に条件マッチングを実行します:
- 最初に一致した条件がプロセス遷移をトリガーします。
- 条件に一致しない場合、フローは後続の操作を続行します。
4.4 TTS(テキスト音声合成)
テキストコンテンツを音声に変換して再生します。言語、声質、速度、音量などをカスタマイズできます。 一般的な適用シナリオ:電話通知、メニュー読み上げ、音声認証コードの内容など。
4.4.1 リクエストパラメータの説明
| パラメータ | 型 | 必須 | 説明 | サンプル |
|---|---|---|---|---|
| language | string | はい | Text-to-Speech (TTS) の言語 | ja-JP |
| voice | string | いいえ | 声質。
| woman |
| volume | string | いいえ | 音声の音量レベル。 絶対値:0.0 から 100.0(最も静かから最大音量、例えば 75)までの数字で指定し、デフォルト値は 100.0 です。 または定数値を使用:
| 100 |
テキストコンテンツ内に2つのオプションパラメータを追加できます
| パラメータ | 型 | 属性 | 説明 | サンプル |
|---|---|---|---|---|
| break | string | time | 個人のニーズに応じて、間隔の秒数またはミリ秒数を設定できます。 | <break time="1s"/> |
| prosody | float | rate | 音声の再生速度の比率を設定できます。値は 0~3 の間で、デフォルトの基準速度は 1 です。 | <prosody rate="0.1"> Your code 1,2,3,4,5. </prosody> |
4.4.2 サポート言語リスト
詳細なサポート言語リストをクリックして表示します。
4.5 Play(音声再生)
外部 URL の音声ファイル(.mp3、.wav など)を再生できます。IVR プロンプト音や広告音声などのシナリオに適用されます。 ファイルはパブリックネットワークからアクセス可能であり、サンプリングレートの互換性(8KHz)を確保する必要があります。
サンプル
<pml>
<process>
<play> https://example.com/audio/welcome.mp3 </play>
</process>
</pml>
4.6 Pause(一時停止)
TTS や音声フラグメントの間に制御可能な一時停止を挿入し、音声をより自然にします。 <break> に似ていますが、通常は TTS フラグメントの外部の「プロセスノード間の一時停止」に使用されます。
4.6.1 リクエストパラメータの説明
| パラメータ | 型 | 必須 | 説明 | サンプル |
|---|---|---|---|---|
| duration | string | はい | 一時停止時間。ミリ秒単位。 | 100ms |
サンプル
<pml>
<process>
<tts language="ja-JP">0.5秒間一時停止します...</tts>
<pause duration="500ms"/>
<tts language="ja-JP">続行します。</tts>
</process>
</pml>
4.7 Catch(キー入力キャプチャ)
この API は、音声通話中に DTMF(デュアルトーンマルチフレケンシ、つまりキー入力)または SPEECH(音声認識)を通じてユーザー入力を収集するために使用されます。マルチレベル IVR メニュー、身元確認(認証コード入力など)、音声コマンド認識などのシナリオの実装に適しています。
インタラクションモードの説明:
- DTMF モード:システムが TTS プロンプト音を再生し(例:「注文番号を入力し、最後に # を押してください」)、ユーザーは電話のキーパッドで数字と記号を入力します。指定したキー数に達するか、終了文字に遭遇すると、入力が完了します。
- SPEECH モード:システムが TTS プロンプト音を再生し(例:「『営業』や『サポート』など、ご用件をお話しください」)、ユーザーは音声で応答します。音声認識エンジンが音声をテキスト結果に変換します。
許可されるサブタグ:
<catch> タグ内で、現在以下のサブタグがサポートされており、プロンプトの再生や入力結果の分岐などの動作を制御するために使用されます:TTS、Play、Pause、Items。
4.7.1 リクエストパラメータの説明
| パラメータ | 型 | 必須 | 説明 | サンプル |
|---|---|---|---|---|
| keys | integer | はい | キャプチャする DTMF キーの予想数を指定します。ユーザーの入力キー数がこの数に達すると、キャプチャプロセスは直ちに終了します。このパラメータは DTMF 入力にのみ有効です。 keys と end_key は並列の終了条件です。両方が設定されている場合、いずれかの条件を満たす(キー数が目標に達する、または終了キーが押される)と、キャプチャプロセスは直ちに終了します。 | 3 |
| end_key | string | いいえ | DTMF キャプチャを直ちに終了するための1つ以上の終了キーを指定します。ユーザーがここで定義された任意の文字を押すと、キャプチャプロセスは直ちに終了します。 DTMF、DTMF SPEECH モードに適用されます。
keys と end_key は並列の終了条件です。両方が設定されている場合、いずれかの条件を満たすとキャプチャプロセスは直ちに終了します。 | #, *, 0-9 |
| input | string | いいえ | 入力モード。受け入れる入力タイプを指定します。1つ以上の値をサポートし、複数の値はスペースで区切ります。
| DTMF SPEECH |
| language | string | いいえ | 音声認識の言語。input に SPEECH が含まれる場合、このパラメータは必須です。音声認識エンジンが使用する言語モデルを指定します。 | ja-JP |
| hints | string | いいえ | キーワードまたはフレーズを指定します(例:専門用語、一般的な表現、または予想されるユーザーの回答)。音声エンジンを支援し、PaaSoo 音声エンジンの認識精度を向上させるために使用され、特に誤って聞き取られやすい、または無視されやすい単語に適しています。
| PaaSoo テクニカルサポート,残高照会 |
| max_duration | integer | いいえ | Catch 操作の最大サポート時間(単位:秒)。プロンプト音の再生開始からカウントされ、この時間を超えると入力の有無にかかわらず、今回のキャプチャ操作は強制終了されます。
| 15 |
| speech_timeout | integer | いいえ | 音声入力の一時停止後の最大待機時間(単位:秒)。PaaSoo が音声の一時停止を検出した後の待機時間であり、この時間を超えると今回の Catch 操作は強制終了されます。
| 3 |
| repeat | integer | いいえ | ユーザーが設定されたタイムアウト時間内に何も入力しなかった場合、この Catch を繰り返し実行する回数。正の整数値を入力する必要があります。 | 3 |
| event_url | string | いいえ | ユーザー入力完了イベントを受信するためのコールバック URL を指定します。
| https://example.com/event |
4.7.2 event_url コールバックパラメータの説明
| パラメータ | 型 | 必須 | 説明 | サンプル |
|---|---|---|---|---|
| call_id | string | はい | 通話の一意の ID。各音声レコードの一意識別子です。 | 400157-3d1875-7000 |
| input | string | はい | ユーザーが入力したキー、または音声入力認識後のテキスト | こんにちは |
サンプル:キー入力
<pml>
<process>
<catch event_url="https://example.com/event" keys="4" end_key="#" timeout="10">
<tts language="ja-JP">4桁のパスワードを入力し、#を押してください。</tts>
</catch>
<tts language="ja-JP">入力が記録されました。ありがとうございます。</tts>
</process>
</pml>
実行プロセス中、システムはユーザーの入力情報を設定された event_url にコールバックを通じて送信します。
コールバックリクエストのサンプル:
curl -X POST https://example.com/event \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "call_id=a003fb-36d1f0-1000&input=1234"
-
コールバック URL アドレスがサブプロセス命令のレスポンスを返す場合:
PML<subprocess>
<tts voice="woman" language="ja-JP">パスワードが認証されました。さようなら。</TTS>
</subprocess>その後、サブプロセスのフローにジャンプします。
-
コールバック URL アドレスが 200 OK のレスポンスを返す場合: 返された内容を無視し、メインプロセスは実行を継続します。
サンプル:音声/キー入力
ユーザーの入力(キーまたは音声)を収集し、ユーザーの選択に基づいて異なるサブプロセス forSales、forSupport を実行できます。
<pml>
<process>
<catch input="DTMF SPEECH" keys="1" language="ja-JP" timeout="10">
<tts language="ja-JP">営業部へのお問い合わせは1を押すか「営業」とお話しください。テクニカルサポートは2を押すか「サポート」とお話しください。</tts>
<items>
<item value="1|営業" next_process="@forSales"/>
<item value="2|サポート" next_process="@forSupport"/>
</items>
</catch>
</process>
<subprocess id="forSales">
<tts language="ja-JP">営業部を選択しました。ありがとうございます。</tts>
</subprocess>
<subprocess id="forSupport">
<tts language="ja-JP">テクニカルサポートを選択しました。ありがとうございます。</tts>
</subprocess>
</pml>
4.8 Forward(通話転送)
現在の通話(着信または発信を含む)を別の番号またはビジネスシステム(IVR、オペレーターなど)にシームレスに転送します。システムは元の端末との接続を自動的に終了し、新しいターゲットとの接続を確立しながら、通話セッションの連続性を維持します。
シナリオの例:カスタマーサービス担当者がシニアエンジニアに通話を転送する。中継番号を介してサードパーティシステムに接続する。
許可されるサブタグ:
<forward> タグ内で、現在以下のサブタグがサポートされており、転送前または転送中に音声プロンプトや音声翻訳などの処理を行うために使用されます:TTS、Translation。
4.8.1 リクエストパラメータの説明
| パラメータ | 型 | 必須 | 説明 | サンプル |
|---|---|---|---|---|
| callback_url | string | いいえ | サブ通話イベントを受信するためのコールバック URL。 | callback_url="https://example.com/call" |
| record | string | いいえ | サブ通話を記録するオプション:
| record-from-answer-dual |
| recording_callback_url | string | いいえ | 録音ステータスを受信するためのコールバック URL。 | https://example.com/recording |
| recording_callback_method | string | いいえ | 記録ステータスを送信するコールバックメソッド。現在は POST のみサポートしています。 | POST |
| from | string | いいえ | サブ通話の発信元番号(Caller ID)。カスタマイズが必要な場合は、テクニカルサポートにご連絡ください。 | +815012345678 |
| to | string | はい | サブ通話の宛先番号。国際形式を使用する必要があります:国番号+携帯電話番号。 | 819011111111 |
| timeout | integer | いいえ | 呼び出し時間。秒単位。
| 15 |
サンプル
<pml>
<process>
<forward from="815012345678" record="record-from-answer" callback_url="https://example.com/child_call_events">
<to>819011111111</to>
<tts language="ja-JP">おつなぎしております。</tts>
</forward>
</process>
</pml>
4.9 Translation(リアルタイム音声翻訳)
PaaSoo のリアルタイム通話翻訳機能(Translation)を使用すると、双方向の通話中に双方の音声コンテンツをリアルタイムで認識し、翻訳することができます。この機能は AI 技術に基づいており、言語の壁を越えたリアルタイムコミュニケーションをサポートし、国際ビジネス会議や多言語カスタマーサポートなどのシナリオに適しています。
API を通じて、翻訳言語、声質、音量などの設定を柔軟に調整し、個別のビジネスニーズを満たすことができます。
4.9.1 リクエストパラメータの説明
| パラメータ | 型 | 必須 | 説明 | サンプル |
|---|---|---|---|---|
| from | string. | はい | 通話発信側のソース言語コード。通話発信側の音声認識言語を指定し、相手の音声を翻訳する際のターゲット言語としても機能します。 | ja-JP |
| to | string | はい | 通話受信側のソース言語コード。通話受信側の音声認識言語を指定し、通話発信側の音声を翻訳する際のターゲット言語としても機能します。このパラメータは from と共に双方向翻訳チャネルを形成します。 | en-US |
| volume | integer | いいえ | 翻訳プロセスにおいて、双方の元の音声の音量を 0~100 で設定します。 例:100 は元の音量。40 に設定すると、双方は 40% の音量で再生されます。 デフォルト:0、元の音声なし。 | 30 |
サンプル:日本語 to 英語
<pml>
<process>
<tts language="ja-JP">この通話ではリアルタイム翻訳を開始します。</tts>
<forward from="815012345678">
<translation from="ja-JP" to="en-US" volume="30"></translation>
<to>18001234567</to>
</forward>
</process>
</pml>
<translation from="ja-JP" to="en-US" volume="30"></translation>:通話発信側の言語を日本語から英語に翻訳し、双方の元の音量が 30% であることを示します。
4.9.2 翻訳された音声コンテンツの個別設定
<translation> タグ内に <from> および <to> タグを追加して、双方(通話発信側および通話受信側)に聞こえる翻訳コンテンツをさらに詳細に設定することもできます。
注:ここでの <from> と <to> タグは、通話発信側と通話受信側に送信される音声翻訳コンテンツの再生プロパティ(声質、音量など)を設定するために使用され、彼らの元の通話音声を制御するものではありません。
4.9.2.1 パラメータの説明
| パラメータ | 型 | 必須 | 説明 | サンプル |
|---|---|---|---|---|
| voice | string | いいえ | リアルタイム翻訳後の音声コンテンツの声質を設定するために使用します:
| woman |
| volume | string | いいえ | リアルタイム翻訳後の音声コンテンツの音量レベルを設定するために使用します。 絶対値:0.0 から 100.0(最も静かから最大音量、例えば 75)までの数字で指定し、デフォルト値は 100.0 です。 または定数値を使用:
| loud |
サンプル:日本語 to 英語
<pml>
<process>
<tts language="ja-JP">この通話ではリアルタイム翻訳を開始します。</tts>
<forward from="815012345678">
<translation from="ja-JP" to="en-US" volume="30">
<from voice="man" volume="100"/>
<to voice="man" volume="90"/>
</translation>
<to>18001234567</to>
</forward>
</process>
</pml>
<from voice="man" volume="100"/>:通話発信側の発言がリアルタイム翻訳された後、通話受信側に聞こえる声が男性の声であり、音量が 100% であることを示します。
<to voice="man" volume="90"/>:通話受信側の発言がリアルタイム翻訳された後、通話発信側に聞こえる声が男性の声であり、音量が 90% であることを示します。
サンプル:ユーザーによるターゲット言語の選択
<pml>
<process id="langselect">
<catch keys="1" end_key="#" timeout="15">
<tts language="ja-JP">英語を日本語に翻訳する場合は1を、英語をフランス語に翻訳する場合は2を押してください。</tts>
<items>
<item value="1" next_process="@toja"/>
<item value="2" next_process="@tofr"/>
</items>
</catch>
</process>
<subprocess id="toja">
<forward from="815012345678">
<translation from="en-US" to="ja-JP"/>
<to>819011111111</to>
</forward>
</subprocess>
<subprocess id="tofr">
<forward from="815012345678">
<translation from="en-US" to="fr-FR"/>
<to>33123456789</to>
</forward>
</subprocess>
</pml>
4.10 Record(録音)
この機能を使用すると、通話中に一方または双方のオーディオストリームを録音できます。録音が完了すると、コールバックイベントを通じて録音ファイルのアクセス URL が返されます。通常、サービス品質の確認、トラブルの証拠保持、従業員トレーニングなどのシナリオで使用されます。
4.10.1 リクエストパラメータの説明
| パラメータ | 型 | 必須 | 説明 | サンプル |
|---|---|---|---|---|
| max_time | integer | いいえ | 最大録音時間(単位:秒)。録音がこの時間に達すると自動的に終了します。 | 60 |
| end_key | string | いいえ | 録音を直ちに終了するための1つ以上の終了キーを指定します。ユーザーがここで定義された任意の文字を押すと、録音は直ちに終了します。
| #,*,0-9 |
| recording_callback_url | string | いいえ | 録音ステータスコールバック URL。録音プロセス中のステータスイベント通知を受信するために使用します。 | https://example.com/recording |
サンプル
<record max_time="60" end_key="#" recording_callback_url="https://example.com/recording_callback"/>
4.11 録音コールバック
録音が完了または進行中の場合、recording_callback_url にイベントが送信され、録音時間や録音ダウンロード URL などの重要な情報が含まれます。
HTTP Method: POST
4.11.1 コールバックパラメータの説明
| パラメータ | 型 | 必須 | 説明 | サンプル |
|---|---|---|---|---|
| call_id | string | はい | 録音されたサブ通話の一意の ID。 | 015bd4-d6dfa7-58w |
| channels | integer | はい | 録音ファイルのチャンネルタイプ:
| 2 |
| duration | integer | はい | 録音時間(秒)。event=record_completed イベント時のみ有効です。 | 60 |
| url | string | いいえ | 録音が保存されているアドレス。event=record_completed イベント時のみ有効です。 | https://example.com/recording_callback |
| event | string | はい | イベントカテゴリ:
| record_inprocess |
| event_time | string | はい | 録音開始時間 (UTC+0)。 | 2024-12-01 00:00:00 |
| key | string | はい | API Key(英数字8桁)。アカウントの一意の識別子として使用します。PaaSoo の管理コンソールで取得できます。 | Abcdefgh |
| parent_id | string. | いいえ | 親の通話の一意の ID。各音声レコードの一意識別子です。 | 400157-3d1875-7000 |
コールバックサンプル
POST https://example.com/recording_callbackcall_id=015bd4-d6dfa7-58w&channels=2&duration=60&event=record_completed&url=https%3A%2F%2Fusermedia%2Ffiles%2Fcall015bd4d6.wav
4.12 Schedule(スケジュールプロセス)
<schedule> と <items> タグを組み合わせることで、PML は異なる時間条件に基づいて異なる <subprocess> を実行できます。
4.12.1 リクエストパラメータの説明
| パラメータ | 型 | 必須 | 説明 | サンプル |
|---|---|---|---|---|
| timezone | string | いいえ | タイムゾーンパラメータ、値の範囲:-12 から +12。
| +6 |
| weekday | string | いいえ | 曜日。数字の 1~7 で、それぞれ月曜日から日曜日を表します。 正規表現のマッチング方式を採用します。 | [1-5] |
| date | string | いいえ | 日付マッチングモード。形式は:"YYYY-MM-dd"。 正規表現のマッチング方式を採用します。 例:2025年1月1日と2日の2日間に一致させる場合、date="^2025-01-01|02"。 | ^2025-01-01|02 |
| time | string | いいえ | 時間マッチングモード。形式は:"HH:mm:ss"。 正規表現のマッチング方式を採用します。 営業時間内の条件に一致させる場合、time="^(08|09|10|11|14|15|16|17)" 。 | ^(08|09|10|11|14|15|16|17) |
サンプル:営業時間内は subprocess "process_workday" を実行し、営業時間外は subprocess "process_non-working" を実行します。
<schedule timezone="+09:00">
<items>
<item weekday="[1-5]" time="^(08|09|10|11|14|15|16|17)" next_process="@process_workday"/>
<item weekday="6|7"next_process="@process_non-working"/>
<item next_process="@process_default"/>
</items>
</schedule>
<subprocess id="process_workday">
<tts language="ja-JP">こんにちは、ご用件をお伺いします。</tts>
......
</subprocess>
<subprocess id="process_non-working">
<tts language="ja-JP">こんにちは!現在は週末のサービス時間外です。カスタマーサービスの営業時間は月曜日から金曜日の 8:00〜17:00 です。来週の月曜日のこの時間帯にお問い合わせください。良い週末をお過ごしください!</tts>
......
</subprocess>
<subprocess id="process_default">
<tts language="ja-JP">こんにちは!現在カスタマーサービスはオフラインです。サービス時間は月曜日から金曜日の 8:00〜17:00 です。この時間帯にお問い合わせください。ありがとうございます!</tts>
......
</subprocess>
4.12.2 マッチングルール
weekday, date, time の条件マッチングは、正規表現方式を採用します。
weekday, date, time のうち複数の条件を同時に指定した場合、複数の条件すべてを満たして初めてマッチング成功と見なされます。
<item time="^(08|09|10|11|14|15|16|17)" weekday="[1-5]" next_process="@process_workday"/>
5. 通話中断(終了)
API 内で自発的に通話を終了したり(またはカウントダウンを設定して自動的に終了させたり)することで、回線が異常に長時間占有されるのを防いだり、ビジネスロジックに基づいて必要な場合に行うことができます。
- HTTP Method:
POST - リクエスト URL:
https://api.paasoo.jp/api/calls/update
5.1 リクエストパラメータの説明
| パラメータ | 型 | 必須 | 説明 | サンプル |
|---|---|---|---|---|
| key | string | はい | API Key(英数字8桁)。アカウントの一意の識別子として使用します。PaaSoo の管理コンソールで取得できます。 | Abcdefgh |
| secret | string | はい | API Secret(英数字8桁)。key と組み合わせて認証に使用します。PaaSoo の管理コンソールで取得できます。 | Abc123EF |
| call_id | string | はい | 発信時に返される一意の ID。 | 400157-3d1875-7000 |
| status | string | はい | 通話終了の固定値:completed | completed |
| timer | integer | いいえ | カウントダウン後に通話を終了(秒)。0 は即時終了を示します。 | 60 |
5.2 cURL サンプル
curl -X POST "https://api.paasoo.jp/api/calls/update" \
-d "key=Abcdefgh" \
-d "secret=Abc123EF" \
-d "call_id=400157-3d1875-7000" \
-d "status=completed" \
-d "timer=0"
5.3 レスポンスパラメータの説明
5.3.1 成功サンプル
{
"call_id": "400157-3d1875-7000",
"status": "0"
}
5.3.2 失敗サンプル
{
"call_id": "400157-3d1875-7000",
"status_details":"Missing parameters",
"status":"2"
}
| パラメータ | 型 | 説明 | サンプル |
|---|---|---|---|
| call_id | string | 終了した通話の一意の ID。 | 400157-3d1875-7000 |
| status | string | レスポンスステータスコード。
| 0 - success |
| status_details | string | ステータスの説明。 | Missing parameters |
6. さまざまな業界およびシナリオの例
このセクションでは、PML を通じてさまざまな機能を組み合わせて豊富なユースケースを実現する方法をよりよく理解するための、いくつかの総合的な例を提供します。
6.1 小売/Eコマース業界:自動支払い督促または通知
このフローは、自動発信を通じて、支払いリマインダーと顧客の支払いステータス確認のクローズドループ管理を効率的に完了させることを目的としています。システムが自発的に顧客にアプローチし、顧客のキー入力のフィードバックをリアルタイムでビジネスシステムに返すことで、運用プロセスを自動化し、手動の介入を減らします。
- リマインダー読み上げ:通話接続後、未払いの注文と支払い期限が存在することを音声で通知します。
- 確認待ち:短い一時停止の後、支払いを完了した顧客に特定のキーの組み合わせ(1+# など)を押して確認するように案内します。
- ステータス報告:顧客が指定されたキーを押すと、システムは直ちにこのイベント(キーの値など)をコールバック情報として指定された
event_urlに送信し、ビジネスサーバーはこれに基づいて注文ステータスを更新できます。 - 丁寧な終了:顧客がキー操作を行ったかどうかにかかわらず、プロセスの最後には感謝の言葉を再生し、丁寧に電話を切ります。
PML サンプル
<pml>
<process>
<tts language="ja-JP">こんにちは、未払いのご注文があります。2営業日以内に支払いを完了してください。</tts>
<pause duration="1s"/>
<catch event_url="https://example.com/payment_response" keys="1" end_key="#" timeout="10">
<tts language="ja-JP">支払いが完了している場合は 1 を押し、# で終了してください。</tts>
</catch>
<tts language="ja-JP">平素よりご愛顧いただき誠にありがとうございます。引き続きショッピングをお楽しみください。</tts>
</process>
</pml>
6.2 銀行/金融業界:多言語カスタマーサービスと録音
このフローは、海外の顧客に便利な多言語サービスのアクセスポイントを提供することを目的としています。自動音声メニューを通じて顧客に必要な翻訳言語を選択させ、対応するオペレーターに自動的に転送すると同時に、サービス品質の監視やコンプライアンスのためのアーカイブとして通話録音を開始します。
- サービスガイダンス:通話接続後、歓迎の挨拶を再生し、言語選択のプロンプトを提示します(例:日本語サービスは1、英語サービスは2)。
- キー選択:顧客はプロンプトに従って対応するキーを押し、必要な翻訳サービスを選択します。
- 転送と翻訳:システムは選択に基づいて、対応する言語のオペレーターに通話を転送し、リアルタイムの双方向音声翻訳機能を有効にします。
- 通話録音:転送後の通話全体で双方向録音を行い、録音ファイルの URL はコールバック URL を通じて指定されたサーバーにプッシュされます。
PML サンプル
<pml>
<process>
<tts voice="woman" language="ja-JP">銀行サービスへようこそ。</tts>
<tts voice="woman" language="ja-JP">サービス品質の確保とお客様の権利保護のため、この通話は録音されます。日本語でのサービスをご希望の方は1を押してください。</tts>
<tts voice="woman" language="en-US">For quality assurance and to protect your rights, this call will be recorded. For English, please press 2.</tts>
<tts voice="woman" language="fr-FR">Pour assurer la qualité de service et garantir vos droits, cet appel sera enregistré. Pour le service en français, appuyez sur le 3.</tts>
<catch keys="1" end_key="#" timeout="10">
<items>
<item value="1" next_process="@jalang"/>
<item value="2" next_process="@enlang"/>
<item value="3" next_process="@frlang"/>
</items>
</catch>
</process>
<subprocess id="jalang">
<forward from="815012345678" record="record-from-answer-dual" recording_callback_url="https://example.com/record_callback">
<to>819011111111</to>
</forward>
</subprocess>
<subprocess id="enlang">
<forward from="815012345678" record="record-from-answer-dual" recording_callback_url="https://example.com/record_callback">
<translation from="en-US" to="ja-JP" volume="30"/>
<to>819011111111</to>
</forward>
</subprocess>
<subprocess id="frlang">
<forward from="815012345678" record="record-from-answer-dual" recording_callback_url="https://example.com/record_callback">
<translation from="fr-FR" to="ja-JP" volume="30"/>
<to>819011111111</to>
</forward>
</subprocess>
</pml>
6.3 教育/研修業界:知識クイズ IVR
このフローは、自動音声応答(IVR)システムを通じて、自動化された知識テスト、研修評価、またはインタラクティブなゲームを実現することを目的としています。キー収集機能を使用してマルチブランチフローを作成し、ユーザーの回答に基づいて即座にフィードバックを提供するため、授業後の復習や知識評価などのシナリオに適しています。
- 歓迎とガイダンス:通話開始後、歓迎の言葉を再生し、クイズのルールを説明します。
- 問題と選択肢の読み上げ:システムは事前に設定された問題を提示し、対応するキーの選択肢を与えます(例:A を選択する場合は 1、B を選択する場合は 2)。
- 待機と回答の収集:システムは制限時間内にユーザーがキーを押すのを待ちます。
- 判定とフィードバック:ユーザーが押したキーの値に基づいて、対応するサブプロセス(「正解」や「不正解」など)に遷移し、対応するフィードバック音声を再生します。
PML サンプル
<pml>
<process>
<tts language="ja-JP">研修センターへようこそ。音声案内に従ってコースのクイズに答えてください。</tts>
<catch keys="1" timeout="10">
<tts language="ja-JP">問題:HTML は何の略ですか? ハイパーテキストマークアップ言語の場合は 1、その他の場合は 2 を押してください。</tts>
<items>
<item value="1" next_process="@correct"/>
<item value="2" next_process="@wrong"/>
</items>
</catch>
</process>
<subprocess id="correct">
<tts language="ja-JP">正解です!ご参加ありがとうございました。</tts>
</subprocess>
<subprocess id="wrong">
<tts language="ja-JP">不正解です。また次回挑戦してください。</tts>
</subprocess>
</pml>
7. ベストプラクティスと注意事項
-
インターフェースのセキュリティと暗号化:
- 転送のセキュリティ:すべての API リクエストは HTTPS プロトコルを使用し、通信内容のエンドツーエンド暗号化を行って、転送中のデータの盗聴や改ざんを防ぐ必要があります。
- キーの管理:API Key と Secret はサービスにアクセスするためのコアとなる資格情報です。環境変数やキー管理サービスを通じて暗号化して保存する必要があり、クライアントコードや設定ファイルに平文で記述することは固く禁じられています。
-
言語と声質の選択:
- 言語のマッチング:TTS(音声合成)の言語とアクセントは、対象ユーザーと完全に一致している必要があります。リリース前に十分なテストを行い、発音、速度、および一時停止が自然でスムーズであることを確認してください。
- 多言語サポート:多言語での読み上げが必要な場合は、
<translation>タグを柔軟に活用してください。翻訳の正確性と音声の品質を確保するために、各言語を個別にテストすることをお勧めします。
-
フロー設計:
- モジュール設計:
<process>または<subprocess>タグを使用して、複雑な音声フローを独立したモジュールに分割します。これにより、コードの可読性、保守性、および再利用性が向上します。 - ナビゲーションとフォールトトレランス:マルチレベルメニューを設計する際は、明確なタイムアウト処理メカニズムとエラーキーのガイダンスを提供する必要があります。ユーザーがどの状態からでもスムーズに終了または戻れるようにし、無限ループに陥るのを防ぎます。
- モジュール設計:
-
録音の保護とコンプライアンス:
- データのコンプライアンス:録音ファイルには個人の機密情報が含まれる可能性があります。その保存、処理、保護は、事業を展開する地域(GDPR など)のデータプライバシー法規制を厳格に遵守する必要があります。
- リソースの最適化:無音、空の録音、またはユーザーの離席によってシステムリソースが無効に占有されるのを防ぐため、
max_time(最大録音時間)とend_key(終了キー)を合理的に設定してください。
-
言語間の通話に関する注意事項:
- 認識の限界:AI 翻訳の精度は音声認識の効果に大きく依存します。ユーザーには、「言語の切り替え」機能や「オペレーターへの転送」などの代替手段を提供する必要があります。
- 通話環境:音声認識の精度に対するバックグラウンドノイズの干渉を減らすため、ユーザーには比較的静かな環境で通話することをお勧めします。
-
通話終了の管理:
- 自発的なリソース回収:「通話中断」機能を利用して、異常に長い通話を自発的に終了し、システムリソースを解放してコストを抑えることができます。
- 事後処理:通話イベントの completed ステータスを監視することで、通話終了後に請求書の生成、顧客ステータスの更新、データ分析などの後続操作を自動的にトリガーできます。
まとめ
PaaSoo プログラマブル音声 API は柔軟性と効率性を兼ね備えており、各業界の音声対話に関する中核的なニーズを満たすことができます。 基本的な発信/着信処理から、複雑な多言語翻訳、録音による品質管理、IVR マルチレベルメニューまで、すべて PML を通じて直感的に実現できます。
API 連携の過程で技術的な問題やビジネスに関する疑問が生じた場合は、いつでも当社の開発者サポートチーム(support@paasoo.com)までご連絡ください。誠心誠意、技術的なサポートを提供いたします。