Client.getConversationByUniqueName и Client.getConversationBySid не могут найти разговоры, созданные другими пользователями
Примечание. Я использую @ twilio / беседы версии 1.1.0 в проекте узла. Я перехожу с программируемого чата на разговоры.
Я вижу звонки на
Client.getConversationByUniqueName
и
Client.getConversationBySid
не возвращают существующие каналы, созданные другими пользователями.
Пример:
Пользователь A (со своим уникальным идентификатором и токеном) успешно создал диалог myConvo1, используя следующий код:
client.createConversation({
uniqueName: 'myConvo1',
friendlyName: 'myConvo1',
});
Пользователь B (со своим уникальным идентификатором и токеном) не может найти этот диалог, используя:
Client.getConversationByUniqueName('myConvo1')
ИЛИ ЖЕ
Client.getConversationBySid(sid)
(просто передавая sid, который я получаю из первоначального вызова createConversation). Я вижу эти ошибки соответственно:
Not Found at Upstream.actualSend
./node_modules/@twilio/conversations/node_modules/twilsock/lib/services/upstream.js:135
Conversation with SID CHc4565e40a32f4bffaf490bae2cff45db is not found.
at conversations.syncListRead.promise.then.then.conversation ./node_modules/@twilio/conversations/lib/client.js:283
Однако я могу получить доступ к этому разговору с помощью тех же функций, если я использую токен / идентификатор пользователя A. Кроме того, когда я вызываю это из клиента пользователя B:
client.createConversation({
uniqueName: 'myConvo1',
friendlyName: 'myConvo1',
});
Я получаю такую ошибку:
Conversation with provided unique name already exists
. Все это наводит меня на мысль, что разговор существует, но он просто недоступен для других пользователей.
Примечание 2: я ссылался на документы ниже. Я не вижу явных примеров того, как находить каналы и присоединяться к ним, поэтому я могу что-то упустить или подойти к этому неправильно.
https://media.twiliocdn.com/sdk/js/conversations/releases/1.1.0/docs/Client.html
3 ответа
Может ли это быть причиной того, что Twilio Conversations поддерживает только частные каналы, а не общедоступные каналы, такие как Программируемый чат?
Примеры использования публичных и частных каналов с программируемым чатом Twilio
Я создал несколько идентификаторов службы и использовал один конкретный идентификатор службы чата (XXXX-Chat-Dev), но приложение приняло идентификатор службы чата по умолчанию, который я не упомянул в бэкэнде.
Исправлено удалением идентификатора службы чата по умолчанию в Twilio.
Ваше здоровье!
Как упоминал @mwest-cs, проблема заключалась в том, что участников нужно было добавлять после создания разговора. Я создал беседы на серверной стороне, так что они были созданыsystem
, а не одним из участников. Ничего страшного, просто нужно добавить всех участников в беседу. В конце концов это код, который у меня заработал:
const Twilio = require('twilio');
const conversationUserIds = [123, 456]; // TODO: replace with real ones; those are my custom user IDs, not Twilio User SIDs.
const twilioClient = Twilio(twilioConfig.ACCOUNT_SID, twilioConfig.AUTH_TOKEN);
const newConversation = await twilioClient.conversations.conversations.create({ uniqueName });
await Promise.all(conversationUserIds.map((userId) =>
channel.participants().create({ identity: userId })
));
Обратите внимание, что согласно документации Twilio , создание участника присоединяется к разговору, и подключенный человек будет получать все последующие сообщения.
Кроме того, вы можете проверить количество участников вашего разговора, перейдя в Expore Products в Twilio Console -> Разговоры, на левой боковой панели: Разговоры -> Управление -> Службы, выберите сервис, затем на левой боковой панели: Разговор (в нижний). Здесь вы можете увидеть таблицу всех ваших разговоров, а также в столбце таблицы «Участники» указано количество участников в каждом разговоре.
Приятного кодирования!