日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Teams Bot开发系列:Teams的Activity处理

發(fā)布時(shí)間:2023/12/9 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Teams Bot开发系列:Teams的Activity处理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

上一篇文章講了activity處理的流程,我們bot的核心處理邏輯放在ActivityHandler的子類里,通過重載OnMessageActivityAsync()方法來實(shí)現(xiàn)。

這篇文章我來講一下對(duì)于Teams的bot來說,整個(gè)處理的邏輯會(huì)有哪些不同點(diǎn)。

通過之前的文章,大家應(yīng)該已經(jīng)知道,Teams bot是Azure bot service支持的眾多bot聊天平臺(tái)里的一種channel(注意:這里的channel指bot service里的channel,和Teams里的channel是完全不同的概念)。但是Teams實(shí)際上提供了很多特有的事件和動(dòng)作。使用bot sdk的通用模型,我們當(dāng)然可以處理這些事情,但是Teams作為微軟的主打產(chǎn)品,微軟的bot sdk當(dāng)然要為它提供更多的開發(fā)便利性。

SDK提供了一個(gè)針對(duì)Teams的ActivityHandler。這個(gè)handler有下面這些特殊的ConversationUpdateActivity的處理函數(shù)

事件函數(shù)說明
channelCreatedOnTeamsChannelCreatedAsync當(dāng)Teams的channel被創(chuàng)建
channelDeletedOnTeamsChannelDeletedAsync當(dāng)Teams的channel被刪除
channelRenamedOnTeamsChannelRenamedAsync當(dāng)Teams的channel被重命名
teamRenamedOnTeamsTeamRenamedAsync當(dāng)Teams的一個(gè)team被重命名
MembersAddedOnTeamsMembersAddedAsync當(dāng)Teams的一個(gè)team中有新用戶加入
MembersRemovedOnTeamsMembersRemovedAsync當(dāng)Teams的一個(gè)team中有用戶被移除

除了ConversationUpdateActivity這些Teams的特殊事件,handler還提供了一些Teams特有的invoke動(dòng)作的處理

Invoke類型函數(shù)說明
CardAction.InvokeOnTeamsCardActionInvokeAsync關(guān)于卡片的動(dòng)作,比如卡片上一個(gè)按鈕被點(diǎn)擊了
fileConsent/invokeOnTeamsFileConsentAcceptAsync用戶同意了上傳文件
fileConsent/invokeOnTeamsFileConsentAsync用戶要上傳文件.
fileConsent/invokeOnTeamsFileConsentDeclineAsync用戶拒絕了上傳文件.
actionableMessage/executeActionOnTeamsO365ConnectorCardActionAsyncO365連接器的卡片動(dòng)作
signin/verifyStateOnTeamsSigninVerifyStateAsync登入驗(yàn)證狀態(tài)
task/fetchOnTeamsTaskModuleFetchAsyncTeams的Task Module的獲取
task/submitOnTeamsTaskModuleSubmitAsyncTeams的Task Module的提交

上面表格中的OnTeamsFileConsentAsync實(shí)際上是OnTeamsFileConsentAcceptAsync和OnTeamsFileConsentDeclineAsync的一個(gè)綜合處理,你可以重載OnTeamsFileConsentAsync,或者分別重載 accept 和 decline 函數(shù)。下面的sdk代碼可以讓你有直觀的了解

protected virtual async Task<InvokeResponse> OnTeamsFileConsentAsync(ITurnContext<IInvokeActivity> turnContext, FileConsentCardResponse fileConsentCardResponse, CancellationToken cancellationToken) {switch (fileConsentCardResponse.Action){case "accept":await OnTeamsFileConsentAcceptAsync(turnContext, fileConsentCardResponse, cancellationToken).ConfigureAwait(false);return CreateInvokeResponse();case "decline":await OnTeamsFileConsentDeclineAsync(turnContext, fileConsentCardResponse, cancellationToken).ConfigureAwait(false);return CreateInvokeResponse();default:throw new InvokeResponseException(HttpStatusCode.BadRequest, $"{fileConsentCardResponse.Action} is not a supported Action.");} }

對(duì)于喜歡把問題研究透徹的朋友可能會(huì)問,Teams的ActivityHandler到底是怎么處理的?讓我們跳入sdk源代碼一探究竟。

public class TeamsActivityHandler : ActivityHandler {protected override async Task<InvokeResponse> OnInvokeActivityAsync(ITurnContext<IInvokeActivity> turnContext, CancellationToken cancellationToken){...switch (turnContext.Activity.Name){case "fileConsent/invoke":return await OnTeamsFileConsentAsync(turnContext, SafeCast<FileConsentCardResponse>(turnContext.Activity.Value), cancellationToken).ConfigureAwait(false);case "task/fetch":return CreateInvokeResponse(await OnTeamsTaskModuleFetchAsync(turnContext, SafeCast<TaskModuleRequest>(turnContext.Activity.Value), cancellationToken).ConfigureAwait(false));case "task/submit":return CreateInvokeResponse(await OnTeamsTaskModuleSubmitAsync(turnContext, SafeCast<TaskModuleRequest>(turnContext.Activity.Value), cancellationToken).ConfigureAwait(false));......default:return await base.OnInvokeActivityAsync(turnContext, cancellationToken).ConfigureAwait(false);}...}protected override Task OnConversationUpdateActivityAsync(ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken){...switch (channelData.EventType){case "channelCreated":return OnTeamsChannelCreatedAsync(channelData.Channel, channelData.Team, turnContext, cancellationToken);case "channelDeleted":return OnTeamsChannelDeletedAsync(channelData.Channel, channelData.Team, turnContext, cancellationToken);case "channelRenamed":return OnTeamsChannelRenamedAsync(channelData.Channel, channelData.Team, turnContext, cancellationToken);case "teamRenamed":return OnTeamsTeamRenamedAsync(channelData.Team, turnContext, cancellationToken);default:return base.OnConversationUpdateActivityAsync(turnContext, cancellationToken);}...} }

從上面的代碼里可以看到?jīng)]有什么特別的magic,TeamsActivityHandler重載了OnConversationUpdateActivityAsync,并且根據(jù)channelData.EventType判斷出不同teams的事件,然后調(diào)用相應(yīng)的方法。對(duì)于invoke也類似,重載了OnInvokeActivityAsync,根據(jù)turnContext.Activity.Name來調(diào)用不同的方法。

回到我們的EchoBot代碼,讓EchoBot從TeamsActivityHandler繼承下來,然后我們可以添加OnTeamsChannelRenamedAsync方法。把EchoBot設(shè)置到Teams里,修改安裝了EchoBot的channel的名字,就可以看到這個(gè)方法被促發(fā)的。

public class EchoBot : TeamsActivityHandler {protected virtual Task OnTeamsChannelRenamedAsync(ChannelInfo channelInfo, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken){var replyText = "Channel renamed.";await turnContext.SendActivityAsync(MessageFactory.Text(replyText, replyText), cancellationToken);} }

總結(jié)

以上是生活随笔為你收集整理的Teams Bot开发系列:Teams的Activity处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。