Android应用app实现AI电话机器人接打电话
Android应用app实现AI电话机器人接打电话
--安卓AI电话机器人
- 一、前言
【Dialer3.0智能拨号器】Android版手机app,由于采用蓝牙电话的方式来调用手机SIM卡发起呼叫、接听来电,并接收和处理通话的声音,通常我们以“蓝牙电话方案”来称呼它。
蓝牙电话使用的链路呼叫方式类似于“蓝牙耳机、汽车车机”通过手机拨打电话的方式,并在此基础之上扩充了“双卡同时在线,自由选择任意SIM卡呼出”、“手机app识别对方按下的DTMF按键”等辅助功能。
原有规划和产品演进中,蓝牙电话方案主要有两个演进方向:
- 手机app中操控通话行为并提取电话通话的语音,进行扩展功能和处理。常见的应用如来电IVR语音引导、来电AI接听并按业务常见应答,以及电话外呼时插入一段语音开场白+人工接听、AI外呼进行无效号码过滤等。此部分手机业务通常不涉及坐席的强插/强拆/监听等多用户协同操作方式。【AI电话机器人】就是此演进方向的一种具体应用。
- 对接呼叫中心或CRM,将SIM卡电话转换为中继线路或落地线路,接入局域网的SIP平台,电话呼叫操作不再通过实体手机的方式做外呼,而是利用呼叫中心原有的功能做多用户协同的对外呼叫。此部分操作通常采用SIP协议来进行线路的对接和融合。
功能拓扑图上,大致为下述图示的结构:
前期中,由于具体付费用户的需求,蓝牙电话方案投入了大量的精力和维护工作量在SIP中继和坐席的方向,即前述的第二类演进方向。对呼叫的稳定性、呼叫中心/CRM等SIP平台的适配等功能扩展提供了很大力度的支持,也取得了不错的商用成果(主要是并发量大,容易上量^V^)。
从这篇文章内容开始,本篇以及后续的功能开拓,将从已成熟稳定的SIP对接中脱身,专注于手机IVR语音引导和AI电话机器人领域的演进。通过提供通话底层SDK的方式,把针对手机本身的“号码清洗”“AI外呼”等功能给细化和完善起来。
本篇章主要从【智能拨号器SDK】的角度,梳理一下手机app的架构,看看如何赋能更多的个性化服务的用户app,使其不用局限于某一个品牌甚至型号的手机,就能实现比“小爱通话”等AI电话专有的应用更灵活更强大的实现基础。
- 二、手机AI电话机器人通常有哪些需求
AI接电话、语音留言等功能基本算是伪需求,NND,钱在哪里?应用做得再好,会有人愿意为你这个功能付费?
从正常使用的角度,AI电话机器人想要获取足够的收益,就应该一开始就寻找到足够刚需的场景,而且是商用场景,才能有足够多的样例数据对后续的发展提供正向反馈。
由于SIM卡通话的费用相较于小号、固话等线路要贵。目前在语音通信领域,手机中做AI机器人,要么就面对大批量的小规模用户,提供AI外呼、AI接听等增值业务。要么就利用SIM卡分散入网的特性,用来做有效号码过滤等号码清洗的功能。
手机上的AI电话机器人要做的不是完全替代掉原来使用人力来拨打的方式(这样搞,步子迈的太大容易扯蛋),而应该是用来辅助现有的人,减少他的工作量,在他日常的使用基础上,提供细微又刚需的改动,使得他使用和工作的更加便捷。
比如原先客服或者推销人员拨打电话出去,会使用音箱来播出一些引导问候语,在通话过程中可以插入一些祝福语等等,这种类似于“半自动化AI”的方式,在吸收和转化率比较高的场景也会经常用到,而且能够大幅提高呼出人员的工作效率。
当然,把手机引到SIP平台坐席,做手机异地呼叫或跨地区拨打这种功能也有,但会在别的篇章中论述,本篇章不再赘述。
- 三、AI电话机器人对接和扩展方式
【Dialer3.0智能拨号器】Android版app为手机用户专门定制了内置的SDK,上层App开发者可以参照SDK-Demo的代码逻辑,将电话语音的提取能力轻松整合到应用当中。
在使用时,只要应用开启了【悬浮窗】的权限,无论手机用户使用何种方式来操作手机上的电话通话,通话时的语音都会拦截后,转到内置的SDK和上层App进行处理。
用户可以自由的选择使用手机按键拨打、别的App下发电话任务自动拨打、使用电脑adb连接手机触发拨打等等任意操作,只要手机拨通了SIM卡电话,蓝牙电话方案都会自动拦截通话的声音,并通过应用App的事件回调或本机网络端口,将通话语音数据进行传递和加工。
这样不管上层应用做IVR语音导航,或是进行AI识别和TTS语音应答,都可以在一个应用APP中完整的实现。而且,这个接入对接方式,完全不会干扰和影响到手机用户原有的使用方式。
SDK-Demo的功能界面如下图所示,仅供参考。需要实现“长按电源键3秒即唤醒AI电话机器人”等功能的,可以自行在这个基础上做扩展。
- 四、拨号器SDK对本机IVR引导和AI提供哪些支持
如前述内容所描述的样子,【Dialer3.0智能拨号器】Android版提供的“拨号器SDK”提供拦截电话通话事件和通话的语音数据的能力,并且提供了“双卡同时在线,自由选择任意SIM卡呼出”、“手机app识别对方按下的DTMF按键”等辅助功能。
在示例Demo中,我们展示了
【来电自动接听】
【接通后自动播放IVR引导提示语】
【播放完毕转手机接听】
等示例的功能,并且提供了一大批的辅助接口供上层App的开发人员来调用,可以参考着在这个基础之上自由的定制和开发。
AI功能可以在接收电话通话的上行语音基础上,挂载ASR语音识别和相关的NLP语义及大模型等支持,搭配TTS语音生成做下行通话数据注入即可。
IVR语音的播放和电话注入可以参考下述界面的接口来进行数据构造和注入,仅供参考:
- 五、IVR语音导航+人工同时接听
在一个手机当中,我们无法做到“又拦截电话通话语音、又使用手机的听筒/扬声器来播放声音”。(真的试过了,Android声音调度策略确实不允许)
在使用过程中,若存在需要又对语音进行处理、又需要人工实时关注介入的“多路声音处理”的场景,需要另外引入电脑坐席或者另一个其它手机。使用局域网或互联网坐席的方式,进行播放和通话介入。
拨号器SDK针对这样的场景,提供了配对和坐席绑定的支持。用户可以使用专用的App来做为远程声音播放设备,来跟目标电话的用户进行实时的语音沟通。
- 六、总结
我们在手机厂商的AI通话的功能之外,拓展了一种不受手机厂商和定制安卓限制的方式,为社会上公共的开发人员提供了一种基于普通Android应用app级别的AI电话机器人的应用能力。
上层app可以使用底层内置SDK,很容易的就可以对手机电话外呼和来电过程的通话声音进行提取和加工处理。上层app在这个基础之上可以自由的定制更多的电话的IVR语音导航和AI通话的相关功能,自由的接入DeepSeek等各种AI和大模型平台,为最终服务的用户,提供更加精细的个性化的能力。
上一篇:手机打电话时如何识别对方按下的DTMF按键的字符-安卓AI电话机器人
下一篇:编写中。
相关文章:

Android应用app实现AI电话机器人接打电话
Android应用app实现AI电话机器人接打电话 --安卓AI电话机器人 一、前言 【Dialer3.0智能拨号器】Android版手机app,由于采用蓝牙电话的方式来调用手机SIM卡发起呼叫、接听来电,并接收和处理通话的声音,通常我们以“蓝牙电话方案”来称呼它。 …...

Mobaxterm服务器常用命令(持续更新)
切换文件夹 cd path # for example, cd /gpu03/deeplearning/进入不同GPU ssh mgmt ssh gpu01 ssh gpu03寻找文件位置 find /path -name file_name #for example, find / -name lib #在根目录下搜寻名为lib文件 #for example, find /home/deeplearning -name "lib"…...
Android14窗口管理自适应投屏分辨率
环境 console:/ # cat /proc/version Linux version 6.1.57 (机密信息) (Android (10087095, pgo, bolt, lto, -mlgo, based on r487747c) clang version 17.0.2 (https://android.googlesource.com/toolchain/llvm-project d9f89f4d16663d5012e5c09495f3b30ece3d2362), LLD 17…...

Shot Studio for macOS 发布 1.0.2
Shot Studio 是一个 macOS 的 app,专门为开发者设计,主要用于各大 app 应用商店的预览图设计。 提供了非常多的模板,也预设了很多尺寸。可以直接一键使用 在 1.0.2 这个版本中新增了: 文本渐变 图层:边框、颜色、圆…...

《深度学习实战》第4集:Transformer 架构与自然语言处理(NLP)
《深度学习实战》第4集:Transformer 架构与自然语言处理(NLP) 在自然语言处理(NLP)领域,Transformer 架构的出现彻底改变了传统的序列建模方法。它不仅成为现代 NLP 的核心,还推动了诸如 BERT、…...

Starrocks入门(二)
1、背景:考虑到Starrocks入门这篇文章,安装的是3.0.1版本的SR,参考:Starrocks入门-CSDN博客 但是官网的文档,没有对应3.0.x版本的资料,却有3.2或者3.3或者3.4或者3.1或者2.5版本的资料,不要用较…...
银河麒麟高级服务器操作系统在线调整/pro/{PID}/limits文件中nofile的软限制和硬限制参数值操作方法
银河麒麟高级服务器操作系统在线调整/pro/{PID}/limits文件中nofile的软限制和硬限制参数值操作方法 一 系统环境二 使用场景三 操作步骤 一 系统环境 [rootlocalhost ~]# nkvers ############## Kylin Linux Version ################# Release: Kylin Linux Advanced Server…...

html css js网页制作成品——HTML+CSS甜品店网页设计(5页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...

Open WebUI项目源码学习记录(从0开始基于纯CPU环境部署一个网页Chat服务)
感谢您点开这篇文章:D,鼠鼠我是一个代码小白,下文是学习开源项目Open WebUI过程中的一点笔记记录,希望能帮助到你~ 本人菜鸟,持续成长,能力不足有疏漏的地方欢迎一起探讨指正,比心心~…...

【Python 入门基础】—— 人工智能“超级引擎”,AI界的“瑞士军刀”,
欢迎来到ZyyOvO的博客✨,一个关于探索技术的角落,记录学习的点滴📖,分享实用的技巧🛠️,偶尔还有一些奇思妙想💡 本文由ZyyOvO原创✍️,感谢支持❤️!请尊重原创…...
蓝桥杯练习代码
一、最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 示例 1: 输入:strs ["flower","flow","flight"] 输出:"fl"示例…...
Imagination通过最新的D系列GPU IP将效率提升至新高度
Imagination DXTP GPU IP在加速移动设备和其他电力受限设备上的图形和计算工作负载时,能够延长电池续航时间。 英国伦敦 – 2025年2月25日 – 今日,Imagination Technologies(“Imagination”)宣布推出其最新的GPU IP——Imagina…...

C高级——shell(3)
一、shell的选择结构 1.回顾:C语言的选择结构:if , if else if ,if else,switch (switch的执行速度最快) 2.shell的选择结构: 单分支if 双分支 if else 多分支if elif case..in 1.1 shell的选择结构的格式 --------C语言的格式--…...

【C语言】第八期——指针、二维数组与字符串
目录 1 初始指针 2 获取变量的地址 3 定义指针变量、取地址、取值 3.1 定义指针变量 3.2 取地址、取值 4 对指针变量进行读写操作 5 指针变量作为函数参数 6 数组与指针 6.1 指针元素指向数组 6.2 指针加减运算(了解) 6.2.1 指针加减具体数字…...
docker 运行claude 的computer use
需要注意的是:这里claude操纵的是docker的虚拟服务器,不能访问本地url,需要进行端口转发 export ANTHROPIC_API_KEY%your_api_key% docker run \-e ANTHROPIC_API_KEY$ANTHROPIC_API_KEY \-v $HOME/.anthropic:/home/computeruse/.anthropi…...
JAVA面试_进阶部分_23种设计模式总结
1. 单例模式:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这 个实例。 (1)懒汉式 public class Singleton { /* 持有私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载…...
边缘计算收益低的三大指标
边缘计算收益低的三大指标主要包括以下方面: 1. 资源贡献不足: 边缘计算的收益通常基于所提供的带宽、存储和计算资源来计算。如果设备的网络带宽有限、在线时间短或提供的存储容量较小,可能无法满足平台设定的最低贡献标准,从而导…...

Linux网络之传输层协议(UDP,TCP协议)
目录 重新认识端口号 端口号划分 netstat pidof UDP协议 UDP的特点 面向数据报 UDP的缓冲区 全双工和半双工 TCP协议 TCP的特点 TCP报头分析 源端口,目标端口,数据偏移(报文首部长度) 序号 确认号 窗口 6个标志位 ACK SYN …...

傅里叶分析
傅里叶分析之掐死教程(完整版)更新于2014.06.06 要让读者在不看任何数学公式的情况下理解傅里叶分析。 傅里叶分析不仅仅是一个数学工具,更是一种可以彻底颠覆一个人以前世界观的思维模式。但不幸的是,傅里叶分析的公式看起来太复…...

【前端基础】Day 3 CSS-2
目录 1. Emmet语法 1.1 快速生成HTML结构语法 1.2 快速生成CSS样式语法 2. CSS的复合选择器 2.1 后代选择器 2.2 子选择器 2.3 并集选择器 2.4 伪类选择器 2.4.1 链接伪类选择器 2.4.2 focus伪类选择器 2.5 复合选择器总结 3. CSS的元素显示模式 3.1 什么是元素显示…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...

解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...
Go爬虫开发学习记录
Go爬虫开发学习记录 基础篇:使用net/http库 Go的标准库net/http提供了完善的HTTP客户端功能,是构建爬虫的基石: package mainimport ("fmt""io""net/http" )func fetchPage(url string) string {// 创建自定…...
android计算器代码
本次作业要求实现一个计算器应用的基础框架。以下是布局文件的核心代码: <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"andr…...
Clickhouse统计指定表中各字段的空值、空字符串或零值比例
下面是一段Clickhouse SQL代码,用于统计指定数据库中多张表的字段空值情况。代码通过动态生成查询语句实现自动化统计,处理逻辑如下: 从系统表获取指定数据库(替换your_database)中所有表的字段元数据根据字段类型动态…...