吴伟贤のBlog

Feed Rss

freeswitch cookbook 第5章(八) Receiving faxes 收传真

07.20.2013, freeswitch, by .

转自: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换为你自己的邮件发送脚本.

评论已关闭。