收藏 分销(赏)

Asterisk 入门教程.doc

上传人:pc****0 文档编号:9011275 上传时间:2025-03-11 格式:DOC 页数:21 大小:124KB
下载 相关 举报
Asterisk 入门教程.doc_第1页
第1页 / 共21页
Asterisk 入门教程.doc_第2页
第2页 / 共21页
点击查看更多>>
资源描述
Asterisk 入门教程 subscriber:加入某个group,从而遵从某一个call restricion subscriber group:可以使用1种call restriction。 call restriction:将numbering plan中各项取出,各自组成成不同的呼叫限制方案 numbering plan:通用,是一个整体的计划,里面包括长途,本地,等各种形式的方案 ------------------------------------------------------------- 以上,用于拨入号码的预处理,实际上是一种过滤,下面才是真正的呼叫处理。 -------------------------------------------------------------- route:一种策略,根据号码匹配的模式,选择走哪个trunk。 trunk:实际上做通一个链路,供route选择。 analog的,一个POTS就是一条analog trunk analog的数量由设备定, ip trunk没有限制数量,并且一个ip trunk连到对方IPPBX后,对方的subscriber 数量是不确定的,由那个IP PBX决定。 Asterisk,开始吧 -------------------------------------------------------------- 什么是asterisk?开源电话平台 Asterisk 通过了电话的开源平台。基本上就是一个软件的PBX。 最初是Digium 公司的Mark Spencer 编写的,这个公司就是他创立的,专门生产并销售Asterisk使用的硬件。Asterisk 简直就是一场电话的革命。 为什么使用Asterisk? 现在电信行业的混乱,因为各种专利技术应用在各种层次的网络上,导致很大的混乱。Asterisk 就是答案——给电信行业普遍的混乱环境带来秩序的革命。 专利技术有什么错? 没错,如果专利技术独立工作的话。就像你有剃须刀和剃须膏没错一样!但是让各种技术互相操作,专利技术就会除了要价过高、客户不满,以及缓慢的开发速度等问题之外的刻板和局限。 我们要Asterisk做什么? 根据情况而定。在一个小实验室,一个pc(x86),500MHz 的奔三,合适的内存,合适的电源,还有Linux (其他os也可以支持)。此外还有Digium 板卡插在系统中,以便连接本地PSTN。 Asterisk支持什么技术? 与 VoIP, PSTN, ISDN, AIX, SIP 有关的任何东西。 比较好的Asterisk参考书? <电话未来之路>(http://www.asterisk-docs.o... 找到,编译,安装,在第3,4章中,包含了到哪里去找那些文件之类的信息。还有编译时的需要注意的选项,需要配置的模块,和在运行时载入的模块。 相关: gcc, glibc-kernheaders, cpp, binutils, glibc-headers, glibc-devel 此外, 安装bison 和 open ssl 大多数标准的distro都自带 推荐distro:基于RedHat和 RH的 distro (版本没指定) 组件: Asterisk Zaptel libpri Asterisk:Asterisk 程序文件,还有配置,监控的工具 Zaptel: Zapata 项目中硬件的核心模块和驱动,如果要与PSTN或者其他网络接口,需要它。 libpri: 与Primary Rate Interface ISDN的接口库。 还有,如果基准时间参考,需要安装ztdummy 模块(第3章中解释) 有用的网页: PSTN: http://en.wikipedia.org/wi... G.729: http://en.wikipedia.org/wi... G.711: http://www.freesoft.org/CI... Digium: http://en.wikipedia.org/wi... Asterisk: http://en.wikipedia.org/wi... Free World Dial-up: http://en.wikipedia.org/wi... Asterisk Architecture: http://www.asteriskdocs.or... 重要链接: Putty: http://www.chiark.greenend... Asterisk 通道: http://www.voip-info.org/w... 重要信息: Asterisk machine on the LAN: 90.0.0.3 Asterisk的目录结构:(更确切的说,是Asterisk使用的目录) /etc 包含了zaptel.conf文件(只有一个) /usr/lib/asterisk/modules 所有的asterisk可载入的模块都在这里,一般来说,所以的模块都是启动的时候载入的 注意:要更改启动时载入的模块,或者是模块载入的方式,你可以修改/etc/asterisk/modules.conf文件 /etc/asterisk 包含了所有的asterisk配置文件 /var/lib/asterisk agi-bin: agi 脚本 固件:兼容设备固件 映像:在这个目录下寻找映像(如果通道支持) 关键字:这个文件中有基于RSA一类的认证关键字 mohmp3:当配置了持有音乐的时候,这个目录是放置mp3的(注意,mp3应该使用恒比特率编码,并且没有id标签。) sounds:所有的语音提示 /var/spool/asterisk qcall:撤销了——包含了特殊呼叫方法的呼叫信息文件——不是打电话的好方法,因为这种方式太硬性了——不再使用。使用outgoing替代。 Outgoing:现在打电话的法国闹事——呼叫信息目录普遍使用。 Tmp:中间/临时数据 Voicemail:语音和问候语。通过修改/etc/asterisk/voicemail.conf文件可以修改。 /var/run 处理系统中运行进程的id(包括asterisk) /var/log/asterisk Asterisk在这里生产日志,通过/etc/asterisk/logger.conf来配置。 /var/log/asterisk/cdr-csv 用来存储呼叫详细记录,逗号分割,例如csv(地址簿格式) 重要:很多时间会使用cdr,ast附件包的代码可以在mysql数据库中存储cdr,用于记录呼叫详细记录 外部交换借口/通道接口 FXO :Digium Dev-Lite kit上的红口:Foriegn eXchange Office:这个通道(接口)的动作角色是fxo,利用fxs协议——就是说这个模块需要插入到pstn。 FXS(Digium卡的绿口):Foriegn eXchange Station,它表现得像fxs,读的是fxo协议——所以要插入终端设备——注意,这里插pstn,会烧坏! 配置Foriegn eXchange Station文件: 让你对常见的通道接口进行管理/comm 通道硬件,决定如何在连接的设备之间进行握手。 注意:使用zapata.conf文件完成非常重要的通道配置——激活或者失效类似回形针、回声处理之类的功能。详细程度到pstn添加到那个端口,信令控制等——如果这里配置不正确,甭指望系统能工作正常。 拨号计划: 在extensions.conf中指定。 Dialplan: 拨号计划:在 /etc/asterisk 文件中 拨号计划语法由以下组成部分: 上下文(context) : 写在[]里面 , 定义上下文来创建独立的空间 注意:最重要的一个上下文的应用就是提供安全性:要获得更多信息,看安装文件中SECURITY 文件。 例如: [incoming] statement 1--- statement 2--- [next-context] 注意:当下一个定义的上下文开始的时候,现在这个上下文就结束了。 分机:非常简单。与普通的PBX一样。分机号的意思是你在连接到系统之后拨打的号码以获得某个终端/服务-不仅是 asterisk 分机以如下格式定义: exten => 分机的组成部分:exten => name, priority, application() 例如 exten => 123, 1, Answer() 的意思是当另一端拨打123,调用asterisk/apps /Answer(),优先级别为1。优先级别通常从1开始。数字越小,级别越高。例如,级别1就比级别2要高。(现在,有一些称为非数字化的级别——非常好,继续读!)一个很好的例子: exten => 123, 1, Answer() exten => 123, 2, Hangup() 会发生什么情况,无论什么人拨打123,系统都会首先执行answer(),然后当answer结束的时候,过渡到hungup()。你看,都是执行的顺序和优先级。 还有一些特殊的分机,例如s,比如我们前面的例子中123的位置,后面再解释 记住: 所有的优先级别都是从1开始,其他的必须遵循这个顺序。Ast不会处理其他的,会认为是出错。 分机可是任何,不仅是数字,例如名字。 优先级:我想在前面讨论分机的时候已经讨论了优先级别。 非数字的优先级: 我们会在Answer() ... Hangup() 后使用n来代替实际的优先级别数字。 exten => 123, 1, Answer() exten => 123, n, Hangup() Asterisk会自动给优先级别+1, 所以你就不用每次记着并输入这个数字了 Also, in Asterisk v2, we've got a way to put labels tp priorities: exten => 123, 1, Answer() exten => 123, n(Hangup), Hangup() Applications: 应用程序: 应用程序是真正执行你的拨号计划的程序。拨号计划定义了顺序——应用程序就按照它去做。工作内容可以是任何东西,从播放声音到接受当前通道上的按键输入。(http://www.voip-info.org/w...了解asterisk通道,虽然听起来很好笑,但是我是对通道很迷惑) 简而言之,应用程序是真正干活的,当有人拨打123的时候,参考以上示例。 我们可以通过友好的邻居应用程序传递参数,把它们放在逗号或者竖线分割的列表中。 例如: exten => 123, 1, DoSomething(Arg_1,Arg_2,Arg_3,..,Arg_n) 或者exten => 123, 1, DoSomething(Arg_1|Arg_2|Arg_3|..|Arg_n) 开源中,你随意! 特别分机: ‘s’是个特别的分机——它处理环境中任何的输入,没有特定目标。S意味着开始。 例如 [incoming] exten => s,1,application( ) exten => s,2,application( ) exten => s,3,application( ) 现在,只要呼叫进入,就带有最高级别,进入s。当我们补充了应用程序之后,我们就是创建了自己的拨号计划 填入应用程序名(分配正确的优先级别) exten => s,1,Answer( ) exten => s,2,Playback(hello-world) exten => s,3,Hangup( ) 这就是asg拨号计划了 这个拨号计划会: 1. 接电话 (接听已经建立了通道的呼叫,这个呼叫就是从这个通道来的,在进行任何处理之前,先把电话接听.没有参数传递。 2. 播放语音,给出了语音文件的路径,通常在 /var/lib/asterisk/sounds/, gsm 格式,后缀名为.gsm。如果有多个文件都符合这个文件名,ast就播放那个cpu负载(翻译成本)最小的,翻译成本与不同的文件格式有关。在cli下面输入show translation可以看到,参数,语音文件名,还有路径,如果这个文件没有在标准路径下。 3. 挂掉活动通道,主叫方就是从这个通道进行呼叫的,很必要,确保主叫没有继续拨号计划。没有参数 为拨号计划添加逻辑: Background() 应用程序: 它与 playback() 非常像, 只是在播放语音的时候,如果用户拨打号码,语音中断,然后呼叫那个分机。例如,主叫拨打分机x,会以第一优先级转到分机x上面去。 语法: Background(sound_file) 例子: extend => s,n,Background(sound_filename) 回拨语音文件,直到用户输入分机号,——在创建语音菜单的时候有用。 但是playback()不会接受输入,会一直拨,直到语音文件结束。 Goto() 应用: 如其名,主叫跳到某个 context / extension / priority上去. 语法: Goto(context, extension, priority) 例子: exten => 1,n,Goto(incoming,s,1) 把控制权交给下一个上下文,分机s, 优先级别 1 – 预先订制拨号计划跳转的流程, 链接: Xlite sip电话- 免费的: 载入Ubuntu: Ubuntu, 是一个比较新的桌面友好的distro ,放在Asterisk专用的机器上. 重要内容: Ubuntu 很好 – 对桌面来说 我们必须装很多内容才能在ast服务器上用. 所以一般来说: 不要使用桌面disrto ,如果你计划在上面跑服务器的话- Fedora 是更好的选择. 但是也没有坏处- 有耐心,万事可达. 载入Ubuntu的基本原因就是为了图形化工具Firefox和Acrobat。只是费很多CPU和内存,x历史遗留问题。 所以我们继续的是一台新机器,从新开始运行ast 下面开始真正体验ast系统。经过良好调整的Ubuntu可以阅读PDF文档。 带有safe_asterisk 脚本的ast二进制文件在/usr/sbin中,昨天咱们编译过了如果ast异常,safe_asterisk脚本会引起ast的core dump,默认情况下是在第9终端开启ast。 开始ast我们使用safe_asterisk脚本,或者运行ast二进制文件来手工启动ast。在运行safe_asterisk脚本的时候,在9终端上载入ast的CLI(终端号可以配置),执行ast二进制文件载入ast,作为后台程序 我们还可以用初始化脚本来启动或者关闭ast。 见书71页 求助: asterisk -h 其它命令行参数: -c 显示Asterisk CLI (或控制面板) -v 设置 CLI 的详细程度- 例如v (verbose), vv (very verbose), vvv (very very verbose) -g 告诉asterisk 创建core dump,一会用gdb调试 -r 远程-连接到一个已经运行的Asterisk进程上 (与网络远程连接没有关系) -rx远程执行 – 执行引号内的命令 ( "restart now") 不需要真的启动CLI 还有好多命令 Beginning an affair with Asterisk - Day 6 asterisk-dev 准备好 - asterisk-dev的配置: Distro: Ubuntu 5.10 (Breezy Badger) Asterisk version: 1.2.1 运行配置: 图形下完全多用户模式(运行级别5) asterisk-dev 机器上还装载了很多其他内容. 本章的任务: 1. Linux下Xlite客户端的配置,以便与asterisk-dev上我们的测试 Asterisk 服务器共同工作. 链接: Xten 网站: Xlite 下载页面e: 2. 录些 gsm 音频格式的音频文件: welcome messege timeout messege 我们使用免费的基于Windows的软件(aghhh..) 来进行录制,格式转换和音频标准化 . 它工作非常好,并且最重要符合我们的要求- 快速录制,不需要撞墙很长时间。 链接: 录制/ 转换/ 处理软件- 录制: Recordpad Trial Version - .au/reco... 音频转换(WAV to GSM): Switch Freeware Version - .au/swit... 音频编辑和处理: Wavepad Trial Version - .au/wave... 轻松快速创建音频文件,转换格式,并且标准化到正常的语音级别,让声音没有分叉。可惜不是开源并且在Linux下... . 注意:以上软件只是生成测试录音,为学习而已。Enterux Solutions (或者客户端, Enterux) 许可证要求不需用于任何商业目的。 这个开源的 zgsmplay 可用来测试我们的新gsm音频文件,在 Linux上 链接: 3. 写第一个拨号方案: 我们的分机配置文件 extensions.conf如下: [incoming] 欢迎界面, exten => s,1,Background(enterux/welcome) exten => i,1,Playback(enterux/invalid-extension) exten => i,n,Goto(incoming,s,1) exten => t,1,Playback(enterux/call-will-be-disconnected) exten => t,n,Hangup() ; 呼叫方可以拨打的用户分机 exten => 0,1,Dial(SIP/0) ; Operator exten => 1,1,Dial(SIP/1) ; Sales staff – 使用&连接多个接收者,例如 SIP/staff_1&Sip/staff_2 – 最先接起来的电话就被连接。 exten => 2,1,Dial(SIP/2) ; Support staff -使用&连接多个接收者,例如 SIP/staff_1&Sip/staff_2 – 最先接起来的电话就被连接。 exten => 202,1,Goto(incoming,s,1) exten => 201,1,Goto(incoming,s,1) 要使上面的拨号计划起作用, sip.conf 需要如下设置: [201] user=201 type=friend secret=1234 host=dynamic context=incoming [202] user=202 type=friend secret=1234 host=dynamic context=incoming [1234] user=1234 type=friend secret=1234 host=dynamic context=incoming ;用户添加 0-operator, 1-sales ,2-support [0] user=0 type=friend secret=1234 host=dynamic context=incoming [1] user=1 type=friend secret=1234 host=dynamic context=incoming [2] user=2 type=friend secret=1234 host=dynamic context=incoming 配置Xlite,完成拨号计划。 参考103页(拨号计划基本章节) 4.观察结果: 如果一个登录到ast服务器上的一个软电话拨打201/202,预记录就会播放欢迎语音。 "Welcome to Enterux Solutions. Press 0 for an operator, 1 for sales and 2 for Support. Thank you." 拨打0,1 , 2之后,通过Dial() 应用程序拨打合适的用户 如果分机号码不对,就播放语音 "You have dialled an invalid extension. Please try again.". 软件电话 Xlite 没有声音了,出错说找不到声音驱动 分别试验了Kiax ,Linphone. Twinkle Twinkle好用了. (仍然出错 "无法读 .DCOPserver_asterisk-dev_0; Please check that the dcopserver program is running" 在启动栏 – 这样就好了).继续,测试拨号计划 链接: Twinkle SoftPhone: http://www.twinklephone.co... 装好Twinkle (and a little prayer) 我们修改#1号拨号计划: extensions.conf 文件: [incoming] ; 欢迎 exten => s,1,Background(enterux/welcome) exten => i,1,Playback(enterux/invalid-extension) exten => i,n,Goto(incoming,s,1) exten => t,1,Playback(enterux/call-timeout) exten => t,n,Playback(enterux/thankyou) exten => t,n,Hangup() exten => 0,1,Playback(enterux/connecting-to-operator) exten => 0,n,Dial(SIP/0,10,r) ; Operator exten => 0,n,Playback(enterux/line-not-answering) exten => 0,n,Hangup() exten => 0,102,Playback(enterux/line-busy) exten => 0,103,Hangup() exten => 1,1,Playback(enterux/connecting-to-sales) exten => 1,n,Dial(SIP/1,10,r) ; &连接多个分机号码 exten => 1,n,Playback(enterux/line-not-answering) exten => 1,n,Hangup() exten => 1,102,Playback(enterux,line-busy) exten => 1,103,Hangup() exten => 2,1,Playback(enterux/connecting-to-support) exten => 2,n,Dial(SIP/2,10,r) ; &连接多个分机号码 exten => 2,n,Playback(enterux/line-not-answering) exten => 2,n,Hangup() exten => 2,102,Playback(enterux/line-busy) exten => 2,103,Hangup() exten => 202,1,Goto(incoming,s,1) exten => 201,1,Goto(incoming,s,1) (参考107页) sip.conf如下: [201] user=201 type=friend secret=1234 host=dynamic context=incoming [202] user=202 type=friend secret=1234 host=dynamic context=incoming [1234] user=1234 type=friend secret=1234 host=dynamic context=incoming ;用户添加 operator, sales and support [0] user=0 type=friend secret=1234 host=dynamic context=incoming [1] user=1 type=friend secret=1234 host=dynamic context=incoming [2] user=2 type=friend secret=1234 host=dynamic context=incoming 以下是拨号计划的内容: 系统可接收 0,1,2,201,202. 现在,我们的接线总机连到了201和202上面——就是说,欢迎信息只在拨打201和202分机时播放。 我们添加了超时、忙碌和没有应答的功能。阅读106页代码。 Ast的设置是,当没有人接听电话的时候,被叫分机就响2声,然后回拨错误消息。如果被叫的分机应答了,ast就接通,两个人可以占用一个全双工通道。 这是个非常简单的配置,只有最基本的应答函数,最基本的呼叫处理和连接两个用户的能力,用Dial()这个应用程序。我们实际测试过,虽然有实质的延迟,2-4秒,就好像是一个人在讲话,另一个人在重复。这确实存在。有能力的话就写几行代码让两个语音通道互连(相似类型或者不同类型)。 现在我们只试验 "incoming" 这一条,还添加了另外的 "internal" 并对这个文件extensions.conf 进行了验证: [incoming] ; Extensions for welcoming caller exten => s,1,Background(enterux/welcome) exten => i,1,Playback(enterux/invalid-extension) exten => i,n,Goto(incoming,s,1) exten => t,1,Playback(enterux/call-timeout) exten => t,n,Playback(enterux/thankyou) exten => t,n,Hangup() exten => 202,1,Goto(incoming,s,1) exten => 201,1,Goto(incoming,s,1) ; 呼叫正确的分机 exten => 0,1,Playback(enterux/connecting-to-operator) exten => 0,n,Dial(SIP/0,10,r) ; Operator exten => 0,n,Playback(enterux/line-not-answering) exten => 0,n,Hangup() exten => 0,102,Playback(enterux/line-busy) exten => 0,103,Hangup() exten => 1,1,Playback(enterux/connecting-to-sales) exten => 1,n,Dial(SIP/1,10,r) ; exten => 1,n,Playback(enterux/line-not-answering) exten => 1,n,Hangup() exten => 1,102,Playback(enterux,line-busy) exten => 1,103,Hangup() exten => 2,1,Playback(enterux/connecting-to-support) exten => 2,n,Dial(SIP/2,10,r) ; & 连接 SIP/staff_1&Sip/staff_2 exten => 2,n,Playback(enterux/line-not-answering) exten => 2,n,Hangup() exten => 2,102,Playback(enterux/line-busy) exten => 2,103,Hangup() [internal] exten => 0,1,Goto(Internal,0,1) exten => 1,1,Goto(Internal,1,1) exten => 2,1,Goto(Internal,2,1) sip.conf 文件如下所示: [201] user=201 type=friend secret=1234 host=dynamic context=incoming [202] user=202 type=friend secret=1234 host=dynamic context=incoming [1234] user=1234 type=friend secret=1234 host=dynamic context=incoming ; 0: operator, 1:sales and 2:support [0] user=0 type=friend secret=1234 host=dynamic context=internal [1] user=1 type=friend secret=1234 host=dynamic context=internal [2] user=2 type=friend secret=1234 host=dynamic context=internal 0,1 , 2的条款发生了变化从[incoming] 到 [internal] 与以前类似,只是现在要使用的是不同的contexts。 --------------------------------------------------- 在 Asterisk 拨号计划中使用变量 在拨号计划中使用变量 在 asterisk中设置变量: JOHN=SIP/1 引用变量Asterisk: exten => 123,1,Dial(${JOHN}) 很简单. 注意:不需要大写变量名 – 这里是为了清晰 变量的类型: 全局变量: 所有的context都可以访问的变量。 全局变量在拨号计划的最前面[globals] context中声明. 还可以在拨号计划中声明全局变量: [global] JOHN=SIP/1 或者 [some context] exten => 123,1,SetGlobalVar(JOHN=SIP/1) 全局变量的生命周期是到ast关闭为止。 渠道变量: 渠道变量与特定呼叫或者呼叫通道有关。 渠道变量的生命周期限制在呼叫的范围内. 有许多预定义的渠道变量- 见README.variables 文件 doc/ subdirectory. 设置渠道变量: exten => 123,1,Set(MAGICNUMBER=42) 环境变量: 提供了通过dialplans访问Unix环境变量的方法. 参考环境变量: UNIXPATH=${ENV(PATH)} Asterisk中的模式匹配: Asterisk 会尝试匹配任何以下划线开头的符号 你可以在模式匹配中使用如下的符号: X 表示 0 到 9 Z 表示 1 到 9 N 表示 2 到 9 [] 表示范围 (例如, [15-7] 匹配1,5,6 or 7) . 通配符 举例: _9. 会匹配所有以9开头的数字,例如 92, 932344,99999,91,等. _XXX 匹配3个数字的串,每个数字的范围是0到9,例如321, 999,123, 等. 使用匹配模式,:通常手工添加每个可能的分机是非常枯燥乏味的。模式匹配简单多了。 出线中继(Outbound trunk):要让用户可以通过ast网络拨打外面的电话号码,我们可以启用出线中继。 比较好的方案如下: -> 使用变量名来引用中继名。这可以让我们即时修改中继,不会引起错误 -> 使用编写正确的 context来合理划分拨号计划. 这可以保证系统免受意外,或者恶意的未经授权的使用。 下面看一些函数和条件分支,看看extensions.conf [incoming] ; s 和 t分机 exten => s,1,Background(enterux/welcome) exten => t,1,Hangup() ; 接受对201的呼叫 exten => 201,1,Goto(s,1) ; GotoIf() 函数 exten => 345,1,Set(TEST=greet) exten => 345,n,GotoIf([{TEST}=greet]?10:20) ; Asterisk 给 GotoIf传递一串参数 exten => 345,10,Playback(weasels-eaten-phonesys) exten => 345,20,Playback(office-iguanas) ; 倒数,使用 GotoIf() 和命名的优先级 exten => 346,1,Set(COUNT=10) exten => 346,n(say),SayNumber(${COUNT}) exten => 346,n,Set(COUNT=[{COUNT}-1]) exten => 346,n,GotoIf([{COUNT}>0]?say:thank) exten => 346,n(thank),Playba
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服