テクノロジー

電話の仕組みとつくり方を調べてみた

はじめに

皆さん、こんにちは。ITディベロップメント1部のI.Kです。
何気なく普段使っている電話ですが、これってどんな仕組み何だろう?とふと思ったので、「電話ってそもそもどんな仕組み?」「エンジニアでも作れるの?」を調べてみました。

電話の種類(固定電話とIP電話)について

電話には「固定電話(さらにアナログ電話とひかり電話の2種類がある)」と「IP電話」の2種類があります。2種類の違いは何かと言うと、音声通話を行うネットワークの接続方法が異なります。
固定電話は、従来の固定電話回線)を用いて電話と電話を接続しますが、IP電話は主にインターネットを構成する時に用いられるIPネットワークを利用して音声通話を実現します。

IP電話の仕組みをもう少し詳しく説明すると、
SIP(Session Initiation Protocol)サーバーに、自分と通話相手の電話番号とIP情報を保持し、SIPサーバーにIPを指定してリクエストすることで電話の発信を可能にしています。

image.png

電話ってシステムエンジニアに作れるのか?

固定電話は流石に作れませんが、IP電話であれば何と作れてしまいます!!
(もちろんそれなりの知識やスキルは必要ですが)

ここでは2種類の例を使って、少し詳しく解説していきます。

方法①オープンソースソフト「Asterisk」等を使ったSIPサーバーから構築する

一つ目のやり方は「オープンソースソフト「Asterisk」等を使ったSIPサーバーから構築する」です。
過去の実装例で、とある自治体がIP電話500端末を外注すると2億円かかるところ、内製で構築を行い820万で完成させた事例がありました。2億→820万ってすごいですね・・。

ざっくり実装イメージは以下の通りです。
(参考サイト:http://st-asterisk.com/archives/22

image.png

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
image.png

▼Bandwidth
image.png

インポートを行って、call関数に引数を渡すと電話をかけられる形になります。
これであればWEBアプリを作る感覚に近いなと感じました。

おわりに

今回は「電話」について取り上げました。
普段何気なく使っているものですが、仕組みは案外知らないものなので、一つ勉強になって良かったです。

最後までお読みいただきありがとうございました。

引用

※本記事は2022年12月時点の内容です。

テクノロジーの記事一覧
タグ一覧
TOPへ戻る