在RocketChat中通过DDP发送LiveChat消息的问题

时间:2017-09-24 08:24:57

标签: meteor ddp rocket.chat

我正在尝试使用DDP Realtime API启动LiveChat对话,但我遇到了问题。

https://rocket.chat/docs/developer-guides/realtime-api/livechat-api

我正按照文档执行所有步骤。在第一个API结果中,您可以看到它为:wnumAgents: 2。但是,当我尝试向同一个部门发送消息时,它说:“抱歉,没有在线代理商。”

有没有办法找出问题?

online: true

的结果
livechat:getInitialData

{ enabled: true, title: 'xyz.com', color: '#C1272D', registrationForm: false, room: null, triggers: [], departments: [ { _id: 'CxCTgXL4csw3TcW6S', enabled: true, name: 'Support', description: '', numAgents: 2, showOnRegistration: true, _updatedAt: 2017-09-24T06:46:39.657Z } ], allowSwitchingDepartments: true, online: true, offlineColor: '#666666', offlineMessage: 'We are not online right now. Please leave us a message:', offlineSuccessMessage: '', offlineUnavailableMessage: '', displayOfflineForm: true, videoCall: true, offlineTitle: 'Leave a message', language: '', transcript: false, transcriptMessage: 'Would you like a copy of this chat emailed?' }

的结果
livechat:registerGuest

登录结果

{ userId: 'j65Cp5peeLJLYhWQi',
  token: 'J8IpnpB1yN1AYtO0e0EzLhuaRhe0zaZkjHBAamsehSO' }

{ id: 'j65Cp5peeLJLYhWQi', token: 'J8IpnpB1yN1AYtO0e0EzLhuaRhe0zaZkjHBAamsehSO', tokenExpires: 2017-12-23T07:45:01.928Z }

的结果
sendMessageLivechat

这些是我发送给{ isClientSafe: true, error: 'no-agent-online', reason: 'Sorry, no online agents', message: 'Sorry, no online agents [no-agent-online]', errorType: 'Meteor.Error' } 的参数。

sendMessageLiveChat

有人可以帮助我吗?

这就是我所谓的registerGuest。

"_id" : "j65Cp5peeLJLYhWQi" 
"rid" : "a_random_string" 
"msg": "Hello" 
"token" : "J8IpnpB1yN1AYtO0e0EzLhuaRhe0zaZkjHBAamsehSO"

我在这里传递的令牌是admin的authToken

使用DDP npm包获取ddpClient对象。

1 个答案:

答案 0 :(得分:0)

我通过

的组合解决了这个问题
  1. 同时将机器人设置为实时聊天代理和管理员(我已经在某个地方读到了这个提示,这可能毫无意义)
  2. 在“管理”->“全渠道”->“路由”中,我设置了“即使没有代理在线也接受”(因为我的机器人从未在线,所以在DMessaged时它会回复)+“将机器人代理分配给新的对话”
  3. 我已经为自己设置了一个即时聊天经理+即时聊天代理角色,但是留在了另一个部门,这样我就可以接管

火箭聊天实时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)


    },

顺便说一句,由于记录不充分,您可以通过订阅stream-room-messages来获得实时聊天室中的房间消息,而您可以通过订阅{{1}来获得房间状态更改(例如切换到其他座席) }