Kanala özgü işlevsellik uygulama
ŞUNLAR IÇIN GEÇERLIDIR: SDK v4
Bazı kanallar yalnızca ileti metni ve ekleriyle uygulanamaz özellikler sağlar. Kanala özgü işlevselliği uygulamak için, etkinlik nesnesinin kanal veri özelliğindeki bir kanala yerel meta veriler geçirebilirsiniz. Örneğin botunuz Kanal veri özelliğini kullanarak Telegram'a etiket göndermesini veya Office365'e e-posta göndermesini bildirebilir.
Bu makalede, kanala özgü bu işlevselliği uygulamak için ileti etkinliğinin kanal veri özelliğinin nasıl kullanılacağı açıklanmaktadır:
Kanal | İşlev |
---|---|
E-posta | Gövde, konu ve önem meta verilerini içeren bir e-posta gönderin ve alın. |
Facebook bildirimlerini yerel olarak gönderin. | |
SATIR | LINE'a özgü ileti türlerini uygulayan bir ileti gönderin. |
Slack | Tam uygunluk Slack iletileri gönderin. |
Teams | Microsoft Teams iletilerinde @bahsetmeleri işleyin. |
Telegram | Sesli not veya çıkartma paylaşma gibi Telegram'a özgü eylemler gerçekleştirin. |
Not
Etkinlik nesnesinin kanal veri özelliğinin değeri bir JSON nesnesidir.
Bu nedenle, bu makaledeki örnekler çeşitli senaryolarda JSON özelliğinin channelData
beklenen biçimini gösterir.
.NET kullanarak JSON nesnesi oluşturmak için (.NET) sınıfını JObject
kullanın.
Özel e-posta iletisi oluşturma
Özel bir e-posta iletisi oluşturmak için etkinlik channelData
özelliğini aşağıdaki özellikleri içeren bir JSON nesnesi olarak ayarlayın:
Özellik | Açıklama |
---|---|
bccRecipients | Noktalı virgül (;) iletinin Gizli (gizli kopya) alanına eklenecek sınırlandırılmış e-posta adresleri dizesi. |
ccRecipients | Noktalı virgül (;) iletinin Bilgi (karbon kopya) alanına eklenecek sınırlandırılmış e-posta adresleri dizesi. |
htmlBody | E-posta iletisinin gövdesini belirten bir HTML belgesi. Desteklenen HTML öğeleri ve öznitelikleri hakkında bilgi için kanalın belgelerine bakın. |
Önemi | E-postanın önem düzeyi. Geçerli değerler yüksek, normal ve düşük değerlerdir. Varsayılan değer normaldir. |
toRecipients | Noktalı virgül (;) iletinin To alanına eklenecek sınırlandırılmış e-posta adresleri dizesi. |
Kullanıcı ile bot arasındaki giden ve gelen iletiler, özellikleri önceki tabloda belirtilen bir JSON nesnesi içeren bir etkinliğe sahip channelData
olabilir.
Aşağıdaki kod parçacığında bottan kullanıcıya gelen özel e-posta iletisinin özelliğinin bir örneği channelData
gösterilmektedir.
{
"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 bildirimi oluşturma
Facebook bildirimi oluşturmak için etkinlik nesnesinin kanal veri özelliğini şu özellikleri belirten bir JSON nesnesi olarak ayarlayın:
Özellik | Açıklama |
---|---|
notification_type | NORMAL, SILENT_PUSH veya NO_PUSH gibi bildirim türü. |
Eki | Görüntü, video veya başka bir multimedya türünü ya da makbuz gibi şablonlu bir eki belirten bir ek. |
Not
Özelliğin ve özelliğin notification_type
biçimi ve attachment
içeriği hakkında ayrıntılı bilgi için Facebook API belgelerine bakın.
Bu kod parçacığı, Facebook makbuz eki için özelliğinin channelData
bir örneğini gösterir.
"channelData": {
"notification_type": "NO_PUSH",
"attachment": {
"type": "template"
"payload": {
"template_type": "receipt",
//...
}
}
}
LINE iletisi oluşturma
LINE'a özgü ileti türlerini (çıkartma, şablonlar veya telefon kamerasını açma gibi LINE'a özgü eylem türleri) uygulayan bir ileti oluşturmak için etkinlik nesnesinin kanal veri özelliğini LINE ileti türlerini ve eylem türlerini belirten bir JSON nesnesi olarak ayarlayın.
Özellik | Açıklama |
---|---|
tür | LINE eylemi/ileti türü adı |
Bu LINE ileti türleri desteklenir:
- Etiket
- Imagemap
- Şablon (Düğme, onayla, döngü)
- Flex
Bu LINE eylemleri, ileti türü JSON nesnesinin eylem alanında belirtilebilir:
- Geri gönderme
- İleti
- URI
- Datetimerpicker
- Kamera
- Film rulosu
- Konum
Bu LINE yöntemleri ve parametreleri hakkında ayrıntılı bilgi için LINE Bot API belgelerine bakın.
Bu kod parçacığı, bir kanal ileti türünü ve üç eylem türünü ButtonTemplate
belirten bir channelData
özellik örneği gösterir: "camera", "cameraRoll" ve "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"
}
]
}
}
Tam uygunluk slack iletisi oluşturma
Tam uygunlukta bir Slack iletisi oluşturmak için etkinlik nesnesinin kanal veri özelliğini şunu belirten bir JSON nesnesi olarak ayarlayın:
Not
Slack iletilerindeki düğmeleri desteklemek için botunuzu Slack kanalına bağlarken Etkileşimli İletiler'ietkinleştirmeniz gerekir.
Bu kod parçacığı, özel slack iletisi için özelliğinin channelData
bir örneğini gösterir.
"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"
}
]
}
]
}
Kullanıcı Slack iletisindeki bir düğmeye tıkladığında botunuz kanal veri özelliğinin bir JSON nesnesiyle doldurulacağı bir payload
yanıt iletisi alır.
payload
nesnesi özgün iletinin içeriğini belirtir, tıklanan düğmeyi tanımlar ve düğmeye tıklayan kullanıcıyı tanımlar.
Bu kod parçacığı, kullanıcı Slack iletisindeki bir düğmeye tıkladığında botun aldığı iletideki özelliğin bir örneğini channelData
gösterir.
"channelData": {
"payload": {
"actions": [
{
"name": "recommend",
"value": "yes"
}
],
//...
"original_message": "{...}",
"response_url": "https://hooks.slack.com/actions/..."
}
}
Botunuz bu iletiyi normal şekilde yanıtlayabilir veya yanıtını doğrudan nesnenin response_url
özelliği tarafından payload
belirtilen uç noktaya gönderebilir. öğesine yanıt gönderme ve gönderme hakkında bilgi için response_url
bkz. Slack Düğmeleri.
Aşağıdaki JSON'u kullanarak dinamik düğmeler oluşturabilirsiniz:
{
"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"
}
}
]
}
]
}
Etkileşimli menüler oluşturmak için aşağıdaki JSON'u kullanın:
{
"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"
}
]
}
]
}
]
}
Teams'e bot ekleme
Bir takıma eklenen botlar, konuşmanın bir parçası olabilecek @mentioned
başka bir ekip üyesi olur. Aslında botlar iletileri yalnızca olduklarında @mentioned
alır, bu nedenle kanaldaki diğer konuşmalar bota gönderilmez. Daha fazla bilgi için bkz. Microsoft Teams botuyla kanal ve grup sohbet konuşmaları.
Bir grup veya kanaldaki botlar yalnızca iletide bahsedildiğinde (@botname
) yanıt verdiği için, grup kanalındaki bir bot tarafından alınan her iletinin kendi adı vardır ve ileti ayrıştırma işleminin bunu işlediğinden emin olmanız gerekir. Ayrıca botlar, bahsedilen diğer kullanıcıları ayrıştırabilir ve iletilerinin bir parçası olarak kullanıcılardan bahsedebilir.
Bahsetmeyi denetleme ve ayırma @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();
}
Önemli
Test amaçları dışında herhangi bir amaçla GUID ile bot eklenmesi önerilmez. Bunu yapmak, botun işlevselliğini ciddi ölçüde sınırlar. Üretimdeki botlar, bir uygulamanın parçası olarak Teams'e eklenmelidir. Bkz. Bot oluşturma ve Microsoft Teams botunuzu test edip hatalarını ayıklama.
Telegram iletisi oluşturma
Sesli not veya çıkartma paylaşma gibi Telegram'a özgü eylemler uygulayan bir ileti oluşturmak için etkinlik nesnesinin kanal veri özelliğini şu özellikleri belirten bir JSON nesnesi olarak ayarlayın:
Özellik | Açıklama |
---|---|
method | Çağrılacak Telegram Bot API yöntemi. |
parameters | Belirtilen yöntemin parametreleri. |
Bu Telegram yöntemleri desteklenir:
- answerInlineQuery
- editMessageCaption
- editMessageReplyMarkup
- editMessageText
- forwardMessage
- banChatMember
- sendAudio
- sendChatAction
- sendContact
- sendDocument
- sendLocation
- Sendmessage
- sendPhoto
- sendSticker
- sendVenue
- sendVideo
- sendVoice
- unbanChatMember
Bu Telegram yöntemleri ve parametreleri hakkında ayrıntılı bilgi için Telegram Bot API'sinin belgelerine bakın.
Not
-
chat_id
parametresi tüm Telegram yöntemlerinde ortaktır. Parametre olarak belirtmezsenizchat_id
, çerçeve sizin için kimliği sağlar. - Dosya içeriğini satır içinde geçirmek yerine, aşağıdaki örnekte gösterildiği gibi url ve medya türü kullanarak dosyayı belirtin.
- Botunuzun Telegram kanalından aldığı her iletinin
ChannelData
içinde, özellik botunuzun daha önce gönderdiği iletiyi içerir.
Bu kod parçacığında tek bir Telegram yöntemini belirten bir channelData
özellik örneği gösterilmektedir:
"channelData": {
"method": "sendSticker",
"parameters": {
"sticker": {
"url": "https://domain.com/path/gif",
"mediaType": "image/gif",
}
}
}
Bu kod parçacığı, Telegram yöntemlerinin dizisini channelData
belirten bir özellik örneğini gösterir:
"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"
}
}
]
Telegram yöntemi uygulandığında botunuz kanal veri özelliğinin bir JSON nesnesiyle doldurulacağı bir yanıt iletisi alır. Bu yanıt nesnesi, en çok ve isteğe bağlı bir update_id
parametre de dahil olmak üzere özgün iletinin içeriğini belirtir. Gelen yanıtları alma hakkında bilgi için bkz. Güncelleştirmeleri alma.
Bu kod parçacığı, bir anket oluşturulduğunda botun channelData
aldığı iletideki özelliğin bir örneğini gösterir:
"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
}
}
}