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

Rasa 2.8配置Viber自定义连接器报错的技术求助

解决Rasa自定义Viber通道报错问题

问题原因

报错Failed to find input channel class for 'Viber.ViberInput'的核心是Rasa无法正确识别自定义的ViberInput类,涉及模块导入路径、配置引用格式,以及自定义代码本身的逻辑问题。

分步解决方案

1. 修正credentials.yml配置格式

配置中Viber.ViberInput的首字母大写不符合模块引用规则(自定义文件名为viber.py,模块名应为小写),修改为:

viber.ViberInput:
  viber_name: "Rasa_demo_one"
  avatar: ""
  auth_token: "4f831f01ef34ad38-9d057b2fd4ba804-8dd0cf1cdf5e39dc"

2. 确保自定义模块被Python识别

将viber.py放在Rasa项目根目录(与credentials.yml、config.yml同目录)后,需要让Python能读取到该模块。在项目根目录执行以下命令添加路径:

export PYTHONPATH="${PYTHONPATH}:$(pwd)"

之后再启动Rasa服务。

3. 修复自定义通道代码问题

原代码存在全局实例初始化错误、请求判断逻辑无效、未对接Rasa消息处理流程等问题,修正后的代码如下:

from http.client import HTTPResponse
from viberbot import Api
from viberbot.api.bot_configuration import BotConfiguration
from viberbot.api.messages import TextMessage
from viberbot.api.viber_requests import ViberMessageRequest
from typing import Text, List, Dict, Any, Optional, Callable, Awaitable
from sanic.request import Request
from rasa.core.channels import InputChannel
from rasa.core.channels.channel import UserMessage, CollectingOutputChannel
from sanic import Blueprint, response


class ViberInput(InputChannel):
    """Viber input channel implementation. Based on the HTTPInputChannel."""

    @classmethod
    def name(cls) -> Text:
        return "viber"

    @classmethod
    def from_credentials(cls, credentials: Optional[Dict[Text, Any]]) -> InputChannel:
        if not credentials:
            cls.raise_missing_credentials_exception()

        return cls(
            credentials.get("viber_name"),
            credentials.get("avatar"),
            credentials.get("auth_token")
        )

    def __init__(self, viber_name: Text, avatar: Text, auth_token: Text) -> None:
        """Create a Viber input channel."""
        self.viber_name = viber_name
        self.avatar = avatar
        self.auth_token = auth_token
        self.viber = Api(
            BotConfiguration(
                name=self.viber_name,
                avatar=self.avatar,
                auth_token=self.auth_token
            )
        )

    def blueprint(self, on_new_message: Callable[[UserMessage], Awaitable[Any]]) -> Blueprint:
        viber_webhook = Blueprint("viber_webhook", __name__)

        @viber_webhook.route("/", methods=["POST"])
        async def incoming(request: Request) -> HTTPResponse:
            viber_request = self.viber.parse_request(request.get_data())
            
            # 仅处理用户消息请求
            if isinstance(viber_request, ViberMessageRequest):
                sender_id = viber_request.sender.id
                message = viber_request.message
                
                # 处理文本消息并传给Rasa处理
                if isinstance(message, TextMessage):
                    await on_new_message(UserMessage(
                        message.text,
                        CollectingOutputChannel(),
                        sender_id,
                        input_channel=self.name()
                    ))
            
            return response.text("success")

        # 新增手动设置Webhook的路由
        @viber_webhook.route("/set_webhook", methods=["GET"])
        async def set_webhook(request: Request) -> HTTPResponse:
            # 替换为你的实际公网域名
            webhook_url = "https://your-public-domain.com/webhooks/viber/webhook"
            self.viber.set_webhook(webhook_url)
            return response.text("Webhook set successfully")

        return viber_webhook

4. 启动Rasa服务并设置Webhook

在项目根目录执行启动命令:

rasa run --enable-api --cors "*"

服务启动后,访问http://localhost:5005/webhooks/viber/set_webhook完成Webhook配置。

内容的提问来源于stack exchange,提问作者lahiru kariyawasam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 08:45:37