转自:http://www.8000hz.com/archives/112.html
Receiving faxes
收传真
上一篇说到了发传真, 现在咱就说说收传真.
Getting ready
最简单的方式, 收一个传真只需要你把一个通话路由到一个执行rxfax应用的extension就成了. 结合上一篇, 我们可以使用FreeSWITCH服务器作为传真的发送者和接收者.因为是测试, 我们就使用在发传真时用到的示例文件: /tmp/txfax-sample.tiff.
How to do it…
执行以下步骤去完成一个简单的传真发送和接收:
1. 打开fs_cli
2. 执行命令:
originate loopback/9178 &txfax(/tmp/txfax-sample.tiff)
观察控制台, 最终传真的发送应该会成功完成.
How it works…
我们使用了默认配置文件中的fax_receive extension来接传真:
这个extension是非常简单的:
<extension name="fax_receive"> <condition field="destination_number" expression="^9178$"> <action application="answer" /> <action application="playback" data="silence_stream://2000"/> <action application="rxfax" data="/tmp/rxfax.tif"/> <action application="hangup"/> </condition> </extension>
接收到的传真保存在 /tmp/rxfax.tif. 文件名是可以随意更改的. 例如, 如果你在freeswitch的主安装目录中有一个子目录专门用来存传真, 你可以改拨号方案为:
<action application="rxfax" data="${base_dir}/faxes/${uuid}.tif"/>
每个接收到的传真都会有一个唯一的文件名, 保存在faxes子目录.
There’s more…
接收传真通常只是大系统或程序的一部分. 以下的内容有一些关于处理入站传真的有用的信息.
Detecting inbound faxes 检测入站传真
比方说你的应用是自动接听来电, 播放声音, 让主叫选择他们要呼叫的被叫号码.(企业IVR吧). 偶尔会来个传真. 不要断开, 你可以检测到传真, 然后把通话转到一个传真处理的extensions上去.添加这个extension到你处理呼入的拨号方案:
<extension name="fax detect" continue="true"> <condition> <action application="set" data="execute_on_fax_detect=execute_extension handle_ incoming_fax"/> </condition> </extension>
现在添加一个实际上处理入站传真的extension:
<extension name="fax_receive"> <condition field="destination_number" expression="^handle_incoming_fax$"> <action application="playback" data="silence_stream://2000"/> <action application="rxfax" data="${base_dir}/faxes/${uuid}.tif"/> <action application="hangup"/> </condition> </extension>
现在你的系统就可以自动处理入站传真了.
Processing a received fax 处理接收到的传真
一旦一个传真接收完毕, 很少只是让它呆在某个目录里. 通常你想让一个人看到这份传真.
通常的做法就是把TIFF文件转到PDF, 然后把PDF作为邮件附件发送出去. 此外, 当用户看到主叫的ID信息放到邮件的主题栏时感觉非常爽. 记住, 你必须得在系统上配置一个没问题的邮件传输代理MTA才行. 更改接收传真的extension为这样:
<extension name="fax_receive"> <condition field="destination_number" expression="^handle_incoming_fax$"> <action application="set" data="api_hangup_hook=system ${base_dir}/scripts/emailfax.sh ${fax_remote_station_id} ${base_dir}/faxes/${uuid}.tif"/> <action application="playback" data="silence_stream://2000"/> <action application="rxfax" data="${base_dir}/faxes/${uuid}.tif"/> <action application="hangup"/> </condition> </extension>
注意, 我们添加了一个 api_hangup_hook到接收传真的extension. 这样的话通话结束的时候emailfax.sh就会执行. 在文本编辑器中创建脚本文件添加下面这些内容:
#!/bin/bash # # $1 is the calling fax machine's station ID # $2 is filename mutt -n -f /dev/null -F ~/.muttrc -a $2 -s "Fax from $1" user@domain. com < /dev/null
一定得用一个真实的可用的邮件地址替换 user@domain.com . 最后, 创建.muttrc文件在home目录,然后添加以下行:
set from = 'sender@domain' set realname = 'Organization or business name' set folder = /dev/null
接收到的传真现在就会被发送指定的用户, 同时还会带上发来传真的号码.
很多脚本像Perl, Python和ruby都有可以让你发邮件的库. 可以把emailfax.sh换为你自己的邮件发送脚本.