AsteriskによるIP-PBXの構築(SuSE9.3編)

インストール・設定 − サービス

Asteriskは SIP サーバではなく IP-PBX という位置付けですのでいろいろなサービスが利用できますが、ここではその一例を示します。

■各種サービスの設定

Asteriskには、いろいろなサービス機能がありますが、いくつかのサービスについて以下に設定例を示します。
分類

サービス名

サービス概要

着信系 コール・ピックアップ 予めコール・ピックアップ・グループを内線に登録しておくと、グループ内の他の内線に着信した呼に特番(デフォルト:*8)で応答できる機能。家庭での利用シーンはよくわからないが、企業なら部や課単位で利用されているサービス。
転送 通話中の呼を他の内線に転送する機能。転送する呼により、着信呼転送(着信した呼を転送)と発信呼転送(自分が発信した呼を転送)の2種類があり、更に転送する方式としてブラインド(クイック)転送と通常の転送の2方式がある。ブラインド(クイック)転送は、転送操作で転送先を呼び出した時点で転送者は呼から抜ける(オンフック)ことでき、転送先が応答すると転送された相手と通話することになる。従って、転送する前に相手に口頭で転送する旨を伝えられる環境(言い換えれば声が届く範囲)でないと転送されたほうはビックリしてしまう。もうひとつの一般的な転送方法は、転送先が応答した時点で転送者が相手と通話し要件を伝えた後に、転送者がオンフックすると転送される方法である。
コール・パーク 通話中の呼を保留場所(パーキング番号)に保留しておいて、応答者がパーキング番号を指定して保留呼に応答する保留方式。応答してほしい人がどこにいるかわからないような場合に一時的に保留し、放送やページング(電話機を使用した放送機能)を使って「XXさん。電話です。YYY番(パーキング番号で応答してください。」といった案内をして、応答してもらう時に利用されるサービス。これも企業向け?
呼出系 同時呼出 代表番号にダイヤルしたら同時に複数台の電話機を呼び出し、いずれかの電話機が応答したら他の電話機の呼出を停止し、応答した電話機で通話ができる機能。
内線代表 代表内線にダイヤルしたら、予め決められたシナリオで複数の内線を呼び出す機能。例としては、空いていれば登録順位1番の内線を呼び出し、その内線が一定時間応答しなかったり話中だったら、次の内線を呼び出す等がある。
付帯系 保留音(Music on Hold) 転送やコール・パーク等で通話が保留されたときに、保留された相手に音楽等の保留音を流す機能。
ボイスメール連携 ボイスメールと連携し、端末の電源が入っていない、相手が通話中、応答しない場合等にボイスメールに録音でき、後で用件を聞くことができる機能。
Webボイスメール 上記ボイスメール連携で録音された音声をWebアクセスして聴取したり、フォルダ管理できる機能。
モーニングコール ホテル等ではおなじみのモーニングコールである。ソフトホンではあまり役に立つかどうかわからないが、時計のアラーム代わりにも使用できるのでは?
ビデオチャット カメラを使用したビデオ電話機能。お手軽にはWindows Messengerがクライアントとして利用できる。
電話会議(meetme) 読んで字のごとくの電話会議で、使用できるのはmeetme方式である。meetme方式とは、それぞれの参加者が会議室番号をダイヤルして集まってくる方式であり、予めメール等で召集をかけておく必要がある。
時報サービス 時報サービスである。
外部接続 プロバイダのVoIPサービスを利用して、外部の一般電話との間で発着信を行う。

■コール・ピックアップ

予めコール・ピックアップ・グループを内線に登録しておくと、グループ内の他の内線に着信した呼に特番(デフォルト:*8)で応答できる機能。家庭での利用シーンはよくわからないが、企業なら部や課単位で利用されているサービス。

[ 設 定 ]

設定は、ピックアップ・グループを決め、グループとする sip.conf の内線データに追加する。ピックアップ特番を "*8" から変更する場合は、features.conf で設定する。(赤字:追加、緑字:変更、青字:削除)
  1. sip.conf でサービスを提供する内線にピックアップ・グループを設定する。

    [2000]
    type=friend
    username=oyaji
    secret=password0
    canreinvite=no
    host=dynamic
    pickupgroup=1


  2. ピックアップ特番はデフォルトで  "*8" となっているので、変更する場合は features.conf の "pickupexten" パラメータのコメントアウトを外し、番号を変更する。

    [general]
    ;pickupexten =
    *8          ; Configure the pickup extension. Default is *8

[ 操作方法 ]

  1. 同一ピックアップグループ内の内線に着信する。
  2. オフフック(受話器を上げ)し、上で設定したコールピックアップ特番 "*8" をダイヤルすると代理で応答できる。元の呼出は停止する。

■転 送

通話中の呼を他の内線に転送する機能。転送する呼により、着信呼転送(着信した呼を転送)と発信呼転送(自分が発信した呼を転送)の2種類があり、更に転送する方式としてブラインド(クイック)転送と通常の転送の2方式がある。

[ 設 定 ]

  1. extensions.conf で内線毎にサービスの設定を行う。

    exten => 2000,1,Dial(SIP/2000,30,tT)
    exten => 2000,2,Congestion
    exten => 2000,102,Busy


    内線毎に、上記のDialアプリケーションのtT部で付与する転送サービスの指定を行う。

    1. t
      着信呼転送(着信した呼を他の内線に転送できる)

    2. T
      発信呼転送(発信した呼を他の内線に転送できる)


  2. features.conf で転送特番を登録する。

    [featuremap]
    blindxfer => #1  ; Blind transfer
    atxfer => *2     ; Attended transfer


    featuremap コンテキストで転送特番を設定する。

    1. blindxfer
      ブラインド(クイック)転送用特番 (#1)

    2. atxfer
      一般的な転送用特番 (*2)

[ 操作方法 ]

  1. 通話中に[転送特番] ( #1 / *2 ) をダイヤル。 (2桁の場合、かなり素早く2桁ダイヤルしないと特番として認識されないので、ソフトホンの場合はキーボードで操作しないと難しい? )
  2. 「転送」とガイダンスが出るので、転送先の内線番号をダイヤルする。
    桁間タイマはデフォルトで3秒なのでガイダンスが出たらすぐにダイヤルしないと元の状態(通話中状態)に戻ってきてしまう。また、最後のダイヤルからタイムアウトするまで3秒かかるので、転送先を呼び出すまでワンクッションある。
  3. ブラインド転送の場合は呼出音が聞こえたら切断する。転送先が応答すれば被転送者との通話となる。
    普通の転送なら転送先と通話した後、切断すれば転送される。

    注:桁間タイマは general コンテキスト中の 「transferdigittimeout => 3」 で設定できるが、最後のダイヤルから呼出までの時間を短くするためこの値を短くすると、最初の1桁目をすぐにダイヤルしなければならなくなるので値には注意が必要。逆に、最初のダイヤルまでが短すぎるからといって長くすると、転送ダイヤル後の呼出への移行が遅くなるので3秒という値はリーズナブルと思える。

■コールパーク

通話中の呼を保留場所(パーキング番号)に保留しておいて、応答者がパーキング番号を指定して保留呼に応答する保留方式。応答してほしい人がどこにいるかわからないような場合に一時的に保留し、放送やページング(電話機を使用した放送機能)を使って「XXさん。電話です。YYY番(パーキング番号)で応答してください。」といった案内をして、応答してもらう時に利用されるサービス。これも企業向けサービス?

[ 設 定 ]

  1. features.conf でコールパーク特番とパーキング番号等を登録する。

    [general]
    parkext => 700         ; What ext. to dial to park
    parkpos => 701-709     ; What extensions to park calls on
    context => parkedcalls ; Which context parked calls are in
    ;parkingtime => 45     ; Number of seconds a call can be parked for
                           ; (default is 45 seconds)


    general コンテキストで、コールパークの各種パラメータを設定する。

    1. parkext
      コールパークする際の特番を指定。デフォルトは"700"番である。

    2. parkpos
      パーキング番号を範囲指定する。コールパークすると、システムがここで指定したパーキング番号のうち空いている番号を自動選択して保留し、該当する番号をガイダンスするので、その番号をダイヤルして応答することになる。デフォルトは701-720の20番号であるが、同時利用するには多すぎるのでここではダイヤルプランを考慮して701-709とした。

    3. context
      extensions.confで指定するコールパーク用のコンンテキストの設定で、デフォルトの "parkedcalls" のままで問題ないのでそのままとする。

    4. parkingtime
      コールパークの応答待ち時間で、デフォルトで45秒である。必要なら変更すること。応答タイムアウト時は保留した内線が呼び返され、応答する被保留者との通話に戻る。

  2. extensions.conf で応答特番の登録を行う。

    [default]
    ; Parked calls
    include => parkedcalls
    exten => _70Z,1,ParkedCall(${EXTEN})
    exten => _70Z,2,Hangup()


    default コンテキストでコールパークの応答特番を設定する。

    1. include
      上記の features.conf の context パラメータで指定した値を設定する。

    2. パターン指定で、701-709 までのダイヤルで ParkedCall関数で応答するように設定した。個別に記述してもよい。

[ 操作方法 ]

  1. 通話中に[コール・パーク特番] ( 700 ) をダイヤル。 
  2. パーキング番号がアナウンスされるので記録し、オンフック(切断)する。この間、相手には保留音が送出される。
  3. パーキング番号を何らかの方法で応答する人に伝達し、応答する電話機からパーキング番号をダイヤルする。保留中の相手との通話となる。
  4. parkingtime(デフォルト45秒)以内に応答しないと、コール・パークした内線が呼び返され、応答すると元の通話に戻る。

■同時呼出

代表番号にダイヤルしたら同時に複数台の電話機を呼び出し、いずれかの電話機が応答したら他の電話機の呼出を停止し、応答した電話機で通話ができる機能。

[ 設 定 ]

  1. extensions.conf で代表番号と同時呼出する内線を登録する。

    [default]
    exten => 2000,1,Dial(SIP/2001&SIP/2002,30)
    exten => 2000,2,Congestion
    exten => 2000,102,Busy


    default コンテキストで、代表番号に対応して呼び出す内線を "&" で区切って併記するだけである。上記は、2000番とダイヤルされたら2001番と2002番を同時に呼び出す場合の例である。

■内線代表

代表内線にダイヤルしたら、予め決められたシナリオで複数の内線を呼び出す機能。例としては、空いていれば登録順位1番の内線を呼び出し、その内線が一定時間応答しなかったり話中だったら、次の内線を呼び出す等がある

[ 設 定 ]

  1. extensions.conf で代表番号と呼び出す内線の登録を行う。

    [default]
    exten => 2000,1,Dial(SIP/2001,30)
    exten => 2000,2,Dial(SIP/2002,30)
    exten => 2000,3,Congestion
    exten => 2000,102,Dial(SIP/2002,30)
    exten => 2000,103,Busy


    default コンテキストで代表番号に対応して呼び出す内線を登録する。上記は代表内線2000番とダイヤルされたら2001番を呼び出し、話中なら2002番をプライオリティ102で呼び出す。2001番が呼び出しタイムアウトになったら、同様に2002番をプライオリティ2で呼び出す例である。

■保留音(Music on Hold)

転送やコール・パークで通話が保留されたときに音楽等の保留音を流す機能であり、バージョン1.0.xでは別途mpg123をインストールしてmp3ファイルしか使用できなかったが、バージョン1.2.0からはmp3以外にgsmやwav、WAV(wav49)ファイルも使用できるようになった。但し、予めgsm形式等のファイルを準備しておく必要があり、音源としては、8KHzのmono音源にしておく必要がある。フリーのコンバータがあるので、それを使用すればmp3形式等から変換できるが、おやじがテストした限りでは、gsm形式は容量は格段に小さくできるがお世辞にも音質は良いとは言えなかった。mp3形式の場合は、mpg123をインストールしなければならないが、音質は格段によいので従来と同様にmp3で行くことにした。

[ 設 定 ]

  1. Makefileをみると、asteriskのディレクトリで "make mpg123"とやれば本家のmpg123-0.59rのソースコードを持ってきてインストールできる。但し、本家のmpg123のソースコードは現在メンテされていないので、パッチがあたったものを探した結果、mpg123のSuSE9.2用のSRPMがこちらにあったのでリビルドして使用した。
    なお、chroot環境でmpg123を動かすにはsuidをオンにしないと動作しないため設定する。

    # cd /usr/src/packages/SOURCES
    # wget ftp://rpmfind.net/linux/SuSE-Linux/i386/update/9.2/rpm/src/mpg123-0.59s-498.6.src.rpm
    # rpmbuild --rebuild mpg123-0.59s-498.6.src.rpm
    # rpm -ivh /usr/src/packages/RPMS/i586/mpg123-0.59s-498.6.i586.rpm
    # chmod u+s /usr/bin/mpg123


  2. musiconhold.conf で保留音の設定を行う。

    [default]
    mode=quietmp3
    directory=/var/lib/asterisk/mohmp3
    random=yes


    default コンテキストで、保留音の設定を行う。

    1. mode
      デフォルトは "quietmp3" で、この設定ではdirectoryパラメータで指定されたディレクトリ内のmp3ファイルをmpg123を使用して少し小さい音量(80%?)で再生する。音量が小さいと思うなら、"mp3" とすればよい。
      mpg123を使用せずに、gsmやwav、WAVファイルを再生する場合は、"files" と指定する。

    2. directory
      音源ファイルを置くディレクトリを設定する。

    3. random
      mode で "files" と指定した場合、"random=yes" とするとディレクトリ内に複数のファイルがあればランダムに流すことができる。


■電話会議(meetme)

呼んで字のごとくの電話会議で、使用できるのはmeetme方式である。meetme方式とは、それぞれの参加者が会議室番号をダイヤルして集まってくる方式であり、予めメール等で召集をかけておく必要がある。

◆zaptelの起動設定

電話会議を使用するには、zaptelが必須( timing source :ztdummy )なので以下により起動できるようにする必要がある。SuSE9.3のRPMを参考に設定をした。
  1. まず、sysconfigが必要なので、/etc/sysconfigに設置する。タイミングソース(ztdummy)だけあれば良いため、デフォルトでztdummyを選択したsysconfigファイルを作成したので、それをダウンロードする。

    # cd /etc/sysconfig
    # wget -O zaptel http://www.aconus.com/~oyaji/suse9.3/zaptel.sysconfig


  2. 自動起動スクリプトを設定する。設定後にシステムを再起動する。

    # cd /etc/init.d
    # wget -O zaptel http://www.aconus.com/~oyaji/suse9.3/zaptel.init
    # chmod 755 zaptel
    # ln -s /etc/init.d/zaptel /usr/sbin/rczaptel
    # insserv zaptel
    # chkconfig --list zaptel
    zaptel        0:off  1:on   2:on   3:on   4:off  5:on   6:off
    # shutdown -r now
    #


  3. システムが起動したら、ztdummyがロードされていることを確認しておく。

    # lsmod | grep zaptel
    zaptel       233732  1 ztdummy
    crc_ccitt      2176  1 zaptel
    #


[ 設 定 ]

  1. meetme.conf で会議室を登録する。ここでは一例として、pin番号が不要な8000と"1234"というpinが必要な8001という会議室を作成する。

    [rooms]
    conf => 8000
    conf => 8001,1234


    rooms コンテキストで、会議室を登録する。基本的なフォーマットは以下のとおりである。

    conf => confno[,pin][,adminpin]

    1. confno
      会議室番号。本パラメータのみの会議室は、この会議室に入るためのダイヤルプランで指定した会議特番をダイヤルすれば誰でも入室できる。

    2. pin
      会議室に入るための暗証番号を指定する。pinを設定した会議室に入るにはこの暗証番号が必要なので参加者を限定できる。

    3. adminpin
      会議の管理用暗証番号を指定する。

  2. extensions.conf で会議特番の登録を行う。

    [default]
    ; Meetme conference
    exten => 800,1,Goto(conf0,1)
    exten => conf0,1,Meetme(8000|pCMs)
    exten => conf0,2,Hangup()

    ; Meetme conference (pin)
    exten => 801,1,Goto(conf1,1)
    exten => conf1,1,Meetme(8001|pCMs)
    exten => conf1,2,Hangup()

    ; Meetme conference (Dynamic)
    exten => 810,1,Goto(conf2,1)
    exten => conf2,1,Meetme(|pdCMs)
    exten => conf2,2,Hangup()


    default コンテキストで、会議特番を登録する。

    基本的なフォーマットは以下のとおりである。

    MeetMe([confno][,[options][,pin]])

    1. confno
      会議室番号。

    2. options
      会議室のオプションを指定する。オプションには以下のようなものがある。(おやじには、使い方がわからないものもある。)

      No. options 概 要
      1 m 会議をモニタモードとする。(聴くだけで話せない)
      2 t 会議をトークモードとする。(話すだけで聴けない)
      3 T 話者検出を行い、その情報をマネージャインタフェースとmeetmeリストに送る。
      4 i 誰が会議に参加あるいは会議から出たかをアナウンスする。
      5 p ユーザは、#キーを押すことによって、会議を出ることができる。
      6 X 会議を出るための番号を${MEETME_EXIT_CONTEXT}変数で指定でき、それを利用する。この変数が設定されないなら現在のコンテキストで指定された番号を使用する。
      7 d 暗証番号が設定できない会議室をダイナミックに作成する。
      8 D 暗証番号が設定できる会議室をダイナミックに作成する。
      9 e 最初の空いている会議室を選択する。
      10 E 最初の空いている暗証番号(PIN)がない会議室を選択する。
      11 v

      会議をビデオモードにする。

      12 r このオプションが選択されると、会議の会話は、形式${MEETME_RECORDINGFORMAT}で指定されたファイル形式で、${MEETME_RECORDINGFILE}で指定されたファイルに記録する。

      例:
      exten => 1234,1,Goto(conf,1)
      exten => conf,1,Set|MEETME_RECORDINGFILE=/tmp/Tutorial-${TIMESTAMP})
      exten => conf,2,Meetme(1234|sr)
      exten => conf,3,Hangup()
      13 q 会議の参加・離脱音を送出しない。
      14 C 会議参加時に何人のユーザが会議中であるかアナウンスする。
      15 M 会議に1人のユーザしかいないとき、保留音を流す。
      16 x 最後のユーザとマークされたユーザしかいなくなったら、会議を終了する。
      17 w マークされたユーザが会議に入るまで待ち合わせる。
      18 b ${MEETME_AGI_BACKGROUND}変数に設定されたAGIスクリプトが実行される。デフォルトスクリプトは、"conf-background.agi" である。
      19 s *キーが押されるとき、メニュー(ユーザと管理者)を入力する。
      20 a アドミンモードを設定する。
      21 A マークモードを設定する。
      22 暗証番号が指定されても、いつも暗証番号を要求する。

    3. pin
      会議室に入るための暗証番号を指定する。sip.confのpinとの関係?

 

■時報サービス

読んで字のごとくの時報サービスである。

[ 設 定 ]

  1. extensions.conf で時報サービス特番の登録を行う。

    [default]
    ; Say time
    exten => 117,1,Goto(saytime,1)
    exten => saytime,1,Answer()
    exten => saytime,1,Wait(1)
    exten => saytime,2,SayUnixTime(,,YbdAPIMS)
    exten => saytime,3,playback(beep)
    exten => saytime,4,Hangup()


    default コンテキストで、時報サービス特番の登録とアナウンス内容を設定する。

    1. exten => 117,1,Goto(saytime,1)
      "117" とダイヤルされたら、"saytime"のプライオリティ1にジャンプ。

    2. exten => saytime,1,Answer()
      Answer()関数で応答。

    3. exten => saytime,2,SayUnixTime(,,YbdAPIMS)
      SayUnixTime()関数で時報を指定された内容でアナウンスする。SayUnixTime()関数の形式は以下のとおりである。

      SayUnixTime([unixtime][,[timezone][,format]])

      • unixtime
        Unix Time(1970.01.01)に対する秒単位の差を設定するが、実態には合わない。デフォルトは現在時刻なので未設定のままとすればよいが、実際に発声する時間は少し後になるので、${EPOCH}変数を使用して微調整すると少しは正確になる。

        [default]
        ; Say time
        exten => 117,1,Goto(saytime,1)
        exten => saytime,1,Answer()
        exten => saytime,2,SetVar(TimeNow=$[${EPOCH} + 10])
        exten => saytime,3,SayUnixTime(${TimeNow},,YbdAPIMS)
        exten => saytime,4,playback(beep)
        exten => saytime,5,Hangup()


        ${EPOCH}変数の後の "10" はbeep音のときの時間に合わせるための調整秒数。"+"の前後は半角空白とすること。
      • timezone
        タイムゾーンを指定する。サーバ機のタイムゾーンはJSTになっているのでそのままとした。
      • format
        アナウンスする内容を設定する。略号と内容の対応は下記のとおり。今回の設定内容では、「年・月・日・曜日・時・分」と長いので簡略化するなら、 "PIM"あたりか?

        No. format 概 要
        1 A / a 曜日
        2 B / b / h 月(名称で発声。1月、2月・・・)
        3 d / e

        月(数字で発声。1、2・・・)

        4 Y
        5 I / l 12時間制の時
        6 H 24時間制の時で一桁のとき"ゼロ"と発声する。
        7 k 24時間制の時で一桁のとき"ゼロ"を発声しない。
        8 M
        9 P / p 午前/午後
        10 Q 今日/昨日またはABdY
        11 q

        昨日/平日またはABdY

        12 R 24時間制の時分
        13 S
        14 T 24時間制の時分秒

    4. exten => saytime,3,playback(beep)
      ビープ音を鳴らす。

    5. exten => saytime,4,Hangup()
      Hangup関数で切断する。

インストール・設定 − サービス


Topページへ