Teams Bot如何解析和发送 at 用户
之前有好些看博客的開發(fā)者問(wèn)我有什么較好的方法來(lái)解析 at 信息。用戶在channel里發(fā)消息給 bot 的時(shí)候,通常需要 at bot的名字,當(dāng)然在消息文字中可能還會(huì) at 其他用戶,比如 bot的名字是 MyBot,那 bot 收到的 Activity 里的 Text 值類似于:
<at>MyBot</at> 請(qǐng)幫我查看一下 <at>Tom</at> 的明天有空時(shí)間。可以看到 Teams 使用了 at tag 來(lái)把用戶 at 的信息包含起來(lái)。
看到這里,大家可能會(huì)想,這個(gè)簡(jiǎn)單啊,可以分析一下字符串,把 <at> 的內(nèi)容find到,然后在找到結(jié)束的 tag </at> 。但是如果你仔細(xì)想想,怎么寫循環(huán),也不簡(jiǎn)單把,至少需要 5 到 10 行的c#代碼,可能大家還會(huì)想到使用正則表達(dá)式,對(duì),正則會(huì)簡(jiǎn)單一些,但是你要快速的寫出這個(gè)正則表達(dá)式也不是特別簡(jiǎn)單的事情。
另外,我們還需要考慮一些轉(zhuǎn)義的字符,是不是瞬間覺(jué)得也不簡(jiǎn)單了。
解析 at 信息
好在 bot 的 sdk 給我們提供了一個(gè)簡(jiǎn)單的方法。
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken) {Mention[] mentions = turnContext.Activity.GetMentions();if(mentions != null){foreach (var mention in mentions){...}} }GetMentions?是一個(gè) Activity 的擴(kuò)展方法,里面具體的實(shí)現(xiàn)可以到 sdk 的源代碼里找到。這個(gè)方法會(huì)返回一個(gè)?Mention?的數(shù)組
public class Mention {...public ChannelAccount Mentioned { get; set; }... }public class ChannelAccount {...public string Name { get; set; }... }從上面的代碼可以看到,我可以通過(guò) Mentioned 的 Name 來(lái)獲取被 at 的對(duì)象的名字。
var name = mention.Mentioned.Name發(fā)送 at 信息
除了解析,sdk 當(dāng)然也提供了發(fā)送 at 信息的方法,如下:
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken) {var mention = new Mention{Mentioned = turnContext.Activity.From,Text = $"<at>{XmlConvert.EncodeName(turnContext.Activity.From.Name)}</at>",};var replyActivity = MessageFactory.Text($"Hello {mention.Text}.");replyActivity.Entities = new List<Entity> { mention };await turnContext.SendActivityAsync(replyActivity, cancellationToken); }從上面的額代碼里可以看到,發(fā)送 at 信息并不是很簡(jiǎn)單,還是需要我們自己來(lái)組建一個(gè) Mention 的對(duì)象,然后把這個(gè)對(duì)象放如到回復(fù)的 activity 的 Entities 屬性里。
特別需要注意的一點(diǎn)是:需要 at 的人的名字,需要做 xml encode,來(lái)確保不會(huì)因?yàn)?name 里有特殊的字符,而導(dǎo)致整個(gè)text不合法。
看到這里,大家是不是對(duì) at 的機(jī)制有了進(jìn)一步的深入理解? :)
總結(jié)
以上是生活随笔為你收集整理的Teams Bot如何解析和发送 at 用户的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 和计算机网络相关的段子,微信幽默段子 没
- 下一篇: 哈哈---