### Asterisk常用命令详解
Asterisk是一款非常强大的开源PBX解决方案,被广泛应用于构建通信应用和服务之中。本文将详细介绍Asterisk中的部分常用命令及其功能,帮助读者更好地理解和掌握Asterisk的基本操作。
#### 常规指令
1. **Authenticate**: 用于鉴别用户身份。
2. **VMAuthenticate**: 根据`voicemail.conf`配置文件来验证用户,主要用于语音邮箱功能。
3. **Curl**: 接收外部URLs的数据,支持POST请求。
4. **DUNDiLookup**: 使用DUNDi(Distributed Unix Number Database Interface)协议查询电话号码。
5. **SendDTMF**: 向通话中的另一方发送DTMF(Dual Tone Multi-Frequency)信号。
6. **SendImage**: 发送图像文件。
7. **SendText**: 发送文本消息给客户端。
8. **SendURL**: 发送URL链接给客户端显示。
9. **System**: 执行系统级别的命令。
10. **Transfer**: 将通话转移至另一个扩展号码。
11. **TrySystem**: 类似于`System`命令,但在通道状态为0时尝试执行。
12. **Wait**: 暂停一段时间。
13. **WaitExten**: 暂停一段时间后继续执行下一个动作。
14. **WaitForRing**: 等待呼叫请求。
15. **WaitMusicOnHold**: 在等待期间播放背景音乐。
#### 计费相关命令
1. **ForkCDR**: 将Call Detail Record (CDR)分割成两个独立的部分。
2. **NoCDR**: 禁止Asterisk为特定的呼叫保存CDR。
3. **ResetCDR**: 重置CDR数据。
4. **SetAccount**: 设置账户编号。
5. **SetAMAflags**: 设置AMA (Automatic Message Accounting) 标志位,控制CDR的创建。
6. **SetCDRUserField**: 设置CDR的用户字段。
7. **AppendCDRUserField**: 给CDR的用户字段追加数据。
#### 呼叫管理
1. **Answer**: 回应一个正在振铃的通道。
2. **Busy**: 显示忙音并等待挂机。
3. **ChanIsAvail**: 检查通道是否可用。
4. **Congestion**: 显示线路拥挤的提示音,并等待挂机。
5. **Dial**: 拨打指定的号码或通道。
6. **DISA**: Direct Inward System Access,提供直接访问内部系统的功能。
7. **Hangup**: 无条件挂断电话。
8. **Ringing**: 显示正在振铃的状态。
#### 呼叫者信息管理
1. **CallingPres**: 更改呼叫者身份信息。
2. **LookupBlacklist**: 从黑名单数据库中查找来电者的信息。
3. **LookupCIDName**: 从本地数据库中查找来电者的名称。
4. **PrivacyManager**: 如果没有来电显示,则要求输入电话号码。
5. **SetCallerID**: 设置呼叫者ID,如果有冲突则遵循已存在的CallerID。
6. **SetCallerPres**: 设置独立通道上的呼叫者信息。
7. **SetCIDName**: 设置呼叫者的名字,如果有冲突则遵循已存在的CallerID。
8. **SetCIDNum**: 只设置呼叫者的电话号码(不包括名字),如果有冲突则遵循已存在的CallerID。
9. **SoftHangup**: 请求挂断并转向另一个通道。
10. **Zapateller**: 阻止远程呼入,通常用于防止恶意电话。
#### ADSI 相关
1. **ADSIProg**: 加载Asterisk ADSI 脚本到电话。
2. **GetCPEID**: 获取ADSICPEID。
#### 数据库操作
1. **DBdel**: 从数据库中删除一个键。
2. **DBdeltree**: 从数据库中删除一组键。
3. **DBget**: 从数据库中获取值。
4. **DBput**: 向数据库中存储值。
5. **MYSQL**: 执行MySQL数据库操作。
#### 应用集成
1. **AGI**: 执行AGI(Asterisk Gateway Interface)脚本。
2. **DeadAGI**: 在挂断的通道上执行AGI。
3. **EAGI**: 执行扩展AGI。
4. **EnumLookup**: 在ENUM(Electronic Number Mapping)中查找号码。
5. **Macro**: 执行宏命令。
6. **NoOp**: 不执行任何操作,常用于调试时打印变量值。
7. **Perl**: 使用Perl脚本。
8. **PHP**: 使用PHP脚本。
9. **Read**: 通过DTMF读取变量值。
10. **TXTCIDName**: 从TXT记录中查找来电者姓名。
11. **UserEvent**: 发送自定义事件给监控程序。
#### 控制流与时限
1. **AbsoluteTimeout**: 设置呼叫的最大时限。
2. **DigitTimeout**: 设置两次按键之间的最大时间间隔。
3. **Goto**: 跳转到指定的目标代码、扩展名和段落。
4. **GotoIf**: 条件跳转。
5. **GotoIfTime**: 当前时间条件下的跳转。
6. **Random**: 在拨号表中随机选择一个目标。
7. **ResponseTimeout**: 设置响应的最大等待时间。
8. **While**: 开始循环。
9. **EndWhile**: 结束循环。
10. **ExecIf**: 条件执行。
#### 字符串与变量操作
1. **Cut**: 字符串处理函数。
2. **ImportVar**: 导入变量。
3. **Math**: 进行基本数学运算。
4. **Prefix**: 设置字符串前缀。
5. **SetGlobalVar**: 设置全局变量。
6. **Set**: 设置通道变量和功能值。
7. **SetVar**: 设置变量值(不覆盖已存在的变量)。