Implement channel-specific functionality (Implementar funcionalidades específicas de um canal)
APLICA-SE A: SDK v4
Alguns canais fornecem funcionalidades que não podem ser implementadas apenas com texto de mensagem e anexos. Para implementar uma funcionalidade específica de canais, pode passar metadados nativos para um canal na propriedade de dados de canal do objeto de atividade. Por exemplo, o seu bot pode usar a propriedade de dados do canal para instruir o Telegram a enviar um autocolante ou a instruir o Office365 a enviar um e-mail.
Este artigo descreve como usar a propriedade de dados de canal de uma mensagem para implementar esta funcionalidade específica do canal:
Canal | Funcionalidade |
---|---|
Envie e receba um e-mail que contenha metadados de corpo, sujeito e importância. | |
Envie notificações do Facebook de forma nativa. | |
LINHA | Envie uma mensagem que implementa tipos de mensagens específicas da LINE. |
Slack | Envie mensagens de fidelidade completa. |
Teams | Handle @-mentions em mensagens Microsoft Teams. |
Telegram | Execute ações específicas do Telegram, tais como partilhar um memorando de voz ou um autocolante. |
Nota
O valor da propriedade de dados de canal de um objeto de atividade é um objeto JSON.
Assim, os exemplos deste artigo mostram o formato esperado da channelData
propriedade JSON em vários cenários.
Para criar um objeto JSON utilizando .NET, utilize a JObject
classe (.NET).
Crie uma mensagem de e-mail personalizada
Para criar uma mensagem de e-mail personalizada, desajei a propriedade da atividade channelData
a um objeto JSON que contenha as seguintes propriedades:
Propriedade | Descrição |
---|---|
bccRecipients | Um ponto e vírgula (;) cadeia delimitada de endereços de e-mail para adicionar ao campo Bcc (cópia cega de carbono) da mensagem. |
ccRecipients | Um ponto e vírgula (;) cadeia delimitada de endereços de e-mail para adicionar ao campo Cc (cópia de carbono) da mensagem. |
htmlCorpo | Um documento HTML que especifica o corpo da mensagem de e-mail. Consulte a documentação do canal para obter informações sobre elementos e atributos HTML suportados. |
importância | O nível de importância do e-mail. Valores válidos são altos, normais e baixos. O valor predefinido é normal. |
toRecipients | Um ponto e vírgula (;) cadeia delimitada de endereços de e-mail para adicionar ao campo De mensagem. |
As mensagens de saída e de entrada entre o utilizador e o bot podem ter uma channelData
atividade que contenha um objeto JSON cujas propriedades estão especificadas na tabela anterior.
O snippet abaixo mostra um exemplo da channelData
propriedade para uma mensagem de e-mail personalizada, do bot ao utilizador.
{
"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",
}
}
Criar uma notificação do Facebook
Para criar uma notificação do Facebook, desajei a propriedade de dados de canal do objeto de atividade a um objeto JSON que especifica estas propriedades:
Propriedade | Descrição |
---|---|
notification_type | O tipo de notificação, como REGULAR, SILENT_PUSH ou NO_PUSH. |
anexo | Um anexo que especifica uma imagem, vídeo ou outro tipo multimédia, ou um anexo de modelo, como um recibo. |
Nota
Para mais detalhes sobre o notification_type
formato e conteúdo do imóvel e attachment
propriedade, consulte a documentação da API do Facebook.
Este snippet mostra um exemplo da channelData
propriedade para um anexo de recibo do Facebook.
"channelData": {
"notification_type": "NO_PUSH",
"attachment": {
"type": "template"
"payload": {
"template_type": "receipt",
//...
}
}
}
Criar uma mensagem LINE
Para criar uma mensagem que implemente tipos de mensagens específicas da LINE (tais como adesivos, modelos ou tipos de ação específicos da LINHA, como abrir a câmara telefónica), desajei a propriedade de dados do objeto de atividade a um objeto JSON que especifica tipos de mensagens LINE e tipos de ação.
Propriedade | Descrição |
---|---|
tipo | O nome do tipo de ação/mensagem LINE |
Estes tipos de mensagens LINE são suportados:
- Adesivo
- Imagemap
- Modelo (Botão, confirmar, carrossel)
- Flex
Estas ações LINE podem ser especificadas no campo de ação do objeto JSON do tipo de mensagem:
- Pós-volta
- Mensagem
- URI
- Datetimerpicker
- Câmara
- Imagens da câmara
- Localização
Para obter mais informações sobre estes métodos LINE e seus parâmetros, consulte a documentação da API da API da LINHA Bot.
Este snippet mostra um exemplo de uma channelData
propriedade que especifica um tipo ButtonTemplate
de mensagem de canal e três tipos de ação: "camera", "cameraRoll" e "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"
}
]
}
}
Crie uma mensagem slack de fidelidade completa
Para criar uma mensagem slack de fidelidade completa, desajei a propriedade de dados do objeto de atividade a um objeto JSON que especifica:
Nota
Para suportar botões em mensagens Slack, tem de ativar mensagens interativas quando ligar o bot ao canal Slack.
Este snippet mostra um exemplo da channelData
propriedade para uma mensagem slack personalizada.
"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"
}
]
}
]
}
Quando um utilizador clica num botão dentro de uma mensagem Slack, o seu bot receberá uma mensagem de resposta na qual a propriedade de dados do canal é povoada com um payload
objeto JSON. O payload
objeto especifica o conteúdo da mensagem original, identifica o botão que foi clicado e identifica o utilizador que clicou no botão.
Este snippet mostra um exemplo da channelData
propriedade na mensagem que um bot recebe quando um utilizador clica num botão na mensagem Slack.
"channelData": {
"payload": {
"actions": [
{
"name": "recommend",
"value": "yes"
}
],
//...
"original_message": "{...}",
"response_url": "https://hooks.slack.com/actions/..."
}
}
O seu bot pode responder a esta mensagem da forma normal, ou pode publicar a sua resposta diretamente no ponto final especificado pela payload
propriedade do response_url
objeto. Para obter informações sobre quando e como publicar uma resposta ao response_url
, consulte Botões Slack.
Pode criar botões dinâmicos utilizando o seguinte 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"
}
}
]
}
]
}
Para criar menus interativos, utilize o seguinte JSON:
{
"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"
}
]
}
]
}
]
}
Adicione um bot às equipas
Bots adicionados a uma equipa tornam-se outro membro da equipa, que pode fazer @mentioned
parte da conversa. Na verdade, os bots só recebem mensagens quando estão @mentioned
, por isso outras conversas no canal não são enviadas para o bot. Para obter mais informações, consulte conversas de chat do Channel e do Grupo com um bot da Microsoft Teams.
Como os bots num grupo ou canal só respondem quando são mencionados (@botname
) numa mensagem, cada mensagem recebida por um bot num canal de grupo contém o seu próprio nome, e deve garantir que a sua mensagem de análise lida com isso. Além disso, os bots podem analisar outros utilizadores mencionados e mencionar os utilizadores como parte das suas mensagens.
Verificar e despir @bot menção
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();
}
Importante
Não é recomendado adicionar um bot pela GUID, para qualquer outra coisa que não seja fins de teste. Fazê-lo limita severamente a funcionalidade de um bot. Os bots em produção devem ser adicionados às Equipas como parte de uma aplicação. Consulte Criar um bot e teste e depurar o seu bot Microsoft Teams.
Criar uma mensagem telegrama
Para criar uma mensagem que implemente ações específicas do Telegram, como a partilha de um memorando de voz ou de um autocolante, desajei a propriedade de dados do objeto de atividade a um objeto JSON que especifica estas propriedades:
Propriedade | Descrição |
---|---|
método | O método da API do Telegram Bot para ligar. |
parâmetros | Os parâmetros do método especificado. |
Estes métodos telegrama são apoiados:
- respostaInlineQuery
- editMessageCaption
- editMessageReplyMarkup
- editMessageText
- forwardMessage
- banChatMember
- sendAudio
- sendChatAction
- enviarContact
- enviarDocumento
- envioLocalização
- enviar Mensagens
- sendPhoto
- sendSticker
- sendVenue
- sendVídeo
- sendVoice
- unbanChatMember
Para mais detalhes sobre estes métodos do Telegram e seus parâmetros, consulte a documentação da API do Telegram Bot.
Nota
- O
chat_id
parâmetro é comum a todos os métodos do Telegram. Se não especificarchat_id
como parâmetro, a estrutura fornecerá o ID para si. - Em vez de passar o conteúdo do ficheiro em linha, especifique o ficheiro utilizando um URL e um tipo de mídia como mostrado no exemplo abaixo.
- Dentro de cada mensagem que o seu bot recebe do canal Telegram, a
ChannelData
propriedade incluirá a mensagem que o seu bot enviou anteriormente.
Este snippet mostra um exemplo de uma channelData
propriedade que especifica um único método Telegram:
"channelData": {
"method": "sendSticker",
"parameters": {
"sticker": {
"url": "https://domain.com/path/gif",
"mediaType": "image/gif",
}
}
}
Este snippet mostra um exemplo de uma channelData
propriedade que especifica uma variedade de métodos telegrama:
"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"
}
}
]
Quando um método Telegram é implementado, o seu bot receberá uma mensagem de resposta na qual a propriedade de dados do canal é povoada com um objeto JSON. Este objeto de resposta especifica o conteúdo da mensagem original, incluindo um update_id
e, no máximo, um parâmetro opcional. Para obter informações sobre a receção de respostas recebidas, consulte obter atualizações.
Este snippet mostra um exemplo da channelData
propriedade na mensagem que um bot recebe quando uma pesquisa é criada:
"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
}
}
}