Csatornaspecifikus funkcionalitás megvalósítása
A KÖVETKEZŐKRE VONATKOZIK: SDK v4
Egyes csatornák olyan funkciókat biztosítanak, amelyek nem implementálhatók csak üzenetszöveggel és mellékletekkel. A csatornaspecifikus funkciók implementálásához natív metaadatokat adhat át egy csatornának a tevékenységobjektum csatornaadat-tulajdonságában . A robot például a csatornaadatok tulajdonságával utasíthatja a Telegramot matricák küldésére, vagy utasíthatja az Office365-öt e-mailek küldésére.
Ez a cikk azt ismerteti, hogyan valósíthatja meg ezt a csatornaspecifikus funkciót az üzenettevékenység csatornaadat-tulajdonságának használatával:
Csatorna | Funkció |
---|---|
Küldjön és fogadj egy e-mailt, amely törzs-, tárgy- és fontossági metaadatokat tartalmaz. | |
Küldjön Facebook-értesítéseket natív módon. | |
VONAL | Küldjön egy üzenetet, amely a LINE-specifikus üzenettípusokat implementálja. |
Slack | Teljes hűségű Slack-üzenetek küldése. |
Teams | @megemlítések kezelése a Microsoft Teams-üzenetekben. |
Telegram | Távirat-specifikus műveleteket hajthat végre, például hangjegyzetet vagy matricát oszthat meg. |
Megjegyzés
A tevékenységobjektum csatornaadat-tulajdonságának értéke egy JSON-objektum.
Ezért a cikkben szereplő példák a JSON-tulajdonság várt formátumát channelData
mutatják be különböző forgatókönyvekben.
JSON-objektum .NET használatával történő létrehozásához használja a JObject
(.NET) osztályt.
Egyéni e-mail-üzenet létrehozása
Egyéni e-mail-üzenet létrehozásához állítsa a tevékenység channelData
tulajdonságot egy JSON-objektumra, amely a következő tulajdonságokat tartalmazza:
Tulajdonság | Leírás |
---|---|
bccRecipients | Pontosvessző (;) az üzenet Titkos másolat (vak másolat) mezőjéhez hozzáadni kívánt e-mail-címek elválasztott sztringje. |
ccRecipients | Pontosvessző (;) az üzenet Másolatot kap (másolat) mezőjéhez hozzáadni kívánt e-mail-címek elválasztott sztringje. |
htmlBody | Az e-mail törzsét meghatározó HTML-dokumentum. A támogatott HTML-elemekkel és attribútumokkal kapcsolatos információkért tekintse meg a csatorna dokumentációját. |
Fontos | Az e-mail fontossági szintje. Az érvényes értékek magasak, normálak és alacsonyak. Az alapértelmezett érték normál. |
toRecipients | Pontosvessző (;) az üzenet Címzett mezőjéhez hozzáadni kívánt e-mail-címek elválasztott sztringje. |
A felhasználó és a robot közötti kimenő és bejövő üzenetek olyan tevékenységet tartalmazhatnak channelData
, amely olyan JSON-objektumot tartalmaz, amelynek tulajdonságai az előző táblázatban vannak megadva.
Az alábbi kódrészlet egy példát mutat be egy channelData
bejövő egyéni e-mail-üzenet tulajdonságára a robottól a felhasználóig.
{
"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",
}
}
Facebook-értesítés létrehozása
Facebook-értesítés létrehozásához állítsa a tevékenységobjektum csatornaadat-tulajdonságát egy JSON-objektumra, amely ezeket a tulajdonságokat határozza meg:
Tulajdonság | Leírás |
---|---|
notification_type | Az értesítés típusa, például REGULÁRIS, SILENT_PUSH vagy NO_PUSH. |
Mellékletet | Kép-, videó- vagy egyéb multimédiás típust, illetve sablonalapú mellékletet, például nyugtát meghatározó melléklet. |
Megjegyzés
A tulajdonság és tulajdonság notification_type
formátumával és attachment
tartalmával kapcsolatos részletekért tekintse meg a Facebook API dokumentációját.
Ez a kódrészlet egy Facebook-nyugta melléklet tulajdonságára channelData
mutat példát.
"channelData": {
"notification_type": "NO_PUSH",
"attachment": {
"type": "template"
"payload": {
"template_type": "receipt",
//...
}
}
}
LINE-üzenet létrehozása
Vonalspecifikus üzenettípusokat (például matricákat, sablonokat vagy VONALspecifikus művelettípusokat, például a telefon kamerájának megnyitását) megvalósító üzenet létrehozásához állítsa a tevékenységobjektum csatornaadat-tulajdonságát egy OLYAN JSON-objektumra, amely megadja a LINE üzenettípusokat és a művelettípusokat.
Tulajdonság | Leírás |
---|---|
típus | A LINE művelet/üzenettípus neve |
Ezek a LINE-üzenettípusok támogatottak:
- Matrica
- Képtérkép
- Sablon (Gomb, megerősítés, körhinta)
- Flex
Ezek a SORműveletek a JSON-objektum üzenettípus műveletmezőjében adhatók meg:
- Visszaküldési
- Üzenet
- URI
- Datetimerpicker
- Kamera
- Filmtekercs mappa
- Hely
Ezekről a LINE metódusokról és paramétereikről a LINE Bot API dokumentációjában talál további információt.
Ez a kódrészlet egy channelData
olyan tulajdonságra mutat példát, amely csatornaüzenet-típust ButtonTemplate
és három művelettípust határoz meg: "kamera", "cameraRoll" és "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"
}
]
}
}
Teljes körű Slack-üzenet létrehozása
Teljes hűségű Slack-üzenet létrehozásához állítsa a tevékenységobjektum csatornaadat-tulajdonságát egy JSON-objektumra, amely a következőt határozza meg:
Megjegyzés
A Slack-üzenetek gombjainak támogatásához engedélyeznie kell az Interaktív üzenetek funkciót , amikor csatlakoztatja a robotot a Slack-csatornához.
Ez a kódrészlet egy egyéni Slack-üzenet tulajdonságára channelData
mutat példát.
"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"
}
]
}
]
}
Amikor egy felhasználó egy Slack-üzenetben egy gombra kattint, a robot egy válaszüzenetet kap, amelyben a csatornaadatok tulajdonság egy payload
JSON-objektummal van feltöltve. Az payload
objektum megadja az eredeti üzenet tartalmát, azonosítja a kattintott gombot, és azonosítja a gombra kattintó felhasználót.
Ez a kódrészlet egy példát mutat a channelData
robot által kapott üzenet tulajdonságára, amikor a felhasználó a Slack-üzenet egyik gombjára kattint.
"channelData": {
"payload": {
"actions": [
{
"name": "recommend",
"value": "yes"
}
],
//...
"original_message": "{...}",
"response_url": "https://hooks.slack.com/actions/..."
}
}
A robot normál módon válaszolhat erre az üzenetre, vagy közvetlenül az objektum tulajdonsága által megadott végpontra küldheti a payload
válaszát response_url
. A válasz közzétételének időpontjáról és módjáról a response_url
Slack-gombok című témakörben olvashat.
Dinamikus gombokat a következő JSON használatával hozhat létre:
{
"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"
}
}
]
}
]
}
Interaktív menük létrehozásához használja a következő JSON-t:
{
"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"
}
]
}
]
}
]
}
Robot hozzáadása a Teamshez
A csapathoz hozzáadott robotok egy másik csapattaggá válnak, akik a beszélgetés részeként lehetnek @mentioned
. A robotok valójában csak akkor kapnak üzeneteket, ha azok @mentioned
vannak, így a csatornán lévő többi beszélgetés nem lesz elküldve a robotnak. További információ: Csatorna- és csoportos csevegések Egy Microsoft Teams-robottal.
Mivel egy csoport vagy csatorna robotjai csak akkor válaszolnak, ha () megemlítik@botname
őket egy üzenetben, a csoportcsatornában lévő robot által fogadott összes üzenet tartalmazza a saját nevét, és meg kell győződnie arról, hogy az üzenet elemzése kezeli ezt. Emellett a robotok elemezhetik a többi említett felhasználót, és megemlíthetik a felhasználókat az üzeneteik részeként.
Keresés és említés csíkozása @bot
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();
}
Fontos
Nem ajánlott a robot GUID alapján történő hozzáadása a tesztelési céloktól eltérő célokra. Ez súlyosan korlátozza a robot működését. Az éles környezetben lévő robotokat egy alkalmazás részeként kell hozzáadni a Teamshez. Lásd: Robot létrehozása és a Microsoft Teams-robot tesztelése és hibakeresése.
Távirati üzenet létrehozása
Ha olyan üzenetet szeretne létrehozni, amely Telegram-specifikus műveleteket hajt végre, például hangjegyzetet vagy matricát oszt meg, állítsa a tevékenységobjektum csatornaadat-tulajdonságát egy JSON-objektumra, amely ezeket a tulajdonságokat határozza meg:
Tulajdonság | Leírás |
---|---|
method | A Meghívandó Telegram Bot API-metódus. |
parameters | A megadott metódus paraméterei. |
Ezek a Telegram-metódusok támogatottak:
- answerInlineQuery
- editMessageCaption
- editMessageReplyMarkup
- editMessageText
- forwardMessage
- banChatMember
- sendAudio
- sendChatAction
- sendContact
- sendDocument
- sendLocation
- sendMessage
- sendPhoto
- sendSticker
- sendVenue
- sendVideo
- sendVoice
- unbanChatMember
Ezekről a Telegram-metódusokról és paramétereikről a Telegram Bot API dokumentációjában talál további információt.
Megjegyzés
- A
chat_id
paraméter minden Telegram-metódusnál gyakori. Ha nem adja megchat_id
paraméterként, a keretrendszer megadja az azonosítót. - A fájl tartalmának beágyazott átadása helyett adja meg a fájlt URL-címmel és médiatípussal az alábbi példában látható módon.
- A robot által a Telegram-csatornáról kapott minden egyes üzenetben a
ChannelData
tulajdonság tartalmazza a robot által korábban küldött üzenetet.
Ez a kódrészlet egy olyan tulajdonságra mutat példát channelData
, amely egyetlen Telegram-metódust határoz meg:
"channelData": {
"method": "sendSticker",
"parameters": {
"sticker": {
"url": "https://domain.com/path/gif",
"mediaType": "image/gif",
}
}
}
Ez a kódrészlet egy olyan tulajdonságra mutat példát channelData
, amely a Telegram metódusok tömbjét adja meg:
"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"
}
}
]
A Telegram-metódus implementálása után a robot egy válaszüzenetet kap, amelyben a csatornaadat-tulajdonság egy JSON-objektummal van feltöltve. Ez a válaszobjektum az eredeti üzenet tartalmát határozza meg, beleértve egy update_id
és legfeljebb egy választható paramétert. A bejövő válaszok fogadásáról további információt a Frissítések lekérése című témakörben talál.
Ez a kódrészlet egy példát mutat a channelData
robot által a szavazás létrehozásakor kapott üzenet tulajdonságára:
"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
}
}
}