Twilio聊天:尝试获取频道上的成员可达性通知

时间:2020-06-26 21:33:48

标签: javascript twilio chat

我正在尝试在聊天频道的成员离开会议室时向该频道的其他成员发送通知。特别是如果他们离开浏览器中的页面。我在服务上启用了“已启用Reachability”,并且正在通过检查Client.reachabilityEnabled成员来对其进行验证。 我可以通过调用Channel.getMembers()访问该频道的所有成员的列表,但是当成员进入或离开聊天页面时,不会触发userInfoUpdated事件。

另一方面,但可能相关的项目是,当我检查控制台中的任何成员时,member.state.attributes对象为空。(请参考此问题Twilio chat member online status is always null-它显示控制台检查器的图像,在member.state.attributes对象中具有包含在线状态的值)-

运行下面的代码,我会收到有关启用可达性的通知以及成员的控制台日志,但是当我有其他成员进入/退出页面时,不会触发任何事件。

/*twilioChat is the return from  require: https://media.twiliocdn.com/sdk/js/chat/v3.3/twilio-chat.min.js*/
        function chatInit(twilioChat){ 

            $scope.twilioChat = twilioChat;
            $scope.twilioChat.Client.create($scope.TOKEN).then(client => {
              console.log('Created chat client');
                $scope.chatClient = client;
                $scope.chatClient.getSubscribedChannels().then(function(){
                    $scope.chatReady = true;
                    console.log('chat is ready');
                    createOrJoinMonitorChannel();
                });
                
                
            }).catch((err) =>{
                console.error(err);
                
            })
        }
    
    function createOrJoinMonitorChannel(){
            
            $scope.chatClient.getChannelByUniqueName($scope.monitor_listen)
                .then(function(channel){
                      $scope.monitorListenChannel = channel;
                      setupMonitorChannel();
                      }).catch(function(err){
                console.log(err);
                $scope.chatClient.createChannel({
                    uniqueName: $scope.monitor_listen,
                    friendlyName: $scope.monitor_listen,
                    
                }).then(function(channel){
                    $scope.monitorListenChannel = channel;
                   setupMonitorChannel();
                }).catch(function(err){
                    console.log('Monitor Channel could not be created');
                    console.log(err);
                });
            });
            
        }
    
    function setupMonitorChannel(){
            var status = $scope.monitorListenChannel.state.status;
            if(status !== 'joined'){
            $scope.monitorListenChannel.join().then(function(channel){
                
                });
            }else{
            
            }
            $scope.monitorListenChannel.on('memberJoined',function(m){
                console.log('member joined');
                
            });
            $scope.monitorListenChannel.on('memberLeft',function(m){
                console.log('member left');
                
            });
                if($scope.chatClient.reachabilityEnabled){
                    console.log('Enabled');
                }else{
                    console.log('Not Enabled');
                }
                
            
              $member_promise = $scope.monitorListenChannel.getMembers();
              $member_promise.then(members=>{
                 console.log(members); 
                 members.forEach(member=>{
                     member.on('userInfoUpdated',function(user){
                        console.log('user info updated') ;
                     });
                 })
              });
            
            $scope.monitorListenChannel.on('messageAdded', function(message){
                var data = isJSONSTR(message.body);
                $handler.classroomMonitor(data);
            });
        }

1 个答案:

答案 0 :(得分:-1)

启用“可达性”后,无论用户是否在线,它都会触发一个事件。您可以使用user.on("updated", ({user, updateReasons}) => {})事件监听器。根据所使用的版本,可能不支持userInfoUpdated。

在侦听成员离开频道时,您必须自己调用channel.leave()。这有帮助吗?

https://media.twiliocdn.com/sdk/js/chat/releases/4.0.0/docs/User.html