我正在使用 Twilio 的JS 客户端。客户端需要我使用以下代码创建并推送到前端的访问令牌。
def generate_chat_token(self, identity, service_sid):
"""
Generate a jwt chat token.
"""
# Get a token.
token = AccessToken(self.account_sid, self.api_key, self.api_secret, identity=identity)
# Add a chat grant to the token.
grant = ChatGrant(service_sid=service_sid)
token.add_grant(grant)
return token.to_jwt()
然后我可以在前端初始化客户端:
let client = await Twilio.Chat.Client.create(token);
这很好用 - 但是当我尝试通过 SID 获取频道时:
let channel = await client.getChannelBySid('CHXXXX');
我得到:
twilio-chat.min.js:171 Uncaught (in promise) Error: Forbidden
at t (twilio-chat.min.js:171)
at t (twilio-chat.min.js:171)
at new t (twilio-chat.min.js:171)
at e.<anonymous> (twilio-chat.min.js:171)
at k (twilio-chat.min.js:171)
at Generator._invoke (twilio-chat.min.js:171)
at Generator.e.<computed> [as next] (twilio-chat.min.js:171)
at n (twilio-chat.min.js:127)
at twilio-chat.min.js:127
为了对此进行测试,我还创建了一个独立的 Ktor 测试应用程序,并使用 Java SDK 创建了令牌。这工作正常 - 获取频道没有错误。这就是为什么我验证使用伪造令牌初始化客户端会失败,所以我确信错误不是来自无效令牌。我用来尝试获取频道的 SID 是从以下返回的 SID:
def get_conversations(self):
"""
Get Twilio conversations.
"""
return self.client.conversations.conversations.list()
同样,这在我使用 Java SDK 的 Ktor 应用程序中工作得很好,所以我不确定这里的 Python 实现有什么不同。
我不确定如何进一步调试 - 如何从客户端获取特定通道而不会出现此错误?