Контекст и теория
Согласно примерам документов и , вы должны сохранить ссылку на беседу, чтобы восстановить ее по запросу (например, когда сервер получает HTTP-запрос) и отправляет реактивное сообщение на канал publi c.
Итак, я делаю:
- Любой пользователь упоминает бота на канале ( по адресу
#CorpChannel
например) - Бот сохраняет (в частности, я использую Azure Cosmos db) ссылку на беседу (
storage.write(storeItems)
) - [позже] Бот получает HTTP-запрос, который означает: "отправить привет туда" на #CorpChannel "
- Бот восстанавливает ссылку на беседу и использует ее для создания
TurnContext
для вызова sendActivity()
Проблема
Действие 'привет, отвечает на исходное упоминание моего бота вместо того, чтобы начать новую беседу / беседу по этому каналу. Я хочу начать новую беседу fre sh на # CorpChannel
Визуально:
Jane Doe: --------------
| @MyBot 09:00AM |
------------------------
Jhon Doe: --------------
| what ever 10:00AM |
------------------------
HTTP-запрос: «отправить привет туда» #CorpChannel "
Jhon Doe: --------------
| whatever 10:00AM |
------------------------
Jane Doe: --------------
| @MyBot 09:00AM |
------------------------
|> MyBot: -----------
| Hi there 11:00AM |
--------------------
То, что я пробовал
Это код, в который я отправляю активность по запросу
server.post("/api/notify", async (req, res) => {
const channel = req.body.channel;
const message = req.body.message;
const conversation = await bot.loadChannelConversation(channel);
if (!conversation) { /* ... */ }
await adapter.continueConversation(conversation, async (context) => {
await context.sendActivity(message);
});
return res.send({ notified: { channel, message } });
});
это код, в котором я собираюсь перейти к db
// (storage) is in the scope
const loadChannelConversation = async (key) => {
try {
const storeItems = await storage.read(['channels']);
const channels = storeItems['channels'] || {};
return channels[key] || null;
} catch (err) {
console.error(err);
return undefined;
}
};
как я могу опубликовать новое сообщение вместо ответа на исходный поток?
==== EDIT ====
Я также пробовал использовать метод createConversation()
из SDK, но, как сказано в документации:
Сервис Bot Connector поддерживает создание групповых разговоров; однако этот метод и большинство каналов поддерживают только начало разговора с использованием прямого сообщения (негруппового).
Он начинает новый разговор с исходным пользователем, который отправил первое сообщение конфиденциально