MS Bot Framework應用至微信公眾號

来源:http://www.cnblogs.com/ColdHan/archive/2017/02/04/6273030.html
-Advertisement-
Play Games

一、下載Bot Framework的SDK 首先,下載Bot Framework的SDK,建議下載Bot Framework的Visual Studio的模板Bot Application。 下載下來的模板(不用解壓)請直接放置到C:\Users\你的用戶名\Documents\Visual Stu ...


 

 

 

一、下載Bot Framework的SDK

首先,下載Bot Framework的SDK,建議下載Bot Framework的Visual Studio的模板Bot Application

下載下來的模板(不用解壓)請直接放置到C:\Users\你的用戶名\Documents\Visual Studio 2015\Templates\ProjectTemplates\Visual C# 下麵,這樣你在C#下麵就可以看到有Bot Application的模板了。

 

 

 

二、創建Bot的應用

 

 

 

點擊創建,然後直接發佈Publish。

 

發佈到本地IIS上,配置個埠,如20080

 

 三、使用ngrok工具,將本地的站點暴露外網中

因為在註冊bot時候是必須得要外網https的鏈接,所以我們先要將BotTest投到外網上。有外網有ssl證書(自簽的不可以)可以忽略這步

1.首先訪問官網,https://ngrok.com/  註冊一個賬號(註冊後才能獲取自己的一個賬號秘鑰用於進行後面的綁定操作)。

 

2.註冊完成後,在跳轉後的頁面不用理會支付模塊,可以看到自己的秘鑰信息以及一個下載鏈接

3.點擊下載鏈接,下載ngrok(開始下載後,可以點擊瀏覽器返回到之前有秘鑰信息的頁面,頁面暫時不要關閉,後面還有用),下載完成後可以看到壓縮包里只有一個.exe文件。提示下千萬不要習慣性的以為解壓到當前文件夾,然後雙擊.exe文件哦。正確的操作是解壓的時候選擇   解壓到 ngrok  這個選項。然後將解壓生成的文件夾直接放到自己想放的地方,例如我直接放到D:\ngrok目錄下。

 

打開cmd

輸入d: 回車

 

輸入cd: ngrok

 輸入註冊完成後給到的Install your authtoken

 

最後設置對應的埠號,如20080  ngrok http 20080

然後就完成了操作

 

 四、在Bot Framework網站上註冊應用

註冊時需要有一個微軟的帳號來登錄,然後同意授權。在界面中點擊Register a bot開始註冊:

"Name":你的bot的名字。

"Bot Handle":其實就是你的Bot的id。

"Description":你的Bot的描述,會在你的publish之後主頁上顯示。

endpoint,就是你後臺服務的地址:https://你的伺服器地址/api/messages (剛纔咱們發佈的template的預設介面)

你需要點擊"Create Microsoft App ID and password",創建App ID和Password(註意,切記把這個app password記下來,只顯示一次)

下麵的必填的一些選項隨便填一下就可以了。

點擊保存。

 

更新程式的webconfig

 

 

點擊Channels 下Get bot embed codes

將得到的code 替換進default.htm的body里

 

 訪問該頁面:

到此,機器人部分完成。

由於ngrok產生的網址過了一段時間或者沒有使用就會失效,需要重新產生,再配置到bot中

 

 五、LUIS服務

 

請先登錄:https://www.luis.ai/ ,這是語言理解服務的portal。如果還沒註冊的話用live id註冊以下就可以了。

咱們先點擊"new App"新建一個app。

新建完成後,點擊"Edit",編輯這個應用。

我們先看以下左邊的tab,可以看到有Intents,Entities,Pre-built Entities。。。。

Intents:就是意圖,比如咱們現在要提供圖書查詢的服務,那麼咱們就創建一個"查詢圖書"的Intent。

Entities:實例,比如在查詢圖書的時候需要有書名,出版社,價格等信息,需要把用戶的語言裡頭的這些信息提取出來,這些就是這個句子裡頭的實例,咱們創建一個"圖書"的實例。

Pre-built Entities:這個是預置好的實例,比如說時間,數字等等,我加了一個datetime的預置實例。

Regex Features:正則表達式,可以匹配出相應的一些欄位,比如說航班號。

Phrase List Features:固定的一些短語,能夠直接識別,比如說航空公司的名字等已知信息

 

 

建立問題,並可以將書名標註為圖書,然後點擊submit 

 

 

之後點擊左下角的Train

 

訓練完成後點擊Publish

 

 在Bot中集成LUIS服務,這塊可以參考佘澤鵬的博客。我略微做了些調整,但原理是一樣的。

 

 

 

六、使用botframework-emulator 工具

該工具可以到https://emulator.botframework.com/ 下載。

通過該工具,可以進行代碼調試並且繞開第四步在Bot Framework網站上註冊應用。不過必須把MessagesController上的  [BotAuthentication] 先註銷掉。

 

下載打開,先要進行app setting。配置本地的ngrok路徑即可。

 

 

然後輸入本地路徑鏈接就可以進行操作了。

 

 

  在右邊工具也自動記錄下來了日誌。有異常時,可以在Details這塊查看具體信息。

 

 

 

 七、使用Http Request來請求

獲得Bot Framework 返回在http://www.cnblogs.com/sonic1abc/p/5941442.html 里有詳細的介紹了。

另外如果既沒有https也不想通過代理的話也可以繞過Bot Framework直接請求Luis,對Luis的返回數據再進行自定義的處理:

System.Net.WebRequest wrq = System.Net.WebRequest.Create(uri);
wrq.Headers.Add("Ocp-Apim-Subscription-Key", luis_Key);
wrq.Method = "GET";
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; //SSL3協議替換成TLS協議
System.NetWebResponse wrp = wrq.GetResponse();
System.IO.StreamReader sr = new System.IO.StreamReader(wrp.GetResponseStream(), System.Text.Encoding.GetEncoding("utf-8"));
strResult = sr.ReadToEnd();
Lusi ro = JsonHelper.JsonDeserialize<Lusi>(strResult);

反序列化後得到的信息和Luis官網請求得到的結果形式一樣。

 

將處理好的信息之後,再調用微信的api介面返回,既可以完成微信上面的人工智慧了。

public class MessageBiz : BaseBiz
{
public SendResponse Send<T>(T request)
{
string strJson = JsonConvert.SerializeObject(request);
//_SendLog.WriteLog("new: " + strJson);
base.url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + TokenBiz.GetAccessToken(str_corpid, str_corpsecret);
base.para = strJson;
base.method = "POST";
base.needAccessToken = true;
var res = base.GetUrlReturn<SendResponse>();
return res;
}
}

因為我是企業號,所以調用的企業號服務,介面說明可以參見:http://qydev.weixin.qq.com/wiki/index.php?title=%E5%8F%91%E9%80%81%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E。公眾號道理還是一樣的,換公眾號介面另外實現而已。

最後來簡單看下效果截圖。

 

 

 

 

參考資料:

http://www.cnblogs.com/rocsheh/p/5846009.html

http://blog.csdn.net/xxdddail/article/details/51190754

http://blog.csdn.net/gebitan505/article/details/39497779

http://www.cnblogs.com/sonic1abc/p/5941442.html

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 網路傳輸的簡介 (1)接收過程,如上圖,網路上的數據包到達網卡後,網卡產生中斷,然後設備驅動層收到中斷後,開始進行網路包的接收,接收完之後調用一個netif_rx函數交給網路協議層(層次結構上圖一),然後就是一層一層的網上傳到用戶空間了。 (2)發送過程,從用戶空間過來的數據包,經過層層穿越之後 ...
  • Linux 意外操作後如何進行數據搶救 在 GUI 中使用 組合鍵或是 CLI 下使用 刪除選項,這個文件並沒有從硬碟(或是其它存儲設備)上徹底銷毀。當它文件被刪除以後, 的數據指針部分被清零,僅僅是從系統的目錄結構中被移除,但是這個文件仍然存在你磁碟中的某個 物理位置上。( 或 查詢一個文件所對應 ...
  • Hook是什麼? hook翻譯之後是鉤子的意思,hook的用途主要是用來攔截消息的,看到這裡大家可能會迷茫,What is a hook?所以這時就不得不普及一下操作系統的原理。 舉個例子:假如你是一名游戲熱衷者,在玩游戲時,你要釋放技能那麼你就會對鍵盤滑鼠進行操作,錶面上你是直接操作游戲,其實中間 ...
  • 作者:彭東林 郵箱:[email protected] QQ:405728433 平臺 tiny4412 ADK Linux-4.9 概述 前面一篇博文基於tiny4412的Linux內核移植 實例學習中斷背後的知識(1)結合示例分析了一下新版kernel引入設備樹和irq domain後 ...
  • ylin的狀態欄(啟動器)改成ubuntu之前的樣子,ubuntu是在左邊的,kylin在底部。占空間。 執行命令 gsettings set com.canonical.Unity.Launcher launcher-position Left 啟動器放在左邊,屏幕空間更大些。 放底部 gsett ...
  • 當我們寫程式過程中存在多個文件之間有複雜的包含關係時,若修改了其中一個源文件,就重新編譯所有文件,一般是不必要的,並且當文件很多時,就顯得非常笨拙。所有包含該文件的文件需要重新編譯,而其它無關係的文件則不需要編譯,但往往判斷的這個過程會很令程式員頭疼,並且一不小心就會出現某些需要重新編譯的文件被遺漏 ...
  • PING(Packet InterNet Groper)中文名為網際網路包探索器,是用來查看網路上另一個主機系統的網路連接是否正常的一個工具。ping命令的工作原理是:向網路上的另一個主機系統發送ICMP報文,如果指定系統得到了報文,它將把回覆報文傳回給發送者,這有點象潛水艇聲納系統中使用的發聲裝置。 ...
  • 目前只記錄到2個方法: 方法一:導出法 1、右擊需要cp的目錄,點擊export,General/File System 2、next 3、確認你選擇的目錄,並勾選:Create only selected directories 4、選擇導出到那個目錄:To directory 方法二:(沒認證過 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...