3.1.9 通话语音

作者:闫国梁

最后更新时间:2020年7月7日

通话语音

对于只支持 4G 的 CAT1模块(Air720UG、Air724UG)而言,需要用本命令打开 VOLTE 功能才能进行语音通话。而 Air720UH 模块支持 4G 和 2G,而 2G 支持语音通话,所以不需要打开 VOLTE 就可以进行语音通话。 ## AT模式 ### 发起呼叫:ATD 执行命令,用于发出语音呼叫,呼叫号码长度不超过20位。 语法规则:

命 令 类 型

语法

返回和说明

执 行 命 令

ATD;

命令成功,则返回:OK 如果 成功建立连接,则返回:CONNECT如果没检测到拨号音 dial tone(并且当 ATX2 or ATX4 时): NO DIALTONEIf busy(并且当 ATX3 or ATX4): BUSY通话被挂断或建立失败: NO CARRIER如果被叫无应答: NO ANSWER

ATD

数据呼叫成功,则返回:

参数定义:

参数

定义

取值

对取值的说明

呼叫号码

由以下字符组成:0-9, * , #, +, A, B, C 注:拨 112 可以建立紧急呼叫,不需要 SIM 卡。

举例:

命令(→) /返回(←)

实例

解释和说明

AT+SE TVOLTE=1

打开VOLTE功能

OK

注:对于只支持4G的CAT1模块(Air720UG、 Air724UG)而言,需要用 AT+SETVOLTE=1 命令打开 VOLTE 功能才能进行语音通话。而 Air720UH 模块支持 4G 和 2G,所以不需要打开 VOLTE 就可以进行语音通 话

ATD1316 23***98;

语音 呼叫号码13162398(是为了保护隐私, 将实际数字隐去,实际操作时要如实输入号码)

OK CONNECT

对方接听电话

AT+CHUP

模块主动挂断通话

OK

返回OK

6.3接听来电:ATA 有只有一个来电(RING)时,输入该命令接听来电。当有更多的来电时,请使用 AT+CHLD命令接听新的来电。 语法规则:

命令类型

语法

返回和说明

执行命令

ATA

OK

举例:

命令(→)/返回(←)

实例

解释和说明

←(URC)

RING

有RING上报,表示有来电。 注:RING 是一个URC命令(Unsolicited Result Code )

ATA

模块接听来电

OK

返回OK,说明接听来电成功

挂断通话:ATH

通话过程中,输入执行命令会挂断所有电话,包括当前通话(active)、等待通话(waiting)和挂起通话(holding)。 语法规则:

命令类型

语法

返回和说明

执行命令

ATH

OK

举例:

命令(→)/返回(←)

实例

解释和说明

←(URC)

RING

有RING上报,表示有来电。

ATA

模块接听来电

OK

建立通话

ATH

挂断通话

OK

OK

挂断通话:AT+CHUP

通话过程中,输入执行命令会挂断所有电话,包括当前通话(active)、等待通话(waiting)和挂起通话(holding)。 作用与 ATH 相同。 语法规则:

命令类型

语法

返回和说明

执行命令

AT+CHUP

OK

列出所有当前的呼叫:AT+CLCC

语法规则:

命令类型

语法

返回

| 执行命令 | AT+CLCC | [+CLCC:,

,,,[,,[,]][+CLCC:,

,,,[,,[,]][…]]] | | 测试命令 | AT+CLCC=? | OK |

参数定义:

参数

定义

取值

对取值的说明

呼叫识别 id

整数型;请参考3GPP TS22.030中第 4.5.5.1 节中描述,此参数可在+CHLD命令中被使用

|

呼叫方向 | 0 | 移动发起的呼叫(MO 呼叫) |
 | | 1 | 移动终止的呼叫(MT 呼叫) |
| 呼叫状态 | 0 | active |
 | | 1 | held |
 | | 2 | dialing(MO 呼叫) |
 | | 3 | alerting(MO 呼叫) |
 | | 4 | incoming(MT 呼叫) |
 | | 5 | waiting(MT 呼叫) |
 | | 7 | released(by network) |
| 承载/电信业务 | 0 | 语音 |
 | | 1 | 数据 |
 | | 2 | 传真 |
| 该呼叫是否属于多方呼叫 | 0 | 不属于 |
 | | 1 | 属于 |
| 对方号码 | - | 字符串类型,需加双引号。电话号码格式符合 定义 |
| 呼叫号码类型,具体请参考 3GPPTS 24008 10.5.4.7 部分 | 129 | 未知类型 |
 | | 145 | 国际号码 |
 | | 161 | 国内号码 |
 | | 177 | 特殊的网络号码 |
| 对应的电话簿中姓名 | - | 字符型 |

举例:

命令(→)/返回(←)

实例

解释和说明

ATD10086;

语音呼叫号码10086

OK

AT+CLCC

对方接听 电话前查询下通话情况

+CLCC: 1,0, 2,0,0,“10086”,129,”” OK

=2 表示 拨号中,对方尚未接听

CONNECT

对方接听

AT+CLCC

此时再查询下通话状态

+CLCC: 1,0, 0,0,0,“10086”,129,””

= 0 表 示电话接通并保持激活

OK

AT+CHUP

挂电话

OK

AT+CLCC

显示通话状态

OK

只有 一个OK,表示没有通话

呼叫保持和多方通话:AT+CHLD

使用该指令,可以控制 TA的附加业务:呼叫保持和多方通话。呼叫能被保持,恢复,释放和加入多方通话。

语法规则:

命令类型

语法

返回

设置命令

AT+CHLD=

OK

测试命令

AT+CHLD=?

+CHLD: (取值列表) OK

语法规则:

参数

定义

取值

对取值的说明

整数型

0

释放所有已保持的呼叫或者 为等待中的呼叫设置用户决定用户忙(UDUB)条件

1

如果存在当前呼叫,释放所有 当前呼叫并接听另外一个已保持或等待中的呼叫

1X

释放当前某一特定的呼叫X

2

如果存在当前呼叫,保持所有 当前呼叫并接听另外一个已保持或等待中的呼叫

2X

保持除呼叫 X 外的所有当前呼叫

3

将一个被保持(held)的通话 加入到活跃(active)通话中(建立多方通话)

举例:

命令 (→)/ 返 回(←)

实例

解释和说明

AT+CCWA=1,1

OK

ATD137******98;

呼叫137******98

OK

← (URC)

CONNECT

对方 接听,通话建立,双方通话中

← (URC)

+CCWA: “13601*****97”,129,1

有又一个电 话进来,此时会有如此URC上报

AT+CHLD=2

HOLD第一 路(+CLCC中id=1),接通第二路 (+CLCC中id=2)

OK

AT+CLCC

查询下当前所有当前通话

+CLCC: 1,0,1,0,0,“137******98”,129 +CLCC: 2,1,0,0, 0,“13601*****97”,128,“TEST” OK

第一路 第三个参数即=1,表示被保持 第二路=0,表示正处激活状态

AT+CHLD=21

切回到第一路

OK

AT+CHLD=3

建立三方通话(前 提为:SIM卡已经开通此功能)

OK

AT+CHLD=11

释放第一路

OK

产生 DTMF 音:AT+VTS

DTMF(Double Tone Multiple Frequency,双音多频),用来在电话建立以后拨打分机号码或自动语音服务。 语法规则:

命令类型

语法

返回和说明

设置命令

AT+VTS=或 AT+VTS=[,]

OK

测试命令

AT+VTS=?

+VTS:(取值列表),(取值列表) OK

参数定义:

参数

定义

取 | 对取值的说明 值 |

单个 DTMF

单个 ASCII 字符,不需要双引号””。范围如下 0-9, #,*, A-D。DTMF 持续时间定义如下: 如果AT+VTS=,则持续时间通过命令+VTD 来设置;如果AT+VTS=,,则持续时间通过定义

持续 时间

1 0

tone 的持续时间,以1/10 秒为单位

举例:

命令(→)/ 返回(←)

实例

解释和说明

AT+VTS=?

+VTS: (0-9 ,*,#,A,B,C,D),(1-10) OK

以下的例子 是拨打总机接通后,再 用DTMF拨打分机109:

ATD10086;

拨打10086

OK CONNECT

接通

AT+VTS=2

选择自 动语音服务中的2服务

OK

DTMF TONE 周期:AT+VTD

语法规则:

命令类型

语法

返回

设置命令

AT+VTD=

OK

查询命令

AT+VTD?

+VTD: OK

测试命令

AT+VTD=?

  • VTD: (取值列表) OK

参数定义:

参数

定义

取值

对取值的说明

Tone的长度

1~10

以1/10 秒为单位的tone 持续时间

LUAT模式

模块功能:通话管理 ### cc.anyCallExist() 是否存在通话

  • 参数

  • 返回值

bool result 存在通话返回true,否则返回false

  • 例子

result = cc.anyCallExist()

cc.getState(num)

查询某个号码的通话状态

  • 参数 | 传入值类型 | 释义 | | — | — | | string | num 查询号码 |

  • 返回值

number state 通话状态,状态值参考本模块Fields定义

  • 例子

state = cc.getState('10086')

cc.dial(num, delay)

呼出电话

  • 参数 | 传入值类型 | 释义 | | — | — | | string | num 呼出号码 | | number | 可选参数,默认为``0``,delay 延时delay毫秒后,才发起呼叫 |

  • 返回值

bool result,true表示允许发送at命令拨号并且发送at,false表示不允许at命令拨号

  • 例子

cc.dial('10086')

cc.hangUp(num)

挂断通话

  • 参数 | 传入值类型 | 释义 | | — | — | | string | num 号码,若指定号码通话状态不对 则直接退出 不会执行挂断,若挂断时会挂断所有电话 |

  • 返回值

nil

  • 例子

cc.hangUp('10086')

cc.accept(num)

接听电话

  • 参数 | 传入值类型 | 释义 | | — | — | | string | num 号码,若指定号码通话状态不对 则直接退出 不会接通 |

  • 返回值

nil

  • 例子

cc.accept('10086')

cc.transVoice(data, loop, downLinkPlay)

通话中发送声音到对端,必须是12.2K AMR格式

  • 参数 | 传入值类型 | 释义 | | — | — | | string | data 12.2K AMR格式的数据 | | bool | 可选参数,默认为``nil``,loop 是否循环发送,true为循环,其余为不循环 | | bool | 可选参数,默认为``nil``,downLinkPlay 声音是否在本端播放,true为播放,其余为不播放 |

  • 返回值

bool result true为成功,false为失败

  • 例子

cc.transVoice("#!AMR\010\060*********")
cc.transVoice("#!AMR\010\060*********",true)
cc.transVoice("#!AMR\010\060*********",true,true)

cc.dtmfDetect(enable, sens)

设置dtmf检测是否使能以及灵敏度

  • 参数 | 传入值类型 | 释义 | | — | — | | bool | 可选参数,默认为``nil``,enable true使能,false或者nil为不使能 | | number | 可选参数,默认为``3``,sens 灵敏度,最灵敏为1 |

  • 返回值

nil

  • 例子

cc.dtmfDetect(true)

cc.sendDtmf(str, playtime, intvl)

发送dtmf到对端

  • 参数 | 传入值类型 | 释义 | | — | — | | string | str dtmf字符串,仅支持数字、ABCD*# | | number | 可选参数,默认为``100``,playtime 每个dtmf播放时间,单位毫秒 | | number | 可选参数,默认为``100``,intvl 两个dtmf间隔,单位毫秒 |

  • 返回值

nil

  • 例子

cc.sendDtmf("123")