通话语音
========
作者:闫国梁
最后更新时间:2020年7月7日
.. _通话语音-1:
通话语音
--------
对于只支持 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 | 打开VOLTE功能 |
| | TVOLTE=1 | |
+-------------+----------+--------------------------------------------+
| ← | OK | 注:对于只支持4G的CAT1模块(Air720UG、 |
| | | Air724UG)而言,需要用 AT+SETVOLTE=1 |
| | | 命令打开 VOLTE 功能才能进行语音通话。而 |
| | | Air720UH 模块支持 4G 和 2G,所以不需要打开 |
| | | VOLTE 就可以进行语音通 话 |
+-------------+----------+--------------------------------------------+
| → | ATD1316 | 语音 |
| | 23***98; | 呼叫号码131623\ **98(**\ 是为了保护隐私, |
| | | 将实际数字隐去,实际操作时要如实输入号码) |
+-------------+----------+--------------------------------------------+
| ← | 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:,
.. raw:: html
,,,[,,[,]][+CLCC:,
.. raw:: html
,,,[,,[,]][…]]] \| \| 测试命令 \| AT+CLCC=? \| OK \|
参数定义:
+------+-------------+------+---------------------------------------+
| 参数 | 定义 | 取值 | 对取值的说明 |
+======+=============+======+=======================================+
| | 呼叫识别 id | - | 整数型;请参考3GPP TS22.030中第 |
| | | | 4.5.5.1 |
| | | | 节中描述,此参数可在+CHLD命令中被使用 |
+------+-------------+------+---------------------------------------+
\|
.. raw:: html
| 呼叫方向 \| 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: | =2 |
| | 1,0, | 表示 |
| | 2,0,0,“10086”,129,"" | 拨号中,对方尚未接听 |
| | OK | |
+---------------------+----------------------+----------------------+
| ← | CONNECT | 对方接听 |
+---------------------+----------------------+----------------------+
| → | AT+CLCC | 此时再查询下通话状态 |
+---------------------+----------------------+----------------------+
| ← | +CLCC: | = 0 |
| | 1,0, | 表 |
| | 0,0,0,“10086”,129,"" | 示电话接通并保持激活 |
+---------------------+----------------------+----------------------+
| | 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 | |
+---------+-----------------------------+-----------------------------+
| ← | CONNECT | 对方 |
| (URC) | | 接听,通话建立,双方通话中 |
+---------+-----------------------------+-----------------------------+
| ← | +CCWA: “13601*****97”,129,1 | 有又一个电 |
| (URC) | | 话进来,此时会有如此URC上报 |
+---------+-----------------------------+-----------------------------+
| → | AT+CHLD=2 | HOLD第一 |
| | | 路(+CLCC中id=1),接通第二路 |
| | | (+CLCC中id=2) |
+---------+-----------------------------+-----------------------------+
| ← | OK | |
+---------+-----------------------------+-----------------------------+
| → | AT+CLCC | 查询下当前所有当前通话 |
+---------+-----------------------------+-----------------------------+
| ← | +CLCC: | 第一路 |
| | 1,0,1,0,0,“137******98”,129 | 第三个参数即=1,表示被保持 |
| | +CLCC: | 第二路=0,表示正处激活状态 |
| | 2,1,0,0, | |
| | 0,“13601*****97”,128,“TEST” | |
| | OK | |
+---------+-----------------------------+-----------------------------+
| → | 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
======== ==================== =============================
参数定义:
+-------+------+---+---------------------------------------------------+
| 参数 | 定义 | 取 | 对取值的说明 |
| | | 值 | |
+=======+======+===+===================================================+
| | 单个 | | 单个 ASCII 字符,不需要双引号””。范围如下 0-9, |
| | DTMF | | #,*, A-D。DTMF 持续时间定义如下: |
| | | | 如果AT+VTS=,则持续时间通过命令+VTD |
| | | | 来设置;如果AT+VTS=,,则持续时间通过定义 |
+-------+------+---+---------------------------------------------------+
| | 持续 | 1 | tone 的持续时间,以1/10 秒为单位 |
| | 时间 | ~ | |
| | | 1 | |
| | | 0 | |
+-------+------+---+---------------------------------------------------+
举例:
+----------------------+----------------------+----------------------+
| 命令(→)/ 返回(←) | 实例 | 解释和说明 |
+======================+======================+======================+
| → | 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()\ `¶ <#ccanycallexist>`__
是否存在通话
- 参数
无
- 返回值
bool result 存在通话返回true,否则返回false
- 例子
::
result = cc.anyCallExist()
--------------
cc.getState(num)\ `¶ <#ccgetstatenum>`__
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
查询某个号码的通话状态
- 参数 \| 传入值类型 \| 释义 \| \| — \| — \| \| string \| num 查询号码
\|
- 返回值
number state 通话状态,状态值参考本模块Fields定义
- 例子
::
state = cc.getState('10086')
--------------
cc.dial(num, delay)\ `¶ <#ccdialnum-delay>`__
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
呼出电话
- 参数 \| 传入值类型 \| 释义 \| \| — \| — \| \| string \| num 呼出号码
\| \| number \| **可选参数,默认为\ ``0``**\ ,delay
延时delay毫秒后,才发起呼叫 \|
- 返回值
bool
result,true表示允许发送at命令拨号并且发送at,false表示不允许at命令拨号
- 例子
::
cc.dial('10086')
--------------
cc.hangUp(num)\ `¶ <#cchangupnum>`__
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
挂断通话
- 参数 \| 传入值类型 \| 释义 \| \| — \| — \| \| string \| num
号码,若指定号码通话状态不对 则直接退出
不会执行挂断,若挂断时会挂断所有电话 \|
- 返回值
nil
- 例子
::
cc.hangUp('10086')
--------------
cc.accept(num)\ `¶ <#ccacceptnum>`__
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
接听电话
- 参数 \| 传入值类型 \| 释义 \| \| — \| — \| \| string \| num
号码,若指定号码通话状态不对 则直接退出 不会接通 \|
- 返回值
nil
- 例子
::
cc.accept('10086')
--------------
cc.transVoice(data, loop, downLinkPlay)\ `¶ <#cctransvoicedata-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)\ `¶ <#ccdtmfdetectenable-sens>`__
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
设置dtmf检测是否使能以及灵敏度
- 参数 \| 传入值类型 \| 释义 \| \| — \| — \| \| bool \|
**可选参数,默认为\ ``nil``**\ ,enable
true使能,false或者nil为不使能 \| \| number \|
**可选参数,默认为\ ``3``**\ ,sens 灵敏度,最灵敏为1 \|
- 返回值
nil
- 例子
::
cc.dtmfDetect(true)
--------------
cc.sendDtmf(str, playtime, intvl)\ `¶ <#ccsenddtmfstr-playtime-intvl>`__
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
发送dtmf到对端
- 参数 \| 传入值类型 \| 释义 \| \| — \| — \| \| string \| str
dtmf字符串,仅支持数字、ABCD*# \| \| number \|
**可选参数,默认为\ ``100``**\ ,playtime 每个dtmf播放时间,单位毫秒
\| \| number \| **可选参数,默认为\ ``100``**\ ,intvl
两个dtmf间隔,单位毫秒 \|
- 返回值
nil
- 例子
::
cc.sendDtmf("123")