カテゴリー: Astrerisk

  • 市外局番の省略設定(Asterisk)

    市外局番を省略して電話番号をかける設定を行います。

     一般的な家の電話の場合、同じ市外局番へ電話をかける場合、市外局番を省略することができますが、Asteriskの場合は、市外局番を省略する発信するルールの設定が必要になります。
    [2~9][1~9].から始まる電話番号を発信すると市外局番を加えて発信する設定を行います。

    以下の内容を「extensions.conf」に追記します。

    サービスの再起動

    リアルタイムのデバッグ出力

    実際に同一市外局番に市外局番を省略し、ダイヤルして電話が繋がれば完了です。

               

  • 3桁番号サービス対応設定(Asterisk)

    NTTさんが提供しているサービスや緊急連絡の3桁番号サービスに発信できるよう設定を行います。

     現時点では、0で始まる電話番号だけ外線発信になる設定になっております。そこで問題になるのが「3桁番号サービス」(104:番号案内、110:警察へ急報、117:時報、119:火事・救助・救急車など)の1で始まる3桁の電話番号です。0以外で始まる番号だと内線発信処理となり発信することが出来ません。
     101~199を外線で発信できるように設定します。

    「extensions.conf」の内容を編集します。

    以下の内容を「extensions.conf」に追記します。

    上記の設定は、101~199を発信すると処理が行われます。

    2行目の「exten = _1XZ,1,Set(CALLERID(num)=6001)」ついて、

    exten = 内線番号,優先順位,アプリケーション

    内線番号の「_1XZ」は、パターンマッチングで101~199が対象となります。


    パターンマッチングについて

    内線番号の最初のアンダーバー”_”は、パターンマッチングを使う宣言です。

     . ・・・・ 1文字以上の数字。
     X ・・・・ 0~9の数字。
     Z ・・・・ 1~9の数字。
     N ・・・・ 2~9の数字。
     [1-3] ・・ 1~3の数字(範囲指定)。


    「Set(CALLERID(num)=6001)」は、アプリケーションSetは変数CALLERID(num)に6001を代入します。

    3行目の「same = n,Set(CALLERID(name)=6001)」について、

     same ・・・・ 1つ前の行の「exten = _1XZ」と同一と判断されます。
     n ・・・ 優先順位(nは、1つ前の行の番号に1を加えた番号になります。)

    5行目の「Dial(PJSIP/9${EXTEN}@VE-IG1-202-trunk,,tT)」のアプリケーションDialについて、

     Dial(type/電話をかける相手,タイムアウト秒数,オプション設定,URL)

     type ・・・・・ PJSIP

     電話をかける相手 ・・・ 9${EXTEN}@VE-IG1-202-trunk
      ${EXTEN} = 発信番号
      VE-IG1-202-trunk = pjsip.confにISDNのGATEWAYを設定した名前
      ※ISDN回線は、発信番号に頭に「9」を付けないと発信できません。

    6行目の「Congestion」については、 混雑状況を示します。

    7行目の「Busy」については、ビジー状態を通知します。

    サービスの再起動

    リアルタイムのデバッグ出力

    実際に「117」をダイヤルして時報が流れたら完了です。

               
  • IVR自動音声応答(メニュー番号選択)

    WaitExtenアプリケーションのメニュー機能を活用し代表電話番号にかかてくる電話を自動受付で各部署に振り分ける。

    ◎メニュー番号選択の自動受付イメージ

    【人】[201]をダイヤルする。
       ↓
    【PC】「お電話ありがとうございます。○○商事でございます。自動音声でご案内します。営業部は1を、総務部は2を、経理部は3を入力お願いします。」
        ↓
    【人】[1]を押す。
       ↓
    【PC】「営業部にお繋ぎ致します。」
       ↓
    内線20の電話機を呼び出す。

    【PC】メニューにない番号を入力すると「その番号はメニューにございません。もう一度入力をお願いします。」とアナウンスが流れ最初のメニューに戻る。

    ————————————————————————————————-

    まず、メニュー機能を設定する前に内線番号を2つ追加します。
    pjsip.confファイルを開く。

    以下の内容を「pjsip.conf」に追記します。

    extensions.confファイルを開く。

    以下の内容を「extensions.conf」に追記します。

    設定内容を有効にするためにサービスの再起動

    内線22と23が追加させました。

    ————————————————————————————————-

    メニュー機能を設定を行います。

    「extensions.conf」の内容を編集します。

    以下の内容を「extensions.conf」に追記します。

    設定内容を有効にするためにサービスの再起動

    【動作確認】「201」をダイヤルして、アナウスを聴き、「1」を入力し、内線20を呼出す事が出来たら成功です。

               
  • IVR自動音声応答(音声認識)

    録音した音声やリアルタイムの音声入力をテキストに変換することできるPythonライブラリの「SpeechRecognition」を活用します。

    ◎音声認識の自動受付イメージ

    【人】[202]をダイヤルする。
       ↓
    【PC】「お電話ありがとうございます。こちらは○○商事でございます。自動音声で対応て頂きす。ご用件をお話ください。」
       ↓
    【人】「営業部をお願い致します。」
       ↓
    【PC】”えいぎょう”を音声認識する。
       ↓
    【PC】「営業部にお繋ぎ致します。」
       ↓
     内線20の電話機を呼び出す。

    ————————————————————————————————-

    Pythonで音声をテキストに変換するコードを作成する。
    まず、必要なライブラリ「flac」、「SpeechRecognition」、「pykakasi」、「pyst2」をインストールする。

    flacコーデックライブラリのインストール

    「SpeechRecognition」録音した音声やリアルタイムの音声入力をテキストに変換します。

    「pykakasi」漢字をひらがなやローマ字にすることができる。

    Asteriskライブラリのインストール

    Asterisk用agiライブラリのインストール

    以上でAsteriskでSpeechRecognitionを使用するための環境設定は完了です。

    「/var/lib/asterisk/agi-bin/」に新規にコード「speech_rec.py」を作成します。

    「speech_rec.py」を実行可能にします。

    尚、Asterisk上で動きますが、直接コマンドラインで正常に動きません。

    ————————————————————————————————-

    次に「extensions.conf」の内容を編集する。

    以下の内容を「extensions.conf」に追記します。

    設定内容を有効にするためにサービスの再起動

    【動作確認】「202」をダイヤルして、アナウスを聴き、「営業部をお願い致します。」と内線20を呼出す事が出来たら成功です。

    ————————————————————————————————-

    MixMonitor(filename.extension,options)
    StopMixMonitor()
    ダイヤルプラン実行中に音声録音ファイルmp3が作成されます。StopMixMonitor()で録音を停止します。
    filename.extension = 録音するファイル名
    options = a: 追加でfileを作成する。
         t(file): fileに送信音声を録音する。
          r(file): fileに受信音声を録音する。

               

  • IVR自動音声再生編

    Asteriskで自動音声の再生します。

    GoogleのText To Speechという音声合成サービスを利用して、
    テキストから音声に変換して再生するPerlスクリプトを使用します。

    以下のサイトからPerlスクリプト「googletts.agi」だけをダウンロードします。

    https://github.com/zaf/asterisk-googletts

    「googletts.agi」を適当な場所に保存して/var/lib/asterisk/agi-bin/にコピーします。

    「googletts.agi」を実行可能にします。

    必要なパッケージをインストールします。

    モジュールの確認

    1行目の「autoload = no」の場合、「no」→「yes」に変更する。

    autoload = no

    autoload = yes

    以下のモジュールを追記する。

    以上で環境設定は完了です。

    ————————————————————————————————-

    Asteriskには、AGI(Asterisk Gateway Interface)という外部プログラム(Python、Perl、PHP、シェルスクリプトなどの言語)とテキストを入出力ができる仕組みがあります。Asteriskで「googletts.agi」の動作確認をします。
    「extensions.conf」ファイルを開きます。

    以下の内容を「extensions.conf」に追記します。

    設定内容を有効にするためにサービスの再起動

    IP電話から内線「200」をダイヤルすると「これはテストです。This ・・・」が聞こえたら完了です。

    ————————————————————————————————-

    agi([command],[arg1],[arg2],..)
    agiは外部プログラムとテキストを入出力ができます。
    [command] = 外部プログラム
    [arg1] = サーバーに渡す引数1
    [arg2] = サーバーに渡す引数2

    //googletts.agiの使い方//

    agi(googletts.agi,”text”,[language],[intkey],[speed])

    “text” = 再生するテキスト。
    [language] = 再生する言語。
    [intkey] = 割り込みキーを指定した場合、再生途中に直ちに終了し、ダイヤルプランに対応する内線番号に進みます。指定しない場合は、再生が終了するまで割込みできません。
    [speed] = 音声速度の係数(デフォルトは1.2)。

               
  • CTI

    SIPについて SIP通信プロトコルを使用したIP電話機能の仕組みについて。

  • Asterisk

    インストール ダウンロードしてインストールする。

    内線設定 内線番号を2つ設定し、通話出来るようにする。

    ソフトフォン設定 ソフトフォンの3cxPhoneに設定

    外線設定 VE-IG1(アイコム)でISDN回線の外線通話を設定する。

    市外局番の省略設定 市外局番を省略して電話番号をかける設定を行います。

    3桁番号サービス対応設定 NTTさんが提供しているサービスや緊急連絡の3桁番号サービスに発信できるよう設定を行います。

    IVR自動音声再生偏 「googletts.agi」を使ってAsteriskで自動音声の再生。 

    IVR自動音声応答(メニュー番号選択) WaitExtenアプリケーションのメニュー機能を活用し代表電話番号にかかてくる電話を自動受付で各部署に振り分ける。

    IVR自動音声応答(音声認識) 録音した音声やリアルタイムの音声入力をテキストに変換することできるPythonライブラリの「SpeechRecognition」を活用します。

  • Raspberry Pi

    初期設定 ダウンロードし、キーボード・マウス・モニターレス環境でインストール。

    ネットワーク設定 nmtuiコマンドによるネットワーク設定。

    Webサーバー構築 Apache2によるWebサーバー構築。

  • SIPについて

    SIP:Session Initiation Protocol

     SIPとは、IPネットワークを通じて、音声をリアルタイムコミュニケーションを可能にする通信プロトコルです。電話の呼出し、開始、終了、転送や保留などの通話中の機能を制御し、ネットワーク上での通話を実現します。SIPは、メッセージはテキスト形式で、リクエスト/レスポンス形式でやり取りを行います。トランスポートはデフォルトでUDPを使用します。

     

    SIP通信に必要な装置
    ・端末UA(User Agent)
      端末送信UAC(User Agent Client)
       リクエスト送信
      端末受信UAS(User Agent Server)
       リクエスト受信・レスポンス送信
    ・SIPサーバー(中継サーバー)

     

    レジストラ
    SIPサーバーに電話機のIPアドレスを登録する。

     

    プロシキ・リダイレクト
    リクエスト、レスポンスを中継、リクエストに対してIPアドレスを返す。

     

    レジスタのシーケンス

          内線20                     SIPサーバー
             |                              |
             |(1) REGISTER                  |
             |----------------------------->|
             |(2) 401 Unauthorized          |
             |<-----------------------------|
             |(3) REGISTER PA               |
             |----------------------------->|
             |(4) 200 OK                    |
             |<-----------------------------|
             |                              |
    
    PA:Proxy-Authorization

     

    電話をかけるシーケンス

           IP電話機                               IP電話機
           内線20             SIPサーバー          内線21
            |                    |                    |
    内線21に電話を|(1) INVITE          |                    |
    かける     |------------------->|                    |
            |(2) 407             |                    |
            |<-------------------|                    |
            |(3) ACK             |                    |
            |------------------->|                    |
            |(4) INVITE A        |                    |
            |------------------->|(1) INVITE          |
            |(5) 100 Trying      |------------------->|
            |<-------------------|(2) 180 Ringing     |電話機が鳴動
            |(6) 180 Ringing     |<-------------------|(リリリリーン)
    呼出音     |<-------------------|                    |
    (プルルルル) |                    |(3) 200 OK          |
            |(7) 200 OK          |<-------------------|受話器を上げる
            |<-------------------|                    |
            |(8) ACK             |                    |
            |------------------->|                    |
            |                    |(4) ACK             |
            |                    |------------------->|
            |                    |                    |
    通話      |<==================RTP==================>|
            |                    |                    |
            |                    |(5) BYE             |
            |(9) BYE             |<-------------------|受話器を下す
            |<-------------------|                    |
    電話が切れる  |(10) 200 OK         |                    |
    (プープープ) |------------------->|(6) 200 OK          |
            |                    |------------------->|
            |                    |                    |
    

     

    リクエスト例

     

    レスポンス例

     

    リクエスト(SIPメソッド)

     INVITE ---- セッション開始要求
     ACK ----- セッション確立の確認
     BYE ----- セッションの終了
     CANCEL ---- セッションの確立キャンセル
     REGISTER ---- 情報の登録
     OPTIONS ---- サーバ機能問い合わせ
     PRACK ---- 暫定応答の確認
     INFO ---- セッション内の情報通知
     SUBSCRIBE ---- イベントの通知要請
     NOTIFY ---- 要請されたイベントの通知
     MESSAGE ---- テキストメッセージなどの送信
     UPDATE ---- セッションの変更
     PUBLISH ---- ステータス情報の通知
     REFER ---- 転送指示

    レスポンス(応答コード)

     1xx = 情報応答
      100 試行中
      180 呼び出し中
      183 セッション進行中

     2xx = 成功応答
      200 OK

     3xx = リダイレクト応答

     4xx = リクエスト エラー
      400 不正なリクエスト
      401 認証が必要:レジストラのみ利用可
      407 プロキシ認証が必要
      481 通話 / トランザクションが存在しません
      486 話し中

     5xx = サーバー エラー
      500 サーバ内部エラー
      503 サービス利用不可
      504 サーバタイムアウト

     6xx = グローバル エラー

    SIPヘッダ

     Call-ID ---- 1つの通信を識別するユニークなID
     To --- リクエストの着信先
     From --- リクエストの生成元
     Contact --- ユーザーが直接通信するためのURI情報
     CSeq --- 新しいトランザクションと、再送を区別するためのインクリメント値
     Via --- リクエストが辿ったパスを示す。レスポンスはこの情報を元に返る
     Content-Length --- ボディの長さ(バイト数)
     Content-Type --- ボディのタイプ

    SDP(Session Description Protocol)

     音声などのメディアストリーミングのIPアドレスや圧縮形式といったセッション情報を、このボディ部に付けています。「タイプ=値」の形式。

               
  • Asterisk20 内線設定

    内線番号を2つ設定し、通話出来るようにします。

    内線番号の認証設定

    内線番号を「20」と「21」、それぞれのパスワードを「pass」、SIPサーバーアドレスを「192.168.0.201」を設定します。

    pjsip.confの設定

    設定ファイルがあるディレクトリーに移動。

    pjsip.confファイルを編集する前にバックアップ。

    pjsip.confファイルを開く。

    以下の内容を書き込む。

    発着信の処理設定

    設定ファイルがあるディレクトリーに移動。

    extensions.confファイルを編集する前にバックアップ。

    extensions.confファイルを開く。

    以下の内容を書き込む。

    サービスを再起動

    リアルタイムのデバッグ出力

    実際に内線20番の電話から「21」を発信して内線21番の電話を呼出し・通話が出来たら完了です。

               

  • メモ書き

    ©2024 OKADA