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

OTRS 6扩展应用:如何通过SessionGet接口获取客户用户所属组?

我之前在基于Docker的OTRS 6环境里遇到过完全一样的需求——想通过REST接口获取客户用户的所属组,但默认的SessionGet接口确实不返回这个信息。给你几个可行的方案,按推荐程度排序:

方案1:自定义扩展SessionGet接口(推荐,不修改核心文件)

OTRS支持通过Custom目录加载自定义代码,不会被系统升级覆盖,非常适合Docker环境。具体步骤如下:

  1. 创建自定义操作模块
    在本地创建一个CustomSessionGet.pm文件,内容如下:

    package Kernel::GenericInterface::Operation::Session::CustomSessionGet;
    
    use strict;
    use warnings;
    
    # 继承原有的SessionGet操作
    use parent qw(Kernel::GenericInterface::Operation::Session::SessionGet);
    
    sub Run {
        my ( $Self, %Param ) = @_;
    
        # 先调用父类方法获取默认的会话信息
        my $Result = $Self->SUPER::Run(%Param);
    
        # 只有当会话验证成功且获取到用户ID时,才添加组信息
        if ( $Result->{Success} && $Result->{Data}->{UserInfo}->{UserID} ) {
            my $UserID = $Result->{Data}->{UserInfo}->{UserID};
    
            # 调用OTRS的CustomerGroup接口获取用户所属组
            my $GroupHash = $Self->{CustomerGroupObject}->GroupMemberList(
                UserID => $UserID,
                Type   => 'customer',  # 指定是客户用户组
                Result => 'HASH',      # 返回格式:{组ID => 组名称}
            );
    
            # 将组信息添加到返回的用户数据中
            $Result->{Data}->{UserInfo}->{CustomerGroups} = $GroupHash;
        }
    
        return $Result;
    }
    
    1;
    
  2. 挂载到Docker容器
    将这个文件挂载到容器的/opt/otrs/Custom/Kernel/GenericInterface/Operation/Session/目录下(如果目录不存在,先创建)。比如在docker-compose.yml里添加挂载项:

    volumes:
      - ./Custom/Kernel/GenericInterface/Operation/Session/CustomSessionGet.pm:/opt/otrs/Custom/Kernel/GenericInterface/Operation/Session/CustomSessionGet.pm
    

    重启容器后,OTRS会自动加载这个自定义模块。

  3. 配置GenericInterface
    登录OTRS后台,找到你的REST接口配置:

    • 进入「系统配置」→「GenericInterface」→「Web服务」
    • 编辑你的REST服务,在「操作」选项卡下,替换原有的SessionGet操作,或者新增一个操作,选择刚才创建的Kernel::GenericInterface::Operation::Session::CustomSessionGet
    • 保存配置后,测试接口就能在返回的UserInfo里看到CustomerGroups字段了。

方案2:直接修改核心SessionGet模块(快速但不推荐)

如果只是临时测试,不想搞自定义模块,可以直接修改核心的SessionGet.pm文件,但注意Docker容器重启后修改会丢失,且OTRS升级时会被覆盖:

  1. 进入Docker容器:
    docker exec -it <你的OTRS容器名> bash
    
  2. 编辑核心文件:
    vi /opt/otrs/Kernel/GenericInterface/Operation/Session/SessionGet.pm
    
  3. 在Run方法的末尾,返回结果前,添加获取组信息的代码(和方案1里的逻辑一样):
    # 在return $Result;之前添加
    if ( $Result->{Success} && $Result->{Data}->{UserInfo}->{UserID} ) {
        my $UserID = $Result->{Data}->{UserInfo}->{UserID};
        my $GroupHash = $Self->{CustomerGroupObject}->GroupMemberList(
            UserID => $UserID,
            Type   => 'customer',
            Result => 'HASH',
        );
        $Result->{Data}->{UserInfo}->{CustomerGroups} = $GroupHash;
    }
    
  4. 保存文件后,无需重启容器,直接测试接口即可。

方案3:新增独立接口获取客户用户组

如果不想修改SessionGet的返回结构,可以新增一个专门的接口来获取客户用户的组信息:

  1. 按照方案1的方式创建一个新的操作模块(比如CustomerUserGroupsGet.pm),实现通过UserID或SessionID获取组信息的逻辑。
  2. 在GenericInterface里配置这个新操作,然后在业务代码中先调用SessionGet获取UserID,再调用这个新接口获取组信息。

这个方案的好处是不影响原有接口的行为,适合对接口兼容性要求高的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:21:50