Twilio+NodeJS如何高效检查两用户是否共同参与过会话及问题排查
问题原因
Array.filter()不会修改原数组,只会返回过滤后的新数组。你当前代码仅调用了filter方法但未接收返回值,最终返回的仍然是登录用户的全量参与会话列表,没有做任何过滤。- 匹配逻辑错误。
userConversations接口返回的每条记录中,participantSid字段对应的是登录用户自身在该会话内的参与者实例SID,不是会话内其他参与者的SID,按照现有规则永远无法匹配到另一个用户的记录。
正确实现
实现逻辑为:先拉取登录用户的所有会话,再遍历每个会话拉取其全部参与者列表,校验是否存在目标用户,代码如下:
const checkForExistingConversations = async (loggedInUserSid, participantUserSid) => { // 获取登录用户参与的所有会话 const userConversations = await client.conversations .users(loggedInUserSid) .userConversations .list() const result = [] for (const convo of userConversations) { // 拉取当前会话的所有参与者 const participants = await client.conversations .conversations(convo.conversationSid) .participants .list() // 校验是否包含目标参与者 // 注意:如果你传入的participantUserSid是Twilio User SID而非参与者实例SID,请将匹配条件改为 p.identity === participantUserSid const isMatch = participants.some(participant => participant.sid === participantUserSid) if (isMatch) { result.push(convo) // 若仅需判断是否存在共同会话不需要返回全量匹配结果,可在此处break减少接口调用 } } return result }
优化建议
如果你的业务场景中这类查询频次较高,建议在创建双人会话时,直接将会话关联的两个用户SID存储在自己的业务数据库中,后续查询直接检索本地数据库即可,无需多次调用Twilio接口,性能会高很多。
内容的提问来源于stack exchange,提问作者IWI
相关产品推荐
相关产品推荐

