アスタリスクでFAXを実装する

受信を構成し、FAXをアスタリスクに送信する必要がありました。 参照条件に従って、ファックスの受信と送信は、オペレーターの参加と予備的な会話の可能性とともに行われる必要があります。

私はインターネットで実装例を見つけましたが、それらのルールとして:

1)オペレーターと事前に会話することなく、特定の番号にファックスを自動送信しました。

2)さまざまなiaxmodemまたはt38modem + hylafaxバンドルが使用されましたが、私の意見では、この場合には特に必要はありません。 アスタリスクは、SpanDSPを介してFAXを処理できます(SpanDSPサポートを使用して構築する必要があります)。



最終的には、次のようになりました。

1)会社のオペレーターは、PCと電話を使用して、職場からFAXを送受信する機能を持っている必要があります。

2)FAXを受信するには、呼び出しを5555に転送する必要があります。システムは、受信したドキュメントをtiffからpdfに変換し、FAX共有フォルダーに入れて、秘書のメールボックスに複製する必要があります。

3)FAXを送信する場合、電子文書または紙上の文書を(スキャナーを介して)送信できる必要があります。 オペレーターは、最初に誰がどのような種類のドキュメントを送信しているかを通知できる必要があります。次に、受信時と同じ方法で、このドキュメントに対応する特定の番号に転送します。



アスタリスクはgentooビルドにインストールされます。



TIFF形式のドキュメントの翻訳にユーザーが関与するのを避けるために、cups-pdfネットワーク仮想プリンターを使用することが決定されました。



インストール:



emerge -va cups-pdf
      
      







ネットワーク上で受信したFAXのプリンターとフォルダーをレイアウトするには、sambaパッケージを使用します



 emerge -va samba
      
      







すでにnet-fs / samba-3.6.12がインストールされています。



cupsパッケージも必要です。samba自体は、このパッケージのサポートを使用してビルドする必要があります。 cupsサービスのWebインターフェースを介して仮想プリンターをインストールします。ファックスと呼びましょう。



/etc/samba/smb.confに次の行を追加して、プリンターを共有します



 [global] printing = cups printcap name = /etc/printcap [fax] comment =  public = yes printable = yes writable = yes create mode = 0666
      
      







オペレーターコンピューターにWindows 7がインストールされており、ネットワークプリンターがインストールされているので、ドライバーから要求があり次第、HP LaserJet 2300シリーズPSを選択しました(PostScriptドライバーは動作するはずです)



このプリンターに印刷する場合、文書自体は適切な形式でプリンターに送信される必要があり、ユーザーはこの文書の転送先の翻訳時に4桁の数字を受け取る必要があります。



まず、この仮想プリンターnano /etc/cups/cups-pdf.confの設定を見てみましょう

そして、次の設定を変更します。



 Out /var/spool/cups-pdf #     AnonDirName /var/spool/cups-pdf Spool /var/spool/cups-pdf TitlePref 1 #      UserUMask 0000 #     PostProcessing /opt/pdf_to_tiff #     pdf  DecodeHexStrings 1 #     
      
      







スクリプト/ opt / pdf_to_tiffは現在のext_num値(4桁のFAX番号)を読み取り、pdfファイルをext_numという名前で/ usr / dumpsフォルダーに転送します。

次に、ファイルをtiff形式に変換し、ドキュメントを送信したユーザーに4桁の数字の文字をメールに送信します。



Cups-pdfは、2つのオプションで/ opt / pdf_to_tiffを実行します。

ファイル名-$ ARGV [0]

ユーザー名は$ ARGV [1]です

組織では、ドメイン(samba-3.6)とメールボックス(postfixの企業メール)はユーザー名に対応します(いくつかの場所では、メールエイリアスをいくつか追加する必要がありました)。



スクリプト自体:



 srv d # cat /opt/pdf_to_tiff
      
      







 #!/usr/bin/perl -w use strict; use File::Copy; #     $ENV{PATH} = '/bin:/usr/bin:/sbin:/usr/sbin'; #  my $debug=0; #     chdir '/'; my $ext=" "; my $num=0; open(ext_num,"/opt/ext_num"); $ext=<ext_num>; $num=int($ext); close(ext_num); if ($num > 499) { $num=1; } else { $num=$num+1; } open(ext_num,">/opt/ext_num"); print ext_num "$num\n"; close(ext_num); $num=$num+5000; move("$ARGV[0]","/usr/dumps/$num.pdf"); system("/usr/bin/gs -dSAFER -dBATCH -dQUIET -sDEVICE=tiffg3 -sPAPERSIZE=a4 -r204x196 -dNOPAUSE -sOutputFile=/usr/dumps/$num.tiff /usr/dumps/$num.pdf"); chmod(0644,"/usr/dumps/$num.tiff"); system("/usr/bin/sendEmail -f asterisk_fax\@name.ru -t $ARGV[1]\@name.ru -u FAX -o message-charset=utf-8 -m     :$num -s localhost");
      
      







印刷するドキュメントを送信して作業を確認します(/ usr / dumps /フォルダへのアクセス権を作成して修正する必要がある場合があります)



次に、ファックスを送受信するようにアスタリスクを構成します。



faxdetectを無効にする主なもの:



 /etc/asterisk/sip.conf
      
      







 [general] faxdetect=no ;faxdetect=yes t38pt_udptl=no ;t38pt_udptl=yes
      
      







 /etc/asterisk/extensions.conf
      
      







 [internal] exten => 5555,1,NoOp(-------------------Call from ${CALLERID(number)} to ${EXTEN}------------------) same => n,Goto(fax-rx,receive,1) exten => _5[0-4]XX,1,NoOp(-------------------Call from ${CALLERID(number)} to ${EXTEN}------------------) same => n,Set(FAXFILENAME=${EXTEN}) same => n,Goto(fax-tx,send,1) [fax-rx] exten => receive,1,NoOP(------------------- FAX from ${CALLERID(number)} ------------------) same => n,Answer() same => n,Set(DT=${TIMESTAMP}-${CALLERIDNUM}-${UNIQUEID}) same => n,Set(FAXOPT(headerinfo)=Received by ${CALLERID(number)} ${STRFTIME(${EPOCH},,%Y-%m-%d %H-%M)}) same => n,Set(FAXOPT(localstationid)=Name) same => n,Set(FAXOPT(maxrate)=14400) same => n,Set(FAXOPT(minrate)=2400) same => n,NoOp(FAXOPT(ecm) : ${FAXOPT(ecm)}) same => n,NoOp(FAXOPT(headerinfo) : ${FAXOPT(headerinfo)}) same => n,NoOp(FAXOPT(localstationid) : ${FAXOPT(localstationid)}) same => n,NoOp(FAXOPT(maxrate) : ${FAXOPT(maxrate)}) same => n,NoOp(FAXOPT(minrate) : ${FAXOPT(minrate)}) same => n,NoOp(**** RECEIVING FAX : ${DT} ****) same => n,ReceiveFax(/var/spool/asterisk/fax/${FAXOPT(headerinfo)}.tif) same => n,System(/usr/bin/tiff2pdf "/var/spool/asterisk/fax/${FAXOPT(headerinfo)}.tif" -o "/var/spool/asterisk/fax/${FAXOPT(headerinfo)}.pdf") same => n,System(/bin/cp "/var/spool/asterisk/fax/${FAXOPT(headerinfo)}.pdf" /mnt/public/samba/public/FAX ) same => n,System(/usr/bin/sendEmail -f asterisk_fax@name.ru -t office@name.ru -u FAX -o message-charset=utf-8 -m   -s localhost -a "/var/spool/asterisk/fax/${FAXOPT(headerinfo)}.pdf") same => n,HangUp() [fax-tx] exten => send,1,NoOp(------------------- FAX from ${CALLERID(number)} ------------------) same => n,Wait(1) same => n,Set(DT=${TIMESTAMP}-${CALLERIDNUM}-${UNIQUEID}) same => n,Set(FAXOPT(headerinfo)=Received by ${CALLERID(number)} ${STRFTIME(${EPOCH},,%Y-%m-%d %H-%M)}) same => n,Set(FAXOPT(localstationid)=Name) same => n,Set(FAXOPT(maxrate)=14400) same => n,Set(FAXOPT(minrate)=2400) same => n,NoOp(FAXOPT(headerinfo) : ${FAXOPT(headerinfo)}) same => n,NoOp(FAXOPT(localstationid) : ${FAXOPT(localstationid)}) same => n,NoOp(FAXOPT(maxrate) : ${FAXOPT(maxrate)}) same => n,NoOp(FAXOPT(minrate) : ${FAXOPT(minrate)}) same => n,NoOp(**** RECEIVING FAX : ${DT} ****) same => n,SendFAX(/usr/dumps/${FAXFILENAME}.tiff,d) same => n,NoOp(${FAXSTATUS}) same => n,NoOp(number is ${CALLERID(number)}) same => n,System(/usr/bin/sendEmail -f asterisk_fax@name.ru -t office@name.ru -u 'Fax message Sent' -o message-charset=utf-8 -m ':${CALLERID(number)}\nStatus:${FAXSTATUS}' -s localhost -l /var/log/fax.log) same => n,HangUp()
      
      







以上です。 その結果、追加のソフトウェアは不要であり、オペレーターがFAXを操作できるように訓練するのが簡単です。



All Articles