如何通过唤醒词快速启动通话

本文介绍智能硬件场景如何通过唤醒词快速启动通话。

背景介绍

针对智能硬件场景,经常通过唤醒词来启动智能体的在线语音对话。例如:

  • 一问一答:用户说出唤醒词,等待设备响应(如“我在”)后,再说出指令。

    用户:小智管家
    智能硬件:我在
    用户:今天天气怎样
    智能硬件:今天天气多云...
  • 连续对话:用户将唤醒词与问题连续说出,设备直接对问题进行应答。

    用户:小智管家,今天天气怎样?
    智能硬件:今天天气多云...

本文面向已集成唤醒 SDK 的硬件设备,在识别到唤醒词后,指导如何快速启动通话(包括正常启动和问答启动),以实现对用户唤醒的即时响应。

前提条件

  • 已经集成音视频通话智能体,并实现了基础的语音通话功能,请参考:集成概览

功能实现

image

核心过程说明:

  • Token 预下发:业务服务器应提前将通话所需的 Token 下发并缓存在设备端,减少通话启动时的网络请求耗时。

  • 音频预采集:在创建通话引擎时,提前开启 RTC 音频采集,并启用入会前的采集缓存,缩短首帧上行时间。

  • 唤醒与通话互斥:启动通话时需停止唤醒 SDK(尤其是麦克风采集),通话结束后再重新启动唤醒功能。

  • 唤醒后的响应处理:

    • 若仅需正常启动(播放唤醒后仅响应播放,如:“我在”):

      • 方案一:通过 RTC 引擎播放提示音,利用其回声消除能力避免自采;

      • 方案二:由业务层自行播放,但需在播放期间对 RTC 麦克风采集禁音,防止声音被重复录入。

    • 若需问答启动:应将唤醒时携带的问题作为参数传入智能体,触发即时回答。

下面就关键步骤,如何调用SDKAPI实现关键路径

怎样设置合适的参数,发起通话

适用于唤醒场景的通话配置如下:

  • 关闭智能体欢迎语.

  • 根据唤醒识别结果设置需要问答启动.

// 关闭智能体欢迎语,如果工作流不配置欢迎语则无需配置
artcaiCallConfig.agentConfig.agentGreeting = "";
// 如果需要问答启动,需要设置wakeUpQuery为提问的问题
artcaiCallConfig.agentConfig.wakeUpQuery = "今天天气怎样?";

// 设置其他参数
...

// 初始化配置
mAICallEngine.init(artcaiCallConfig);

// 启动通话
mAICallEngine.call(token);

怎样获取RTC引擎对象,并开启音频采集

@Override
public void onAliRtcEngineCreated(AliRtcEngine engine) {
    // 缓存起来,后续有用
    mRtcEngine = engine;

    // 提前启动音频采集,这样在接通过程中就可以采集音频了
    engine.startAudioCapture();
    engine.startAudioPlayer();
    // 开启RTC入会前的采集缓存
    engine.setParameter("{\"audio\":{\"user_specified_ahead_push_stream\":true}}");
}

如何使用ARTC播放欢迎语

参考文档:如何使用SDK播放音频裸数据或本地文件

注意需要提前开启播放器。

如何开启与关闭麦克风

当业务层自行实现播放欢迎语,需要关闭麦克风,否则会出现播放的音频被重新采集进去的情况,并且在播放结束时打开麦克风。

// 关闭麦克风采集
mAICallEngine.muteMicrophone(true);

// 打开麦克风采集
mAICallEngine.muteMicrophone(false);