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

Ruby后端启动时出现DialogFlow CX SessionsClient未初始化错误

Ruby启动Dialogflow CX后端时出现NameError:未初始化常量Google::Cloud::Dialogflow::CX::SessionsClient

错误日志

app.rb:7:in `<main>': uninitialized constant Google::Cloud::Dialogflow::CX::SessionsClient (NameError)

dialogflow = Google::Cloud::Dialogflow::CX::SessionsClient.new(credentials: 'resumechatbot-402917-c4515d65b60f.json')

后端代码

require 'sinatra'
require 'sinatra/base'
require 'sinatra/reloader' if development?
require 'securerandom'
require 'google/cloud/dialogflow/cx'

dialogflow = Google::Cloud::Dialogflow::CX::SessionsClient.new(credentials: 'resumechatbot-402917-c4515d65b60f.json')
VUE_FRONTEND_DIR = File.expand_path(File.join(File.dirname(__FILE__), '..', 'vue-frontend', 'dist'))

class App < Sinatra::Base
  get '/' do
    File.read(File.join(VUE_FRONTEND_DIR, 'index.html'))
  end

  get '/js/*' do |path|
    send_file File.join(VUE_FRONTEND_DIR, 'js', path)
  end

  get '/css/*' do |path|
    send_file File.join(VUE_FRONTEND_DIR, 'css', path)
  end

  post '/dialogflow' do
    request_body = JSON.parse(request.body.read)
    user_message = request_body['message']

    session_id = SecureRandom.uuid

    begin
      response = dialogflow.detect_intent(
        session: "hardwiredRNsoIremoved",
        query_input: {
          text: {
            text: user_message,
            language_code: 'en-US',
          },
        },
      )

  
      bot_message = response.query_result.fulfillment_text
      { message: bot_message }.to_json
    rescue StandardError => e

      { error: e.message }.to_json
    end
  end
  
  run App.run!
end

已安装的相关Gems

google-cloud-core (1.6.0)
google-cloud-dialogflow-cx (1.0.0)
google-cloud-dialogflow-cx-v3 (0.22.0)
google-cloud-env (1.6.0)
google-cloud-errors (1.3.1)
google-cloud-location (0.6.0)
google-protobuf (3.24.4 x64-mingw-ucrt)
googleapis-common-protos (1.4.0)
googleapis-common-protos-types (1.9.0)
googleauth (1.8.1)
grpc (1.59.0 x64-mingw-ucrt)

问题原因及解决办法

原因

你安装的google-cloud-dialogflow-cx版本为1.0.0,属于较旧版本,该版本的客户端类命名空间与你代码中使用的Google::Cloud::Dialogflow::CX::SessionsClient不匹配;同时你还安装了google-cloud-dialogflow-cx-v3,但代码中未正确引用v3版本的命名空间。

解决步骤

  1. 更新gem到最新版本
    运行命令升级google-cloud-dialogflow-cx:

    gem update google-cloud-dialogflow-cx
    

    新版本会统一命名空间,避免版本冲突。

  2. 修正代码中的命名空间与require路径
    如果暂时不想更新版本,可修改代码中的引用和客户端初始化:

    # 替换原有的require语句
    require 'google/cloud/dialogflow/cx/v3'
    
    # 使用v3版本的客户端类
    dialogflow = Google::Cloud::Dialogflow::CX::V3::SessionsClient.new(credentials: 'resumechatbot-402917-c4515d65b60f.json')
    
  3. 检查客户端初始化位置
    建议将dialogflow客户端的初始化放到Sinatra类的初始化方法中,避免在全局作用域提前加载导致的加载顺序问题:

    class App < Sinatra::Base
      before do
        @dialogflow ||= Google::Cloud::Dialogflow::CX::V3::SessionsClient.new(credentials: 'resumechatbot-402917-c4515d65b60f.json')
      end
    
      # ... 其他路由代码 ...
    
      post '/dialogflow' do
        # 使用@dialogflow代替全局变量
        response = @dialogflow.detect_intent(...)
        # ... 后续代码 ...
      end
    end
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 19:05:01