Интеграция с чатами. Проблема с исходящим сообщением

Добрый день, форумчане!

Пытаюсь создать свой провайдер для работы с чатом. Вот по этой статье.

Получить сообщения проблем не вызывает. Но при отправке, ошибка.

Полез в дебаг, и обнаружил что при отправке сообщения. Source устанавливает в признак 2  - сторонний разработчики. Имя канала пусто. Хотя сам id моего канала есть.

   {
        Facebook = 0,
        Telegram = 1,
        ThirdParty = 2,
        WhatsApp = 3
    }

Происходит попытка собрать worker для ThirdParty. Но так как его нет, а есть мой канал Test. Отправка падает.

Если при получении сообщения я задаю канал прям в ChannelName. От при отправке из фронта в обратную сторону. такого параметра я не вижу. Теоретически имя канало должно вытягиваться из провайдера канал или самого имени канала. Но такого кода в методе public OmnichannelMessagingServiceResponse SendMessage(MessagingMessage message) 

Уже перелопатил весь код. Не могу найти ответ. Либо это не доработка террасофта, либо я чего то не понимаю.

При получении сообщения мы задаем канал вот тут

ChannelId = message.ChannelId, 
				MessageDirection = MessageDirection.Incoming,
				MessageType = messageType,
				// Указывает на источник канала (сторонние разработчики).
				Source = ChannelType.ThirdParty, 
				// Имя провайдера. В дальнейшем будет использоваться как идентификатор провайдера.
				ChannelName = "Test" 

сам тип ChannelType зашит в библиотеке, я конечно могу ее открыть и добавить свой тип, и ее использовать, но это не похоже на нормальную работы с решением террасофта. 

Будьте добры. помогите с вопросом. Код прошерстил. Связь в коде нашел только с Source. ChannelName при вызове SendMessage приходит пустой.

При дебаге я подменил значение   ChannelName на Test. все заработало. Но кода для заполнения канала нет. В том числе и со стороны фронта. Где бы это могло храниться, не нашел так же. Нашел все связи OmniChat и прочее. 

В общем я в тупике. помогите если кто то в теме!

Нравится

3 комментария

Здравствуйте, мы расширили список провайдеров и теперь не обязательно использовать ThirdParty = 2,
сейчас список следующий:
Facebook, Telegram,  ThirdParty, WhatsApp, Skype, Viber, Instagram, WeChat, Line, Blackberry, Hangouts, Slack, Snapchat, Signal, Kakaotalk, Discord, Imo, Kik, Qq,    iMessage,  WebSite, VK, OK, Twitter, Workplace, Teams

Подскажите, пожалуйста, необходимый для настройки провайдер.

Test - название канала, а провайдер ThirdParty. Исходя из этого необходимо добавить реализацию для отправки сообщений на провайдер ThirdParty. Пример есть в схеме OmnichannelMessagingAppEventListener (метод BindOutcomeMessageWorker).
В методе описана зависимость использования воркера исходя из провайдера, такую же логику необходимо добавить для воркера ThirdParty.

Алёна Доля,

 

Добрый день!

Я правильно понимаю, что вот эта часть инструкции не валидна? Т.е. какой бы мы провайдер не зарегистрировали, все равно при отправке сообщения будет использоваться ThirdParty?

Негрий Максим Михайлович,

 У MessageManager, есть по две реализации каждого метода. Например:

        /// <summary>
        /// Save message
        /// </summary>
        /// <param name="message">Message from messenger.</param>
        public void Receive(UnifiedMessage message) {
            MessageIncomeWorker.Receive(message);
        }

        /// <summary>
        /// Save message
        /// </summary>
        /// <param name="message">Message from messenger.</param>
        /// <param name="messenger">messenger name.</param>
        public void Receive(UnifiedMessage message, string messenger) {
            MessageIncomeWorker.Receive(message, messenger);
        }

В своем сервисе необходимо использовать метод принимающий вторым параметром строку с именем мессенджера(в случае академии Test). Если же использовать метод без второго параметра, то будет описанная проблема и в этом случае нужно использовать Source имя мессенджера из добавленных.

Показать все комментарии