Teams Bot開發系列:初識Bot

上次我們講了Teams Bot開發的概述,講了Azure Bot Service,Bot Framework SDK和我們自己的bot服務的概念,這篇文章就帶大家看看Azure Bot Service和我們的bot是如何發生關系的。

我們自己開發的bot服務實際上就是一個api service,需要提供一個支持 POST 請求的endpoint。然后把這個endpoint的url注冊到Azure Bot Service,這樣當有人和你的bot進行聊天的時候,這個endpoint就會被Azure Bot Service所調用。

我們來看一個簡單例子:用戶在模擬器里對bot發送一個”hi”消息,然后bot回復一個”You said: hi”消息。整個流程如下:

?

  1. 當用戶準備開始和bot進行聊天的時候,azure bot service就會向我們的bot endpoint上 POST 一個關于 conversationUpdate 的HTTP請求,告訴我們的bot,有一個用戶準備要和bot聊天了。下面是Bot Emulator,相當于Azure Bot Service傳遞給我們bot endpoint的http request body
{"channelId": "emulator","conversation": {"id": "5d2a6fa0-a8c4-11ea-9482-fbaa8563d339|livechat"},"from": {"id": "f2dc881f-5c55-4f44-a50a-0ecdb4717950","name": "User","role": "user"},"id": "5d354510-a8c4-11ea-9482-fbaa8563d339","localTimestamp": "2020-06-07T23:39:51+10:00","locale": "en-US","membersAdded": [{"id": "5d2a4890-a8c4-11ea-9762-2d13acd3a3d5","name": "Bot"},{"id": "f2dc881f-5c55-4f44-a50a-0ecdb4717950","name": "User"}],"membersRemoved": [],"recipient": {"id": "5d2a4890-a8c4-11ea-9762-2d13acd3a3d5","name": "Bot","role": "bot"},"serviceUrl": "https://762eb0b511e7.ngrok.io","timestamp": "2020-06-07T13:39:51.905Z","type": "conversationUpdate"
}

可以看到channelId說明是用模擬器聊天平臺發出來的信息,from用戶,typeconversationUpdate,具體內容是有兩個新增加的成員(membersAdded),分別是UserBot。大家需要注意一個conversation id,這個id是針對這次對話的,這次對話里可以你一句,我一句,每一句的id不同,但是他們的conversation id是一樣的。

  1. 當用戶發送一個 “hi” 文字內容給bot,這時候我們的bot endpoint會收到另一個POST 請求,內容如下:
{"channelData": {"clientActivityID": "1591537203426cjob1jjckwm","clientTimestamp": "2020-06-07T13:40:03.426Z"},"channelId": "emulator","conversation": {"id": "5d2a6fa0-a8c4-11ea-9482-fbaa8563d339|livechat"},"entities": [{"requiresBotState": true,"supportsListening": true,"supportsTts": true,"type": "ClientCapabilities"}],"from": {"id": "f2dc881f-5c55-4f44-a50a-0ecdb4717950","name": "User","role": "user"},"id": "6414c2c0-a8c4-11ea-9482-fbaa8563d339","localTimestamp": "2020-06-07T23:40:03+10:00","locale": "en-US","recipient": {"id": "5d2a4890-a8c4-11ea-9762-2d13acd3a3d5","name": "Bot","role": "bot"},"serviceUrl": "https://762eb0b511e7.ngrok.io","text": "hi","textFormat": "plain","timestamp": "2020-06-07T13:40:03.436Z","type": "message"
}

可以看到這此的typemessage,說明是一條消息,消息文字格式是純文本plain,文字內容texthi

對照我們上面的conversation id,是不是發現這條的conversation id是一樣的,說明這條消息和上一條是在同一個對話里進行的。

這里有一個serviceUrl,這個是我們Azure bot service模擬器的url,如果你的bot要回復用戶一條消息,那這個消息就是發送到這個url上。

  1. 我們的bot收到上面這條用戶發來的消息后,回復用戶一條”You said: hi”的文字消息,bot就組建一個http request,POST 到上面這個service Url上,請求的body也是json格式,內容如下:
{"attachments": [],"channelId": "emulator","conversation": {"id": "5d2a6fa0-a8c4-11ea-9482-fbaa8563d339|livechat"},"entities": [],"from": {"id": "5d2a4890-a8c4-11ea-9762-2d13acd3a3d5","name": "Bot","role": "bot"},"id": "6504a100-a8c4-11ea-9482-fbaa8563d339","inputHint": "acceptingInput","localTimestamp": "2020-06-07T23:40:05+10:00","locale": "en-US","recipient": {"id": "f2dc881f-5c55-4f44-a50a-0ecdb4717950","role": "user"},"replyToId": "6414c2c0-a8c4-11ea-9482-fbaa8563d339","serviceUrl": "https://762eb0b511e7.ngrok.io","speak": "You said: hi","text": "You said: hi","timestamp": "2020-06-07T13:40:05.008Z","type": "message"
}

可以看到conversation id沒有變化,需要注意的是replyToId,它表示bot回復的”You said: hi”,是針對用戶前面發的那條”hi”消息的回復。所以這個replyToId的值就是前面那個消息的id

大家看了這個流程了對應的json,是不是對bot的運作有一個具體的感覺了? :D

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/277945.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/277945.shtml
英文地址,請注明出處:http://en.pswp.cn/news/277945.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[環境搭建]SDN網絡感知服務與最短路徑應用

1.安裝python模塊networkxpip install networkx2.給Network_Awareness.py加修改權限chmod 777 Network_Awareness.py3.下載安裝ryugit clone git://github.com/osrg/ryu.gitcd ryu sudo python ./setup.py install#若已安裝ryu,刪了再裝, pip uninstall ryu4.修改“…

我需要別人承認才快樂嗎?

關于生命的感悟兩個故事第一個故事,一個尖子生考上了麻省理工學院,在那里所有同學都很優秀,競爭非常強烈,她發現再也不能出類拔萃,在各方面贏過別人,于是覺得生活看不到希望,郁郁寡歡&#xff0…

Teams Bot開發系列:Activity和Turn

這篇文章我們來說一下Activity和Turn這兩個bot framework中最重要的兩個概念,同時也介紹一下TurnContext和BotAdapter Activity 一個activity是聊天雙方的一個信息載體,它可以是一條消息,也可以是一個動作。比如用戶給bot發送一條文字消息&…

ubuntu16.04下安裝opencv出現libgtk2.0-dev配置失敗問題解決方法

第一次在ubuntu下安裝opencv,遇到很多問題,特別是libgtk2.0-dev總是配置失敗的問題,在網上也看到一些解決方法,自己也遇到一些比較奇葩的問題,故整理于此。 網上大部分的解決方案就是更改下載源,我看到一些…

03|模型I/O:輸入提示、調用模型、解析輸出

03|模型I/O:輸入提示、調用模型、解析輸出 從這節課開始,我們將對 LangChain 中的六大核心組件一一進行詳細的剖析。 模型,位于 LangChain 框架的最底層,它是基于語言模型構建的應用的核心元素,因為所謂 …

selenuim自動化爬取汽車在線谷米愛車網車輛GPS數據爬蟲

#為了實時獲取車輛信息,以及為了后面進行行使軌跡繪圖,寫了一個基于selelnium的爬蟲爬取了車輛gps數據。 #在這里發現selenium可以很好的實現網頁解析和處理js處理 #導包 import timefrom selenium import webdriverfrom selenium.webdriver.support.wai…

Teams Bot開發系列:Activity處理流程

上篇文章介紹了什么是Activity,Turn,TurnContext和BotAdapter,這篇文章我們看看這些東西是如何竄起來的,他們是如何處理用戶發給bot的消息的。 我們以一個最簡單的bot,echo bot為例子,所謂的echo bot就是用…

寫單元測試的好處(轉)

許多開發者都有個習慣,常常不樂意去寫個簡單的單元測試程序來驗證自己的代碼。對自己的程序一直非常有自信,或存在僥幸心理每次運行通過后就直接扔給測試組測試了。然而每次測試組的BUG提交過來后就會發現自己的程序還存在許多沒有想到的漏洞。但是每次修…

linux下搭建go環境--問題記錄

記錄自己在linux上搭建go環境的經歷。(因為各種版本,linux系統問題掙扎了幾天) 安裝vmware-tools,把我要運行代碼拷進來。這個網上方法很多,我的電腦抽風不能安裝,后面重裝的虛擬機確定Ubuntu版本、位數。很重要&#…

Teams Bot開發系列:Teams的Activity處理

上一篇文章講了activity處理的流程,我們bot的核心處理邏輯放在ActivityHandler的子類里,通過重載OnMessageActivityAsync()方法來實現。 這篇文章我來講一下對于Teams的bot來說,整個處理的邏輯會有哪些不同點。 通過之前的文章,…

取球博弈

兩個人玩取球的游戲。一共有N個球,每人輪流取球,每次可取集合{n1,n2,n3}中的任何一個數目。 如果無法繼續取球,則游戲結束。 此時,持有奇數個球的一方獲勝。 如果兩人都是奇數,則為平局。 假設雙方都采用最聰明的取法…

MySQL修改字符集

MySQL數據庫修改字符集,介紹一下修改的方法 1)系統工具iconv #file filename #mysqldump --default-character-setutf8 >20180523xxx.sql #file 20180523xxx.sql #iconv -t utf8mb4 -c 20180523xxx.sql>20180523xxxutf8mb4.sql #file 20180523xxxutf8mb4.sql…

Teams Bot開發系列:Bot驗證

我們今天來說一下authentication,authentication一直是一個復雜的問題。bot里的authentication也不簡單。我們先來看一個概念:Bot Framework Token Service,根據官方定義,這個token service主要是: Facilitating the u…

堆排序

目錄 一、定義二、算法分析三、代碼地址一、定義 1.1 堆 ? 此處的堆,指數據結構中的堆。而不是內存中的那種內存堆,內存堆是基于數據結構的一種實現。堆的數據結構是一棵完全二叉樹,它有如下特點:(具體參考下文鏈接&a…

Teams Bot開發系列:Middleware

middleware是目前一些framework比較流行的概念,通常一個開發框架需要提供一些可擴展可定制化的功能。所以middleware這種pattern就很實用。 熟悉asp.net core的開發可能第一個想到的就是asp.net core的middleware,如下圖: 當一個http reques…

如何獲取租戶中所有的Team

大家在使用Graph API開發Teams App的時候,有時候會需要獲取某個租戶Tenant的所有team,在寫這篇文章的時候Graph API并沒有提供這么一個功能,沒有一個類似于”GET /teams”的api。 在Micorsoft Graph官方文檔的已知問題中,也提到了…

mysql常用快速查詢修改操作

mysql常用快速查詢修改操作 一、查找并修改非innodb引擎為innodb引擎 # 通用操作 mysql> select concat(alter table ,table_schema,.,table_name, engineinnodb;) from information_schema.tables where table_schema not in (information_schema,mysql,performance_schem…

ElasticSearch教程——自定義分詞器(轉學習使用)

一、分詞器 Elasticsearch中,內置了很多分詞器(analyzers),例如standard(標準分詞器)、english(英文分詞)和chinese(中文分詞),默認是standard. s…

使用Azure Serverless來開發Teams App

Azure Function可以說比較早期的一個serverless服務,隨著這些年云服務的大行其道,Serverless在概念越來越火,什么叫serverless? Serverless computing (or serverless for short), is an execution model where the cloud provide…

Angular之RouterModule的forRoot與forChild

Angular 提供了一種方式來把服務提供商從模塊中分離出來,以便模塊既可以帶著 providers 被根模塊導入,也可以不帶 providers 被子模塊導入。 區別: forRoot creates a module that contains all the directives, the given routes, and the r…