Как отправить уведомление пользователю в командах через Bot Framework? - PullRequest
2 голосов
/ 23 сентября 2019

У меня есть бот, созданный с v4 Microsoft Bot Framework .Я могу успешно использовать этого бота в разделе «Тестирование в веб-чате» на портале Azure.Я также могу успешно использовать этого бота в приложении, которое я создал в Microsoft Teams.Теперь я хочу отправить уведомление из раздела «Тестирование в веб-чате» конкретному пользователю в группах.Например, в разделе «Тестирование в веб-чате» я хотел бы ввести

Hello someuser@mytenant.com

Когда это отправляется через раздел «Тестирование в веб-чате», я хочу показать «Привет"в командах Microsoft только someuser@mytenant.com.Я успешно токенизировал строку из «Теста в веб-чате».Таким образом, я знаю, что я хочу отправить, и кому я хочу отправить это.Однако я не знаю, как на самом деле отправить его.

В настоящее время у меня в боте есть следующее:

public class EchoBot : ActivityHandler
{
  private ConcurrentDictionary<string, ConversationReference> _conversationReferences;

  public EchoBot(ConcurrentDictionary<string, ConversationReference> conversationReferences)
  {
    _conversationReferences = conversationReferencs;
  }

  private void AddConversationReference(Activity activity)
  {
    var reference = activity.GetConversationReference();
    _conversationReferences.AddOrUpdate(reference.User.Id, reference, (key, newValue) => reference);
  }

  protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> context, CancellationToken cancellationToken)
  {
    AddConversationReference(context.Activity as Activity);

    var parameters = GetParameters();  // Parses context.Activity.Text;

    // Send a message to the target (i.e. someuser@mytenant.com)
    var connection = new Microsoft.Bot.Connector.ConnectorClient(new Uri(context.Activity.ServiceUrl));
    var tenant = context.Activity.GetChannelData<TeamsChannelData>().Tenant;
    // how do I send the message to parameters.Target?

    // Confirm message was sent to the sender
    var confirmation = $"Message was sent to {parameters.Target}.";
    await context.SendActivityAsync(MessageFactory.Text(confirmation));
  }
} 

Я рассмотрел, как отправлять проактивные уведомления напользователи .Однако мне не удалось а) получить пользователя, указанного в parameters.Target, и б) отправить уведомление этому пользователю.Чего мне не хватает?

1 Ответ

0 голосов
/ 23 сентября 2019

Во-первых, вам нужно сопоставить user@email.com с их идентификатором пользователя Команды (возможно со статическим словарем), который имеет формат:

29:1I9Is_Sx0O-Iy2rQ7Xz1lcaPKlO9eqmBRTBuW6XzXXXXXXXXMij8BVMdBcL9L_RwWNJyAHFQb0TXXXXXX

. Вы можете получить идентификатор пользователя Команды одним из следующих способов::

  1. Запрос списка или
  2. Получение сообщения от пользователя ботом и установка точки останова для входящего сообщения, глядя на Activity.ChannelData дляидентификатор пользователя Команды, или
  3. Динамически создавать статический словарь всех входящих сообщений, в котором хранится электронная почта пользователя, сопоставленная с его идентификатором пользователя Команды (я полагаю, что оба находятся в Activity.ChannelData).

Примечание: # 1 и # 2 требуют, чтобы пользователь сначала отправил сообщение боту, что побуждает к проактивным сообщениям

После того, как вы получили соответствующие идентификаторы команд, вы просто отправить упреждающее сообщение пользователю Команды .В конце этой ссылки также упоминается trustServiceUrl, что может оказаться полезным, если вы столкнетесь с проблемами прав доступа / авторизации при попытке отправить упреждающее сообщение.

...