0
点赞
收藏
分享

微信扫一扫

Alexa | Alexa通信扩展


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 | Alexa通信扩展_人工智能

外呼工作流程

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

Alexa | Alexa通信扩展_java_02

使用 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 call
      this->acceptCall();
      ...

      // when user clicks on reject/stop call ui control direct engine to stop call
      this->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。


举报

相关推荐

0 条评论