Meteor 通过RocketChat中的DDP发送LiveChat消息时出现问题

Meteor 通过RocketChat中的DDP发送LiveChat消息时出现问题,meteor,ddp,rocket.chat,Meteor,Ddp,Rocket.chat,我正在尝试使用DDP实时API来启动LiveChat对话,但我面临一些问题 我正在按照文档执行所有步骤。在第一个API结果中,您可以看到它sausnumAgents:2和online:true。然而,当我试图向同一部门发送消息时,它会说:“对不起,没有在线代理” 有办法找出问题吗 livechat的结果:getInitialData livechat的结果:registerGuest 登录结果 sendMessageLivechat的结果 这些是我要发送到sendMessageLiveChat

我正在尝试使用DDP实时API来启动LiveChat对话,但我面临一些问题

我正在按照文档执行所有步骤。在第一个API结果中,您可以看到它saus
numAgents:2
online:true
。然而,当我试图向同一部门发送消息时,它会说:“对不起,没有在线代理”

有办法找出问题吗

livechat的结果:getInitialData
livechat的结果:registerGuest
登录结果
sendMessageLivechat的结果
这些是我要发送到
sendMessageLiveChat
的参数

"_id" : "j65Cp5peeLJLYhWQi" 
"rid" : "a_random_string" 
"msg": "Hello" 
"token" : "J8IpnpB1yN1AYtO0e0EzLhuaRhe0zaZkjHBAamsehSO"
有人能帮我吗

我就是这样叫registerGuest的

ddpClient.call("livechat:registerGuest",[{"token":authToken,"name":"test1","email":"test2@gmail.com","department":department._id},25],function(err, info){

});
我在这里传递的令牌是管理员的authToken


ddpClient对象是使用DDP npm包获得的

我通过以下方法解决了这个问题

  • 同时将bot设置为livechat代理和管理器(我在某个地方读过这个提示,可能是胡说八道)
  • 在Admin->Omnichannel->routing中,我设置了“即使没有代理在线也接受”(因为我的bot从未在线,但在发送dmessage时它正在应答)+“将bot代理分配给新对话”
  • 我给自己设置了一个livechat经理+livechat代理的角色,但我留在了另一个部门,这样我就可以接管
  • rocket chat live api文档已经过时了,只是因为一篇随机的论坛帖子,流媒体聊天室的消息才起作用。通常,registerGuest也使用非常小的参数,即随机的、自生成的令牌+名称

    这是我的完整设置代码

        async subscribeToLiveRoom(message){
          var _self = this
          // let initial = await this.api
          //   .call("livechat:getInitialData",[token])
          // register
          const token = this.randomString()
          var guestUser = await this.api
            .call(
              'livechat:registerGuest',
              [{
                token: token,
                name: _self.$auth.user.name
              }]
            )
            .catch(console.error)
          console.log('guest', guestUser.visitor.token)
          this.setActiveGuest(guestUser)
          var roomId = this.randomString()
          this.setActiveRoom(roomId)
          let msg = await this.api
            .call(
            'sendMessageLivechat',
            [{
              _id: _self.randomString(),
              rid: roomId,
              msg: message,
              token: guestUser.visitor.token
            }])
            .catch(console.error)
    
          try {
            let  liveStream = await this.$subscribe("stream-livechat-room",[
              roomId,
                {
                  "useCollection": true,
                  "args":[
                    {
                      "visitorToken": guestUser.visitor.token
                    }
                  ]
                }
            ])
          this.msgLive = await this.find('stream-livechat-room')
    
          } catch (e) {
            console.log(e)
          }
          //
          try {
            var  roomStream = await this.$subscribe("stream-room-messages",[
              roomId,
                {
                  "useCollection": true,
                  "args":[
                    {
                      "visitorToken": guestUser.visitor.token
                    }
                  ]
                }
            ])
    
            console.log('roomstream')
            var update = this.find('stream-room-messages')
    
          } catch (e) {
            console.log('an error occured', e)
          }
          console.log( this.msg)
        },
        async sendToLiveRoom(message, rId){
          var _self = this
    
          // let initial = await this.api
          //   .call("livechat:getInitialData",[token])
          // register
    
          let msg = await this.api
            .call(
            'sendMessageLivechat',
            [{
              _id: _self.randomString(),
              rid: rId,
              msg: message,
              token: _self.guest.visitor.token
            }])
            .catch(console.error)
    
    
        },
    
    

    顺便说一句,由于没有很好的文档记录,您可以通过订阅
    流式聊天室消息
    在livechat room中获得聊天室消息,而通过订阅
    流式聊天室

    可以更改聊天室状态(如切换到另一个代理)

  • 同时将bot设置为livechat代理和管理器(我在某个地方读过这个提示,可能是胡说八道)
  • 在Admin->Omnichannel->routing中,我设置了“即使没有代理在线也接受”(因为我的bot从未在线,但在发送dmessage时它正在应答)+“将bot代理分配给新对话”
  • 我给自己设置了一个livechat经理+livechat代理的角色,但我留在了另一个部门,这样我就可以接管
  • rocket chat live api文档已经过时了,只是因为一篇随机的论坛帖子,流媒体聊天室的消息才起作用。通常,registerGuest也使用非常小的参数,即随机的、自生成的令牌+名称

    这是我的完整设置代码

        async subscribeToLiveRoom(message){
          var _self = this
          // let initial = await this.api
          //   .call("livechat:getInitialData",[token])
          // register
          const token = this.randomString()
          var guestUser = await this.api
            .call(
              'livechat:registerGuest',
              [{
                token: token,
                name: _self.$auth.user.name
              }]
            )
            .catch(console.error)
          console.log('guest', guestUser.visitor.token)
          this.setActiveGuest(guestUser)
          var roomId = this.randomString()
          this.setActiveRoom(roomId)
          let msg = await this.api
            .call(
            'sendMessageLivechat',
            [{
              _id: _self.randomString(),
              rid: roomId,
              msg: message,
              token: guestUser.visitor.token
            }])
            .catch(console.error)
    
          try {
            let  liveStream = await this.$subscribe("stream-livechat-room",[
              roomId,
                {
                  "useCollection": true,
                  "args":[
                    {
                      "visitorToken": guestUser.visitor.token
                    }
                  ]
                }
            ])
          this.msgLive = await this.find('stream-livechat-room')
    
          } catch (e) {
            console.log(e)
          }
          //
          try {
            var  roomStream = await this.$subscribe("stream-room-messages",[
              roomId,
                {
                  "useCollection": true,
                  "args":[
                    {
                      "visitorToken": guestUser.visitor.token
                    }
                  ]
                }
            ])
    
            console.log('roomstream')
            var update = this.find('stream-room-messages')
    
          } catch (e) {
            console.log('an error occured', e)
          }
          console.log( this.msg)
        },
        async sendToLiveRoom(message, rId){
          var _self = this
    
          // let initial = await this.api
          //   .call("livechat:getInitialData",[token])
          // register
    
          let msg = await this.api
            .call(
            'sendMessageLivechat',
            [{
              _id: _self.randomString(),
              rid: rId,
              msg: message,
              token: _self.guest.visitor.token
            }])
            .catch(console.error)
    
    
        },
    
    

    顺便说一句,由于没有很好的文档记录,您可以通过订阅
    流媒体聊天室消息
    在livechat rooms中获得聊天室消息,同时更改聊天室状态(如切换到其他代理)通过订阅
    stream livechat room

    您能展示一下您是如何调用
    livechat:registerGuest
    ?@Styx-我更新了我的问题,将该部分包括在内。您能展示一下您是如何调用
    livechat:registerGuest
    的吗?@Styx-我更新了我的问题,将该部分包括在内。
    "_id" : "j65Cp5peeLJLYhWQi" 
    "rid" : "a_random_string" 
    "msg": "Hello" 
    "token" : "J8IpnpB1yN1AYtO0e0EzLhuaRhe0zaZkjHBAamsehSO"
    
    ddpClient.call("livechat:registerGuest",[{"token":authToken,"name":"test1","email":"test2@gmail.com","department":department._id},25],function(err, info){
    
    });
    
        async subscribeToLiveRoom(message){
          var _self = this
          // let initial = await this.api
          //   .call("livechat:getInitialData",[token])
          // register
          const token = this.randomString()
          var guestUser = await this.api
            .call(
              'livechat:registerGuest',
              [{
                token: token,
                name: _self.$auth.user.name
              }]
            )
            .catch(console.error)
          console.log('guest', guestUser.visitor.token)
          this.setActiveGuest(guestUser)
          var roomId = this.randomString()
          this.setActiveRoom(roomId)
          let msg = await this.api
            .call(
            'sendMessageLivechat',
            [{
              _id: _self.randomString(),
              rid: roomId,
              msg: message,
              token: guestUser.visitor.token
            }])
            .catch(console.error)
    
          try {
            let  liveStream = await this.$subscribe("stream-livechat-room",[
              roomId,
                {
                  "useCollection": true,
                  "args":[
                    {
                      "visitorToken": guestUser.visitor.token
                    }
                  ]
                }
            ])
          this.msgLive = await this.find('stream-livechat-room')
    
          } catch (e) {
            console.log(e)
          }
          //
          try {
            var  roomStream = await this.$subscribe("stream-room-messages",[
              roomId,
                {
                  "useCollection": true,
                  "args":[
                    {
                      "visitorToken": guestUser.visitor.token
                    }
                  ]
                }
            ])
    
            console.log('roomstream')
            var update = this.find('stream-room-messages')
    
          } catch (e) {
            console.log('an error occured', e)
          }
          console.log( this.msg)
        },
        async sendToLiveRoom(message, rId){
          var _self = this
    
          // let initial = await this.api
          //   .call("livechat:getInitialData",[token])
          // register
    
          let msg = await this.api
            .call(
            'sendMessageLivechat',
            [{
              _id: _self.randomString(),
              rid: rId,
              msg: message,
              token: _self.guest.visitor.token
            }])
            .catch(console.error)
    
    
        },