ドキュメント
1ページに4つの道筋。まずここから読み、真ん中の2つは電話に出る方と経営される方へ、最後の1つはコードを書く方へお渡しください。
はじめに
5分ではじめる電話システム
以下はすべて、すでにお客さまのアカウントに揃っています。インストール作業も、技術者の訪問も、買い足す機材も必要ありません。
- 番号と内線はすでにあります。 アカウントの開設と同時に、各端末に必要なSIP認証情報とあわせて作られます。内線は人または席、番号は外の人が押すものです。
- 番号の行き先を決めます。 「番号」タブで、その番号にかかってきた通話をどうするか決めます。内線を鳴らす、グループを鳴らす、メニューを開く、待ち行列に入れる、営業時間に従う。
- ブラウザで出ます。 「電話」タブを開いてマイクを許可すれば、そのタブが動く電話機になります。
*43のエコー確認にかければ、自分の声が返ってきます。 - そのあとに営業時間と留守番電話を。 夜7時に通話を取りこぼさないための2つであり、新しい電話システムにいちばん足りていない2つでもあります。
お急ぎなら、開始テンプレートが5つあります。診療所、法律事務所、工場、店舗、家庭の回線です。営業時間、着信ルート、時間外の留守番電話を1回のリクエストで作ります。すでに設定済みのものを上書きすることはありません。
管理画面への入り方APIで
管理画面はVOICEのページ上にあり、セッションがあるときだけ表示されます。そのセッションを発行するのはお客さま専用ページで、ここで何かを入力することはありません。
| 手順 | 何をするか |
|---|---|
| 1 | elportaldelcliente.com のお客さま専用ページにログインします。 |
| 2 | アカウントメニューから「電話システムの管理」を選びます。そこからVOICEにお客さまの代理でセッションを要求し、URLのフラグメントに認証情報を付けてVOICEのページへ移動します。 |
| 3 | 管理画面が営業用ページと入れ替わります。認証情報は画面を描く前にアドレスバーから消され、自動で期限切れになります。 |
そのボタンを作る方へ。契約はこれだけです:
POST /inquilinos/:inquilino/sesiones # システム権限:発行できるのはポータルだけ
{ "minutos": 15 }
→ { "clave": "pbx_ses_…", "caduca": "…", "ambito": "sesion", "minutos_max": 60 }
/denwa-koukanki#t=<clave>&exp=<ISO>&v=<inquilino>
認証情報をクエリではなくフラグメントで運ぶのは意図的です。フラグメントはサーバーに送られないため、Refererヘッダーにも、アクセスログにも、途中の中継装置にも残りません。有効期限は数分、上限があり、恒久的な鍵を作ることはできません。
電話に出る方へ
管理画面をタブごとにAPIで
16個のセクションがあり、8言語すべてで同じ16個です。ここにあるものはすべてAPIにもあります。
| タブ | 何をするか |
|---|---|
| 概要 | 電話システムのいまの様子。本日の通話、応答済み、通話中、ピーク、そして端末がどれだけつながっていたか。 |
| 番号 | 自社の番号と、着信時にそれぞれが何をするか。 |
| メニュー | 音声メニュー。「営業は1」、その営業の中にもう一段のメニュー。 |
| 内線 | 人と端末、そして人ごとの規則。追っかけ、転送、応答拒否、発信できる範囲、取り次ぎ。 |
| 電話 | 電話機そのもの。発信、応答、転送、保留、そして誰が通話中かの確認。 |
| コールキュー | 待ち行列。順番、実測の待ち時間、折り返し、誰が受付中か、誰が何を担当するか。 |
| 会議室 | 暗証番号つきの会議室と、いま誰が入っているか。 |
| 留守番電話 | 伝言と文字起こし、応答メッセージ、暗証番号、ごみ箱、容量の上限。 |
| ディレクトリ | かけた人がダイヤルで名前を打って到達する電話帳。 |
| 受付 | オペレーター、保留中の通話のリアルタイム表示、メンテナンス時間、コード一覧。 |
| フィルター | 着信拒否リスト、非通知のふるい分け、しつこい発信元の通知、そして誰が到達できるかに関するすべて。 |
| 営業時間 | 営業時間、祝日、昼夜の切り替え。 |
| 音楽 | 保留音と、各フローが再生する音源。 |
| 通話 | すべての通話。番号、通話時間、経路、録音。 |
| 回線 | 同時通話。保証されている数、借りている数、そしてピーク。 |
| 利用状況 | 今月の利用状況を日ごとに。 |
ブラウザの中の電話機実際の通話
タブがそのまま電話機になります。アプリのインストールも、卓上電話の購入も、番号の移行も要りません。ブラウザから登録する、お客さま自身の電話システムの内線です。
- 本物の内線です。 ブラウザは卓上電話と同じように電話システムへ登録し、音声は暗号化された経路を通ります。番号にかけてきた人はタブに到達でき、タブから外へ発信もできます。
- タブは開いておく必要があります。 閉じたタブは電源の抜けた電話機です。それがブラウザ電話の正直な限界であり、卓上機を置き換えるのではなく補う理由でもあります。
- 誰が通話中かがわかります。実際の通話 同僚のランプが空き・呼び出し中・通話中とリアルタイムに変わるので、転送しようとする前に転送先がいるかどうかがわかります。
- 通話中のまま別の端末へ移せます。未実施 「出かけるのに通話中だ」というとき、切らずに携帯へ移せます。キーパッドのコードではなくボタンにしてあるのは意図的です。通話を移す人の前には画面があります。
- 転送・保留・録音は、ほかの電話機と同じコードです。 押すのではなくダイヤルするので、ブラウザ電話で覚えたことが卓上電話でも携帯でもそのまま使えます。
ブラウザの電話機がお客さまのパソコンに録音することはありません。録音は電話システムの中で行われ、そこで誰を録音してよいか、誰に知らせるべきかの規則が適用されます。「録音と法律」をご覧ください。
電話機から押すコード
慣習があるところは慣習どおりに残しています(*72転送、*78応答拒否、*97留守番電話、*8代理応答、*69直前の着信)。キーパッドのコードの意味はそこにあります。機能はすでに管理画面にあり、コードは20年間*72を押してきた人が管理画面を信用できるようにするためのものです。
受話器を置いた状態で押す
| コード | 何をするか | 検証 |
|---|---|---|
*43 | エコー確認。話した内容を録音して返します。「何も届きませんでした」と言うこともできます。 | 未実施 |
*44 | 同じものを遅らせて返します。抜け落ちている語がわかります。 | 未実施 |
*45 | ダイヤル確認。押したキーを読み上げます。 | 未実施 |
*46 | 回線の状態。登録、コーデック、アドレス、遅延。 | 未実施 |
*60 | 時刻と日付を、正しい読み方で。 | テストベンチ |
*62 | 今月の利用(通話数と分数。金額は課金が有効になってから)。 | APIで |
*69 | 最後にかけてきた相手を読み上げます。不在着信も含みます。そのあと1を押せば折り返せます。 | 未実施 |
*72 | 無条件転送。番号を読み上げて確認します。 | APIで |
*73 | すべての転送を解除。 | APIで |
*74 | 並行転送。内線と転送先が同時に鳴ります。 | APIで |
*75 | 話し中のときの転送。 | APIで |
*76 | 応答がないときの転送。 | APIで |
*78 | 応答拒否を設定。音声で確認します。 | APIで |
*79 | 応答拒否を解除。 | APIで |
*80 | 自分のすべての待ち行列で受付を開始。 | APIで |
*81 | 自分のすべての待ち行列で受付を終了。 | APIで |
*90 | 番号を着信拒否(#だけを押すと直前の着信を拒否)。 | 未実施 |
*91 | 拒否を解除。 | 未実施 |
*97 | 留守番電話。暗証番号が必要です。 | テストベンチ |
*98 | 応答メッセージを録音。 | テストベンチ |
*99 | 名前を録音。電話帳と会議室で使います。 | テストベンチ |
*8 | 隣の席で鳴っている電話を代わりに取る。 | APIで |
*66 | モード。通常・昼休み・閉店・祝日・自動。 | APIで |
*411 | 名前でさがす電話帳。 | テストベンチ |
*57 | いま受けた通話について、迷惑電話の記録を作ります。録音は期限切れにならなくなり、時刻・経路・音声が通報用に保管されます。相手を着信拒否にはしません。それを決めるのはお客さまです。 | 未実施 |
*85 | その内線が空いたら知らせてもらいます。 | 未実施 |
*86 | その通知を取り消します。 | 未実施 |
*82 | 自社内の通話を傍らで聞きます。どちらの相手にも聞こえません。 | 未実施 |
*83 | ささやき。同僚にだけ聞こえ、お客さまには聞こえません。 | 未実施 |
*84 | 通話に加わります。双方に聞こえます。 | 未実施 |
*88 | 誰も折り返していない通話を読み上げます。そのあと1を押せば、いちばん古いものに折り返します。 | 未実施 |
*47 | 電話システムが自分で説明します。自分のコードを読み上げ、9で次へ、0で終了。 | 未実施 |
70N | N番に保留した通話を取り出す。 | APIで |
通話中に押す
| コード | 何をするか | 検証 |
|---|---|---|
*1 | この通話をいま録音する。双方に通知します。 | APIで |
*7 | 保留に預ける。相手には保留音が流れ、預けた番号が読み上げられます。 | APIで |
##<ext># | そのまま転送。渡して自分は切ります。 | 実際の通話 |
#<ext># | 種類を選ばずに転送。相手がいるかどうかを電話システムが確かめ、いなければそのまま転送に切り替えます。 | 未実施 |
*2<ext># | 取り次ぎ転送。まず同僚と話します。 | 未実施 |
取り次ぎ転送の相談中に押す
| コード | 何をするか | 検証 |
|---|---|---|
*1 | 転送を完了する。 | 未実施 |
*0 | 取り消して、かけてきた相手に戻る。 | 未実施 |
*3 | 3人を同じ通話にする。 | 未実施 |
会議室の中で押す
| コード | 何をするか | 検証 |
|---|---|---|
*6 | 全員:自分のマイクをミュート/解除。 | APIで |
*7 | 全員:いま何人いるか。 | APIで |
*9 | 全員:退出。 | APIで |
*1 | 主催者:暗証番号を変えずに部屋を閉じる。 | APIで |
*2 | 主催者:もう一度開ける。 | APIで |
*3 | 主催者:録音の開始/停止。 | APIで |
2つの意味を持つコードがありますが、衝突はしません。*1は通常の通話では「いま録音する」、相談中は「転送を完了する」、会議室の中では「部屋を閉じる」です。同じ電話機の別の状態であり、処理するコードも別です。
新しい電話機を信用する前に: 卓上電話機やアダプターは自前のスターコードを自分で処理してしまい、こちらへは送りません。コードを押して無音のあとに発信音が戻ったら、それは電話機が飲み込んだのであって、電話システムには何も届いていません。新しい機種を配る前に、現在の一覧と突き合わせる確認をご依頼ください。
どの電話機からでも使える留守番電話テストベンチ
*97を押して暗証番号を入れれば、留守番電話のすべてがそこにあります。アプリもブラウザも要りません。借りた電話からかける経営者のために書かれた仕組みです。
メインメニュー
| キー | 何をするか |
|---|---|
1 | 新しい伝言。 |
2 | 保存した伝言。 |
4 | 応答メッセージと録音した名前。 |
5 | 暗証番号の変更。 |
0 | オペレーターにつなぐ。 |
9 | 終了。 |
伝言の再生中
| キー | 何をするか |
|---|---|
1 | もう一度。 |
2 | 保存する。 |
3 | 削除する。そのあと5秒以内に8で取り消せます。 |
4 | その相手に折り返す。 |
6 | 次へ。この伝言は新着のまま残します。 |
7 | 自分のひと言を先に録音して、同僚に転送する。 |
応答メッセージのメニュー
| キー | 何をするか |
|---|---|
1 | 通常の応答メッセージを録音。 |
2 | 名前を録音。 |
3 | 休暇用の応答メッセージを設定。 |
4 | 解除する。 |
通話そのものを受ける
鳴らすグループができるのは「複数の場所で鳴らす」ことだけです。この一覧にあるものは、いずれもグループにはできないことをします。
- 待ち行列。APIで 待ち行列は前に何人いるか、ふだんどれくらいかかるかを知っているので、それを伝えられます。待ち時間は自社の直近の通話から実測しており、作り出すことはありません。標本が3件未満なら何も言いません。受付中の人が誰もいなければ、誰も待たせません。
- 待ち行列からの折り返し。APIで しばらく待ったところで提案し、まもなく応答できる見込みなら提案しません。要求は再起動しても残ります。頼んだ人は電話を切るからです。折り返しは列の先頭に入ります。それが約束したことだからです。
- 会議室。APIで 番号と2つの暗証番号を持つ部屋。1つは入室用、もう1つは進行役用です。どこにもアカウントは要りません。入退室は各自が録音した名前で読み上げられます。
- 名前でさがす電話帳。テストベンチ かけた人がキーパッドで名前を打つとつながります。名前は語ごとに別々に索引しています。こちらでは姓が2つあるのが普通で、最初の姓だけで探すと会社の半分が出てきてしまうからです。アクセント記号とñは同一視するので、「Muñoz」は686で見つかります。
- オペレーターへの0。APIで 電話に対するもっとも普遍的な期待は、たぶん「人につながること」です。0はオペレーターから全体の留守番電話へ、さらに音声での案内へと順に降りていきます。黙って切れることはありません。
- 保留と代理応答。APIで 通話を預けると、番号のついた場所で保留音とともに待ちます。その間に別の席まで歩けます。誰でもその番号を押せば取り出せます。隣で鳴っている電話を取るのは
*8です。
経営される方へ
チャネル:保証・貸出・返却APIで
固定の上限では実現できない部分です。プランを選ぶ前に理解しておく価値があります。
- 保証分。 プランが販売する同時通話数です。電話システムが何をしていても必ず通り、誰にも取り上げられません。
- 貸出分。 保証を超えた分は、電話システムに空きがあればそれを使います。ふだんはここに収まり、追加費用はかかりません。
- 予備。 誰にも貸し出さないチャネルの余裕分です。誰もがいつでも自分の保証分に到達できるようにするためにあります。
- 返却。 電話システムが混み合ったとき、貸出分の通話は他社の保証を守るために返却されることがあります。これを有効にしたアカウントだけが対象で、保証の範囲内の通話は対象外、緊急通報も対象外、そして無言では行いません。手放す前に必ず音声で知らせます。
- 二重に売ることはできません。 すべての保証の合計に予備を足したものが、収まらなければなりません。契約時に検査し、収まらないプランは拒否されます。それが「保証」という言葉に意味を与えています。
- いつ効いたかも見えます。 混雑は月間の合計ではなく、時刻つきの出来事として報告します。「30日で12件の拒否」は雑音にしか読めませんが、「先週の火曜、10時から11時のあいだに5人が話中を聞いた」なら手を打てます。
何かが壊れたときに起きること
電話システムの真価が問われるのは停電した日であって、すべてが動いている日ではありません。
- 出口は1つではありません。 電話システムは複数の独立した回線で外の世界とつながり、そのあいだを自分で選びます。お客さまが設定することも、切り替わるのを目にすることもありません。
- 「動いている」を正しい基準で測ります。 回線が候補になるのは、インターネットと電話網の両方に届いているときだけです。前者だけを見るのが、すべてのランプが緑のまま回線が使えなくなる原因です。
- 停電のあとは自分で復旧します。 電気が戻ると、電話システムとネットワーク機器が同時に起動し、順番は毎回同じとは限りません。その順番を信じるかわりに、実際に持っているものとあるべきものを比べ続け、自分で直します。再試行の回数には上限があり、本当の故障は堂々巡りにせず報告に回します。
- 自分を直すために通話を切ることはありません。 会話を中断してしまう修復は、通話が1件もなくなるまで待ちます。
録音と留守番電話の伝言は電話システムの外に保存しているので、機械そのものより長く残ります。
プランと通話料
プランは5種類、年額$100から$300まで。1ライセンスにつき1番号です。コスタリカの番号への着信は1分$0.00です。
| プラン | 同時通話、最大 | うち保証 | 内線 | 保管(日) | 年額 |
|---|---|---|---|---|---|
| VOICE I | 3 | 1 | 3 | 3 | $100 |
| VOICE II | 4 | 2 | 4 | 4 | $150 |
| VOICE III | 6 | 3 | 6 | 6 | $200 |
| VOICE IV | 8 | 4 | 8 | 8 | $250 |
| VOICE V | 10 | 5 | 無制限 | 28 | $300 |
通話料
| あて先 | 1分あたり |
|---|---|
| 着信 | $0.00 |
| コスタリカ · 固定 | $0.03 |
| コスタリカ · 携帯 | $0.08 |
| 中米 | $0.45 |
| カリブ | $0.55 |
| その他の地域 | $2.30 |
米ドル表示、税込みです。携帯あては提携事業者が秒単位で計測します。1ライセンスにつき1番号を含みます。追加した番号は同じ電話システム、同じ通話フロー、同じ管理画面を共有します。
録音と法律APIで
録音された音声は他人の声です。コスタリカ法8968がこれを規律しており、設計は都合の良さではなくそこから導かれています。
- 何を録音するかはお客さまが決めます。APIで すべて、特定の内線だけ、特定の番号への着信だけ。あるいは何も録音しない。それも正しい答えです。
- 保管期間はプランに含まれます。 録音は期限が来ると自動で消えます。唯一の例外は迷惑電話の記録に紐づいた録音で、記録を閉じるまで期限切れになりません。閉じると通常の期限に戻ります。「いますぐ削除」にはなりません。
- 共有はアクセス権の付与ではありません。 署名つきのリンクは1件の録音だけを再生し、自動で期限切れになり、取り消せます。送った相手がお客さまのアカウントを見ることはありません。
- 再生はすべて記録されます。 誰がどの録音をいつ再生したか。他人の声である以上、誰が聞いたかを知っていることは、預かることの一部です。
- 分類できます。 顧客、見込み客、社内。既定値はあえて置いていません。未分類は正直であり、機械が推測したラベルは、あとから人が選んだラベルと区別がつかなくなるからです。
双方に必ず通知します。 電話システムに録音を頼むと、告知の義務も一緒に返ってきます。この2つは切り離せません。切り離すことこそ、知らないまま録音される人が生まれる仕組みだからです。会議室では、入室する人ごとに告知します。
上限・保護・取り消し
悪い一日がどこまで悪くなるかを決めるもの。盗まれた認証情報、経路の設定ミス、鳴りやまない番号です。
- 1日あたり・1か月あたりの利用上限。テストベンチ 盗まれた認証情報が金額になるのを止めるのがこれです。上限に達すると発信は止まります。
- 内線ごとに、どこへかけられるか。APIで 内線のみ、国内、携帯、あるいはすべて。倉庫の電話が有料ダイヤルにかけられる理由はありません。緊急通報がこれに妨げられることはありません。
- かける前の料金。APIで その番号にかけるといくらかを尋ねると、実際に通話をつなぐのと同じ仕組みが計算して答えます。適用されるとは限らない料金表からではありません。
- ふるまいを見る不正検知。未実施 不自然な速さ、かけたことのない国、誰も働いていない時間帯。知らせはしますが、切りません。ここでの誤検知は煩わしい通知ではなく、成立しなかった通話だからです。何かを言うまでに2つの兆候を必要とします。毎日鳴る警報は無視されるようになるからです。
- しつこい発信元には印を付けます。未実施 同じ番号から2分で5回は、しつこいお客さまではなく自動発信装置です。初期状態では知らせるだけです。自動で拒否するかはお客さまが選びます。誤検知は、二度とかけられなくなったお客さまを1人失うことだからです。
- 迷惑電話の記録。未実施 時刻、経路、音声を通報用にまとめて保管します。記録を作っても相手を拒否はしません。新しい着信は証拠が1つ増えることであり、決めるのはお客さまであってこちらではありません。
- 端末がどれだけつながっていたか。APIで こちらの稼働率ではなく、お客さまのものです。そして期間のうち実際に測れた割合を必ず表示します。誰も見ていなかった時間を黙って除いた百分率は、いつも都合のよい側に外れるからです。
- 何が変わり、誰が変え、どう戻すか。APIで 「昨日は動いていた」は答えのある問いです。設定の変更はすべて記録され、元に戻せます。戻すときは、そのあいだに誰かが同じ項目を触っていないかを確かめます。黙って上書きはしません。
停止しているものと、その理由
動くところだけを書いた手引きは、残りをご自分で見つけさせることになり、それはいつも最悪のタイミングで見つかります。この一覧はスイッチそのものから生成しているので、すでに有効になったものを停止中と書くことはできません。
| 何をするか | 理由 |
|---|---|
| 留守番電話のメール転送 | 電話をかけずに音声を添付で受け取る機能です。メールボックス用の認証情報が必要で、それがまだありません。 |
| 分単位の自動課金 | 計測は動作しており、通話は1件ずつ測っています。有効になっていないのは前払い残高からの引き落としです。それまでは請求書でのお支払いです。 |
| 端末用の予備アドレス | 電話機が2つの入口のあいだで自分で切り替えられるようにするものです。ドメインへの書き込み権限を持つ認証情報が必要で、現在あるものは読み取り専用です。 |
| ファクス受信 | トーンを検出して知らせる部分は作ってあり、意図的に停止しています。検出はすべての着信を聞くため、誤検出は本物の音声通話を切ってしまいます。実際のファクスで測れるようになるまで停止のままです。 |
組み込む方へ
APIAPIで
管理画面はこのAPIの利用者の一つにすぎません。手で変えられることはすべてプログラムからも変えられます。鍵はお客さまのアカウントのものです。
curl -H "authorization: Bearer <clave>" \
https://api.voice.forhosting.com/inquilinos/<cuenta>/numeros
権限の範囲
| 権限の範囲 | 何をするか |
|---|---|
sistema | アカウントをまたぐ運用管理用。これがお客さまに発行されることはありません。 |
inquilino | 自社アカウントの読み書き。組み込みに使う鍵です。 |
lectura | 自社アカウントのGETのみ。何も変更させたくないダッシュボード向けです。 |
sesion | アカウント鍵と同じ範囲ですが、数分で期限切れになります。管理画面が使うもので、ブラウザに恒久的な認証情報を置かないためのものです。 |
dispositivo | 1つの内線の1台の端末だけに有効で、数分で期限切れになります。電話アプリが持つ鍵で、電話に必要な操作だけを、その端末の内線についてのみ行えます。 |
うまくいかなかったとき
| コード | 何をするか |
|---|---|
400 | リクエストの形式が誤っているか、受け付けられない値です。どれかはメッセージが伝えます。 |
401 | 鍵がない、知らない鍵、または期限切れのセッションです。 |
403 | 鍵は本物ですが、これはできません。他のアカウントのデータ、運用管理専用の経路、または読み取り専用の鍵での書き込みです。 |
404 | お客さまのアカウントにそれはありません。 |
405 | その経路はありますが、そのメソッドはありません。404と区別しているのは意図的で、1時間の節約になります。 |
503 · 504 | 電話システムに到達できなかったか、時間内に応答しませんでした。「何もありません」とは決して答えません。見に行けないことと、そこに何もないことは違うからです。 |
APIが断るときに返しうるすべてのメッセージ
交換機のソースから読み取った、APIが error フィールドで返す文字列そのものです。スペイン語で返るため、ここでも意図的にそのまま載せています。照合すべきは実際に届く文字列であって、その訳ではありません。… は値が差し込まれる位置を示します。
すべてのエラーに安定したコードが付きます。 メッセージではなく codigo で分岐してください。必ず入っています。固有のコードを宣言しないものには、HTTPステータスから導いたクラスのコードが入ります。error の文章は人が読むためのもので書き換わることがありますが、コードは変わりません。
{ "error": "…", "codigo": "de_otra_cuenta" }
| コード | HTTP | 返る場面 |
|---|---|---|
mala_peticion | 400 | リクエストの形式が不正か、受け付けない値が含まれています。どれかはメッセージが示します。 |
no_autorizado | 401 | 鍵がない、未知の鍵、または期限切れのセッションです。 |
prohibido | 403 | 鍵は有効ですが、この操作は許可されていません。 |
no_existe | 404 | 操作の対象が存在しません。 |
metodo_no_permitido | 405 | パスは存在しますが、そのメソッドは受け付けません。存在しないパスと意図的に区別しています — これで一時間は浮きます。 |
conflicto | 409 | いまのアカウントの状態では実行できません。 |
ambito_insuficiente | その経路にはお客様の鍵は届きません。プロビジョニングはポータルのものです。 | |
canales_por_troncal | 登録時に送られたチャネルの割り当ては受け付けられず、一部も保存されません。何が問題かは詳細に書かれています。これは登録(プロビジョニング)側の話で、お客様のアカウントの問題ではありません。 | |
central_no_disponible | いま交換機に到達できません。間隔を空けて再試行してください。リクエスト自体に問題はありません。 | |
central_sin_respuesta | 交換機が時間内に応答しませんでした。前項と同じ扱いで、同じ注意が要ります — 書き込みは届いたかもしれませんし、届いていないかもしれません。 | |
clase_de_servicio | 内線に設定できる発信権限の値ではありません。 | |
clave_sin_cuenta | その鍵はどのアカウントにも紐づいていません。 | |
de_otra_cuenta | 別のアカウントのもの、またはお客様のアカウントに存在しません。両者を意図的に同じコードにしています — 区別すると存在の有無が漏れるからです。 | |
falta_credencial | 鍵がまったく送られていません。 | |
garantia_no_cabe | 要求された分の保証容量が残っていません。故障ではありません。同じチャネルを二重に販売しないための仕組みです。残りの量はメッセージに書かれています。 | |
no_editable | その項目は提供元が変更します。ここからは変えられません。 | |
no_existe | 操作の対象が存在しません。 | |
protocolo_incorrecto | その経路は WebSocket のみを受け付けます。通常の HTTP で要求されました。 | |
solo_lectura | 読み取り専用の鍵で、この操作は書き込みになります。 | |
ya_existe | その名前または番号のものが既にあります。同じ内容ではなく、別の値で再試行してください。 |
| コード | 件数 | メッセージ |
|---|---|---|
400 | 163 |
|
401 | 1 |
|
403 | 11 |
|
404 | 43 |
|
409 | 25 |
|
交換機のソース 289 か所にある 243 種類のメッセージ。ビルドのたびに導出されます — 向こうで変われば、ここでも変わります。
現在、レート制限はほとんどありません。 唯一あるのは、ブラウザの電話機を開こうとする試行のあいだに置く数秒の待ち時間です。全体的な上限はありません。推測の上に作ってから気づかれるより、先に申し上げます。常識の範囲でお使いください。重い処理をお考えなら、事前にお知らせください。あとからではなく、ご一緒に測ります。
到達できる範囲
| 領域 | エンドポイント | 例 |
|---|---|---|
| 留守番電話 | 13 | GET /buzones POST /buzones DELETE /buzones/:buz |
| 内線 | 13 | GET /extensiones POST /extensiones DELETE /extensiones/:ext |
| 待ち行列 | 12 | GET /colas POST /colas DELETE /colas/:cola |
| 保留音 | 12 | GET /discos POST /discos DELETE /discos/:disco |
| 録音 | 9 | GET /grabaciones PUT /grabaciones/:grabacion/categoria DELETE /grabaciones/:grb |
| 鳴らすグループ | 8 | GET /grupos POST /grupos DELETE /grupos/:grp |
| 音声メニュー | 8 | GET /ivrs POST /ivrs DELETE /ivrs/:ivr |
| 当番の交代 | 8 | GET /turnos POST /turnos DELETE /turnos/:turno |
| 会議室 | 7 | GET /conferencias POST /conferencias DELETE /conferencias/:sala |
| 営業時間 | 7 | GET /horarios POST /horarios DELETE /horarios/:hor |
| Webhook | 7 | GET /webhooks POST /webhooks DELETE /webhooks/:whk |
| プログラム可能なフローの手順 | 6 | GET /pasos POST /pasos DELETE /pasos/:pso |
| 各回線が話す内容 | 5 | GET /guiones POST /guiones DELETE /guiones/:gui |
| 伝言 | 5 | GET /mensajes DELETE /mensajes/:msg GET /mensajes/:msg |
| 着信ルート | 5 | GET /rutas POST /rutas DELETE /rutas/:ruta |
| ダイヤルできる別名 | 4 | GET /alias POST /alias DELETE /alias/:als |
| 予約のリマインド | 4 | GET /citas POST /citas DELETE /citas/:cita |
| 連絡先 | 4 | GET /contactos POST /contactos DELETE /contactos/:con |
| 音声とつながったチャット | 4 | GET /conversaciones GET /conversaciones/:cnv POST /conversaciones/:cnv/cerrar |
| 端末 | 4 | DELETE /dispositivos/:disp POST /dispositivos/:disp/estado POST /dispositivos/:disp/provision |
| 迷惑電話の記録 | 4 | GET /expedientes POST /expedientes GET /expedientes/:exp |
| 録音の規則 | 4 | GET /grabacion/decidir GET /grabacion/reglas PUT /grabacion/reglas |
| 通話履歴 | 4 | GET /llamadas GET /llamadas/:llamada GET /llamadas/csv |
| 番号 | 4 | GET /numeros DELETE /numeros/:numero/aviso-cambio GET /numeros/:numero/aviso-cambio |
| 同時通話 | 3 | GET /canales GET /canales/episodios PUT /canales/modo |
| 祝日 | 3 | GET /feriados POST /feriados DELETE /feriados/:fer |
| 変更履歴と取り消し | 3 | GET /historial GET /historial/:cambio POST /historial/:cambio/revertir |
| 着信拒否リスト | 3 | GET /lista-negra POST /lista-negra DELETE /lista-negra/:neg |
| メンテナンス時間 | 3 | GET /mantenimientos POST /mantenimientos POST /mantenimientos/:mnt/cerrar |
| アカウントと状態 | 2 | GET / PATCH / |
| 電話帳 | 2 | GET /directorio GET /directorio/buscar |
| 共有リンク | 2 | GET /enlaces DELETE /enlaces/:token |
| その他 | 1 | GET /guiones/claves |
| 保留中の通話 | 1 | GET /aparcadas |
| 誰が、何の用件でかけているか | 1 | GET /contexto |
| 通話にかかる料金 | 1 | GET /cotizar-llamada |
| 通話を送れる先 | 1 | GET /destinos |
| 端末のつながりやすさ | 1 | GET /disponibilidad |
| 利用明細 | 1 | GET /estado-cuenta |
| ライブチャネル | 1 | POST /eventos/ticket |
| 通話中の呼 | 1 | GET /llamadas-en-curso |
| クリックで発信 | 1 | POST /llamar |
| オペレーター | 1 | PUT /operadora |
| この会社がかける国 | 1 | GET /paises |
| 開始テンプレート | 1 | POST /plantilla |
| 発信できる範囲 | 1 | GET /politica-salida |
| 電話システムから電話をかけて音声を流す | 1 | POST /probar-audio |
| 着信の行き先を試す | 1 | GET /probar-entrada |
| 発信せずに発信を試す | 1 | GET /probar-salida |
| 残高 | 1 | GET /saldo |
| 誰も折り返していない通話 | 1 | GET /sin-devolver |
| 外部の2番号をつなぐ | 1 | POST /unir |
| 優先する発信者 | 1 | GET /vips |
| ブラウザの中の電話機 | 1 | POST /webphone/sesion |
合計269件のエンドポイント。2026-09-04に電話システム自身から読み取りました。
この表は要約です。古くならない一覧は、電話システムが自分自身について生成するものです: GET /api.
エンドポイント一覧
交換機のルーター自身から読み取っているため、存在しない経路を載せることも、存在する経路を落とすこともありません。ここに載るのはお客様のアカウントの範囲だけです。プロビジョニングの経路はポータルのものであり、そこへ届く鍵はお渡ししません。
| 何をするか | できること | 例 |
|---|---|---|
GET /guiones/claves | Qué frases admite un guion | |
GET / | APIで | |
PATCH / | Editar la ficha (el cliente, sus datos; plan y límites, el portal)APIで | |
GET /alias | APIで | |
POST /alias | APIで | |
DELETE /alias/:als | APIで | |
PATCH /alias/:als | APIで | |
GET /aparcadas | Las llamadas aparcadas ahora mismo (#60)APIで | 見る |
GET /buzones | 実際の通話 | |
POST /buzones | 実際の通話 | |
DELETE /buzones/:buz | 実際の通話 | |
GET /buzones/:buz | 実際の通話 | |
PATCH /buzones/:buz | Saludo, correo, transcripción, duración máximaAPIで | |
GET /buzones/:buz/mensajes | APIで | |
PUT /buzones/:buzon/clave | Poner o quitar la clave del buzón (#10)テストベンチ | |
GET /buzones/:buzon/ocupacion | Cuántos mensajes hay y cuántos caben (#14)テストベンチ | |
GET /buzones/:buzon/papelera | Lo borrado que todavía se puede recuperar (#15)テストベンチ | |
POST /buzones/:buzon/papelera/:mensaje/recuperar | Deshacer un borrado (#15)テストベンチ | |
GET /buzones/:buzon/saludos | Los saludos del buzón, por motivoテストベンチ | |
POST /buzones/:buzon/saludos | Poner el saludo de un motivo (normal, ocupado, vacaciones…)テストベンチ | |
DELETE /buzones/:buzon/saludos/:saludo | テストベンチ | |
GET /canales | APIで | |
GET /canales/episodios | APIで | |
PUT /canales/modo | APIで | |
GET /citas | APIで | |
POST /citas | Programar un recordatorio de cita por teléfonoAPIで | 見る |
DELETE /citas/:cita | APIで | 見る |
GET /citas/:cita | APIで | 見る |
GET /colas | APIで | 見る |
POST /colas | Crear una cola de espera con agentesAPIで | 見る |
DELETE /colas/:cola | APIで | |
GET /colas/:cola | APIで | 見る |
PUT /colas/:cola | APIで | 見る |
GET /colas/:cola/callbacks | Las devoluciones de llamada pedidasAPIで | 見る |
GET /colas/:cola/estado | Cuánta gente espera, quién está de turno y cuánto se tardaAPIで | |
GET /colas/:cola/habilidades | Qué habilidades existen hoy en esta cola | |
POST /colas/:cola/miembros | Añadir un agente (extensión o número de fuera)APIで | |
DELETE /colas/:cola/miembros/:miembro | APIで | |
PUT /colas/:cola/miembros/:miembro/habilidades | Las etiquetas de un agente (#70) | |
POST /colas/turno | Entrar o salir de turno (lo mismo que *80 / *81)APIで | |
GET /conferencias | APIで | |
POST /conferencias | Crear una sala con número y claveAPIで | 見る |
DELETE /conferencias/:sala | APIで | |
GET /conferencias/:sala | APIで | 見る |
PUT /conferencias/:sala | Cambiar la sala (las claves se cambian, no se leen)APIで | |
GET /conferencias/:sala/historial | Quién estuvo y cuántoAPIで | |
POST /conferencias/:sala/invitar | Llamar a alguien y meterlo en la salaAPIで | |
GET /contactos | APIで | |
POST /contactos | Alta o importación masivaAPIで | |
DELETE /contactos/:con | APIで | |
PUT /contactos/:contacto/vip | Marcar o quitar el VIP de un contacto | |
GET /contexto | Quién llama y de qué habló la última vezAPIで | |
GET /conversaciones | テストベンチ | |
GET /conversaciones/:cnv | テストベンチ | |
POST /conversaciones/:cnv/cerrar | テストベンチ | |
POST /conversaciones/:cnv/turnos | テストベンチ | |
GET /cotizar-llamada | Cuánto costaría llamar a ese número, antes de marcarloAPIで | |
GET /destinos | Qué destinos se pueden elegir en esta cuenta実際の通話 | |
GET /directorio | Quién sale en el directorio por nombreテストベンチ | |
GET /directorio/buscar | A quién encontraría el directorio con esas teclasテストベンチ | |
GET /discos | APIで | |
POST /discos | APIで | |
DELETE /discos/:disco | APIで | |
GET /discos/:disco | APIで | |
PATCH /discos/:disco | APIで | |
GET /discos/:disco/estadisticas | APIで | |
GET /discos/:disco/frases | APIで | |
PUT /discos/:disco/frases | APIで | |
DELETE /discos/:disco/frases/:frase | APIで | |
PUT /discos/:disco/pistas | APIで | |
DELETE /discos/:disco/pistas/:pista | APIで | |
GET /discos/:disco/probar | APIで | |
GET /disponibilidad | Cuánto tiempo estuvo arriba cada extensiónAPIで | |
DELETE /dispositivos/:disp | Revocar una credencial実機の電話 | |
POST /dispositivos/:disp/estado | Suspender o reactivar un dispositivo実機の電話 | |
POST /dispositivos/:disp/provision | Emitir un token para configurar la app sin teclear la claveAPIで | |
POST /dispositivos/:disp/rotar | Cambiar la clave de un dispositivo実機の電話 | |
GET /enlaces | テストベンチ | |
DELETE /enlaces/:token | Revocar un enlace compartido por errorテストベンチ | |
GET /estado-cuenta | APIで | |
POST /eventos/ticket | Ticket para mirar el canal de eventos en vivo (sin teléfono)APIで | 見る |
GET /expedientes | Los expedientes abiertos (#64) | |
POST /expedientes | Abrir expediente sobre una llamada | |
GET /expedientes/:exp | Un expediente, con su llamada y su grabación | |
POST /expedientes/:exp/cerrar | Cerrar un expediente (la fila NUNCA se borra) | |
GET /extensiones | APIで | |
POST /extensiones | Alta de extensión (crea buzón y credencial)APIで | |
DELETE /extensiones/:ext | APIで | |
GET /extensiones/:ext | APIで | |
PATCH /extensiones/:ext | APIで | |
POST /extensiones/:ext/dispositivos | Añadir un dispositivo (celular, computadora…)APIで | |
POST /extensiones/:ext/no-molestar | APIで | |
GET /extensiones/:ext/reglas | 実際の通話 | |
PUT /extensiones/:ext/reglas | Sígueme, desvío, no molestar y destino de falloAPIで | |
GET /extensiones/:extension/camp | Los avisos de desocupado que pidió esta extensión (#58) | |
DELETE /extensiones/:extension/camp/:objetivo | Cancelar un aviso de desocupado | |
POST /extensiones/:extension/mover | Mover la llamada en curso a otro aparato de la misma extensión (#57) | |
GET /extensiones/siguiente-libre | APIで | |
GET /feriados | APIで | |
POST /feriados | Feriado propio o excepción a uno nacionalAPIで | |
DELETE /feriados/:fer | APIで | |
GET /grabacion/decidir | ¿Se grabaría esta llamada? Y con qué avisoAPIで | |
GET /grabacion/reglas | APIで | |
PUT /grabacion/reglas | Qué se graba y cuánto se guardaAPIで | |
DELETE /grabacion/reglas/:regla | APIで | |
GET /grabaciones | テストベンチ | |
PUT /grabaciones/:grabacion/categoria | cliente | prospecto | interno, o nada (#68) | |
DELETE /grabaciones/:grb | テストベンチ | |
GET /grabaciones/:grb | Ficha: transcripción, resumen, acuerdos y hablantes未実施 | |
GET /grabaciones/:grb/accesos | Quién ha escuchado esta grabaciónテストベンチ | |
POST /grabaciones/:grb/analizar | Volver a transcribir y resumir未実施 | |
GET /grabaciones/:grb/audio | El audio (queda auditado)テストベンチ | |
POST /grabaciones/:grb/enlace | Enlace firmado para compartir sin dar acceso a la cuentaテストベンチ | |
GET /grabaciones/buscar | Buscar por lo que se dijo dentro de las llamadasテストベンチ | |
GET /grupos | APIで | |
POST /grupos | APIで | |
DELETE /grupos/:grp | APIで | |
GET /grupos/:grp | APIで | |
PUT /grupos/:grp | APIで | |
POST /grupos/:grp/miembros | APIで | |
DELETE /grupos/:grp/miembros/:miembro | APIで | |
GET /grupos/:grp/orden | En qué orden sonaría ahora mismoAPIで | |
GET /guiones | 実際の通話 | |
POST /guiones | Los textos que dice una línea実際の通話 | |
DELETE /guiones/:gui | 実際の通話 | |
GET /guiones/:gui | 実際の通話 | |
PATCH /guiones/:gui | Cambiar textos, nombre o voz declarada実際の通話 | |
GET /historial | Qué cambió en esta cuenta, quién y cuándoAPIで | 見る |
GET /historial/:cambio | APIで | 見る |
POST /historial/:cambio/revertir | Deshacer un cambio de configuraciónAPIで | 見る |
GET /horarios | APIで | |
POST /horarios | APIで | |
DELETE /horarios/:hor | APIで | |
GET /horarios/:hor | APIで | |
PUT /horarios/:hor | APIで | |
GET /horarios/:hor/estado | ¿Abierto ahora? Y por quéAPIで | |
POST /horarios/:hor/manual | Forzar abierto o cerrado, con vuelta automáticaAPIで | |
GET /ivrs | 実際の通話 | |
POST /ivrs | Crear un menú (detecta bucles al guardar)実際の通話 | |
DELETE /ivrs/:ivr | 実際の通話 | |
GET /ivrs/:ivr | 実際の通話 | |
PUT /ivrs/:ivr | 実際の通話 | |
GET /ivrs/:ivr/guion | El texto exacto que se va a decirAPIで | |
DELETE /ivrs/:ivr/opciones/:tecla | 実際の通話 | |
PUT /ivrs/:ivr/opciones/:tecla | 実際の通話 | |
GET /lista-negra | APIで | |
POST /lista-negra | Bloquear un número entranteAPIで | |
DELETE /lista-negra/:neg | APIで | |
GET /llamadas | 実際の通話 | |
GET /llamadas-en-curso | Las llamadas del inquilino ahora mismo (vista de operadora)APIで | 見る |
GET /llamadas/:llamada | 実際の通話 | |
GET /llamadas/csv | Exportar el CDR実際の通話 | |
GET /llamadas/resumen | Totales, atención y reparto実際の通話 | |
POST /llamar | Timbrar a la extensión y conectarla con un destino実際の通話 | |
GET /mantenimientos | APIで | 見る |
POST /mantenimientos | Avisar a quien llame de que hay un mantenimiento en cursoAPIで | 見る |
POST /mantenimientos/:mnt/cerrar | APIで | 見る |
GET /mensajes | Bandeja de toda la cuentaAPIで | |
DELETE /mensajes/:msg | APIで | |
GET /mensajes/:msg | APIで | |
GET /mensajes/:msg/audio | APIで | |
POST /mensajes/:msg/leido | APIで | |
GET /numeros | APIで | |
DELETE /numeros/:numero/aviso-cambio | Apagar el aviso de cambio y devolver la línea a su destino未実施 | |
GET /numeros/:numero/aviso-cambio | Estado del aviso de cambio de número未実施 | |
POST /numeros/:numero/aviso-cambio | Anunciar que este número cambió y decir el nuevo未実施 | |
PUT /operadora | A dónde va el cero (#109)APIで | 見る |
GET /paises | La memoria del cortafuegos de fraude: a dónde llama esta casa (#65) | |
GET /pasos | Pasos de flujo del cliente | |
POST /pasos | Alta de un paso de flujo | |
DELETE /pasos/:pso | ||
GET /pasos/:pso | ||
PUT /pasos/:pso | ||
POST /pasos/:pso/rotar-secreto | Rotar el secreto con el que se firma la consulta | |
POST /plantilla | Aplicar una plantilla de arranque (horario + ruta + buzón)APIで | |
GET /politica-salida | APIで | |
POST /probar-audio | Llamarte y reproducirte una cadena de audio — la prueba de verdad実際の通話 | |
GET /probar-entrada | A dónde iría una llamada ahora mismo実際の通話 | |
GET /probar-salida | Simular una salida sin cursarla実際の通話 | |
GET /rutas | 実際の通話 | |
POST /rutas | Qué hace una llamada que entra por un número実際の通話 | |
DELETE /rutas/:ruta | 実際の通話 | |
GET /rutas/:ruta | 実際の通話 | |
PATCH /rutas/:ruta | 実際の通話 | |
GET /saldo | テストベンチ | |
GET /sin-devolver | Las perdidas que nadie ha devuelto, agrupadas por número (#67) | |
GET /turnos | Las rotas de guardia (#66) | |
POST /turnos | Crear una rota de guardia | |
DELETE /turnos/:turno | Borrar una rota (falla si una ruta apunta a ella) | |
GET /turnos/:turno | Una rota, con quién está de guardia AHORA | |
PUT /turnos/:turno | Cambiar una rota | |
POST /turnos/:turno/miembros | Meter a alguien en la rota, con su franja | |
DELETE /turnos/:turno/miembros/:miembro | Sacar a alguien de la rota | |
PUT /turnos/:turno/miembros/:miembro | Cambiar la franja de alguien | |
POST /unir | Llamar a dos números externos y unirlos実際の通話 | |
GET /vips | Quién se salta la fila de la cola (#61) | |
GET /webhooks | APIで | |
POST /webhooks | APIで | |
DELETE /webhooks/:whk | APIで | |
PATCH /webhooks/:whk | APIで | |
GET /webhooks/:whk/entregas | APIで | |
POST /webhooks/:whk/probar | Mandar un evento de pruebaAPIで | |
POST /webhooks/:whk/rotar | APIで | |
POST /webphone/sesion | Registrar el navegador como teléfono de una extensiónAPIで |
記録された実例
手で書いたものではありません。使い捨てアカウントでこのAPIに対して実際に実行し、その通信を記録したものです(アカウントは実行後に削除しました)。リクエスト・ステータス・レスポンスを、流れたとおりに掲載しています。アカウントとオブジェクトの識別子だけを記号に置き換え、ほかは手を加えていません。書かれた例は書き手の思い込みを示しますが、記録された例は交換機が実際に行ったことを示します。
204 経路のうち 20 経路に、2026-09-04 の実行で記録した実例があります。残りは上の表に載っていますが、この方法ではまだ動かしていません — すべて揃っているとご想像いただくより、数をお見せするほうがよいと考えます。
GET /inquilinos/:inquilino/aparcadas 200
レスポンス
{
"plazas": []
}
DELETE /inquilinos/:inquilino/citas/:id 200
レスポンス
{
"id": "<id>",
"inquilino": "<cuenta>",
"numero": "50688889999",
"nombre": null,
"cuando": "2026-09-04T21:11:53.507Z",
"avisar_el": "2026-09-03T21:11:53.507Z",
"guion": null,
"estado": "cancelada",
"intentos": 0,
"ultimo_intento": null,
"respondido_el": null,
"nota": null,
"creado": "2026-09-04T20:11:54.131Z",
"actualizado": "2026-09-04T20:11:54.445Z"
}
GET /inquilinos/:inquilino/citas/:id 200
レスポンス
{
"id": "<id>",
"inquilino": "<cuenta>",
"numero": "50688889999",
"nombre": null,
"cuando": "2026-09-04T21:11:53.507Z",
"avisar_el": "2026-09-03T21:11:53.507Z",
"guion": null,
"estado": "pendiente",
"intentos": 0,
"ultimo_intento": null,
"respondido_el": null,
"nota": null,
"creado": "2026-09-04T20:11:54.131Z",
"actualizado": "2026-09-04T20:11:54.131Z"
}
POST /inquilinos/:inquilino/citas 201
リクエスト
{
"numero": "50688889999",
"cuando": "2026-09-04T21:11:53.507Z",
"texto": "ensayo"
}
レスポンス
{
"id": "<id>",
"inquilino": "<cuenta>",
"numero": "50688889999",
"nombre": null,
"cuando": "2026-09-04T21:11:53.507Z",
"avisar_el": "2026-09-03T21:11:53.507Z",
"guion": null,
"estado": "pendiente",
"intentos": 0,
"ultimo_intento": null,
"respondido_el": null,
"nota": null,
"creado": "2026-09-04T20:11:54.131Z",
"actualizado": "2026-09-04T20:11:54.131Z"
}
GET /inquilinos/:inquilino/colas/:id/callbacks 200
レスポンス
[]
GET /inquilinos/:inquilino/colas/:id 200
レスポンス
{
"id": "<id>",
"inquilino": "<cuenta>",
"nombre": "Soporte",
"numero": null,
"estrategia": "todos",
"timbrado_s": 20,
"espera_max_s": 600,
"decir_posicion": 1,
"decir_espera": 1,
"anuncio_cada_s": 30,
"musica": "default",
"callback": 1,
"callback_min_espera_s": 45,
"agotada_tipo": "buzon",
"agotada_id": null,
"vacia_tipo": null,
"vacia_id": null,
"creado": "2026-09-04T20:11:52.214Z",
"actualizado": "2026-09-04T20:11:52.214Z",
"miembros": [],
"estado": {
"de_turno": 0,
"miembros": 0,
"espera_estimada_s": null,
"callbacks_pendientes": 0,
"atendidas_hoy": 0,
"abandonos_hoy": 0
}
}
PUT /inquilinos/:inquilino/colas/:id 200
リクエスト
{
"nombre": "Ya editada"
}
レスポンス
{
"id": "<id>",
"inquilino": "<cuenta>",
"nombre": "Ya editada",
"numero": null,
"estrategia": "todos",
"timbrado_s": 20,
"espera_max_s": 600,
"decir_posicion": 1,
"decir_espera": 1,
"anuncio_cada_s": 30,
"musica": "default",
"callback": 1,
"callback_min_espera_s": 45,
"agotada_tipo": "buzon",
"agotada_id": null,
"vacia_tipo": null,
"vacia_id": null,
"creado": "2026-09-04T20:11:54.606Z",
"actualizado": "2026-09-04T20:11:54.771Z",
"miembros": [],
"estado": {
"de_turno": 0,
"miembros": 0,
"espera_estimada_s": null,
"callbacks_pendientes": 0,
"atendidas_hoy": 0,
"abandonos_hoy": 0
}
}
GET /inquilinos/:inquilino/colas 200
レスポンス
[
{
"id": "<id>",
"inquilino": "<cuenta>",
"nombre": "Soporte",
"numero": null,
"estrategia": "todos",
"timbrado_s": 20,
"espera_max_s": 600,
"decir_posicion": 1,
"decir_espera": 1,
"anuncio_cada_s": 30,
"musica": "default",
"callback": 1,
"callback_min_espera_s": 45,
"agotada_tipo": "buzon",
"agotada_id": null,
"vacia_tipo": null,
"vacia_id": null,
"creado": "2026-09-04T20:11:52.214Z",
"actualizado": "2026-09-04T20:11:52.214Z"
}
]
POST /inquilinos/:inquilino/colas 201
リクエスト
{
"nombre": "Soporte",
"estrategia": "todos"
}
レスポンス
{
"id": "<id>",
"inquilino": "<cuenta>",
"nombre": "Soporte",
"numero": null,
"estrategia": "todos",
"timbrado_s": 20,
"espera_max_s": 600,
"decir_posicion": 1,
"decir_espera": 1,
"anuncio_cada_s": 30,
"musica": "default",
"callback": 1,
"callback_min_espera_s": 45,
"agotada_tipo": "buzon",
"agotada_id": null,
"vacia_tipo": null,
"vacia_id": null,
"creado": "2026-09-04T20:11:52.214Z",
"actualizado": "2026-09-04T20:11:52.214Z",
"miembros": [],
"estado": {
"de_turno": 0,
"miembros": 0,
"espera_estimada_s": null,
"callbacks_pendientes": 0,
"atendidas_hoy": 0,
"abandonos_hoy": 0
}
}
GET /inquilinos/:inquilino/conferencias/:id 200
レスポンス
{
"id": "<id>",
"inquilino": "<cuenta>",
"nombre": "Sala 1",
"numero": null,
"max_personas": 10,
"esperar_organizador": 0,
"anunciar_entradas": 1,
"pedir_nombre": 1,
"bloqueada": 0,
"grabar": 0,
"musica": "default",
"activa": 1,
"creado": "2026-09-04T20:11:52.847Z",
"actualizado": "2026-09-04T20:11:52.847Z",
"tiene_pin": false,
"tiene_pin_organizador": false,
"dentro": 0,
"grabando": false
}
POST /inquilinos/:inquilino/conferencias 201
リクエスト
{
"nombre": "Sala 1",
"clave": "4321"
}
レスポンス
{
"id": "<id>",
"inquilino": "<cuenta>",
"nombre": "Sala 1",
"numero": null,
"max_personas": 10,
"esperar_organizador": 0,
"anunciar_entradas": 1,
"pedir_nombre": 1,
"bloqueada": 0,
"grabar": 0,
"musica": "default",
"activa": 1,
"creado": "2026-09-04T20:11:52.847Z",
"actualizado": "2026-09-04T20:11:52.847Z",
"tiene_pin": false,
"tiene_pin_organizador": false
}
POST /inquilinos/:inquilino/eventos/ticket 201
リクエスト
{}
レスポンス
{
"ticket": "eyJ1IjoicGFuZWwiLCJpIjoiaW5xX3JhN3J0YnYycXA0YyIsInAiOiJldmVudG9zIiwiZXhwIjoxNzg4NTgxNTE1NTcxfQ.bLihoh7EfWP7ZcVGQcPEhfGcHYAn1Y8DmwK4f552uIQ",
"eventos": [
"wss://<puerta>:<puerto>/eventos"
],
"inquilino": "<cuenta>"
}
POST /inquilinos/:inquilino/historial/:id/revertir 201
リクエスト
{}
レスポンス
{
"revertido": "<id>",
"tabla": "colas",
"fila_id": "<id>",
"columnas": [
"nombre"
],
"fila": {
"id": "<id>",
"inquilino": "<cuenta>",
"nombre": "Para editar",
"numero": null,
"estrategia": "todos",
"timbrado_s": 20,
"espera_max_s": 600,
"decir_posicion": 1,
"decir_espera": 1,
"anuncio_cada_s": 30,
"musica": "default",
"callback": 1,
"callback_min_espera_s": 45,
"agotada_tipo": "buzon",
"agotada_id": null,
"vacia_tipo": null,
"vacia_id": null,
"creado": "2026-09-04T20:11:54.606Z",
"actualizado": "2026-09-04T20:11:55.256Z"
}
}
GET /inquilinos/:inquilino/historial/:id 200
レスポンス
{
"id": "<id>",
"inquilino": "<cuenta>",
"tabla": "colas",
"fila_id": "<id>",
"columna_clave": "id",
"antes": {
"id": "<id>",
"inquilino": "<cuenta>",
"nombre": "Para editar",
"numero": null,
"estrategia": "todos",
"timbrado_s": 20,
"espera_max_s": 600,
"decir_posicion": 1,
"decir_espera": 1,
"anuncio_cada_s": 30,
"musica": "default",
"callback": 1,
"callback_min_espera_s": 45,
"agotada_tipo": "buzon",
"agotada_id": null,
"vacia_tipo": null,
"vacia_id": null,
"creado": "2026-09-04T20:11:54.606Z",
"actualizado": "2026-09-04T20:11:54.606Z"
},
"despues": {
"id": "<id>",
"inquilino": "<cuenta>",
"nombre": "Ya editada",
"numero": null,
"estrategia": "todos",
"timbrado_s": 20,
"espera_max_s": 600,
"decir_posicion": 1,
"decir_espera": 1,
"anuncio_cada_s": 30,
"musica": "default",
"callback": 1,
"callback_min_espera_s": 45,
"agotada_tipo": "buzon",
"agotada_id": null,
"vacia_tipo": null,
"vacia_id": null,
"creado": "2026-09-04T20:11:54.606Z",
"actualizado": "2026-09-04T20:11:54.771Z"
},
"actor": "apikey:<id> primera clave de sistema (sistema)",
"origen": "api",
"revertido_de": null,
"creado": "2026-09-04T20:11:54.777Z",
"cambios": {
"nombre": {
"antes": "Para editar",
"despues": "Ya editada"
}
}
}
GET /inquilinos/:inquilino/historial 200
レスポンス
{
"inquilino": "<cuenta>",
"cambios": [
{
"id": "<id>",
"tabla": "colas",
"fila_id": "<id>",
"actor": "apikey:<id> primera clave de sistema (sistema)",
"origen": "api",
"revertido_de": null,
"creado": "2026-09-04T20:11:54.777Z",
"cambios": {
"nombre": {
"antes": "Para editar",
"despues": "Ya editada"
}
}
}
]
}
GET /inquilinos/:inquilino/llamadas-en-curso 200
レスポンス
{
"activas": []
}
POST /inquilinos/:inquilino/mantenimientos/:id/cerrar 201
リクエスト
{}
レスポンス
{
"id": "<id>",
"inquilino": "<cuenta>",
"motivo": "ensayo",
"desde": "2026-09-04T20:11:53.637Z",
"hasta": "2026-09-04T20:11:53.969Z",
"avisar": 1,
"activo": 0,
"creado": "2026-09-04T20:11:53.637Z"
}
GET /inquilinos/:inquilino/mantenimientos 200
レスポンス
[
{
"id": "<id>",
"inquilino": "<cuenta>",
"motivo": "ensayo",
"desde": "2026-09-04T20:11:53.637Z",
"hasta": null,
"avisar": 1,
"activo": 1,
"creado": "2026-09-04T20:11:53.637Z"
}
]
POST /inquilinos/:inquilino/mantenimientos 201
リクエスト
{
"motivo": "ensayo",
"minutos": 5
}
レスポンス
{
"id": "<id>",
"inquilino": "<cuenta>",
"motivo": "ensayo",
"desde": "2026-09-04T20:11:53.637Z",
"hasta": null,
"avisar": 1,
"activo": 1,
"creado": "2026-09-04T20:11:53.637Z"
}
PUT /inquilinos/:inquilino/operadora 200
リクエスト
{
"destino": "buzon"
}
レスポンス
{
"operadora": null
}
DELETE /inquilinos/:inquilino 200
レスポンス
{
"borrado": "<cuenta>"
}
POST /inquilinos 201
リクエスト
{
"nombre": "Ejercicio API 2026-09-04T20:11:51"
}
レスポンス
{
"id": "<cuenta>",
"nombre": "Ejercicio API 2026-09-04T20:11:51",
"cuenta_portal": null,
"cedula": null,
"correo": null,
"telefono": null,
"plan": "zero",
"zona": "America/Costa_Rica",
"idioma": "es",
"estado": "activo",
"canales_max": 4,
"notas": null,
"creado": "2026-09-04T20:11:51.932Z",
"actualizado": "2026-09-04T20:11:51.932Z",
"canales_garantizados": 2,
"modo_presion": "firme",
"presion_canales": 1,
"duracion_max_s": null,
"operadora_tipo": null,
"operadora_id": null,
"filtro_anonimas": 0,
"cdr_retencion_dias": null,
"codigo_asunto_digitos": 0,
"supervision_activa": 0,
"limites": {
"canales": 2,
"canales_max": 4,
"extensiones": 3,
"retencion": 30,
"tope_diario": 3,
"tope_mensual": 25
},
"canales": {
"existe": true,
"garantizados": 2,
"max": 4,
"modo": "firme",
"presion_canales": 1
}
}
セッション:ブラウザは恒久的な鍵を持ちません
上限60分の短命な認証情報で、恒久的な鍵を作ることはできません。ボタンを作る側にとっては、これが契約のすべてです。
- 発行できるのはポータルだけです。 セッションの発行には運用管理用の鍵が必要です。リクエストの背後にログイン済みのお客さまがいると言えるのはポータルだけだからです。VOICEはお客さまのパスワードを知りませんし、知る必要もありません。
- 期限なしで生まれることはありません。 期間の指定がなければ、こちらで付けます。期限切れになるために存在する権限が永遠に生まれうるなら、持たないほうがましです。人はそれを信用してしまうからです。
- 長く要求しても通りません。 上限は固定です。呼び出し側が8時間と頼んでも、認証情報が安全になるわけではありません。
- 自分を昇格させることはできません。 鍵の管理はすべて運用管理の権限の内側にあるので、セッションが恒久的な鍵を作ることはできません。これはハンドラーが動く前、ルーターの段階で適用されます。
- 早めに終わらせられます。 発行時に識別子が返るのは、まさに期限前に取り消せるようにするためです。
WebhookAPIで
数秒おきに問い合わせるのではなく、起きたことをお客さまのシステムにお知らせします。28種類のイベント、署名つき、再試行あり、黙って落とすことはありません。
x-pbx-evento: llamada.entrante
x-pbx-marca: 1755300000
x-pbx-firma: <hex>
{ "evento": "llamada.entrante", "inquilino": "…", "cuando": "…", "datos": { … } }
配信にはすべて署名が付きます。署名はタイムスタンプと受け取った本文そのものを対象にしているので、再度シリアライズしたものではなく生のバイト列に対して検証してください。秘密鍵は購読を作るときに一度だけ表示され、配信を止めずに入れ替えられます。
失敗した配信は10 · 30 · 60 · 300 · 900 · 3600秒後に再試行し、1回の試行に10秒を与えます。失敗が続く購読は20回連続で一時停止します。黙って捨てることはありません。すべての試行は確認できます。
イベント一覧
| イベント | 発生するとき |
|---|---|
llamada.entrante | 着信が入ります。番号、経路、向かう先つき。 |
llamada.contestada | 誰かが応答しました。 |
llamada.terminada | 終了しました。通話時間と終わり方つき。 |
llamada.perdida | 鳴りましたが、誰も出ませんでした。 |
buzon.mensaje | 伝言が残されました。文字起こしつき。 |
grabacion.lista | 録音の処理が終わり、ダウンロードできます。 |
grabacion.analizada | 文字起こし、話者、要約が揃いました。 |
saldo.bajo | 残高が少なくなっています。 |
tope.alcanzado | 利用上限に達し、発信が止まりました。 |
registro.anomalo | 端末の登録に不審な点があります。たとえば同じ場所からの複数の認証情報。 |
canales.al_limite | 同時通話の上限に近づいています。 |
cita.confirmada | 予約がキーパッドで確認されました。 |
cita.reagendar | 別の日時を希望されました。人が対応する依頼であり、電話システムが自分で解決するものではありません。 |
cita.cancelada | 予約が取り消されました。 |
desvio.activado | 転送が有効になりました。 |
desvio.recordatorio | 転送がまだ有効のままです。切り忘れた転送は、電話システムでもっともよくある幽霊障害です。 |
buzon.lleno | 留守番電話がいっぱいです。これ以降の伝言は失われます。 |
buzon.casi_lleno | 留守番電話が満杯に近づいています。まだ手を打てるうちに。 |
cola.vacia | 待ち行列に受付中の人がいません。 |
cola.callback | 待たずに折り返しを希望した人がいます。 |
conferencia.entra | 会議室に入室がありました。 |
conferencia.sale | 会議室から退出がありました。 |
canales.desalojo | 誰かの保証を守るため、借りていた回線を返しました。 |
emergencia.marcada | 内線から緊急番号がダイヤルされました。これによって通話が遅れることはありません。 |
fax.entrante | 着信でファクスのトーンを検出しました。 |
supervision.iniciada | 誰かが通話を傍らで聞くか、ささやくか、参加しました。「この通話を誰がいつ聞いたか」に答えられることが、監督の道具と盗聴を分けます。 |
fraude.sospecha | 不正に見えるふるまいの型です。知らせはしますが、切りません。 |
filtro.insistencia | ある番号の発信回数が多すぎます。 |
ライブチャネル実際の通話
Webhookはまとめて送られ、数秒で届きます。ただし、いま画面に出ていなければ意味のないものもあります。同僚が通話中だと示すランプが15秒遅れては役に立ちません。
- 何が流れるか。 起きたままの通話、新しい伝言、そして各内線のランプの状態。画面上の在席ランプが本当に生きているのはこれのおかげです。
- 読み取り専用です。APIで 電話機を渡さずにチャネルの利用券を発行できます。何が起きているかを見るために、変更もできてしまう認証情報が必要であってはなりません。
- Webhookの代わりにはなりません。 ライブチャネルは誰かが見ている画面のためのものです。お客さまのシステムが確実に知る必要があるならWebhookを使ってください。再試行があり、ソケットが開いていることに依存しません。
リファレンス
バッジの読み方
このページの機能にはすべて、どのように確認したかを示すバッジが付いています。まだ実行していないものも、そう明記したうえで掲載します。お客さまがご自分で気づくほうが悪いからです。
| バッジ | 何をするか | 件数 |
|---|---|---|
| 実際の通話 | 実際に通話を行い、ここに書いてあるとおりに動きました。 | 13 |
| テスト通話 | 稼働中の電話システムに対する本物の通話で、キーも実際に押しています。ただし音声はなく、聞いている人もいません。かけた人が話すことに依存するものは、まだ試していません。 | 3 |
| 実機の電話 | 実機の電話が登録して確認しました。 | 1 |
| APIで | 公開APIで実行しました。 | 46 |
| テストベンチ | テストベンチで、使い捨てのデータベースに対して実行しました。 | 13 |
| 未実施 | コードは存在して読み込まれますが、まだ誰も動かしていません。 | 36 |
112件の機能。2026-08-19に電話システムから数えました。
バッジは機能単位のもので、1行単位ではありません。1つの機能が複数のコードにまたがる場合、そのすべてにグループの水準を表示します。つまりバッジは実際に試した範囲より控えめに出ることはあっても、大きく出ることはありません。約束として読まれるページで間違えてよいのは、その方向だけです。
用語集
電話システムだけが使う言葉。
| 用語 | 何をするか |
|---|---|
| 内線 | 社内の人または席で、ほかの人がダイヤルする短い番号を持ちます。電話機のことではありません。1つの内線が複数の端末を持てます。 |
| 番号(DID) | 外の人がお客さまに到達するために押すものです。番号は内線やグループ、メニューなど何かを指し、その先を決めるのはお客さまです。 |
| 鳴らすグループ | 同じ通話で複数の内線が鳴る仕組み。単純で、誰がどれだけ待っているかは知りません。 |
| 待ち行列(キュー) | 列も管理するグループ。順番、実測の待ち時間、受付中の人を把握し、折り返しを提案できます。 |
| 音声メニュー(IVR) | 「営業は1」。メニューの中にメニューを置けますし、かけた人はいつでも戻るか、人に到達できます。 |
| 同時通話(チャネル) | 進行中の会話1件。10チャネルなら、電話機の台数にかかわらず同時に10件です。 |
| 通話明細(CDR) | 通話1件につき1行。誰が、いつ、どれだけ、どの経路で、どう終わったか。請求はここから組み立てます。 |
| 在席ランプ | 同僚が空いているか、呼び出し中か、通話中かを、かけて確かめずに示す表示。 |
| キーパッドのトーン(DTMF) | キーを押したときに電話機が出す音。メニューも、留守番電話も、このページのすべてのコードも、これで聞き取っています。 |
| 追っかけ(フォローミー) | 内線と一緒に、あるいは内線の代わりに携帯を鳴らします。小規模な電話システムでもっとも使われる機能です。 |
| 保留(パーク) | 番号のついた場所に通話を置いて、誰でも、どの電話機からでも、その番号を押して取り出せるようにすること。 |
| 取り次ぎ転送 | 通話を渡す前に同僚と話すこと。戻して自分で受け直すこともできます。 |