跳转至

Audiocodes VoiceAI Connect

使用此频道将你的 Rasa 连接到 Audiocodes VoiceAI Connect

获取凭据

要获取凭据,请在 VoiceAI Connect 门户上创建一个机器人。

  1. 在左侧边栏中选择 Bots。
  2. 单击 + 号以创建一个新机器人。
  3. 选择 Rasa Pro 作为 Bot Framework
  4. 设置机器人 URL 并选择令牌值。
  5. 完成“Setting credentials”部分并且机器人正在运行时“Validate the bot configuration”。只有当机器人正在运行并且令牌设置正确时,验证才会成功。

本地测试时使用隧道解决方案设置机器人 URL

访问此部分以了解如何在本地机器上测试频道时生成所需的机器人 URL。

设置凭据

上面选择的令牌值将在 credentials.yml 中使用:

audiocodes:
  token: "token"
rasa_plus.channels.audiocodes.AudiocodesInput:
  token: "token"

你还可以指定可选参数:

参数 默认值 描述
token 用于验证 Rasa 对话机器人和 VoiceAI 连接之间的通话的令牌
use_websocket true 如果设置为 true,Rasa 将通过 Web 套接字发送消息。如果设置为 false,Rasa 将通过 http API 调用发送消息。
keep_alive 120 单位:秒。对于每个正在进行的对话,VoiceAI Connect 将定期验证对话在 Rasa 端是否仍然活跃。

然后重新启动 Rasa 服务器以使新的频道端点可用。

用法

接收来自用户的消息

当用户在电话上讲话时,VoiceAI Connect 将像其他任何频道一样向对话机器人发送一条文本消息(经过语音转文本引擎处理后)。该消息将由 Rasa 解释并由对话引擎处理,响应将发送回 VoiceAI Connect 以转换为语音消息并传递给用户。

向用户发送消息

对话机器人将像其他任何频道一样用文本消息进行响应。文本转语音引擎将转换文本并将其作为语音消息传递给用户。

以下是一个例子:

utter_greet:
  - text: "Hello! isn’t every life and every work beautiful?"

注意

仅允许发送文本消息。语音频道不能使用图片、附件和按钮。

处理对话事件

对话机器人还可以处理非语音事件。以下是一些示例:

事件 意图 描述
start vaig_event_start VoiceAI 接听电话时会发送此意图。一般来说,对该意图的响应是欢迎或问候消息。通话上下文将通过实体提供。
end vaig_event_end 通话结束时,VoiceAI 会发送此意图。可以使用它来调用更新通话信息的动作。
DTMF vaig_event_DTMF VoiceAI 将在收到 DTMF 音调时发送此意图(即用户按下手机键盘上的数字)。发送的数字将在 value 实体中传递。

一般模式是,对于发送的每个 event,对话机器人都会收到 vaig_event_<event> 意图,其中包含实体中的上下文信息。

如下是在发起对机器人的呼叫时发送问候消息的简单规则:

- rule: New call
  steps:
    - intent: vaig_event_start
    - action: utter_greet

查看 VoiceAI Connect 文档以获取详尽的事件列表。

配置呼叫

你可以将事件从 Rasa 发送到 VoiceAI Connect 以更改当前呼叫配置。例如,你可能希望在用户保持沉默超过 5 秒时收到通知,或者你可能需要自定义 VoiceAI Connect 发送 DTMF 数字的方式。

呼叫配置事件通过自定义消息发送,并且特定于当前对话(有时是消息)。这意味着它们必须是故事或规则的一部分,以便相同的行为适用于所有对话。

那些 Rasa 响应不会说出任何内容,它们只是配置语音网关。最好以不同的方式命名它们,例如在它们前面加上 utter_config_<what_it_does>

所有支持的事件都在 VoiceAI Connect 文档中详尽记录。我们将在这里看一个例子来说明自定义消息和事件的使用。

示例:更改密码

在此示例中,我们创建了一个流,允许用户更改密码。

- rule: Set pin code
  steps:
    # User says "I want to change my pin code"
    - intent: set_pin_code
    # Send the noUserInput configuration event
    - action: utter_config_no_user_input
    # Send the DTMF format configuration event
    - action: utter_config_dtmf_pin_code
    # A standard Rasa form to collect the pin code from the user
    - action: pin_code_form
    - ...

在领域中,可以添加 utter_config_<config_event> 响应:

noUserInput 事件

utter_config_no_user_input:
  - custom:
      type: event
      name: config
      sessionParams:
        # If user stays silent for 5 seconds or more, the notification will be sent
        userNoInputTimeoutMS: 5000
        # If you want to allow for more than one notification during a call
        userNoInputRetries: 2
        # Enable the noUserInput notification
        userNoInputSendEvent: true

DTMF 事件

utter_config_dtmf_pin_code:
- custom:
   type: event
   name: config
   sessionParams:
     # Enable grouped collection (i.e will send all digits in a single payload)
     dtmfCollect: true
     # If more than 5 secs have passed since a digit was pressed,
     # the input is considered completed and will be sent to the bot
     dtmfCollectInterDigitTimeoutMS: 5000
     # If 6 digits are collected, VoiceAI will send those 6 digits
     # even if the user keeps pressing buttons
     dtmfCollectMaxDigits: 6
     # If the user presses '#' the input is considered complete
     dtmfCollectSubmitDigit: "#"

现在,你可以配置 pin_code_form 中的 pin_code 槽,以使用 vaig_event_DTMF 意图从 value 实体中提取邮政编码:

pin_code:
  type: text
  influence_conversation: false
  mappings:
    - type: from_entity
      entity: value
      intent: vaig_event_DTMF
      not_intent: vaig_event_noUserInput
      conditions:
        - active_loop: pin_code_form
          requested_slot: pin_code

请注意 vaig_event_noUserInput 是如何在 not_intent 字段中声明的。

由于 vaig_event_noUserInput 意图是在用户按照我们的配置保持沉默时由 VoiceAI Connect 发送的,因此我们必须停用该表单,以便我们可以从规则或故事中接听对话并妥善处理失败。

在以下示例中,如果我们在 pin_code_form 循环处于活动状态时收到 vaig_event_noUserInput 意图(即用户保持沉默),我们只需取消当前流。

- rule: Set pin code - happy path
  steps:
    - intent: set_pin_code
    - action: utter_config_no_user_input
    - action: utter_config_dtmf_pin_code
    - action: pin_code_form
    - active_loop: pin_code_form
    - active_loop: null
    - slot_was_set:
        - requested_slot: null
    - action: utter_pin_code_changed
    - action: action_pin_code_cleanup

- rule: Set pin code - no response - cancel.
  condition:
    - active_loop: pin_code_form
  steps:
    - intent: vaig_event_noUserInput
    - action: utter_cancel_set_pin_code
    - action: action_deactivate_loop
    - active_loop: null