アスタリスクを介してFAXを送信するためのWebフォームを作成する

プロバイダの1つでVoIPネットワークを開発および運用する場合、多くの問題に対処する必要があります。 おそらく、最も不快で時間のかかる問題の1つは、FAXに関連した問題であり、これは新しいオペレーターに接続したり、既存のオペレーターから予期せずポップアップしたりするときにしばしば発生します。



テクニカルサポートのFAXの通過をチェックするプロセスを何らかの方法で自動化するために、適切なオペレーターにFAXを送信できるWebインターフェイスを実装しました。

この記事では、Asteriskモジュール用の正常なFAXがインストールされたAsteriskが存在することを想定しています。 アスタリスクは特定のソフトスイッチへの呼び出しを行い、ソフトスイッチは呼び出しを目的のオペレーターに転送します。



送信ロジックはどのように機能しますか?

前提条件は、自動モードで動作する受信FAXマシンの存在です。そうしないと、アスタリスクは受信側でFAXマシンを検出できず、t38プロトコルを使用して送信セッションを開始できません。 t.38プロトコルを使用すると、IPネットワークでFAXを渡す可能性が高くなります。



したがって、スクリプトは、ファックス番号をダイヤルするアスタリスクの呼び出しファイルを作成します。 また、スクリプトは、どのオペレーターを介して呼び出しを行うかを認識します。

ファックス機が既知の内線番号にある場合、状況が発生する可能性があります。 この場合、アスタリスクにダイヤルさせてから、ファックスの送信を開始できます。

送信用のhtmlフォームには次の形式があります



フォームのhtmlコードは次のとおりです



<title>   </title> <body> <h2>   </h2>    ? <form name="forma1" method=post action="/cgi-bin/callback-fax.pl"> <p> <SELECT NAME="operator"> <OPTION VALUE ="operator-1">operator-1 <OPTION VALUE ="operator-2">operator-2 <OPTION VALUE ="operator-3">operator-3 <OPTION VALUE ="operator-4">operator-4 <OPTION VALUE ="operator-5">operator-5 <OPTION VALUE ="operator-6">operator-6 </SELECT> <p>     ? <INPUT NAME="number" VALUE ="" SIZE=15 MAXLENGTH=15> <p><b>      ?</b><INPUT TYPE="CHECKBOX" NAME="direct_dial" CHECKED="1" VALUE ="1"> <br> <INPUT NAME="direct_dial_timeout" VALUE ="2" SIZE=2 MAXLENGTH=2> <p>    ,     (  ) <INPUT NAME="disa_number" VALUE ="" SIZE=4 MAXLENGTH=4>        <INPUT NAME="disa_timeout" VALUE ="" SIZE=2 MAXLENGTH=2> <br>     ? <INPUT NAME="mailbox" VALUE ="" SIZE=20 MAXLENGTH=50> <p><input type="submit" name="submit" value=" !"> </form> </body>
      
      





アクティブ化されると、callback-fax.plスクリプトは、送信されたパラメーターを解析して呼び出しファイル(callfile)を作成するFAX送信フォームから初期化されます。

ここで重要なのは、htmlフォームで選択した演算子に応じて、必要なプレフィックスを番号に置き換えることです。

FAXマシンにダイヤルが必要かどうかに応じて、スクリプトはアスタリスクダイヤルプラン(内線100または内線200)から必要なロジックを呼び出します。



  #!/usr/bin/perl use strict; use warnings; use CGI qw(:standard); my $operator = param('operator'); my $original_number = param('number'); my $send_fax_now = param('direct_dial'); my $send_fax_now_timeout = param('direct_dial_timeout'); my $send_fax_disa_number = param('disa_number'); my $send_fax_disa_timeout = param('disa_number'); my $mailbox = param('mailbox'); my %operator_prefix = ( operator-1 => '01', operator-2 => '02', operator-3 => '03', operator-4 => '04', operator-5 => '05', operator-6 => '06' ); my $number = $operator_prefix{$operator} . $original_number; print "Content-type: text/html\n\n"; print "Sending fax... you will be e-mailed at <b>$mailbox</b><br>\n"; if ($send_fax_now == 1){ open (F, ">/var/spool/asterisk/outgoing/$number"); print F "Channel: SIP/"; print F "$number"; print F "\@softswitch\n"; print F "Callerid: 7495XXXXXXX\n"; print F "Context: send_fax\n"; print F "Extension: 100\n"; print F "MaxRetries: 1\n"; print F "Retrytime: 5\n"; print F "WaitTime: 60\n"; print F "Priority: 1\n"; print F "SetVar: operator=$operator\n"; print F "SetVar: original_number=$original_number\n"; print F "SetVar: email=$mailbox\n"; print F "SetVar: send_fax_now_timeout=$send_fax_now_timeout"; close F; } else { open (F, ">/var/spool/asterisk/outgoing/$number"); print F "Channel: SIP/"; print F "$number"; print F "\@softswitch\n"; print F "Callerid: 7495XXXXXXX\n"; print F "Context: send_fax\n"; print F "Extension: 200\n"; print F "MaxRetries: 1\n"; print F "Retrytime: 5\n"; print F "WaitTime: 60\n"; print F "Priority: 1\n"; print F "SetVar: operator=$operator\n"; print F "SetVar: original_number=$original_number\n"; print F "SetVar: email=$mailbox\n"; print F "SetVar: send_fax_disa_number=$send_fax_disa_number\n"; print F "SetVar: send_fax_disa_timeout=$send_fax_disa_timeout"; close F; } open (LOGFILE, ">>/var/log/faxsend.log"); my $date = localtime; print LOGFILE "$date:$original_number:$operator\n"; close LOGFILE;
      
      





次に、extensions.confアスタリスク構成に移りましょう。

奇妙なことに、ここではすべてが簡単です。 すぐに内線番号100にファックスを送信し、内線番号200が内線番号のダイヤル後にファックスを送信します。

Hangupでは、自分自身をコピーすることを忘れずに、送信に関するレポートをメールに送信します;)



  [send_fax] exten => 100,1,Wait(${send_fax_now_timeout}) exten => 100,n,NoOp(${TIFF_FILE}) exten => 100,n,SendFAX(/usr/dumps/test-fax.tiff,d) exten => 100,n,NoOp(${FAXSTATUS}) exten => 100,n,Hangup() exten => 200,1,Wait(${send_fax_disa_timeout}) exten => 200,n,SendDTMF(${send_fax_disa_number}) exten => 200,n,NoOp(${TIFF_FILE}) exten => 200,n,SendFAX(/usr/dumps/test-fax.tiff,d) exten => 200,n,NoOp(${FAXSTATUS}) exten => 200,n,Hangup() exten => h,1,NoOp(email is ${email}:operator is ${operator}:number is ${original_number}) exten => h,n,System(/usr/local/bin/sendEmail -f fax@domain.com -t ${email} -bcc makarov@domain.com -u 'Fax message Sent' -m 'operator:${operator}\nnumber:${original_number}\nStatus:${FAXSTATUS}' -s mx.domain.com -l /var/log/fax.log)
      
      





オプションで、スクリプトにフォームを追加して、その後の送信で写真をアップロードできますが、アスタリスクSendFax()が機能するTIFFに持って行くことを忘れないでください

たとえば、私の場合のtiffinfoは次のように言っています。

  [root@PBX-CALLBACK dumps]# tiffinfo test-fax.tiff TIFF Directory at offset 0x8 (8) Subfile Type: multi-page document (2 = 0x2) Image Width: 1728 Image Length: 1172 Resolution: 204, 98 pixels/inch Bits/Sample: 1 Compression Scheme: CCITT Group 4 Photometric Interpretation: min-is-white FillOrder: msb-to-lsb Orientation: row 0 top, col 0 lhs Samples/Pixel: 1 Rows/Strip: 1172 Planar Configuration: single image plane Page Number: 0-0 Software: GPL Ghostscript 8.70 DateTime: 2011:12:23 16:04:13 Group 4 Options: (0 = 0x0)
      
      





次の記事で、アスタリスクおよびVoIPテレフォニーの一般的な興味深い側面を強調してください。



All Articles