微信機器人開發教程的實例詳解
微信公眾平台開發教學(四) 實例入門:機器人(附源碼)
上一篇文章,寫了基本框架,可能很多人會覺得暈頭轉向,這裡提供一個簡單的例子來予以說明,希望能幫你解開謎團。
一、功能介紹
透過微信公眾平台實現線上客服機器人功能。 主要的功能包括:簡單對話、查詢天氣等服務。
這裡只是提供比較簡單的功能,重點放在透過此實例來說明公眾平台的具體研發過程。只是一個簡單DEMO,如果需要的話可以在此基礎上擴充。
當然後續我們也會推出比較複雜的應用實例。
二、具體實作
1、提供存取介面
#這裡不再贅述,參考上一章,微信公眾帳號開發教學(二) 基礎框架搭建
www.cnblogs.com/yank/p/3392394.html
2、簽名認證和分發請求
這裡不再贅述,參考上一章,微信公眾帳號開發教學(二) 基礎框架搭建
www.cnblogs.com/yank/p/3392394.html
3、處理請求,並回應
#1)追蹤
當微信用戶追蹤公眾帳號時,可以給其適當的提示。可以是歡迎詞,可以是幫助提示。
直接上程式碼:
class EventHandler : IHandler { /// <summary> /// 请求的xml /// </summary> private string RequestXml { get; set; } /// <summary> /// 构造函数 /// </summary> /// <param name="requestXml"></param> public EventHandler(string requestXml) { this.RequestXml = requestXml; } /// <summary> /// 处理请求 /// </summary> /// <returns></returns> public string HandleRequest() { string response = string.Empty; EventMessage em = EventMessage.LoadFromXml(RequestXml); if (em.Event.Equals("subscribe",StringComparison.OrdinalIgnoreCase)) { //回复欢迎消息 TextMessage tm = new TextMessage(); tm.ToUserName = em.FromUserName; tm.FromUserName = em.ToUserName; tm.CreateTime = Common.GetNowTime(); tm.Content = "欢迎您关注***,我是大哥大,有事就问我,呵呵!\n\n"; response = tm.GenerateContent(); } return response; } }
2)問候
簡單的交流問候,例如你好、幫助等等,跟我們用微信聊天一樣,不過回應是由我們的程式響應。具體功能,可以依照自己的需求進行添加。
微信本來就是溝通的平台。這個案例,可以用於線上服務機器人,類似淘寶的客服機器人,可是我們這個是微信版的。呵呵
其實,很簡單,取得請求訊息,根據關鍵字來匹配回應。當然這裡可能要做的工作很多,如何支援智慧匹配,如何支援模糊匹配等。
程式碼如下:
/// <summary> /// 文本信息处理类 /// </summary> public class TextHandler : IHandler { /// <summary> /// 请求的XML /// </summary> private string RequestXml { get; set; } /// <summary> /// 构造函数 /// </summary> /// <param name="requestXml">请求的xml</param> public TextHandler(string requestXml) { this.RequestXml = requestXml; } /// <summary> /// 处理请求 /// </summary> /// <returns></returns> public string HandleRequest() { string response = string.Empty; TextMessage tm = TextMessage.LoadFromXml(RequestXml); string content = tm.Content.Trim(); if (string.IsNullOrEmpty(content)) { response = "您什么都没输入,没法帮您啊,%>_<%。"; } else { if (content.StartsWith("tq", StringComparison.OrdinalIgnoreCase)) { string cityName = content.Substring(2).Trim(); response = WeatherHelper.GetWeather(cityName); } else { response = HandleOther(content); } } tm.Content = response; //进行发送者、接收者转换 string temp = tm.ToUserName; tm.ToUserName = tm.FromUserName; tm.FromUserName = temp; response = tm.GenerateContent(); return response; } /// <summary> /// 处理其他消息 /// </summary> /// <param name="tm"></param> /// <returns></returns> private string HandleOther(string requestContent) { string response = string.Empty; if (requestContent.Contains("你好") || requestContent.Contains("您好")) { response = "您也好~"; } else if (requestContent.Contains("傻")) { response = "我不傻!哼~ "; } else if (requestContent.Contains("逼") || requestContent.Contains("操")) { response = "哼,你说脏话! "; } else if (requestContent.Contains("是谁")) { response = "我是大哥大,有什么能帮您的吗?~"; } else if (requestContent.Contains("再见")) { response = "再见!"; } else if (requestContent.Contains("bye")) { response = "Bye!"; } else if (requestContent.Contains("谢谢")) { response = "不客气!嘿嘿"; } else if (requestContent == "h" || requestContent == "H" || requestContent.Contains("帮助")) { response = @"查询天气,输入tq 城市名称\拼音\首字母"; } else { response = "您说的,可惜,我没明白啊,试试其他关键字吧。"; } return response; } }
3)查詢天氣
這個功能需要請求即時查詢的,請求官方的天氣發佈網站,然後解析其返回值,按照我們需要的格式,組織天氣訊息,最後發送給微信客戶。
採用文字訊息方式處理。
使用者請求,只需輸入:tq 城市名稱/拼音/首字母,即可取得訊息。
回覆的訊息:(以北京為例)
北京 2013年11月6日 星期三 今天:(17℃~4℃)晴北风4-5级转3-4级4-5级转3-4级 24小时穿衣指数:天气冷,建议着棉服、羽绒服、皮夹克加羊毛衫等冬季服装。年老体弱者宜着厚棉衣、冬大衣或厚羽绒服。 明天:(14℃~3℃)晴转多云微风小于3级 48小时穿衣指数:天气冷,建议着棉服、羽绒服、皮夹克加羊毛衫等冬季服装。年老体弱者宜着厚棉衣、冬大衣或厚羽绒服。
來看原始碼吧:
class WeatherHelper { /// <summary> /// 城市集合字段 /// </summary> private static Dictionary<string, City> mCities; /// <summary> /// 城市集合 /// </summary> public static Dictionary<string, City> Cities { get { if (mCities == null) { LoadCities(); } return mCities; } } /// <summary> /// 加载城市 /// </summary> private static void LoadCities() { mCities = new Dictionary<string, City>(); mCities.Clear(); mCities.Add("101010100", new City() { Code = "101010100", Name = "北京", PinYin = "beijing", FristLetter = "bj" }); mCities.Add("101020100", new City() { Code = "101020100", Name = "上海", PinYin = "shanghai", FristLetter = "sh" }); mCities.Add("101200101", new City() { Code = "101200101", Name = "武汉", PinYin = "wuhai", FristLetter = "wh" }); } /// <summary> /// 获取城市的天气 /// </summary> /// <param name="name">城市名称、拼音或首字母</param> /// <returns></returns> public static string GetWeather(string name) { string result = string.Empty; string cityCode = string.Empty; //获取城市编码 IEnumerable<string> codes = from item in Cities where item.Value != null && (item.Value.Name.Equals(name, StringComparison.OrdinalIgnoreCase) || item.Value.PinYin.Equals(name, StringComparison.OrdinalIgnoreCase) || item.Value.FristLetter.Equals(name, StringComparison.OrdinalIgnoreCase)) select item.Value.Code; if (codes != null && codes.Count() > 0) { cityCode = codes.First<string>(); } //http请求,获取天气 if (!string.IsNullOrEmpty(cityCode)) { string url = "http://m.weather.com.cn/data/{0}.html"; url = string.Format(url, cityCode); WebRequest request = HttpWebRequest.Create(url); //超时时间为:2秒 request.Timeout = 2000; request.Credentials = CredentialCache.DefaultCredentials; WebResponse response = request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); string weahterInfo = reader.ReadToEnd(); if (string.IsNullOrEmpty(weahterInfo)) { result = "暂时没有取到天气数据,请稍后再试"; } else { XmlDocument doc = JsonConvert.DeserializeXmlNode(weahterInfo); if (doc != null) { XmlNode node = doc.DocumentElement; if (node != null) { StringBuilder builder = new StringBuilder(); builder.Append(node["city"].InnerText).Append("\n"); builder.Append(node["date_y"].InnerText).Append(" ").Append(node["week"].InnerText).Append("\n"); builder.Append("今天:").Append("(").Append(node["temp1"].InnerText).Append(")").Append(node["weather1"].InnerText).Append(node["wind1"].InnerText).Append(node["fl1"].InnerText).Append("\n"); builder.Append("24小时穿衣指数:").Append(node["index_d"].InnerText).Append("\n"); builder.Append("明天:").Append("(").Append(node["temp2"].InnerText).Append(")").Append(node["weather2"].InnerText).Append(node["wind2"].InnerText).Append(node["fl2"].InnerText).Append("\n"); builder.Append("48小时穿衣指数:").Append(node["index48_d"].InnerText).Append("\n"); result = builder.ToString(); } } #region 天气json数据格式 /* { "weatherinfo": { "city": "北京", "city_en": "beijing", "date_y": "2013年11月4日", "date": "", "week": "星期一", "fchh": "11", "cityid": "101010100", "temp1": "17℃~5℃", "temp2": "16℃~5℃", "temp3": "18℃~4℃", "temp4": "17℃~5℃", "temp5": "14℃~6℃", "temp6": "14℃~2℃", "tempF1": "62.6℉~41℉", "tempF2": "60.8℉~41℉", "tempF3": "64.4℉~39.2℉", "tempF4": "62.6℉~41℉", "tempF5": "57.2℉~42.8℉", "tempF6": "57.2℉~35.6℉", "weather1": "晴转多云", "weather2": "多云", "weather3": "多云转晴", "weather4": "晴转多云", "weather5": "多云转阴", "weather6": "阴转晴", "img1": "0", "img2": "1", "img3": "1", "img4": "99", "img5": "1", "img6": "0", "img7": "0", "img8": "1", "img9": "1", "img10": "2", "img11": "2", "img12": "0", "img_single": "0", "img_title1": "晴", "img_title2": "多云", "img_title3": "多云", "img_title4": "多云", "img_title5": "多云", "img_title6": "晴", "img_title7": "晴", "img_title8": "多云", "img_title9": "多云", "img_title10": "阴", "img_title11": "阴", "img_title12": "晴", "img_title_single": "晴", "wind1": "微风", "wind2": "微风", "wind3": "微风", "wind4": "微风", "wind5": "微风", "wind6": "北风4-5级", "fx1": "微风", "fx2": "微风", "fl1": "小于3级", "fl2": "小于3级", "fl3": "小于3级", "fl4": "小于3级", "fl5": "小于3级", "fl6": "4-5级", "index": "较冷", "index_d": "建议着大衣、呢外套加毛衣、卫衣等服装。体弱者宜着厚外套、厚毛衣。因昼夜温差较大,注意增减衣服。", "index48": "冷", "index48_d": "天气冷,建议着棉服、羽绒服、皮夹克加羊毛衫等冬季服装。年老体弱者宜着厚棉衣、冬大衣或厚羽绒服。", "index_uv": "中等", "index48_uv": "弱", "index_xc": "适宜", "index_tr": "适宜", "index_co": "舒适", "st1": "17", "st2": "5", "st3": "17", "st4": "5", "st5": "18", "st6": "6", "index_cl": "适宜", "index_ls": "适宜", "index_ag": "极不易发" } } */ #endregion } } else { result = "没有获取到该城市的天气,请确定输入了正确的城市名称,如\'北京\'或者\'beijing\'或者\'bj\'"; } //返回 return result; } /// <summary> /// 内部类:城市 /// </summary> internal class City { /// <summary> /// 编码 /// </summary> public string Code { get; set; } /// <summary> /// 名称 /// </summary> public string Name { get; set; } /// <summary> /// 拼音 /// </summary> public string PinYin { get; set; } /// <summary> /// 拼音首字母 /// </summary> public string FristLetter { get; set; } } }
【相關推薦】
1. 微信公眾號平台原始碼下載
2. 阿狸子訂單系統原始碼
#以上是微信機器人開發教程的實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

機器之能報道編輯:吳昕國內版的人形機器人+大模型組隊,首次完成疊衣服這類複雜柔性材料的操作任務。隨著融合了OpenAI多模態大模型的Figure01揭開神秘面紗,國內同行的相關進展一直備受關注。就在昨天,國內"人形機器人第一股"優必選發布了人形機器人WalkerS深入融合百度文心大模型後的首個Demo,展示了一些有趣的新功能。現在,得到百度文心大模型能力加持的WalkerS是這個樣子的。和Figure01一樣,WalkerS沒有走動,而是站在桌子後面完成一系列任務。它可以聽從人類的命令,折疊衣物

人形機器人Ameca升級第二代了!最近,在世界行動通訊大會MWC2024上,世界上最先進機器人Ameca又現身了。會場周圍,Ameca引來一大波觀眾。得到GPT-4加持後,Ameca能夠對各種問題做出即時反應。 「來一段舞蹈」。當被問及是否有情感時,Ameca用一系列的面部表情做出回應,看起來非常逼真。就在前幾天,Ameca背後的英國機器人公司EngineeredArts剛剛示範了團隊最新的開發成果。影片中,機器人Ameca具備了視覺能力,能看見並描述房間整個狀況、描述具體物體。最厲害的是,她還能

在工業自動化技術領域,最近有兩個熱點很難被忽視:人工智慧(AI)和英偉達(Nvidia)。不要改變原內容的意思,微調內容,重寫內容,不要續寫:「不僅如此,這兩者密切相關,因為英偉達在不僅僅局限於其最開始的圖形處理單元(GPU),正在將其GPU科技擴展到數位孿生領域,同時緊密連接著新興的AI技術。泰瑞達機器人及其MiR和優傲機器人公司。 Recently,Nvidiahascoll

這週,由OpenAI、微軟、貝佐斯和英偉達投資的機器人公司FigureAI宣布獲得接近7億美元的融資,計劃在未來一年內研發出可獨立行走的人形機器人。而特斯拉的擎天柱也屢屢傳出好消息。沒人懷疑,今年會是人形機器人爆發的一年。一家位於加拿大的機器人公司SanctuaryAI最近發布了一款全新的人形機器人Phoenix。官方號稱它能以和人類一樣的速率自主完成許多工作。世界上第一台能以人類速度自主完成任務的機器人Pheonix可以輕輕地抓取、移動並優雅地將每個物件放置在它的左右兩側。它能夠自主辨識物體的

一眨眼的功夫,機器人都已經學會變魔術了?只見它先是拿起桌上的水勺,向觀眾證明了裡面什麼也沒有……然後,它又把手中雞蛋似的物體放了進去,然後把水勺放回桌子上,開始「施法」… …就在它把水勺再次拿起的時候,奇蹟發生了。原先放進去的雞蛋不翼而飛,跳出的東西變成了一個籃球……再來看一遍連貫動作:△此動圖為二倍速一套動作下來如行雲流水,只有把視頻用0.5倍速反复觀看,才終於發現其中的端倪了:如果手速再快一些,大概真的就可以瞞天過海了。有網友感嘆,機器人變魔術的程度比自己還要高:為我們表演這段魔術的,是Mag

近幾年最受消費者歡迎的智慧家電,掃拖機器人可謂是其中之一。它所帶來的操作便利性,甚至是無需操作,讓懶人們釋放了雙手,讓消費者能夠從日常的家務中「解放」出來,也能拿更多的時間花在自己喜歡的事情上,變相提高了生活品質。藉著這股熱潮,市面上幾乎所有的家電產品品牌都在做自己的掃拖機器人,一時間使得整個掃拖機器人市場熱鬧非凡。但市場的快速拓張必然會帶來一個隱患:很多廠商會採用機海戰術的方式快速佔領更多的市場份額,從而導致很多新品並沒有什麼升級點,說它是“套娃”機型也不為過。不過,並不是所有的掃拖機器人都是

以下10款類人機器人正在塑造我們的未來:1、ASIMO:ASIMO由Honda開發,是最知名的人形機器人之一。 ASIMO高4英尺,重119磅,配備先進的感測器和人工智慧功能,使其能夠在複雜的環境中導航並與人類互動。 ASIMO的多功能性使其適用於各種任務,從幫助殘疾人到在活動中進行演示。 2、Pepper:由SoftbankRobotics創建,Pepper旨在成為人類的社交伴侶。憑藉其富有表現力的面孔和識別情緒的能力,Pepper可以參與對話、在零售環境中提供幫助,甚至提供教育支持。 Pepper的

機器人物聯網是一項新興發展,預計將工業機器人和物聯網感測器這兩項有價值的技術融合在一起。機器人物聯網會成為製造業的主流嗎?什麼是機器人物聯網?機器人物聯網(IoRT)是一種將機器人連接到互聯網的網路形式。這些機器人利用物聯網感測器來收集數據,並對周圍環境進行解讀。它們通常會與人工智慧和雲端運算等多種技術相結合,以加快數據處理速度並優化資源利用。 IoRT的發展使得機器人能夠更聰明地感知和回應環境變化,為各種產業帶來了更有效率的解決方案。透過與物聯網技術的整合,IoRT不僅能夠實現自主運作和自學習,還能
