Alexa | Alexa通信扩展

Auto SDK Alexa Communication 扩展为 Alexa Auto SDK 添加了 Alexa Communication 支持,使您能够在您的平台实现中集成 Alexa-to-Alexa 呼叫、插入和通知功能。

注意:Alexa Communication 扩展必须与 Alexa Auto SDK Builder 一起使用。

目录

  • 概述
  • 支持的 Alexa 通信功能
  • Auto SDK Alexa 通信扩展序列图
  • 使用 Alexa 通信扩展安装 Auto SDK
  • 使用 Alexa 通信扩展构建 Auto SDK
  • 使用 Alexa 通信扩展实现 Auto SDK
  • 故障排除

概述

Auto SDK Alexa Communication 扩展在Alexa Comms 库的帮助下处理 Alexa 驱动的 Alexa 通信交互。例如,当用户说“呼叫厨房”时,Alexa 语音服务云发送指令以启动与另一个 Alexa 端点的呼叫。Auto SDK Alexa Communication 扩展处理此指令并请求Alexa Comms Lib发起呼叫。

注意:被呼叫者的身份由 Alexa Voice Service Calling Speechlet 解析。为了解析身份,必须将当前登录用户的通讯录上传到 Alexa 云。用户可以通过在手机上安装 Alexa 应用程序来执行此上传,这会将手机上的地址簿同步到 Alexa 云。

:如果Phone Call ControlAlexa Communications功能的安装和车辆的头部单元上启用,那么将优先考虑到Phone Call Control。因此,如果目标联系人具有启用 Alexa 通信的端点,则将通过 Alexa 端点选择联系人的 PSTN。如果已解析的联系人没有 PSTN,将选择 Alexa 端点来路由呼叫。

支持的 Alexa 通信功能

Alexa 通信扩展支持以下功能:

  • Alexa 到 Alexa (A2A) 呼叫
  • 插入外部设备
  • 对外部设备的通知

Alexa 通信扩展不支持以下功能:

  • 从外部设备插入车内
  • A2A 消息传递
  • 从外部设备到汽车的通知

Alexa 通讯库

Alexa Comms 库提供设备上的通信实现。它使用 Alexa 通信服务来拨打和接听电话,并能够插入其他 Alexa 端点。该库还负责与其他 Alexa 端点交换媒体。目前Call audio是唯一可以在两个 Alexa 端点之间交换的媒体。

平台实施职责

您可以通过扩展类、实现所需的行为以及向 Auto SDK Engine 注册您的实现实例来初始化 Alexa 调用功能AlexaComms。您的实施职责包括:

  • 通话音频铃声播放:平台实现负责播放通话音频铃声,在来电和去电过程中播放。因此,您必须AudioOutput为此通道实现 ,并将其与AudioOutputProvider. 它们位于aace::audioC++的命名空间或com.amazon.aace.audioAndroid 上的 Java 包中。此 AudioOutput 实现必须能够播放 mp3 音频流/url。对于Android示例,请参阅:
 ${AAC_SDK_ROOT}/samples/android/app/src/main/java/com/amazon/sampleapp/impl/Audio/AudioOutputHandler.java
  • 通话音频媒体播放:平台实现负责播放来自通话另一端的通话音频。因此,您必须AudioOutput为此通道实现 ,并将其与AudioOutputProvider. 它们位于aace::audioC++的命名空间或com.amazon.aace.audioAndroid 上的 Java 包中。此AudioOutput实现必须能够播放 PCM 16 位音频 @ 16 Khz。有关 Android 示例,请参阅:
${AAC_SDK_ROOT}/samples/android/app/src/main/java/com/amazon/sampleapp/impl/Audio/RawAudioOutputHandler.java
  • 麦克风样本:平台实现负责提供在整个通话期间(对于来电和去电)从麦克风捕获的音频样本。音频样本必须是 PCM 16 位类型 @ 16 khz。有关 Android 示例,请参阅:
${AAC_SDK_ROOT}/samples/android/app/src/main/java/com/amazon/sampleapp/impl/Audio/AudioInputProviderHandler.java

Auto SDK Alexa 通信扩展序列图

以下是说明 Auto SDK Alexa Communication Extension 入站和出站呼叫工作流程的序列图。

入站呼叫工作流程

以下是入站呼叫的序列图。当用户听到来电铃声时,他们可以说“Alexa,接听电话”或“Alexa 不接听”。您还可以提供物理或 UI 按钮来接听或拒绝呼叫。当用户接听电话时,您应该拨打AlexaComms::acceptCall。当用户拒绝呼叫时,您应该调用AlexaComms::stopCall。当用户想挂断电话时,他们可以说“Alexa,挂断电话”,或者他们可以按下 UI 上的拒绝按钮来触发呼叫AlexaComms::stopCall

外呼工作流程

以下是出站呼叫的序列图。目前还没有发起呼叫的软件界面。只能通过语音发起呼叫。呼叫可以类似于入站呼叫被终止。

使用 Alexa 通信扩展安装 Auto SDK

alexacomms-[...].zip存档解压缩到aac-sdk/extensions/extras目录中。

例如: unzip alexacomms-1.2.zip -d aac-sdk/extensions/extras/alexacomms

注意:如果存档已经解压缩,只需将目录移动alexacomms到“aac-sdk/extensions/extras”目录中。

您的aac-sdk/extensions/extras目录结构应如下所示:

aac-sdk
└─ extensions└─ extras└─ alexacomms└─ meta-aac-alexacomms└─ packages├─ alexa-comms-[...].tar.gz (contains headers and libs for different platforms)└─ comms.tar.gz (This archive contains CallManager CapabilityAgent C++ source)└─ modules└─ platforms└─ android

使用 Alexa 通信扩展构建 Auto SDK

使用扩展程序构建您的目标alexacomms以启用 Alexa Communications 支持。

在 Android 上使用 Alexa 通信扩展构建 Auto SDK

使用扩展程序构建您的 Android 目标alexacomms以启用 Alexa Communications 支持。

例如:

builder/build.sh android -t androidarm extensions/extras/alexacomms

通过在初始控制台输出中查找以下行,确认 Alexa Auto SDK Builder 已添加扩展:

NOTE: Search for sub modules: /home/builder/aac/extensions/extras/alexacomms
NOTE: Adding modules: /home/builder/aac/extensions/extras/alexacomms/modules
NOTE: Adding meta layer: /home/builder/aac/extensions/extras/alexacomms/meta-aac-alexacomms

在 Linux 上使用带有 Auto SDK Alexa 通信扩展的 C++ 示例应用程序

使用 Alexa 通信扩展构建 C++ 示例应用程序

使用 Alexa Communications 扩展构建C++ 示例应用程序以启用 Alexa Communications 支持。

builder/build.sh linux -t native extensions/extras/alexacomms

使用包含的config-communication.json文件(其示例如下所示)将 Alexa Communications 配置传递给C++ 示例应用程序。默认情况下,该文件将被打包/opt/AAC/etc

您可能需要修改配置文件以将 更新sipCertificateFilePath为指向 SSL 证书目录中的 Starfield Services 根证书颁发机构 - G2 根 CA 文件。

**注:**证书与目录中的C++ Sample App捆绑在一起,samples/cpp/assets/certsCA文件哈希为09789157.0

{"aace.alexa": {"avsDeviceSDK": {"communications": {"sipCertificateFilePath": "/etc/ssl/certs/09789157.0","inputDevice": {"driverName": "audioproxy","deviceName": "audioproxy","audioGain": 1.0,"latencyInMilliseconds": 100},"outputDevice": {"driverName": "audioproxy","deviceName": "audioproxy","audioGain": 1.0,"latencyInMilliseconds": 100}}}}
}

latencyInMilliseconds字段用于配置捕获/回放缓冲区长度。除非您观察到音频质量问题,否则默认值应该是可以接受的。

使用 Alexa 通信扩展运行 C++ 示例应用程序

您必须在启动 C++ 示例应用程序时指定config-communication.json文件:

$ /opt/AAC/bin/SampleApp --cbreak \--config /opt/AAC/etc/config.json \--config /opt/AAC/etc/config-communication.json \--menu    /opt/AAC/etc/menu.json > SampleApp.log

一旦通过身份验证,示例应用程序就可以拨打和接收 Alexa 到 Alexa 的呼叫。尝试使用点按通话,然后说“呼叫鲍勃”。

注意:您可能需要先启用电话连接,然后才能拨打 Alexa 到 Alexa 的电话。

使用 Alexa 通信扩展实现 Auto SDK

Auto SDK Alexa Communication 扩展的入口点是AlexaComms类。你可以在这里找到它:

  • C++ : C++ 的AlexaComms 接口
  • JAVA/安卓
${AAC_SDK_ROOT}/platforms/android/aace/src/main/java/com/amazon/aace/communication/AlexaComms.java

要在您的平台实现中使用 Alexa Communication,请扩展AlexaComms该类。Auto SDK Engine 为来自 Alexa 的呼叫状态和(可选)呼叫显示信息更改通知提供回调。

  • 呼叫状态更改通知- 平台实现可以通过平台接口控制传入、传出或正在进行的呼叫。平台实现负责为用户提供控制呼叫的选项(例如,接听或拒绝来电)的 UI。

  • 呼叫显示信息更改通知(呼叫者 ID) - Auto SDK 引擎调用 callerInfoChanged() 方法来传递包含呼叫者信息的序列化 JSON 对象,以便在基于屏幕的设备上显示。如果没有可用的调用者信息,该方法将传递一个空的序列化 JSON 对象。

    **注意:**显示来电信息是可选的;默认平台实现不显示调用者信息。如果您在实现中显示调用者信息,则每次调用状态更改为INBOUND_RINGING或时,引擎都会调用 callerInfoChanged() 方法CONNECTING

以下是扩展类的 C++ 代码示例AlexaComms

#include <AACE/Communication/AlexaComms.h>class MyAlexaCommsHandler : public aace::communication::AlexaComms {void callDisplayInfo(const std::string& displayInfo) {/*** Display caller information for the call.** Typically displayInfo is available in @c CallState::CONNECTING and @c CallState::INBOUND_RINGING call states.* JSON structure:* @code{.json})* {*      "displayName" : "{{STRING}}"* }* @endcode* @li displayName: The contact name to be displayed.*/}void callStateChanged(CallState state) override {// Update the UI that call state is changed.if (state == CallState::INBOUND_RINGING) {// display accept/reject ui control} else if (state == CallState::CONNECTING || state == CallState::CALL_CONNECTED) {// display stop call ui control}}...etc...// when user clicks on accept ui control direct engine to accept callthis->acceptCall();...// when user clicks on reject/stop call ui control direct engine to stop callthis->stopCall();...
};

您可以在此处找到示例 Android 代码来扩展AlexaComms该类:

${AAC_SDK_ROOT}/samples/android/app/src/main/java/com/amazon/sampleapp/impl/Communication/AlexaCommsHandler.java

要启用 Alexa 通信功能,平台实现必须通过调用 Engine 上的方法实例化此实例并将其注册 registerPlatformInterface()到 Engine。例如:

engine-> registerPlatformInterface( std::make_shared<MyAlexaCommsHandler>());

故障排除

  • 当与 Alexa 交互以呼叫另一台设备时,您可能会收到一条错误消息,指出无法进行呼叫并稍后再试。如果sipCertificateFilePath配置文件config-communication.json内部无效,则可能会发生这种情况。请确保目标设备中存在Starfield Services 根证书颁发机构 - G2根 CA。

Alexa | Alexa通信扩展相关推荐

  1. 如何使用alexa_如何使用Alexa来帮助您入睡

    如何使用alexa Having trouble dozing off? Your Amazon Echo or Alexa-enabled device can play sounds, music ...

  2. AWS想到办法让Alexa能在毫秒内做出回复

    随着语音助理的技能越来越多样化,要处理的任务也越来越复杂,Amazon为了能让Alexa在更短的时间内,处理并完成复杂的任务,AmazonAlexa AI团队近日在美国AI协会举办的第33届研讨会中, ...

  3. Work with Alexa : 智能设备连接到Alexa

    背景: 我想开发一款基于Amazon Alexa的智能家居设备.目前使用Alexa语音服务有两种方式:AVS Device SDK内置设备和设备连接到Alexa.本文介绍设备连接到Alexa这种方式. ...

  4. 从零开始,搭建 AI 音箱 Alexa 语音服务

    本文来自作者 Mike 在 GitChat 上分享 「从零开始,搭建 AI 音箱 Alexa 语音服务」,「阅读原文」查看交流实录. 「文末高能」 编辑 | 哈比 一.概述 生活场景的引入: 物联网的 ...

  5. alexa api php,php 读取 alexa信息

    php 读取 alexa信息 function Alexa($domain) { $alexa = ''; $content = get_content('http://www.alexa.com/d ...

  6. ALEXA站长全攻略(转)

    写此文之前本拟在"ALEXA"前加一个"网站流量世界排名",可转而一想ALEXA主营业务及目前的功能也不一个专做网站流量排名的网站,更确切的说它是一个提供搜索的 ...

  7. 亚马逊echo中国使用_我如何编程我的第一个Amazon Alexa技能并赢得了免费的Echo Dot...

    亚马逊echo中国使用 by Lorrie Pearson 洛里·皮尔森(Lorrie Pearson) 我如何编程我的第一个Amazon Alexa技能并赢得了免费的Echo Dot (How I ...

  8. 上周技术关注:Alexa开放搜索爬虫接口

    [搜索技术; web2.0; Alexa] Alexa开放搜索爬虫 用户可以自建搜索引擎 # 搜索引擎观察家John Battelle说,每个人可以使用网络爬虫,但是收集.维护一个大级别的信息库却是非 ...

  9. alexa排名查询有哪些?

    http://www.diannaozs.com/alexa/alexa.asp?url=huangsexiaoshuo.se600.dailiba.net http://www.pqshow.com ...

最新文章

  1. Spring(IOC+AOP)
  2. Oracle下scott用户无法登录
  3. ogg 故障解决一则
  4. Python-100 练习题 03 完全平方数
  5. 将以太坊封装为 ERC20
  6. YII2 实现后台操作记录日志
  7. sscanf一小用法
  8. 只安装oracle服务端连plsql,Oracle 不安装Oracle客户端,使用PLSQL连接Oracle服务器
  9. mysql怎么避免联合查询_mysql-联合查询,连接查询
  10. delphi 复制文件 强制覆盖_网传美国选这三家中国橱柜企业为反倾销强制应诉人...
  11. 利用顺序栈解决括号匹配问题(c++)-- 数据结构
  12. Vue.js 与 ActiveX 控件
  13. vue从创建到完整的饿了么(7)点击事件与页面跳转
  14. Fiddler4 抓包分析(基础版)
  15. 一个很好用的桌面取色器和一个在线取色器
  16. 简易的NTC-10K-3950测温
  17. 基于FOC矢量算法的MTPA控制在变频洗衣机上的应用
  18. 小程序与H5,APP有什么不同-小程序支付开发1
  19. 相关性搜索(自然语言处理NLP)相关资料(待更
  20. 国产操作系统UOS安装教程

热门文章

  1. 原生js实现滑块拖动功能
  2. netfilter——独孤九剑
  3. 2019自结前端面试小册
  4. 百度以侵犯商业秘密起诉前高管王劲 索赔5000万 内附王劲离职承诺函,独家
  5. 一个完整的大作业:80电影天堂网站
  6. 一些我推荐的和想上的网络课程(Coursera, edX, Udacity,MIT OCW)
  7. Gateway集成swagger3.0
  8. 电子邮箱格式怎么写?你知道电子邮箱格式都有哪些吗?
  9. 激战2 wvw大团基础配置
  10. 非常漂亮的个人网站引导页HTML源码