You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Rasa Core创建自定义输入通道实现本地语音UI交互?

Can You Build a Custom Input Channel for Local UI Voice Messages to Rasa Core?

Absolutely! You can totally pull this off—building a custom input channel to connect your local UI with Rasa Core for voice messages is not only possible, it’s a pretty common setup. Rasa’s modular architecture is designed to support custom integrations like this, so let’s walk through how to make it happen.

Key Background First

Voice interactions require two core pieces alongside Rasa:

  • Voice-to-Text (ASR): Convert the user’s spoken message into text that Rasa can process.
  • Text-to-Speech (TTS): (Optional but recommended) Convert Rasa’s text responses back into voice for the user.

Your local UI will handle the ASR/TTS parts, while the custom Rasa input channel acts as the bridge between your UI and Rasa Core.

Step-by-Step Implementation

1. Handle Voice Input & ASR on Your Local UI

First, your UI needs to capture voice input and turn it into text. For a local setup, you can use:

  • Browser-based ASR: Use the Web Speech API directly in your frontend (HTML/JS) for quick testing (note: this relies on browser-native ASR, which works offline in some browsers like Chrome).
  • Local ASR service: Deploy a self-hosted ASR tool like CMU Sphinx or Vosk if you need full local control without browser dependencies.

Once you have the transcribed text, you’ll send it to your custom Rasa channel via an API request.

2. Build the Custom Rasa Input Channel

Rasa lets you create custom input channels by extending the InputChannel class. Here’s a simple example:

# custom_channels/voice_ui.py
from rasa.core.channels.channel import InputChannel, UserMessage
from flask import Blueprint, request, jsonify

class VoiceUIChannel(InputChannel):
    @classmethod
    def name(cls):
        # This is the channel name you'll reference in credentials.yml
        return "voice_ui"

    def blueprint(self, on_new_message):
        # Create a Flask blueprint for the channel
        voice_ui_bp = Blueprint(
            "voice_ui_bp", __name__, url_prefix="/webhooks/voice_ui"
        )

        @voice_ui_bp.route("/", methods=["POST"])
        def receive_message():
            # Get the transcribed text and sender ID from your UI's request
            payload = request.json
            user_text = payload.get("text")
            sender_id = payload.get("sender_id", "local_user")

            # Pass the text to Rasa Core for processing
            on_new_message(UserMessage(user_text, self.get_output_channel(), sender_id))
            return jsonify({"status": "message received"})

        return voice_ui_bp

3. Configure Rasa to Use the Custom Channel

  • Add your custom channel to credentials.yml:
    voice_ui:
      # No extra config needed here for basic setup
    
  • Update endpoints.yml to ensure the channel is accessible (default settings usually work, but double-check the rest endpoint is enabled if needed).

4. Connect Your Local UI to Rasa

In your UI’s frontend code, send the transcribed text to Rasa’s custom channel endpoint. Here’s a quick JavaScript example:

// After transcribing voice to text
async function sendVoiceToRasa(transcribedText) {
  try {
    const response = await fetch("http://localhost:5005/webhooks/voice_ui", {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        text: transcribedText,
        sender_id: "user_001" // Unique ID for each user
      })
    });
    const result = await response.json();
    console.log("Message sent to Rasa successfully:", result);
    // Now fetch Rasa's response (use Rasa's REST endpoint or webhook for real-time updates)
  } catch (error) {
    console.error("Error sending message to Rasa:", error);
  }
}

5. (Optional) Add TTS for Rasa Responses

Once Rasa returns a text response, you can convert it to voice in your UI using:

  • Browser-native Web Speech API for TTS
  • A local TTS service like eSpeak or Coqui TTS for full offline control

Local Deployment Tips

  • Start Rasa with API access and CORS enabled (to allow your local UI to make requests):
    rasa run --enable-api --cors "*" --credentials credentials.yml
    
  • Make sure your local server’s firewall allows traffic on Rasa’s default port (5005) so your UI can reach it.
  • If you’re using self-hosted ASR/TTS, ensure those services are running and accessible to your UI.

内容的提问来源于stack exchange,提问作者abhishek agarwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:49:03