物联网开发平台 Android 智能设备(接入指引)

这篇将介绍设备如何在 Android 平台接入 AI 语音对话 能力,实现与云端智能体的实时语音交互、文本消息收发、对话打断以及语义触发联系人呼叫,帮助你快速了解 AI 语音对话的功能。

相关产品
物联网开发平台 产品页,含版本规格、价格与购买入口。

一、前提条件

在开始之前,请你先完成以下步骤,若你已经完成对应的步骤,可跳过:

1. 你需要先 注册腾讯云 账号,并完成 实名认证。

2. 购买了 腾讯云物联网开发平台 相关实例,开通并激活了 智能语音增值服务。

3. 在 物联网开发平台控制台 拿到了本 Demo 所需要的设备三元组(已经激活过了)。

4. 完成 登录与注册 文档中的跑通登录功能。

注意:说明:

二、步骤 1:注册回调

登录成功后,通过 TXIoTAITalkSession.getInstance().addListener 注册 TXIoTAITalkSession.Listener,AI 语音对话相关的回调如下:

回调 说明
onReceiveAsrText 收到用户语音的 ASR 识别结果文本时触发,可用于在屏幕上展示用户说话内容。
onReceiveBotText 收到智能体回复的文本时触发,可用于在屏幕上展示机器人的应答内容。
onBotStateChanged 智能体状态发生变化时触发,携带 oldState 与 newState(详见 BotState),可用于驱动设备指示灯、屏幕动效等交互状态。
onLaunchCall 智能体根据语义识别到需要呼叫某位联系人时触发,携带 Contact(联系人信息),设备可据此发起音视频通话(需先注册联系人,详见 参数准备)。
onError AI 对话发生错误时触发,携带 errorCode 与 errorMsg,常见错误码详见 常见问题。

TXIoTAITalkSession.Listener listener = new TXIoTAITalkSession.Listener() { @Override public void onReceiveAsrText(String text) { // 用户语音的识别结果,可显示到屏幕 } @Override public void onReceiveBotText(String text) { // 智能体回复的文本,可显示到屏幕 } @Override public void onBotStateChanged(TXIoTAITalkSession.BotState oldState, TXIoTAITalkSession.BotState newState) { // 根据 newState 更新设备指示灯、屏幕或其他交互状态 } @Override public void onLaunchCall(TXIoTAITalkSession.Contact contact) { // 智能体语义触发联系人呼叫,可据此发起音视频通话 } @Override public void onError(int errorCode, String errorMsg) { // 记录 errorCode 和 errorMsg,并停止或重试业务流程 }};TXIoTAITalkSession.getInstance().addListener(listener);

三、步骤 2:参数准备

开始对话前,可通过 TXIoTAITalkSession.Params 指定使用的智能体及自定义提示词变量,可通过 List<TXIoTAITalkSession.Contact>注册联系人让智能体根据语义触发联系人呼叫,最多可注册 10 位联系人。

TXIoTAITalkSession.Params params = new TXIoTAITalkSession.Params();params.botId = ""; // 为空则使用平台默认智能体params.promptVariablesJson = ""; // 自定义提示词变量,可为空// 可选:注册联系人,供智能体语义触发呼叫,最多可注册 10 位联系人List<TXIoTAITalkSession.Contact> contacts = new ArrayList<>();TXIoTAITalkSession.Contact contact = new TXIoTAITalkSession.Contact();contact.userId = "USER_ID";contact.userName = "USER_NAME";contacts.add(contact);

四、步骤 3:开始对话

调用 startSpeak 开始 AI 语音对话,该接口为异步调用,开始成功后即可进入语音交互。相关接口如下:

aiTalkSession.startSpeak(params, contacts, new TXIoTCallback() { @Override public void onSuccess() { // 对话已就绪,可开始语音交互 Log.i(TAG, "startSpeak success"); } @Override public void onError(int code, String desc) { Log.e(TAG, "startSpeak failed: " + code + ", " + desc); }});

五、步骤 4:发送文本与打断(可选)

对话过程中,除语音交互外,还可通过以下接口进行文本输入与打断控制。以下接口返回 0(TXIoTError.SUCCESS)表示调用成功。

// 发送文本消息int ret = aiTalkSession.sendText("今天天气怎么样?");if (ret != TXIoTError.SUCCESS) { Log.e(TAG, "sendText failed: " + ret);}// 打断智能体当前播报aiTalkSession.interrupt();

六、步骤 5:停止对话

结束对话时,调用 stopSpeak 停止 AI 语音对话,并在页面销毁时移除监听器释放资源:

aiTalkSession.stopSpeak();aiTalkSession.removeListener(listener);

七、示例代码

package com.example.iotdemo;import android.os.Bundle;import android.util.Log;import androidx.annotation.Nullable;import androidx.appcompat.app.AppCompatActivity;import com.tencent.liteav.iot.TXIoTAITalkSession;import com.tencent.liteav.iot.TXIoTCallback;import com.tencent.liteav.iot.TXIoTError;import java.util.ArrayList;import java.util.List;public class AITalkActivity extends AppCompatActivity { private static final String TAG = "AITalkActivity"; private TXIoTAITalkSession mAITalkSession; private final TXIoTAITalkSession.Listener mListener = new TXIoTAITalkSession.Listener() { @Override public void onReceiveAsrText(String text) { Log.i(TAG, "asr text: " + text); // 将用户语音识别结果显示到屏幕 } @Override public void onReceiveBotText(String text) { Log.i(TAG, "bot text: " + text); // 将智能体回复文本显示到屏幕 } @Override public void onBotStateChanged(TXIoTAITalkSession.BotState oldState, TXIoTAITalkSession.BotState newState) { Log.i(TAG, "bot state: " + oldState + " -> " + newState); // 根据 newState 更新交互状态 } @Override public void onLaunchCall(TXIoTAITalkSession.Contact contact) { Log.i(TAG, "launch call to: " + contact.userName); // 智能体语义触发呼叫,可据此发起音视频通话 } @Override public void onError(int errorCode, String errorMsg) { Log.e(TAG, "aitalk error: " + errorCode + ", " + errorMsg); } }; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_aitalk); // 前提:SDK 已完成初始化并登录成功(参见「登录与注册」) mAITalkSession = TXIoTAITalkSession.getInstance(); mAITalkSession.addListener(mListener); startAITalk(); } private void startAITalk() { // 组装对话参数 TXIoTAITalkSession.Params params = new TXIoTAITalkSession.Params(); params.botId = ""; // 为空则使用平台默认智能体 params.promptVariablesJson = null; // 可选:注册联系人,供智能体语义触发呼叫 List<TXIoTAITalkSession.Contact> contacts = new ArrayList<>(); TXIoTAITalkSession.Contact contact = new TXIoTAITalkSession.Contact(); contact.userId = "USER_ID"; contact.userName = "爸爸"; contacts.add(contact); // 异步开始对话 mAITalkSession.startSpeak(params, contacts, new TXIoTCallback() { @Override public void onSuccess() { Log.i(TAG, "startSpeak success"); // 对话已就绪,可开始语音交互;也可直接发送文本 int ret = mAITalkSession.sendText("你好"); if (ret != TXIoTError.SUCCESS) { Log.e(TAG, "sendText failed: " + ret); } } @Override public void onError(int code, String desc) { Log.e(TAG, "startSpeak failed: " + code + ", " + desc); } }); } @Override protected void onDestroy() { // 释放资源 mAITalkSession.stopSpeak(); mAITalkSession.removeListener(mListener); super.onDestroy(); }}

八、常见问题

现象 排查建议
启动 AI 对话返回 AITALK_NOT_ACTIVATED(-204) 设备的 TWeTalk license 未激活,请确认已开通服务并完成设备 license 激活。
未收到机器人音频 确认 startSpeak 是否回调成功。
收不到 onLaunchCall 回调 确认在 startSpeak 时传入了有效的联系人列表;确认用户语音中提及的联系人名称与注册的 userName 能够匹配。
接口调用返回 NOT_LOGGED_IN(-15) AI 对话相关接口必须在登录成功后调用,请确认设备已成功登录(参见 登录与注册)。

九、联系我们

如果你在接入或使用过程中有任何疑问或者建议,欢迎 联系我们 提交反馈。

赞 (0)
上一篇 4天前
下一篇 4天前