Aracılığıyla paylaş


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 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_urlbkz. 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 @mentionedalı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 belirtmezseniz chat_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
        }
    }
}

Ek kaynaklar