Обработка событий Bot в Microsoft TeamsHandle bot events in Microsoft Teams

Важно!

Статьи, приведенные в этом разделе, основаны на пакете SDK "V3 Bot Framework".The articles in this section are based on the v3 Bot Framework SDK. Если вы ищете текущую документацию (версия 4,6 или более поздняя версия пакета SDK), ознакомьтесь с разделом " беседы Боты ".If you're looking for current documentation (version 4.6 or later of the SDK) see the Conversational Bots section.

Microsoft Teams отправляет уведомления для почтового робота для изменений или событий, происходящих в областях действия ленты.Microsoft Teams sends notifications to your bot for changes or events that happen in scopes where your bot is active. Вы можете использовать эти события для активации логики службы, например:You can use these events to trigger service logic, such as the following:

  • Инициация приветственного сообщения при добавлении ленты в группуTrigger a welcome message when your bot is added to a team
  • Сведения о группах запросов и кэш-памяти при добавлении ленты в групповой чатQuery and cache group information when the bot is added to a group chat
  • Обновление кэшированных сведений о членстве в группе или о каналеUpdate cached information on team membership or channel information
  • Удаление кэшированных данных для команды при удалении ленты.Remove cached information for a team if the bot is removed
  • Когда пользователю понравится сообщение BotWhen a bot message is liked by a user

Каждое событие Bot передается Activity в виде объекта, в котором messageType определяется, какая информация находится в объекте.Each bot event is sent as an Activity object in which messageType defines what information is in the object. Сообщения типа messages message можно просмотреть в разделе Отправка и получение сообщений.For messages of type message, see Sending and receiving messages.

События Teams и Group, обычно активируемые для conversationUpdate типа, имеют дополнительные сведения о событиях Teams, передаваемые в рамках channelData объекта, и поэтому обработчик события должен запросить channelData полезные данные для Teams eventType и дополнительные метаданные, связанные с событиями.Teams and group events, usually triggered off the conversationUpdate type, have additional Teams event information passed as part of the channelData object, and therefore your event handler must query the channelData payload for the Teams eventType and additional event-specific metadata.

В следующей таблице перечислены события, которые могут получать и предпринимать действия от пользователя Bot.The following table lists the events that your bot can receive and take action on.

TypeType Объект полезных данныхPayload object Тип события TeamsTeams eventType ОписаниеDescription ОбластьScope
conversationUpdate membersAdded teamMemberAdded Участник, добавленный в группуMember added to team коall
conversationUpdate membersRemoved teamMemberRemoved Участник удален из группыMember was removed from team groupChat & team
conversationUpdate teamRenamed Команда была переименованаTeam was renamed team
conversationUpdate channelCreated Создан каналA channel was created team
conversationUpdate channelRenamed Канал переименованA channel was renamed team
conversationUpdate channelDeleted Канал удаленA channel was deleted team
messageReaction reactionsAdded Реакция на сообщение BotReaction to bot message коall
messageReaction reactionsRemoved Реакция, удаленная из сообщения BotReaction removed from bot message коall

Добавление участников группы или лентыTeam member or bot addition

conversationUpdateСобытие отправляется в Bot при получении сведений об обновлениях членства для Teams, где она была добавлена.The conversationUpdate event is sent to your bot when it receives information on membership updates for teams where it has been added. Он также получает обновление, когда оно добавляется в первый раз специально для личных бесед.It also receives an update when it has been added for the first time specifically for personal conversations. Обратите внимание, что сведения о пользователе ( Id ) уникальны для почтового робота, и их можно кэшировать для будущего использования службой (например, для отправки сообщения определенному пользователю).Note that the user information (Id) is unique for your bot and can be cached for future use by your service (such as sending a message to a specific user).

Bot или пользователь, добавленный в командуBot or user added to a team

conversationUpdateСобытие с membersAdded объектом в полезных данных отправляется при добавлении в команду ленты или нового пользователя в группу, в которую добавлен Bot.The conversationUpdate event with the membersAdded object in the payload is sent when either a bot is added to a team or a new user is added to a team where a bot has been added. Microsoft Teams также добавляет eventType.teamMemberAdded в channelData объект.Microsoft Teams also adds eventType.teamMemberAdded in the channelData object.

Так как это событие отправляется в обоих случаях, необходимо выполнить анализ membersAdded объекта, чтобы определить, был ли добавлен пользователь или сам робот.Because this event is sent in both cases, you should parse the membersAdded object to determine whether the addition was a user or the bot itself. В последнююмся случае рекомендуется отправить приветственное сообщение на канал, чтобы пользователи могли ознакомиться с функциями, которые предоставляет ваш почтовый робот.For the latter, a best practice is to send a welcome message to the channel so users can understand the features your bot provides.

Пример кода: Проверка того, был ли элемент Bot добавлен.Example code: Checking whether bot was the added member

.NET.NET
    for (int i = 0; i < sourceMessage.MembersAdded.Count; i++)
    {
        if (sourceMessage.MembersAdded[i].Id == sourceMessage.Recipient.Id)
        {
            addedBot = true;
            break;
        }
    }
Node.jsNode.js
const builder = require('botbuilder');

var c = new builder.ChatConnector({appId: BOT_APP_ID, appPassword: .BOT_SECRET});
var bot = new builder.UniversalBot(c);

bot.on('conversationUpdate', (msg) => {
    var members = msg.membersAdded;
    // Loop through all members that were just added to the team
    for (var i = 0; i < members.length; i++) {

        // See if the member added was our bot
        if (members[i].id.includes(BOT_APP_ID)) {
            var botmessage = new builder.Message()
                .address(msg.address)
                .text('Hello World!');

            bot.send(botmessage, function(err) {});
        }
    }
});

Пример схемы: Bot добавлен в группуSchema example: Bot added to team

{
   "membersAdded":[
      {
         "id":"28:f5d48856-5b42-41a0-8c3a-c5f944b679b0"
      }
   ],
   "type":"conversationUpdate",
   "timestamp":"2017-02-23T19:38:35.312Z",
   "localTimestamp":"2017-02-23T12:38:35.312-07:00",
   "id":"f:5f85c2ad",
   "channelId":"msteams",
   "serviceUrl":"https://smba.trafficmanager.net/amer-client-ss.msg/",
   "from":{
      "id":"29:1I9Is_Sx0OIy2rQ7Xz1lcaPKlO9eqmBRTBuW6XzkFtcjqxTjPaCMij8BVMdBcL9L_RwWNJyAHFQb0TRzXgyQvA"
   },
   "conversation":{
      "isGroup":true,
      "conversationType":"channel",
      "id":"19:efa9296d959346209fea44151c742e73@thread.skype"
   },
   "recipient":{
      "id":"28:f5d48856-5b42-41a0-8c3a-c5f944b679b0",
      "name":"SongsuggesterBot"
   },
   "channelData":{
      "team":{
         "id":"19:efa9296d959346209fea44151c742e73@thread.skype"
      },
      "eventType":"teamMemberAdded",
      "tenant":{
         "id":"72f988bf-86f1-41af-91ab-2d7cd011db47"
      }
   }
}

Пользователь, добавленный на собраниеUser Added to a meeting

conversationUpdateСобытие с membersAdded объектом в полезных данных отправляется, когда пользователь добавляется в частное запланированное собрание.The conversationUpdate event with the membersAdded object in the payload is sent when a user is added to a private scheduled meeting. Сведения о событии будут отправляться, даже если анонимные пользователи присоединяются к собранию.The event details will be sent even when anonymous users join the meeting.

Примечание

  • Когда анонимный пользователь добавляется к собранию, объект полезных данных Мемберсаддед не имеет aadObjectId поля.When an anonymous user is added to a meeting, membersAdded payload object does not have aadObjectId field.
  • Когда анонимный пользователь добавляется к собранию, from объект в полезных данных всегда будет иметь идентификатор организатора собрания, даже если анонимный пользователь добавлен другим докладчиком.When an anonymous user is added to a meeting, from object in the payload always have the id of the meeting organizer, even if the anonymous user was added by another presenter.

Пример схемы: пользователь добавлен на собраниеSchema example: User added to meeting

{
   "membersAdded":[
      {
         "id":"229:1Z_XHWBMhDuehhDBYoPQD6Y1DSFsTtqOZx-SA5Jh9Y4zHKm4VbFGRn7-rK7SWiW1JECwxkMdrWpHoBut2sSyQPA"
      }
   ],
   "type":"conversationUpdate",
   "timestamp":"2017-02-23T19:38:35.312Z",
   "localTimestamp":"2020-09-29T21:11:38.6542339Z",
   "id":"f:a8cd1b51-9ddb-bd35-624b-7f7474165df8",
   "channelId":"msteams",
   "serviceUrl":"https://canary.botapi.skype.com/amer/",
   "from":{
      "id":"29:1siKxZhSoTapsXvI0gyf7Gywm_HM-4kEQW4BJnWuFYVIVu87xCNP99nidgQRCcwD3L3p_schiMShzx8IDRzf8mw",
      "aadObjectId":"f30ba569-abef-4e97-8762-35f85cbae706"
   },
   "conversation":{
      "isGroup":true,
      "tenantId":"e15762ef-a8d8-416b-871c-25516354f1fe",
      "id":"19:meeting_MWJlNGViOTgtMGExYi00NDA3LWExODgtOTZhMWNlYjM4ZTRj@thread.v2"
   },
   "recipient":{
      "id":"28:3af3604a-d4fc-486b-911e-86fab41aa91c",
      "name":"EchoBot1_Rename"
   },
   "channelData":{
      "tenant":{
         "id":"e15762ef-a8d8-416b-871c-25516354f1fe"
      },
      "source":null,
      "meeting":{
         "id":"MCMxOTptZWV0aW5nX01XSmxOR1ZpT1RndE1HRXhZaTAwTkRBM0xXRXhPRGd0T1RaaE1XTmxZak00WlRSakB0aHJlYWQudjIjMA=="
      }
   }
}

Добавление ленты только для личного контекстаBot added for personal context only

Пользователь Bot получает conversationUpdate membersAdded сведения о том, когда пользователь добавляет его непосредственно для личного чата.Your bot receives a conversationUpdate with membersAdded when a user adds it directly for personal chat. В этом случае полезные данные, получаемые от botа, не содержат channelData.team объект.In this case, the payload that your bot receives doesn't contain the channelData.team object. Вы должны использовать этот фильтр в том случае, если вы хотите, чтобы ваш Bot предлагал другое приветственное сообщение в зависимости от области действия.You should use this as a filter in case you want your bot to offer a different welcome message depending on scope.

Примечание

Для личной Боты ваш робот получит conversationUpdate событие несколько раз, даже если он был удален и добавлен повторно.For personal scoped bots, your bot will receive the conversationUpdate event multiple times, even if the bot is removed and re-added. Для разработки и тестирования может потребоваться добавить вспомогательную функцию, которая позволит полностью сбросить объект Bot.For development and testing you may find it useful to add a helper function that will allow you to reset your bot completely. Более подробную информацию об реализации этого примера можно узнать в Node.js примере или C# .See a Node.js example or C# example for more details on implementing this.

Пример схемы: Bot добавлен в личный контекстSchema example: bot added to personal context

{
  "membersAdded": [{
      "id": "28:f5d48856-5b42-41a0-8c3a-c5f944b679b0"
    },
    {
      "id": "29:<userID>",
      "aadObjectId": "***"
    }
  ],
  "type": "conversationUpdate",
  "timestamp": "2019-04-23T10:17:44.349Z",
  "id": "f:5f85c2ad",
  "channelId": "msteams",
  "serviceUrl": "https://smba.trafficmanager.net/amer-client-ss.msg/",
  "from": {
    "id": "29:<USERID>",
    "aadObjectId": "**_"
  },
  "conversation": {
    "conversationType": "personal",
    "id": "_*_"
  },
  "recipient": {
    "id": "28:<BOT ID>",
    "name": "<BOT NAME>"
  },
  "channelData": {
    "tenant": {
      "id": "<TENANT ID>"
    }
  }
}

Участник группы или Bot удаленTeam member or bot removed

conversationUpdateСобытие с membersRemoved объектом в полезных данных отправляется при удалении ленты из команды или при удалении пользователя из группы, в которую добавлен Bot.The conversationUpdate event with the membersRemoved object in the payload is sent when either your bot is removed from a team, or a user is removed from a team where a bot has been added. Microsoft Teams также добавляет eventType.teamMemberRemoved в channelData объект.Microsoft Teams also adds eventType.teamMemberRemoved in the channelData object. Как и в membersAdded случае с объектом, необходимо проанализировать membersRemoved объект для идентификатора приложения Bot, чтобы определить, кто был удален.As with the membersAdded object, you should parse the membersRemoved object for your bot's App ID to determine who was removed.

Пример схемы: удален участник группыSchema example: Team member removed

{
    "membersRemoved": [
        {
            "id": "29:1_LCi5Up14pAy65yZuaJzG1uIT7ujYhjjSTsUNqjORsZHjLHKiQIBJa4cX2XsAsRoaY7va2w6ZymA9-1VtSY_g"
        }
    ],
    "type": "conversationUpdate",
    "timestamp": "2017-02-23T19:37:06.96Z",
    "localTimestamp": "2017-02-23T12:37:06.96-07:00",
    "id": "f:d8a6a4aa",
    "channelId": "msteams",
    "serviceUrl": "https://smba.trafficmanager.net/amer-client-ss.msg/",
    "from": {
        "id": "29:1I9Is_Sx0OIy2rQ7Xz1lcaPKlO9eqmBRTBuW6XzkFtcjqxTjPaCMij8BVMdBcL9L_RwWNJyAHFQb0TRzXgyQvA"
    },
    "conversation": {
        "isGroup": true,
        "conversationType": "channel",
        "id": "19:efa9296d959346209fea44151c742e73@thread.skype"
    },
    "recipient":
    {
        "id": "28:f5d48856-5b42-41a0-8c3a-c5f944b679b0",
        "name": "SongsuggesterBot"
    },
    "channelData": {
        "team": {
            "id": "19:efa9296d959346209fea44151c742e73@thread.skype"
        },
        "eventType": "teamMemberRemoved",
        "tenant": {
            "id": "72f988bf-86f1-41af-91ab-2d7cd011db47"
        }
    }
}

Пользователь удален из собранияUser removed from a meeting

conversationUpdateСобытие с membersRemoved объектом в полезных данных отправляется, когда пользователь удаляется из частного запланированного собрания.The conversationUpdate event with the membersRemoved object in the payload is sent when a user is removed from a private scheduled meeting. Сведения о событии будут отправляться, даже если анонимные пользователи присоединяются к собранию.The event details will be sent even when anonymous users join the meeting.

Примечание

_ Если анонимный пользователь удален из собрания, объект полезных данных Мемберсремовед не имеет aadObjectId поля._ When an anonymous user is removed from a meeting, membersRemoved payload object does not have aadObjectId field.

  • Когда анонимный пользователь удаляется из собрания, from объект в полезных данных всегда будет иметь идентификатор организатора собрания, даже если анонимный пользователь был удален другим докладчиком.When an anonymous user is removed from a meeting, from object in the payload always have the id of the meeting organizer, even if the anonymous user was removed by another presenter.

Пример схемы: пользователь удален из собранияSchema example: User removed from meeting

{   
      "membersRemoved": 
        {  
          "id": "29:1Z_XHWBMhDuehhDBYoPQD6Y1DSFsTtqOZx-SA5Jh9Y4zHKm4VbFGRn7-rK7SWiW1JECwxkMdrWpHoBut2sSyQPA"   
        }   
      ],   
      "type": "conversationUpdate",   
      "timestamp": "2020-09-29T21:15:08.6391139Z",   
      "id": "f:ee8dfdf3-54ac-51de-05da-9d49514974bb",   
      "channelId": "msteams",   
      "serviceUrl": "https://canary.botapi.skype.com/amer/",   
      "from": {   
        "id": "29:1siKxZhSoTapsXvI0gyf7Gywm_HM-4kEQW4BJnWuFYVIVu87xCNP99nidgQRCcwD3L3p_schiMShzx8IDRzf8mw",   
        "aadObjectId": "f30ba569-abef-4e97-8762-35f85cbae706"   
      },   
      "conversation": {    
        "isGroup": true,   
        "tenantId": "e15762ef-a8d8-416b-871c-25516354f1fe",   
        "id": "19:meeting_MWJlNGViOTgtMGExYi00NDA3LWExODgtOTZhMWNlYjM4ZTRj@thread.v2"   
      },   
      "recipient": {   
        "id": "28:3af3604a-d4fc-486b-911e-86fab41aa91c",   
        "name": "EchoBot1_Rename"   
      },   
      "channelData": {   
        "tenant": {   
          "id": "e15762ef-a8d8-416b-871c-25516354f1fe"   
        },   
        "source": null,   
        "meeting": {   
          "id": "MCMxOTptZWV0aW5nX01XSmxOR1ZpT1RndE1HRXhZaTAwTkRBM0xXRXhPRGd0T1RaaE1XTmxZak00WlRSakB0aHJlYWQudjIjMA=="   
        }   
      }   
}

Обновления имени командыTeam name updates

Примечание

Не существует функции для запроса всех имен команд, а имя команды не возвращается в полезных данных из других событий.There is no functionality to query all team names, and team name is not returned in payloads from other events.

Ваш робот получает уведомление, когда группа, в которую она находится, была переименована.Your bot is notified when the team it is in has been renamed. Он получает conversationUpdate событие eventType.teamRenamed в channelData объекте.It receives a conversationUpdate event with eventType.teamRenamed in the channelData object. Обратите внимание, что уведомления о создании или удалении команды не отображаются, так как боты существует только в составе Teams и не отображается за пределами области, в которой они были добавлены.Please note that there are no notifications for team creation or deletion, because bots exist only as part of teams and have no visibility outside the scope in which they have been added.

Пример схемы: команда переименованаSchema example: Team renamed

{ 
    "type": "conversationUpdate",
    "timestamp": "2017-02-23T19:35:56.825Z",
    "localTimestamp": "2017-02-23T12:35:56.825-07:00",
    "id": "f:1406033e",
    "channelId": "msteams",
    "serviceUrl": "https://smba.trafficmanager.net/amer-client-ss.msg/", 
    "from": { 
        "id": "29:1I9Is_Sx0O-Iy2rQ7Xz1lcaPKlO9eqmBRTBuW6XzkFtcjqxTjPaCMij8BVMdBcL9L_RwWNJyAHFQb0TRzXgyQvA"
    }, 
    "conversation": {
        "isGroup": true,
        "conversationType": "channel",
        "id": "19:efa9296d959346209fea44151c742e73@thread.skype"
    },
    "recipient": { 
        "id": "28:f5d48856-5b42-41a0-8c3a-c5f944b679b0",
        "name": "SongsuggesterLocal"
    },
    "channelData": {
        "team": {
            "id": "19:efa9296d959346209fea44151c742e73@thread.skype",
            "name": "New Team Name"
        },
        "eventType": "teamRenamed",
        "tenant": { 
           "id": "72f988bf-86f1-41af-91ab-2d7cd011db47"
        }
    }
}

Обновления каналаChannel updates

Ваш робот получает уведомление о создании, переименовании или удалении канала в группе, в которой он был добавлен.Your bot is notified when a channel is created, renamed, or deleted in a team where it has been added. Опять же, conversationUpdate получается событие, а идентификатор события, зависящий от Teams, отправляется в составе channelData.eventType объекта, где данные канала channel.id являются идентификатором GUID канала, и channel.name содержит само имя канала.Again, the conversationUpdate event is received, and a Teams-specific event identifier is sent as part of the channelData.eventType object, where the channel data's channel.id is the GUID for the channel, and channel.name contains the channel name itself.

Ниже приведены события канала.The channel events are as follows:

  • чаннелкреатед   Пользователь добавляет новый канал в команду.channelCreated A user adds a new channel to the team
  • чаннелренамед   Пользователь переименовывает существующий каналchannelRenamed A user renames an existing channel
  • чаннелделетед   Пользователь удаляет каналchannelDeleted A user removes a channel

Пример полной схемы: ЧаннелкреатедFull schema example: channelCreated

{
    "type": "conversationUpdate",
    "timestamp": "2017-02-23T19:34:07.478Z",
    "localTimestamp": "2017-02-23T12:34:07.478-07:00",
    "id": "f:dd6ec311",
    "channelId": "msteams",
    "serviceUrl": "https://smba.trafficmanager.net/amer-client-ss.msg/",
    "from": {
        "id": "29:1wR7IdIRIoerMIWbewMi75JA3scaMuxvFon9eRQW2Nix5loMDo0362st2IaRVRirPZBv1WdXT8TIFWWmlQCizZQ"
    },
    "conversation": {
        "isGroup": true,
        "conversationType": "channel",
        "id": "19:efa9296d959346209fea44151c742e73@thread.skype"
    },
    "recipient": {
        "id": "28:f5d48856-5b42-41a0-8c3a-c5f944b679b0",
        "name": "SongsuggesterBot"
    },
    "channelData": {
        "channel": {
            "id": "19:6d97d816470f481dbcda38244b98689a@thread.skype",
            "name": "FunDiscussions"
        },
        "team": {
            "id": "19:efa9296d959346209fea44151c742e73@thread.skype"
        },
        "eventType": "channelCreated",
        "tenant": {
            "id": "72f988bf-86f1-41af-91ab-2d7cd011db47"
        }
    }
}

Фрагмент схемы: Чаннелдата для ЧаннелренамедSchema excerpt: channelData for channelRenamed

⋮
"channelData": {
    "channel": {
        "id": "19:6d97d816470f481dbcda38244b98689a@thread.skype",
        "name": "PhotographyUpdates"
    },
    "team": {
        "id": "19:efa9296d959346209fea44151c742e73@thread.skype"
    },
    "eventType": "channelRenamed",
    "tenant": {
        "id": "72f988bf-86f1-41af-91ab-2d7cd011db47"
    }
}
⋮

Фрагмент схемы: Чаннелдата для ЧаннелделетедSchema excerpt: channelData for channelDeleted

⋮
"channelData": {
    "channel": {
        "id": "19:6d97d816470f481dbcda38244b98689a@thread.skype",
        "name": "PhotographyUpdates"
    },
    "team": {
        "id": "19:efa9296d959346209fea44151c742e73@thread.skype"
    },
    "eventType": "channelDeleted",
    "tenant": {
        "id": "72f988bf-86f1-41af-91ab-2d7cd011db47"
    }
}
⋮

РеакцияReactions

messageReactionСобытие отправляется, когда пользователь добавляет или удаляет его реакцию на сообщение, которое изначально было отправлено с помощью робота.The messageReaction event is sent when a user adds or removes his or her reaction to a message which was originally sent by your bot. replyToId содержит идентификатор определенного сообщения.replyToId contains the ID of the specific message.

Пример схемы: пользователю нравится сообщениеSchema example: A user likes a message

{
    "reactionsAdded": [
        {
            "type": "like"
        }
    ],
    "type": "messageReaction",
    "timestamp": "2017-10-16T18:45:41.943Z",
    "id": "f:9f78d1f3",
    "channelId": "msteams",
    "serviceUrl": "https://smba.trafficmanager.net/amer-client-ss.msg/",
    "from": {
        "id": "29:1I9Is_Sx0O-Iy2rQ7Xz1lcaPKlO9eqmBRTBuW6XzkFtcjqxTjPaCMij8BVMdBcL9L_RwWNJyAHFQb0TRzXgyQvA",
        "aadObjectId": "c33aafc4-646d-4543-9d4c-abd28e4d2110"
    },
    "conversation": {
        "isGroup": true,
        "conversationType": "channel",
        "id": "19:3629591d4b774aa08cb0887902eee7c1@thread.skype"
    },
    "recipient": {
        "id": "28:f5d48856-5b42-41a0-8c3a-c5f944b679b0",
        "name": "SongsuggesterLocal"
    },
    "channelData": {
        "channel": {
            "id": "19:3629591d4b774aa08cb0887902eee7c1@thread.skype"
        },
        "team": {
            "id": "19:efa9296d959346209fea44151c742e73@thread.skype"
        },
        "tenant": {
            "id": "72f988bf-86f1-41af-91ab-2d7cd011db47"
        }
    },
    "replyToId": "1575667808184"
}

Пример схемы: пользователю не нравится сообщениеSchema example: A user un-likes a message

{
    "reactionsRemoved": [
        {
            "type": "like"
        }
    ],
    "type": "messageReaction",
    "timestamp": "2017-10-16T18:45:41.943Z",
    "id": "f:9f78d1f3",
    "channelId": "msteams",
    "serviceUrl": "https://smba.trafficmanager.net/amer-client-ss.msg/",
    "from": {
        "id": "29:1I9Is_Sx0O-Iy2rQ7Xz1lcaPKlO9eqmBRTBuW6XzkFtcjqxTjPaCMij8BVMdBcL9L_RwWNJyAHFQb0TRzXgyQvA",
        "aadObjectId": "c33aafc4-646d-4543-9d4c-abd28e4d2110"
    },
    "conversation": {
        "isGroup": true,
        "conversationType": "channel",
        "id": "19:3629591d4b774aa08cb0887902eee7c1@thread.skype"
    },
    "recipient": {
        "id": "28:f5d48856-5b42-41a0-8c3a-c5f944b679b0",
        "name": "SongsuggesterLocal"
    },
    "channelData": {
        "channel": {
            "id": "19:3629591d4b774aa08cb0887902eee7c1@thread.skype"
        },
        "team": {
            "id": "19:efa9296d959346209fea44151c742e73@thread.skype"
        },
        "tenant": {
            "id": "72f988bf-86f1-41af-91ab-2d7cd011db47"
        }
    },
    "replyToId": "1575667808184"
}