我收到 TypeError: Converting circle structure to JSON error in twilio join to channel

如何解决我收到 TypeError: Converting circle structure to JSON error in twilio join to channel

阅读此文档 https://www.twilio.com/blog/implementing-programmable-chat-php-laravel-vue-js 我尝试添加我的 Laravel 8 / jQuery 3.5.1 / vue 2.6 / Bootstrap 4.5 当登录用户选择另一个用户时聊天 我运行 axios 请求来检查频道是否 之前创建(或创建新频道)。在客户端

connectClientWithUsername(){
    this.tc.username = this.loggedUser.name

    let vm = this;
    axios.post('/admin/team-chat/check_channel',{
        sender_id : vm.loggedUser.id,receiver_id : vm.selectedTeamUser.id
    })
        .then(({data}) => {
            console.log('check_channel data::')
            console.log(data)
            
            vm.newChartCreated= data.newChartCreated // Flag if new chat was created
            vm.currentChatChannelName= data.currentChatChannelName // Name of requested channel
            vm.fetchAccessToken(vm.tc.username,vm.connectMessagingClient);

        })
        .catch(error => {
            console.error(error)
            popupAlert('Team Chat',error.response.data.message,'warn')
            vm.is_page_loaded = true
        })
},fetchAccessToken(username,handler) {
    let vm = this;
    axios.post('/token',{
        identity: this.tc.username,device: 'browser'
    })
        .then(function (response) {
            handler(response.data);
        })
        .catch(function (error) {
            console.log(error);
        });
},

在 app/Http/Controllers/Admin/TeamChatController.php 中的服务器部分:

public function check_channel(Request $request)
{
    $requestData = $request->all();
    $chatName= "public_oo_team_chat_" . $requestData['sender_id'] . '_' . $requestData['receiver_id'];
    $newChartCreated = false;
    $chatChannel = null;
    try {
        $channel = $this->twilio->chat->v2->services(config('app.TWILIO_SERVICE_SID'))
                                          ->channels($chatName)
                                          ->fetch();

    } catch(RestException $e) {
        $channel = $this->twilio->chat->v2->services(config('app.TWILIO_SERVICE_SID'))
            ->channels->create([
                'uniqueName'    => $chatName,'friendlyName'  => $chatName,'type'          => 'public'  // New channel was created
            ]);
        if($channel->sid) {
            $chatChannel= new ChatChannel(); // Ref to newly created channel was saved in db
            $chatChannel->sender_id= $requestData['sender_id'];
            $chatChannel->receiver_id= $requestData['receiver_id'];
            $chatChannel->channel_name= $chatName;
            $chatChannel->last_chat_at= Carbon::now(config('app.timezone'));
            $chatChannel->save();
        }
        $newChartCreated= true;

    }
    return response()->json([
        'message' => '','chatChannel' => $chatChannel,'newChartCreated' => $newChartCreated,// return name of current Channel
        'currentChatChannelName' => $chatName],HTTP_RESPONSE_OK);
} // check_channel


public function getToken(Request $request)
{
    $this->identity = $request->identity;
    $token = new AccessToken(
        $this->twilio_account_sid,$this->twilio_api_key,$this->twilio_api_secret,3600,$this->identity
    );
    // Create Chat grant
    $chat_grant = new ChatGrant();
    $chat_grant->setServiceSid($this->service_sid);

    // Add grant to token
    $token->addGrant($chat_grant);
    // render token to string
    echo $token->toJWT();
}

当我从服务器获取令牌时,我创建客户端并尝试连接到通道

    connectMessagingClient(token) {  // connects the user to the Twilio Chat client.
        // Initialize the Chat messaging client
        let vm = this;

        this.tc.accessManager = new Twilio.AccessManager(token);

        new Twilio.Chat.Client.create(token).then(function(client) {
            vm.tc.messagingClient = client;
            vm.updateConnectedUI();
            vm.connectToActiveChannel(client) // I try to connect to channel I need

            // vm.tc.messagingClient.on('channelAdded',_.throttle(vm.loadChannelList));
            // vm.tc.messagingClient.on('channelRemoved',_.throttle(vm.loadChannelList));
            // vm.tc.messagingClient.on('tokenExpired',vm.refreshToken);
        });
    },connectToActiveChannel(messagingClient) {
        let vm = this

        // Get all public channels
        messagingClient.getPublicChannelDescriptors().then(function(channels) {
            for (let i = 0; i < channels.items.length; i++) {
                const channel = channels.items[i];
            }
            vm.tc.channelArray = channels.items;

            vm.tc.channelArray.forEach(vm.addChannel); // Check for selected channel
        });

    },addChannel(channel){
        console.log('addChannel channel::')
        console.log(typeof channel)
        if (channel.uniqueName === this.currentChatChannelName) {
            this.tc.generalChannel = channel;
            console.log('FOUND  this.tc.generalChannel!!!')
            console.log( this.tc.generalChannel )
            return this.joinChannel(channel);
        }
    },joinChannel(_channel) { // the member joins the channel (general or a personally created channel)
        console.log(" joinChannel   _channel");
        console.log(_channel);
        let vm = this;
        return _channel.join()
            .then(function(joinedChannel) {
                console.log('Joined channel ' + joinedChannel.friendlyName);
                vm.updateChannelUI(_channel);
                vm.tc.currentChannel = _channel;
                vm.loadMessages();
                return joinedChannel;
            })
            .catch(function(err) {
                alert("Couldn't join channel " + _channel.friendlyName + ' because ' + err);
            });
    },

在 joinChannel 中出现错误:

vue.common.dev.js?4650:630 [Vue warn]: Error in render: "TypeError: Converting circular structure to JSON
    --> starting at object with constructor 'l'
    |     property '_fsm' -> object with constructor 'o'
    --- property 'context' closes the circle"

在线:

return _channel.join()

我在浏览器的控制台中看到:

https://prnt.sc/wekctphttps://prnt.sc/wekspu

看起来我的流程中存在错误,但在我看来,我将有效对象传递给了行:

_channel.join

为什么会出现错误以及如何修复?

谢谢!

解决方法

这里是 Twilio 开发者布道者。

在这段代码中:

    connectToActiveChannel(messagingClient) {
        let vm = this

        // Get all public channels
        messagingClient.getPublicChannelDescriptors().then(function(channels) {
            for (let i = 0; i < channels.items.length; i++) {
                const channel = channels.items[i];
            }
            vm.tc.channelArray = channels.items;

            vm.tc.channelArray.forEach(vm.addChannel); // Check for selected channel
        });

    }

这一行似乎没有做任何事情(它遍历通道描述符列表,为每个描述符创建一个新的 channel const,但随后立即将其丢弃。

然后,您将 vm.tc.channelArray 设置为通道描述符列表,并为每个描述符调用 vm.addChannel

请注意,getPublicChannelDescriptors() 返回 ChannelDescriptor objects 的列表。 ChannelDescriptor 不能被加入并且包含请求时频道数据的快照。

要加入频道,您需要先调用 getChannel() on the channel descriptor,然后执行其余代码。

如果这有帮助,请告诉我。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res