テクノロジー
電話の仕組みとつくり方を調べてみた
はじめに
皆さん、こんにちは。ITディベロップメント1部のI.Kです。
何気なく普段使っている電話ですが、これってどんな仕組み何だろう?とふと思ったので、「電話ってそもそもどんな仕組み?」「エンジニアでも作れるの?」を調べてみました。
電話の種類(固定電話とIP電話)について
電話には「固定電話(さらにアナログ電話とひかり電話の2種類がある)」と「IP電話」の2種類があります。2種類の違いは何かと言うと、音声通話を行うネットワークの接続方法が異なります。
固定電話は、従来の固定電話回線)を用いて電話と電話を接続しますが、IP電話は主にインターネットを構成する時に用いられるIPネットワークを利用して音声通話を実現します。
IP電話の仕組みをもう少し詳しく説明すると、
SIP(Session Initiation Protocol)サーバーに、自分と通話相手の電話番号とIP情報を保持し、SIPサーバーにIPを指定してリクエストすることで電話の発信を可能にしています。
電話ってシステムエンジニアに作れるのか?
固定電話は流石に作れませんが、IP電話であれば何と作れてしまいます!!
(もちろんそれなりの知識やスキルは必要ですが)
ここでは2種類の例を使って、少し詳しく解説していきます。
方法①オープンソースソフト「Asterisk」等を使ったSIPサーバーから構築する
一つ目のやり方は「オープンソースソフト「Asterisk」等を使ったSIPサーバーから構築する」です。
過去の実装例で、とある自治体がIP電話500端末を外注すると2億円かかるところ、内製で構築を行い820万で完成させた事例がありました。2億→820万ってすごいですね・・。
ざっくり実装イメージは以下の通りです。
(参考サイト:http://st-asterisk.com/archives/22)
Lunixサーバーの設定ファイルに下記のような記載をすることで、内線同士の発信が可能になります。
[default]
exten => 201,1,Dial(SIP/201,30,r)
exten => 201,2,Hangup()
exten => 202,1,Dial(SIP/202,30,r)
exten => 202,2,Hangup()
- exten => のあとに、内線番号,処理順番,処理コマンドを書きます
- Dial():発信する。
- Answer():着信に応答する。
- Playback():サウンドファイルを再生する。
- Hangup():通話を切断する。
調べた感じ、難易度が高そう(内線の構築方法は簡単そうだが、外線の設定が大変そう)だと感じました。
通話料が掛からないことがメリットですが、サーバー代金はかかります。そうなると保守作業も大変そうだなという印象です。
方法②CPaaS(Communications Platform as a Service)を利用する
二つ目のやり方は「CPaaS(Communications Platform as a Service)を利用する」です。
CPaaSは通信機能をAPIで接続するクラウドサービスのことで、音声通話やSMS、映像会議、通話録音・音声認識を実行するAPIを従量課金で買う形になります。安く簡単に始められますが、通話時間が長いと費用は高くつく恐れもあります。
有名どころですと「AmazonConnet」です。
SFA連携、録音、通話モニタリング機能あり、音声分析、文字起こし機能のある電話基盤サービスとなります。
他にも「Twilio」「pluscomm」「Bandwidth」などがあります。
ざっくり実装イメージは以下の通りです。
※Pythonの実装サンプル
▼Twilio
▼Bandwidth
インポートを行って、call関数に引数を渡すと電話をかけられる形になります。
これであればWEBアプリを作る感覚に近いなと感じました。
おわりに
今回は「電話」について取り上げました。
普段何気なく使っているものですが、仕組みは案外知らないものなので、一つ勉強になって良かったです。
最後までお読みいただきありがとうございました。
引用
- https://atmarkit.itmedia.co.jp/ait/articles/0711/16/news146_3.html
- https://www.twilio.com/ja/docs
- https://dev.bandwidth.com/
※本記事は2022年12月時点の内容です。