吴伟贤のBlog

Feed Rss

freeswitch cookbook 第5章(七) Send Faxes 发送传真

07.20.2013, freeswitch, by .

转自:http://www.8000hz.com/archives/103.html

 

Send Faxes

发送传真

FreeSWITCH可以将一份电子文档传送到一个普通的传真机.但只能传TIFF格式的文档, 不过呢,很多格式都可以转到TIFF(本小方法中会讨论一些通用且免费使用的转换工具).

准备工作

简单来说, 发送传真需要准备一些东西, 如TIFF文档, 网关和一台目标传真机(测试的话可以下载一个测试文档http://files.freeswitch.org/txfax-sample.tiff).

把你的TIFF文档放到一个指定的路径. 在我们的例子中使用的是/tmp/txfax-sample.tiff. 网关就是可以让你连接到外部世界(PSTN),传真机就是用来接受你传真的啦.如果你没有网关或传真机, 你仍然可以通过使用默认拨号方案中的fax_receive extension很方便的去尝试本文内容.

如何开始

大多数情况下,发送传真你需要外呼到你的传真机(A leg),然后执行txfax拨号方案应用(diaplan application). 使用以下步骤来完成一个简单的传真发送:

1.    打开fs_cli.
2.    执行以下命令:

originate loopback/9178 &txfax(/tmp/txfax-sample.tiff)

观察控制台, 不出意外的话传真会发送成功.

工作原理

originate命令用于创建传真呼叫中的外呼leg. 在这个例子中, 从字面上看,我们在FreeSWITCH服务器中使用loopback通道发起了一通呼叫. 目标分机号码是”9178”. 在实际的应用中,当然,我们会拨打一个外部号码.例如, 我们可以这样做:

originate sofia/gateway/my_gw/18005551212 &txfax(/tmp/txfax-sample.tiff)

在以上两个例子中, 一旦A leg 接听, txfax应用就被调用. 如果一切正常,传真会顺利的传送并且会收到一个文件/tmp/rxfax.tiff.

不止这些

检查被叫是否是传真并做出反应

在有些情况下, 你可能就是自动打电话然后直接发送传真,假设对方是传真机上. 可能你更想是检测到对方是传真机的时候再发传真,如果不是传真机就正常通话. 这个需要可以配合通道变量execute_on_fax_detect 来实现. 瞧瞧这个拨号方案片断:

<extension name="fax detect test">
  <condition field="destination_number" expression="1234">
    <action application="export" 
            data="execute_on_fax_detect='execute_extension 9178'"/>
    <action application="bridge" data="loopback/9664"/>
  </condition>
</extension>

以上拨号方案中我们告诉系统如果检测到传真信号就执行extension(9178), 否则就正常接通电话和播放保持音乐.

你可以在你的拨号方案中用以下这个”理论”进行调整以适应你的需求.

——-只需创建一个处理传真的extension, 使用execute_on_fax_detect检测传真信号,如果检测到传真信号就用execute_extension去执行处理传真的extension.

检测传真问题

传真出问题是很普遍的, 尤其是在VOIP的环境下.
当传真发送失败时,出于某种原因吧,FreeSWITCH可以帮助我们发现出了什么问题. 如果你使用XML CDRs记录通话记录, 每个传真呼叫的CDR中中都会有一些通道变量,不管传真发送成功或失败. 以下就是一个示例:

<fax_v17_disabled>0</fax_v17_disabled>
<fax_ecm_requested>1</fax_ecm_requested>
<fax_filename>/tmp/txfax.tif</fax_filename>
<fax_success>1</fax_success>
<fax_result_code>0</fax_result_code>
<fax_result_text>OK</fax_result_text>
<fax_ecm_used>on</fax_ecm_used>
<fax_local_station_id>SpanDSP%20Fax%20Ident</fax_local_station_id>
<fax_remote_station_id>SpanDSP%20Fax%20Ident</fax_remote_station_id>
<fax_document_transferred_pages>1</fax_document_transferred_pages>
<fax_document_total_pages>1</fax_document_total_pages>
<fax_image_resolution>8031x3850</fax_image_resolution>
<fax_image_size>24111</fax_image_size>
<fax_bad_rows>0</fax_bad_rows>
<fax_transfer_rate>14400</fax_transfer_rate>

使用这些信息去检查传真问题.

有用的软件

有许多开源和免费的软件(FOSS)包, 可帮助我们去处理PDF和TIFF文件. FreeSWITCH社区成员已经成功的使用Ghost Script(http://pages.cs.wisc.edu/~ghost/)对PDF和PostScript文件转换到其他格式或将其他文件转换为PDF和PostScript文件.
通常的应用就是在发送传真前将PDF文件转换到TIFF格式. 下面的命令就可以把PDF转换为一个标准分辨率的TIFF文件.

gs -q -r204x98 -g1728x1078 -dNOPAUSE -dBATCH -dSAFER -sDEVICE=tiffg3 
-sOutputFile=txfax.tiff -- txfax.pdf

产生更高分辨率的TIFF文件, 使用以下命令:

gs -q -r204x196 -g1728x2156 -dNOPAUSE -dBATCH -dSAFER -sDEVICE=tiffg3 
-sOutputFile=txfax.tiff -- txfax.pdf

Ghost Scripts executable(gs)非常适合SHELL脚本.(参数贼多呗).

另参见
> 请参阅本章中的 接收传真
> 请参阅第3章中的使用XML CDRs

评论已关闭。