Asterisk PBXにBrastelの050Free SIPで留守番電話を構築しました。
が、メッセージを吹き込んでいる最中に10秒かちょっとで勝手に通話が終了する問題が発生。
というか発生していた。テストの最中は5秒ぐらいで確認していたから。
結論
asterisk.conf の transmit_silence = yes を有効にする
(デフォルトでコメントアウトされている)
—
transmit_silence、すなわち無音を伝送するか、ということで
transmit_silence = no の場合、録音を待っている間、Asteriskは先方に何もデータを送らない。
それでtimeout判定か何かを食らって切れていたようだ。
—
調べるのにとても時間がかかった。
当然voicemail.confのmaxsilenceとかを疑ってみるも、何をどう変えても10秒ちょっとで切れる。
asterisk -rvvvvvv で状況をモニタしながら通話。
メッセージ吹き込み中に電話が切れたときのメッセージは
「user hung up」
すなわち通話終了であり、voicemail.confの設定は関係なかった。
さらにsip set debug onして見てみるとQ.850; cause=58というヒントが。
58はService Unavailable的なエラーであり、やはり何かおかしい。
様々な英語圏フォーラムでやりとりがあったが、まさにドンピシャな答えはここにあった。
■[ASTERISK-11082] Voicemail cuts off at 60 seconds regardless of config settings – Digium/Asterisk JIRA
ここではtransmit_silence_during_recordと書かれていたが、おそらくバージョン違いであろう。
自分のasterisk.confには transmit_silence となっていた。
なお今回の環境は
CentOS 6.9
Asterisk 15.2.1
でした。