Asterisk 权威指南,第四版 - The Definitive Guide, 4th Edition
读书笔记
Ch1. 电话技术革命
Ch2. 架构
Ch3. 安装
Ch4. 初始配置
Ch5. 用户设备配置
Ch6. 拨号计划基础
Ch7. 外部连通性
Ch8. 语音信箱
- app_voice mail.so
- 特性
- 不限的密码保护的语音信箱.
- 不同的问候,忙音和无效状态
- 不同的自定义问候语
- 语音信箱和电话之间多对多关联
- 邮件提醒并在附件中附上语音文件
- 语音邮件转发和广播
- 消息等待提示
- voicemail.conf
- 密码
mailbox context oldpass newpass
mailbox => password[,FirstName LastName[,email addr[,pager addr [,options[|options]]]]]
- VoiceMail(mailbox1&[mailbox2[&...]],[options])
- 特殊 DTMF 操作
0
跳转到o
扩展*
跳转到a
扩展
- VMSTATUS
- SUCCESS
- USEREXIT
- FAILED
- options
- b - 播放忙音
- d( c ) - Accept digits for a new extension in context c, if played during the greeting. Context defaults to the current context.
- c
- g( # ) - Use the specified amount of gain when recording the voicemail message. The units are whole-number decibels (dB). Only works on supported technologies, which is DAHDI only.
- s - 不播放任何提示音
- u - 播放无效音(unavailable greeting)
- U - 标记消息 URGENT.
- P - 标记消息 PRIORITY.
- 特殊 DTMF 操作
- VoiceMailMain([mailbox@[context]],[options])
- 特殊 DTMF 操作
*
跳转到a
扩展
- options
- p - Consider the mailbox parameter as a prefix to the mailbox that is entered by the caller.
- g( # ) - Use the specified amount of gain when recording a voicemail message. The units are whole-number decibels (dB).
- s - 不检测密码
- a( folder ) - 跳过目录询问, 直接进入指定目录. 默认为 INBOX (0).
- folder
- 0 - 收件箱 - INBOX
- 1 - 旧邮件 - Old
- 2 - 工作 - Work
- 3 - 家庭 - Family
- 4 - 朋友 - Friends
- 5 - 自定义 1 - Cust1
- 6 - 自定义 2 - Cust2
- 7 - 自定义 3 - Cust3
- 8 - 自定义 4 - Cust4
- 9 - 自定义 5 - Cust5
- folder
- 特殊 DTMF 操作
- VoiceMailPlayMsg([mailbox@[context]],msg_id)
- VOICEMAIL_PLAYBACKSTATUS
- SUCCESS
- FAILED
- VOICEMAIL_PLAYBACKSTATUS
extensions.conf
; 根据状态不同进行不同的提示
exten => 101,1,NoOp()
same => n,Dial(${JOHN},10)
same => n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail) same => n(unavail),VoiceMail(101@default,u)
same => n,Hangup()
same => n(busy),VoiceMail(101@default,b)
same => n,Hangup()
; 进入语言信箱
exten => *98,1,NoOp(Access voicemail retrieval.)
same => n,VoiceMailMain()
Ch9. 国际化
Ch10. 深入拨号计划
MeetMe
- 创建密码保护的会议
- 会议管理
- 静音
- 锁定
- 踢出参与者
- 可以选择只允许单人发话
- 静态或动态的会议创建
- 需要 DAHDI 支持
meetme.conf
[rooms]
conf => 600
extensions.conf
[LocalConf]
; 54321 为密码
exten => 600,1,MeetMe(600,i,54321)
; MeetMeCount(room[, var])
; 获取会议人数, 并指定到变量, 如果不指定则会报给对方
exten => 601,1,NoOp()
same => n,Playback(conf-thereare)
same => n,MeetMeCount(600)
same => n,Playback(conf-peopleinconf)
; 限制最多 10 人参与会议
exten => 602,1,NoOp()
same => n,MeetMeCount(600,CONFCOUNT)
same => n,GotoIf($[${CONFCOUNT} <= 10]?meetme:conf_full,1)
same => n(meetme),MeetMe(600,i,54321)
exten => conf_full,1,Playback(conf-full)
ConfBridge
- Asterisk 10+
- 用来替代 MeetMe 的应用
- 新特性
- 高清音频, 8kHz - 96kHz
- 视频
- 动态控制菜单
- 额外的配置文件 confbridge.conf
confbridge.conf
[general]
[default_user]
type=user
[default_bridge]
type=bridge
extensions.conf
; ConfBridge(conference,[bridge_profile:default_bridge,[user_profile:default_user,[menu]]])
; https://wiki.asterisk.org/wiki/display/AST/Asterisk+14+Application_ConfBridge
[ConferenceRooms]
exten => 602,1,NoOp()
same => n,ConfBridge(${EXTEN})
[LocalSets]
include => ConferenceRooms
asterisk -rx "module load app_confbridge.so"
Ch11. Parking, Paging, and Conferencing
- Parking 呼叫保留, Paging 寻呼
- features.conf
- general
- featuremap
- applicationmap
- 重载配置
features reload
- 重载 ConfBridge
module reload app_confbridge.so
- Asterisk 11+ 后可以使用
FEATURE
和FEATUREMAP
函数动态创建特性映射(Feature-Map).- FEATURE(option_name)
- option_name
- atxfer Attended transfer
- blindxfer Blind transfer
- automon Auto Monitor() (call recording)
- disconnect Call disconnect
- parkcall Call parking
- automixmon Auto MixMonitor() (call recording)
- 修改超时
Set(FEATURE(parkingtime)=60)
- option_name
- FEATUREMAP(feature_name)
- feature_name
- atxfer - Attended Transfer
- blindxfer - Blind Transfer
- automon - Auto Monitor
- disconnect - Call Disconnect
- parkcall - Park Call
- automixmon - Auto MixMonitor
- 设置或获取特定通道的特性映射
Verbose(2,Current DTMF for atxfer: ${FEATUREMAP(atxfer)})
Set(FEATUREMAP(atxfer)=*9)
- feature_name
Set(__DYNAMIC_FEATURES=shifteight)
使用自定义的特性组
- FEATURE(option_name)
- Page(Technology/Resource&[Technology2/Resource2[&...]],[options,[timeout]])
- Read(variable,filename&[filename2[&...]],[maxdigits,[options,[attempts,[timeout]]]]])
- 读取
#
结尾的数字 - READSTATUS - 读取状态
- OK
- ERROR
- HANGUP
- INTERRUPTED
- SKIPPED
- TIMEOUT
- maxdigits
- 最大长度,默认 0, 不限, 等待用户输入
#
, 最长 255
- 最大长度,默认 0, 不限, 等待用户输入
- options
- s - 如果线路中断则立即返回
- i - 将文件名作为 indications.conf 中定义的提示音进行播放
- n - 即便是线路状态中断也读取
- attempts
- 尝试次数, 默认 0
- timeout
- 超时时间, 秒, 如果设置了则会覆盖默认值,可以为浮点数
- 读取
- Originate(tech_data,type,arg1,[arg2,[arg3,[timeout]]])
- 外部呼叫,并关联到指定的扩展或应用.会阻塞直到接通或失败.该应用会返回并继续处理.
- ORIGINATE_STATUS - 返回状态
- FAILED
- SUCCESS
- BUSY
- CONGESTION
- HANGUP
- RINGING
- UNKNOWN - 正常情况下是不会出现该值的,如果出现了请前去提 BUG
- ConfBridge
- 支持视频,但 Asterisk 不支持视频转码,需要所有人都使用同样的编码
- 不支持视频广播,在同一时间只能显示一个视频源
- 在 sip.conf 中配置
videosupport=yes
- 在 confbridg.conf bridge 中配置
video_mode
- none
- follow_talker - 会将视频源切换为说话的人
- last_marked
- first_marked
sip show peer 0F1
可查看对视频的支持状态和支持的编码- https://jitsi.org/
- 推荐使用 H.264/H.263 编码
overhead paging system (PA system, or Tannoy, for our UK readers) paging system (more formally known as a public address system) https://en.wikipedia.org/wiki/Public_address_system
extensions.conf
; 启用在 applicationmap 中定义的特性
exten => 101,1,NoOp()
same => n,Set(__DYNAMIC_FEATURES=agi_test)
same => n,Dial(SIP/0000FFFF0002)
; 等待标记的用户进入会议
[ConferenceRooms]
; 一般参与者
exten => 602,1,NoOp()
same => n,Set(CONFBRIDGE(user,wait_marked)=yes)
same => n,Set(CONFBRIDGE(user,end_marked)=yes)
same => n,Goto(conference,1)
; 标记的参与值,需要密码
exten => 603,1,NoOp()
same => n,Set(CONFBRIDGE(user,marked)=yes)
same => n,Set(CONFBRIDGE(user,pin)=1200)
same => n,Goto(conference,1)
; 所有人都使用同样的桥接
exten => conference,1,NoOp()
same => n,ConfBridge(primary)
[ConferenceRooms]
; 一般参与者
exten => 602,1,NoOp()
same => n,Goto(conference,1)
exten => conference,1,NoOp()
same => n,Set(thisBridge=primary)
same => n,ConfBridge(${thisBridge},,,volume_ctrl_menu)
; 由菜单执行
exten => conference_joiner,1,NoOp()
same => n,Read(numberToDial,vm-enter-num-to-call)
same => n,Originate(SIP/my_itsp/${numberToDial},exten,ConferenceRooms,602,1)
confbridge.conf
[volume_ctrl_menu]
type=menu
*5=toggle_mute
1=increase_listening_volume 4=decrease_listening_volume
7=reset_listening_volume
3=increase_talking_volume
6=decrease_talking_volume
9=reset_talking_volume
; 特殊的菜单功能
0=dialplan_exec(ConferenceRooms,conference_joiner,1)
Ch12. 网络通话路由
Ch13. 自动呼叫分发队列 - ACD Queue
-
ACD: Automatic Call Distribution
-
member & agent
- Asterisk 中的 member 是指能够进行拨号的通道.例如 SIP/0F1
- agent 一般也指用来拨号的通道,但现在 agent 通道现在已经不再使用了.因此不建议使用 chan_agent.
- agent 可用来特指接线员.
-
queues.conf
-
AddQueueMember()
-
RemoveQueueMember()
-
PauseQueueMember()
-
UnpauseQueueMember()
# 重载配置
module reload app_queue.so
queue show
# W: Queue weight
# C: Number of calls presented to this queue
# A: Number of calls that have been answered by a member SL: Service level
# 成员管理
# queue add member <channel> to <queue> [[[penalty <penalty>] as <membername>] state_interface <interface>]
queue add member SIP/0F1 to support
queue show support
queue remove member SIP/0F1 from support
queue pause member SIP/0F1 queue support reason DoingCallbacks
queue unpause member SIP/0F1 queue support reason off-break
extensions.conf
[Queues]
exten => 7001,1,Verbose(2,${CALLERID(all)} entering the support queue)
same => n,Queue(support)
same => n,Hangup()
exten => 7002,1,Verbose(2,${CALLERID(all)} entering the sales queue)
same => n,Queue(sales)
same => n,Hangup()
[LocalSets]
include => Queues ; allow phones to call queues
Ch14. 设备状态
虚拟设备 | 描述 |
---|---|
MeetMe:<conference bridge> | |
SLA:<shared line> | |
Custom:<custom name> | |
Park:<exten@context> | |
Calendar:<calendar name> |
Ch15. 自动出席
Ch16. 关系型数据库集成
Ch17. 交互语言响应 - IVR
Ch18. 外部服务
Ch19. 传真
Ch20. 管理接口 - AMI
Ch21. 网关接口 - AGI
Ch22. 集群
Ch23. 分布式全球号码发现 - DUNDi
- Distributed Universal Number Discovery (DUNDi)
- DUNDi