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

PHP开发Viber Bot用Bogdaan/viber-bot SDK时onConversation触发后无法发欢迎消息

问题定位与修复方案

错误原因

  • Bogdaan/viber-bot SDK仅对onMessage、onText等消息接收事件做了返回值自动发送的封装,onConversation对应Viber的conversation_started会话开启事件,SDK不会自动处理该事件回调的返回值,直接返回消息对象不会触发消息发送。
  • 你构造的文本消息对象缺少必填的receiver(接收用户ID)参数,Viber平台所有消息发送请求都要求明确指定接收者ID,否则会直接拦截请求。
  • 若$botSender配置的名称、头像不符合Viber平台要求(名称与后台注册的机器人名称不一致、头像为非公网HTTPS链接),也会导致消息发送失败。

修复方案

将直接return消息的逻辑改为主动调用SDK的sendMessage方法,补充接收用户ID参数即可,修改后的代码如下:

$bot = new Bot(['token' => $apiKey]);
$bot
    ->onConversation(function ($event) use ($bot, $botSender, $log ) {

        $log->info('onConversation ' . var_export($event, true));
        $userId = $event->getSender()->getId();
        $userName = $event->getSender()->getName();
        $context = $event->getContext();
        
        if ($context != "" && $context != null) {
            add_with_referral($userId, $userName, $context);
        } else {
            add_user($userId, $userName, $log);
        }

        // 主动调用发送接口,补充必填的接收者ID参数
        $bot->sendMessage(
            (new \Viber\Api\Message\Text)
                ->setSender($botSender)
                ->setReceiver($userId)
                ->setText("Can i help you?")
        );
    })

额外校验项

  • 确认$botSender的name字段和Viber开发者后台注册的机器人名称完全一致,若配置了avatar字段,必须为公网可直接访问的HTTPS链接,不能包含鉴权参数或特殊字符。
  • 若add_with_referral、add_user方法执行耗时超过15秒,会导致Viber webhook响应超时,消息发送被中断,建议将用户数据入库逻辑改为异步队列处理。

内容的提问来源于stack exchange,提问作者Никита Кобзарь

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:18:03