Implementera kanalspecifika funktioner
GÄLLER FÖR: SDK v4
Vissa kanaler innehåller funktioner som inte kan implementeras med endast meddelandetext och bifogade filer. Om du vill implementera kanalspecifika funktioner kan du skicka inbyggda metadata till en kanal i aktivitetsobjektets kanaldataegenskap . Din robot kan till exempel använda egenskapen kanaldata för att instruera Telegram att skicka en dekal eller instruera Office365 att skicka ett e-postmeddelande.
Den här artikeln beskriver hur du använder en meddelandeaktivitets kanaldataegenskap för att implementera den här kanalspecifika funktionen:
Kanal | Funktioner |
---|---|
E-post | Skicka och ta emot ett e-postmeddelande som innehåller metadata för brödtext, ämne och prioritet. |
Skicka Facebook-meddelanden internt. | |
LINJE | Skicka ett meddelande som implementerar LINE-specifika meddelandetyper. |
Slack | Skicka Slack-meddelanden med fullständig återgivning. |
Teams | Hantera @-omnämnanden i Microsoft Teams-meddelanden. |
Telegram | Utför Telegram-specifika åtgärder, till exempel att dela ett röstmemorandum eller ett klistermärke. |
Anteckning
Värdet för ett aktivitetsobjekts kanaldataegenskap är ett JSON-objekt.
Därför visar exemplen i den här artikeln det förväntade formatet för channelData
JSON-egenskapen i olika scenarier.
Om du vill skapa ett JSON-objekt med hjälp av .NET använder du JObject
klassen (.NET).
Skapa ett anpassat e-postmeddelande
Om du vill skapa ett anpassat e-postmeddelande anger du aktivitetsegenskapen channelData
till ett JSON-objekt som innehåller följande egenskaper:
Egenskap | Beskrivning |
---|---|
bccRecipients | Ett semikolon (;) avgränsad sträng med e-postadresser som ska läggas till i meddelandets hemlig kopia (blind kopia). |
ccRecipients | Ett semikolon (;) avgränsad sträng med e-postadresser som ska läggas till i meddelandets fält Kopia (kopia). |
htmlBody | Ett HTML-dokument som anger brödtexten i e-postmeddelandet. I kanalens dokumentation finns information om HTML-element och attribut som stöds. |
prioritet | E-postmeddelandets prioritetsnivå. Giltiga värden är höga, normala och låga. Standardvärdet är normalt. |
toRecipients | Ett semikolon (;) avgränsad sträng med e-postadresser som ska läggas till i meddelandets till-fält. |
Utgående och inkommande meddelanden mellan användaren och roboten kan ha en channelData
aktivitet som innehåller ett JSON-objekt vars egenskaper anges i föregående tabell.
Kodfragmentet nedan visar ett exempel på channelData
egenskapen för ett inkommande anpassat e-postmeddelande, från roboten till användaren.
{
"type": "ActivityTypes.Message",
"locale": "en-Us",
"channelID": "email",
"fromName": { "id": "mybot@mydomain.com", "name": "My bot"},
"recipientName": { "id": "joe@otherdomain.com", "name": "Joe Doe"},
"conversation": { "id": "123123123123", "topic": "awesome chat" },
"channelData":
{
"htmlBody": "<html><body style = \"font-family: Calibri; font-size: 11pt;\" >This is more than awesome.</body></html>",
"importance": "high",
"ccRecipients": "Yasemin@adatum.com;Temel@adventure-works.com",
}
}
Skapa ett Facebook-meddelande
Om du vill skapa ett Facebook-meddelande anger du aktivitetsobjektets kanaldataegenskap till ett JSON-objekt som anger följande egenskaper:
Egenskap | Beskrivning |
---|---|
notification_type | Typ av meddelande, till exempel REGULAR, SILENT_PUSH eller NO_PUSH. |
Bifogad fil | En bifogad fil som anger en bild, video eller annan multimediatyp eller en bifogad mall, till exempel ett kvitto. |
Anteckning
Mer information om format och innehåll för notification_type
egenskapen finns attachment
i Facebook API-dokumentationen.
Det här kodfragmentet visar ett exempel på channelData
egenskapen för en bifogad Facebook-kvittobilaga.
"channelData": {
"notification_type": "NO_PUSH",
"attachment": {
"type": "template"
"payload": {
"template_type": "receipt",
//...
}
}
}
Skapa ett LINE-meddelande
Om du vill skapa ett meddelande som implementerar RADspecifika meddelandetyper (till exempel klistermärken, mallar eller RADspecifika åtgärdstyper som att öppna telefonkameran) ställer du in aktivitetsobjektets kanaldataegenskap på ett JSON-objekt som anger RAD-meddelandetyper och åtgärdstyper.
Egenskap | Beskrivning |
---|---|
typ | Radåtgärdens/meddelandetypens namn |
Dessa RAD-meddelandetyper stöds:
- Klistermärke
- Bildkarta
- Mall (knapp, bekräfta, karusell)
- Flex
Dessa LINE-åtgärder kan anges i åtgärdsfältet i meddelandetypens JSON-objekt:
- Återst.
- Meddelande
- URI
- Datetimerpicker
- Kamera
- Kamerarulle
- Location
Mer information om dessa LINE-metoder och deras parametrar finns i dokumentationen för LINE Bot API.
Det här kodfragmentet visar ett exempel på en channelData
egenskap som anger en kanalmeddelandetyp ButtonTemplate
och tre åtgärdstyper: "kamera", "cameraRoll" och "datetimepicker".
"channelData": {
"type": "template",
"altText": "This is a buttons template",
"template": {
"type": "buttons",
"thumbnailImageUrl": "https://example.com/bot/images/image.jpg",
"imageAspectRatio": "rectangle",
"imageSize": "cover",
"imageBackgroundColor": "#FFFFFF",
"title": "Menu",
"text": "Please select",
"defaultAction": {
"type": "uri",
"label": "View detail",
"uri": "http://example.com/page/123"
},
"actions": [{
"type": "cameraRoll",
"label": "Camera roll"
},
{
"type": "camera",
"label": "Camera"
},
{
"type": "datetimepicker",
"label": "Select date",
"data": "storeId=12345",
"mode": "datetime",
"initial": "2017-12-25t00:00",
"max": "2018-01-24t23:59",
"min": "2017-12-25t00:00"
}
]
}
}
Skapa ett Slack-meddelande med fullständig återgivning
Om du vill skapa ett Slack-meddelande med fullständig återgivning anger du aktivitetsobjektets kanaldataegenskap till ett JSON-objekt som anger:
Anteckning
Om du vill ha stöd för knappar i Slack-meddelanden måste du aktivera interaktiva meddelanden när du ansluter roboten till Slack-kanalen.
Det här kodfragmentet visar ett exempel på channelData
egenskapen för ett anpassat Slack-meddelande.
"channelData": {
"text": "Now back in stock! :tada:",
"attachments": [
{
"title": "The Further Adventures of Slackbot",
"author_name": "Stanford S. Strickland",
"author_icon": "https://api.slack.com/img/api/homepage_custom_integrations-2x.png",
"image_url": "http://i.imgur.com/OJkaVOI.jpg?1"
},
{
"fields": [
{
"title": "Volume",
"value": "1",
"short": true
},
{
"title": "Issue",
"value": "3",
"short": true
}
]
},
{
"title": "Synopsis",
"text": "After @episod pushed exciting changes to a devious new branch back in Issue 1, Slackbot notifies @don about an unexpected deploy..."
},
{
"fallback": "Would you recommend it to customers?",
"title": "Would you recommend it to customers?",
"callback_id": "comic_1234_xyz",
"color": "#3AA3E3",
"attachment_type": "default",
"actions": [
{
"name": "recommend",
"text": "Recommend",
"type": "button",
"value": "recommend"
},
{
"name": "no",
"text": "No",
"type": "button",
"value": "bad"
}
]
}
]
}
När en användare klickar på en knapp i ett Slack-meddelande får roboten ett svarsmeddelande där kanaldataegenskapen fylls med ett payload
JSON-objekt. Objektet payload
anger innehållet i det ursprungliga meddelandet, identifierar knappen som klickades och identifierar användaren som klickade på knappen.
Det här kodfragmentet visar ett exempel på channelData
egenskapen i meddelandet som en robot tar emot när en användare klickar på en knapp i Slack-meddelandet.
"channelData": {
"payload": {
"actions": [
{
"name": "recommend",
"value": "yes"
}
],
//...
"original_message": "{...}",
"response_url": "https://hooks.slack.com/actions/..."
}
}
Roboten kan svara på det här meddelandet på vanligt sätt, eller så kan den publicera sitt svar direkt till den slutpunkt som anges av payload
objektets response_url
-egenskap. Information om när och hur du publicerar ett svar på finns i response_url
Slack-knappar.
Du kan skapa dynamiska knappar med hjälp av följande JSON:
{
"text": "Would you like to play a game ? ",
"attachments": [
{
"text": "Choose a game to play!",
"fallback": "You are unable to choose a game",
"callback_id": "wopr_game",
"color": "#3AA3E3",
"attachment_type": "default",
"actions": [
{
"name": "game",
"text": "Chess",
"type": "button",
"value": "chess"
},
{
"name": "game",
"text": "Falken's Maze",
"type": "button",
"value": "maze"
},
{
"name": "game",
"text": "Thermonuclear War",
"style": "danger",
"type": "button",
"value": "war",
"confirm": {
"title": "Are you sure?",
"text": "Wouldn't you prefer a good game of chess?",
"ok_text": "Yes",
"dismiss_text": "No"
}
}
]
}
]
}
Använd följande JSON för att skapa interaktiva menyer:
{
"text": "Would you like to play a game ? ",
"response_type": "in_channel",
"attachments": [
{
"text": "Choose a game to play",
"fallback": "If you could read this message, you'd be choosing something fun to do right now.",
"color": "#3AA3E3",
"attachment_type": "default",
"callback_id": "game_selection",
"actions": [
{
"name": "games_list",
"text": "Pick a game...",
"type": "select",
"options": [
{
"text": "Hearts",
"value": "menu_id_hearts"
},
{
"text": "Bridge",
"value": "menu_id_bridge"
},
{
"text": "Checkers",
"value": "menu_id_checkers"
},
{
"text": "Chess",
"value": "menu_id_chess"
},
{
"text": "Poker",
"value": "menu_id_poker"
},
{
"text": "Falken's Maze",
"value": "menu_id_maze"
},
{
"text": "Global Thermonuclear War",
"value": "menu_id_war"
}
]
}
]
}
]
}
Lägga till en robot i Teams
Robotar som läggs till i ett team blir en annan teammedlem, som kan ingå @mentioned
i konversationen. I själva verket tar robotar bara emot meddelanden när de är @mentioned
, så andra konversationer på kanalen skickas inte till roboten. Mer information finns i Kanal- och gruppchattkonversationer med en Microsoft Teams-robot.
Eftersom robotar i en grupp eller kanal bara svarar när de nämns (@botname
) i ett meddelande innehåller varje meddelande som tas emot av en robot i en gruppkanal sitt eget namn, och du måste se till att meddelandeparsningen hanterar det. Dessutom kan robotar parsa ut andra användare som nämns och nämna användare som en del av sina meddelanden.
Sök efter och ta bort @bot omnämnande
Mention[] m = sourceMessage.GetMentions();
var messageText = sourceMessage.Text;
for (int i = 0;i < m.Length;i++)
{
if (m[i].Mentioned.Id == sourceMessage.Recipient.Id)
{
//Bot is in the @mention list.
//The below example will strip the bot name out of the message, so you can parse it as if it wasn't included. Note that the Text object will contain the full bot name, if applicable.
if (m[i].Text != null)
messageText = messageText.Replace(m[i].Text, "");
}
}
var text = message.text;
if (message.entities) {
message.entities
.filter(entity => ((entity.type === "mention") && (entity.mentioned.id.toLowerCase() === botId)))
.forEach(entity => {
text = text.replace(entity.text, "");
});
text = text.trim();
}
Viktigt
Att lägga till en robot efter GUID, för något annat än testningsändamål, rekommenderas inte. Om du gör det begränsas funktionaliteten för en robot avsevärt. Robotar i produktion bör läggas till i Teams som en del av en app. Se Skapa en robot och Testa och felsöka din Microsoft Teams-robot.
Skapa ett Telegram-meddelande
Om du vill skapa ett meddelande som implementerar Telegram-specifika åtgärder, till exempel att dela ett röstmemorandum eller en dekal, anger du aktivitetsobjektets kanaldataegenskap till ett JSON-objekt som anger följande egenskaper:
Egenskap | Beskrivning |
---|---|
metod | Den Telegram Bot API-metod som ska anropas. |
parametrar | Parametrarna för den angivna metoden. |
Dessa Telegram-metoder stöds:
- answerInlineQuery
- editMessageCaption
- editMessageReplyMarkup
- editMessageText
- forwardMessage
- banChatMember
- sendAudio
- sendChatAction
- sendContact
- sendDocument
- sendLocation
- sendMessage
- sendPhoto
- sendSticker
- sendVenue
- sendVideo
- sendVoice
- unbanChatMember
Mer information om dessa Telegram-metoder och deras parametrar finns i Telegram Bot API-dokumentationen.
Anteckning
- Parametern
chat_id
är gemensam för alla Telegram-metoder. Om du inte angerchat_id
som en parameter tillhandahåller ramverket ID:t åt dig. - I stället för att skicka infogat filinnehåll anger du filen med hjälp av en URL och medietyp enligt exemplet nedan.
- I varje meddelande som roboten tar emot från Telegram-kanalen
ChannelData
innehåller egenskapen det meddelande som roboten skickade tidigare.
Det här kodfragmentet visar ett exempel på en channelData
egenskap som anger en enda Telegram-metod:
"channelData": {
"method": "sendSticker",
"parameters": {
"sticker": {
"url": "https://domain.com/path/gif",
"mediaType": "image/gif",
}
}
}
Det här kodfragmentet visar ett exempel på en channelData
egenskap som anger en matris med Telegram-metoder:
"channelData": [
{
"method": "sendSticker",
"parameters": {
"sticker": {
"url": "https://domain.com/path/gif",
"mediaType": "image/gif",
}
}
},
{
"method": "sendMessage",
"parameters": {
"text": "<b>This message is HTML formatted.</b>",
"parse_mode": "HTML"
}
}
]
När en Telegram-metod implementeras får roboten ett svarsmeddelande där kanaldataegenskapen fylls med ett JSON-objekt. Det här svarsobjektet anger innehållet i det ursprungliga meddelandet, inklusive en update_id
och högst en valfri parameter. Information om hur du tar emot inkommande svar finns i Hämta uppdateringar.
Det här kodfragmentet visar ett exempel på channelData
egenskapen i meddelandet som en robot tar emot när en avsökning skapas:
"channelData": {
"update_id": 43517575,
"message": {
"message_id": 618,
"from": {
"id": 803613355,
"is_bot": false,
"first_name": "Joe",
"last_name": "Doe",
"username": "jdoe",
"language_code": "en"
},
"chat": {
"id": 803613355,
"first_name": "Joe",
"last_name": "Doe",
"username": "jdoe",
"type": "private"
},
"date": 1582577834,
"poll": {
"id": "5089525250643722242",
"question": "How to win?",
"options": [
{
"text": "Be the best",
"voter_count": 0
},
{
"text": "Help those in need",
"voter_count": 0
},
{
"text": "All of the above",
"voter_count": 0
}
],
"total_voter_count": 0,
"is_closed": false,
"is_anonymous": true,
"type": "regular",
"allows_multiple_answers": false
}
}
}