About Me

我的相片
台北市, Taiwan
我是方選,
方白科技(finebind tech.)共同創辦人,
臺大資管所畢,
希望能幫助更多的人!

FB: http://fb.com/function1122
LINE: http://bit.ly/1foeZft (手機開啟點擊網址自動加入)

最新15則讀者回應

最新文章

FUNction's 上課筆記

Label Cloud

Blog Archive

FeedBurner

追蹤者

顯示具有 UCMA bot 標籤的文章。 顯示所有文章
顯示具有 UCMA bot 標籤的文章。 顯示所有文章

UCMA Simple Bot Part 3 (如何解決8分鐘機器人不回應的問題)

由 FUNction 於 2008年6月19日 下午3:12 發表
English Title: [HOW TO] Solve the UCMA Bot can't receive invite or message after 8 mins.

之前Chming 在我Blog 問我之後,過不久Vincent 在UCMA 論壇問了相同的問題(國人推斷兩人應該是同一人),可惜到最後都沒有人會。沒關係,我們來看看國人如何讓機器人在20 分鐘之後仍然會理國人吧。

這篇的步驟是教大家從IDKStudioServer 改裝成會持續收到訊息的機器人,希望對UCMA 的開發者會有幫助。我先把重點放在如何解決,然後再稍微討論一下,我對為什麼可以成功的見解。

開始修改程式碼:
首先,先開啟有Connection Manager 的程式碼(這邊僅更改TLS 部分,TCP 部分相信聰明的你可以舉一反三):
  1. 先將private 變數_connectionManager 的型別改為"RealTimeConnectionManager"
  2. 在RegisterEndpoint 的一開頭加入以下語法
    IPAddress localIpAddress = Dns.GetHostAddresses(Dns.GetHostName())[0];
  3. 跳到TLS 的區塊(如果是TLS 則執行...)裡面增加一個變數
    RealTimeServerTlsConnectionManager serverTlsConnectionManager;
  4. 刪除
    _connectionManager = (RealTimeServerConnectionManager)new RealTimeServerTlsConnectionManager(憑證名稱, 憑證序號);"

    換成
    serverTlsConnectionManager = new RealTimeServerTlsConnectionManager(憑證名稱, 憑證序號);"
  5. 在catch 外面加入以下程式碼:

    //Turn on MTLS so that InteractiveBot can be trusted by OCS.
    serverTlsConnectionManager.NeedMutualTls = true;

    _connectionManager = (RealTimeConnectionManager)serverTlsConnectionManager;

    if (!serverTlsConnectionManager.IsListening)
    {
    try
    {
    serverTlsConnectionManager.StartListening(new IPEndPoint(localIpAddress, 0));
    }
    catch (ConnectionFailureException e)
    {
    hrow new InvalidOperationException(e.Message);
    }
    }
  6. 接下來要把RegisterCallback 裡面的
    _connectionManager.StartListening(new IPEndPoint(IPAddress.Loopback, 0));
    刪掉或注掉吧
  7. 打完收工!


我們來看看之前問題出在哪?為什麼機器人不回應了。
我以為問題出在RealTimeServerConnectionManager ,雖然到現在我仍然搞不清楚這麼多種Connection Manager 有什麼特別的目的。總之就是把Connection Manager 換成RealTimeConnectionManager 就ok了。此外,RealTimeConnectionManager 不支援StartListening 方法,但是在轉型之前我們仍然可以用RealTimeServerTlsConnectionManager 取得這個方法。所以在該篇Marc Wetters (reply#3) 有回答到點,問題的確出在Connection Manager ,也許是他一時口誤吧。

順帶一提,這些程式碼其實是跟Interactive Bot 有樣學樣做出來的,因為那時候Chming 提醒了我,Interactive Bot 可以持續回應,為什麼IDK Bot 卻不行...恩,總之以後在開發機器人的時候請大家愛用RealTimeConnectionManager ,不用再跟什麼鬼RealTimeServerConnectionManager 玩了吧!
繼續閱讀全文 UCMA Simple Bot Part 3 (如何解決8分鐘機器人不回應的問題)

UCMA Simple Bot Part 2 (Console Bot)

由 FUNction 於 2008年5月15日 下午3:22 發表
若你是UCMA 的開發者,也許會很興奮,因為終於出了第二集!
這集其實沒什麼大的變化,簡單說是我把原本WinForm 的機器人改成Console
這也是國人獨創吧:P

我改成Console 的方法非常Kuso :
其實只是加了個很爛的 while(true);
而且我還沒考慮關閉機器人指令(雖然裡面已經有現成的方法),也就是現在只能用VS的上面的方塊關掉!
也許可以在加個在Console 下達指令的方法 :-)

其實用while(true); 我認為不是爛方法,但我相信應該會有更好的方法。如果你有修過演算法或作業系統,while(true); 就是一個常用的技巧。我們甚至可以設定一個值,當作開關。例如如果那個值沒變之前,都會卡在while 裡面,如果程式使值改變,則離開while ,繼續往下執行。

以下是截圖囉:

這是Console 的畫面


其實就是很爛的while(true);
繼續閱讀全文 UCMA Simple Bot Part 2 (Console Bot)

UCMA 取得對話對象的名稱

由 FUNction 於 2008年3月27日 下午4:09 發表
在UCMA 的開發裡,如果要取得對話對象的資料,需要用到SignalingSession 的RemoteParticipant 。SignalingSession 就是跟對方講話的session ,RemoteParticipant 是它的一個property 。
這個property 在MSDN 裡面並沒有詳細的介紹(請參見 http://msdn2.microsoft.com/en-us/library/microsoft.rtc.signaling.signalingsession.remoteparticipant.aspx),研究了一下,我在這裡分享幾個比較有趣的property 內容:

  • ContactUri(string): Retern 一串我看不出來是什麼的東西,不像LDAP 路徑,類似於:_sip:administrator@msft.com;opaque=user:epid:TJQrEP0QnFW8hA9PhB94qAAA;gruu;另一個屬性Gruu 也傳回相同的值。
  • EndpointId(string): Return 一個類似於這樣的ID: 1ca51363bd,這應該是對方EndPoint 在OCS 裡註冊的ID。
  • Name(string): Return 對方使用者在OCS 中的顯示名稱,例如: Administrator。
  • Uri(string): Return 對方的sip uri,它的結果會類似這樣"_sip:administrator@msft.com",值得注意的是前面有"_sip:"。
  • UriAtHost(string): 在AD 中,這可以回傳對方使用者的UPN,傳回訊息類似於: administrator@msft.com。

我覺得比較值得注意的是Name 和UriAtHost ,這樣我們在對話中就可以知道對方來者何人了。好啦,老實說我覺得這一點都不有趣。
繼續閱讀全文 UCMA 取得對話對象的名稱

Office Communicator 2007 狀態及代碼

由 FUNction 於 2008年1月25日 上午10:34 發表


TypeAvailabilityDescription
Available3500User is available
Busy6500User is busy
Do Not Disturb9500User should not be interrupted
Be Right Back12500User is not currently reachable
Away15500User is not at their desk
Offline18500User is offline

以上為Microsoft Office Communicator 2007(可以想像程公司內部的MSN) 狀態的代碼。程式設計師可以參考Availability 的代碼指定機器人的上線狀態。
繼續閱讀全文 Office Communicator 2007 狀態及代碼

UCMA Simple Bot (國人自製) Part 1

由 FUNction 於 2008年1月18日 上午11:09 發表
國人就是我...
自從那個死老外沒有回應我之後
國人仍然不放棄,結合IDKStudioServer 與InteractiveBot 研發出超級輕巧的機器人MOSSAgent
這個機器人目的是打算能與MOSS 溝通(目前沒有實做這個部分,只有機器人對話的功能)
機器人的功能有:
  • 自動接受Communicator 邀請
  • 能回應使用者自Communicator 發出的文字訊息
  • 能接受兩個以上的使用者

機器人的改進有:
  • 重要部分的程式碼採用中文註解!!!
  • 自動抓取Tls憑證(IDKStudioServer無)
  • 能調整上線狀態(IDKStudioServer與InteractiveBot均無)
  • 只要簡單設定機器人就可以使用(依環境更改Settings.xml)

以下截取部分機器人畫面:

從Communicator 用戶端與機器人對話截圖(可以發現機器人對話模式與我很像><)
機器人介面,畫面中可以控制機器人登入,也可檢視機器人收到的訊息


只要編輯Settings.xml 就可以設定機器人
這個地方我們會發現,讓機器人登入不需要設定使用者的密碼,不要懷疑也不要害怕,這是因為我在程式碼建立endpoint 的時候就寫成不需要密碼(因為寫"需要密碼"會有例外Orz)


這是他接收訊息的程式碼,用個很簡單的switch 判斷使用者輸入的字義:P

看了這麼多,如果你是開發者的話應該最有興趣的是下載的連結,我不是一個小氣的人,就放在這兒囉
[download source code]

如果:
  • 你覺得這個程式對你有幫助,請你回復一下讓我知道喔^^(如果都沒回覆我下次就不放source 了Q__Q)
  • 有什麼問題也可以問我,因為這程式我大部分都看得懂(雖然是我寫的:P)
繼續閱讀全文 UCMA Simple Bot (國人自製) Part 1

UCMA Simple Bot Part 0

由 FUNction 於 2008年1月2日 下午5:42 發表
如果你是透過Google 或其他Search Engine 找到這篇文章
我想跟你說,你不用繼續看下去了
因為這不是教學,而只是我現在遇到的問題
當然,只是現在,我相我應該會有辦法解決

我想要用Console 的方式寫一個UCMA 的機器人
只要基本的功能就好,我今天已經讓機器人能與OCS Server 註冊了
但是當程式執行完後機器人就結束了 囧
我不知道要怎麼讓機器人像伺服器一樣一直開在那裡
難道一定要用Win Form 或是WF,我不知道
但是我以前看過C# 的HTTP Server
只用了一個 While(true){} 就讓伺服器一直執行著
不過UCMA 似乎不能,因為那不是用socket 吧

於是我到MSDN 論壇去問問題(雖然我覺得應該是沒人會理我)
以下是我的問題(感謝Jill 幫我校正):
Is UCMA can be a server which could receive and response Message to communicator client in console application?I followed MSDN(http://msdn2.microsoft.com/en-us/library/bb773385.aspx)
and my server can register in OCS server but it over when program is finished
I am not sure if I can use "While(true){}" like simple http server(http://www.123aspx.com/PostReview.aspx?res=75)I
have no idea about UCMA server, is WF only way to solve it

Thanks


原文網址:http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2619023&SiteID=1
繼續閱讀全文 UCMA Simple Bot Part 0

UCMA是不是都沒人在研究

由 FUNction 於 2007年12月19日 上午11:59 發表

拜託...世界這麼多人,為什麼研究UCMA 的就幾個人
寫個robot 有這麼困難嗎??
為什麼我光是按照教學都有這麼多問題

看看Interactive Bot,是個多好的程式
功能既強大又實用
可是為什麼還要用IE7 的RSS 和惱人的WF(Windows Workflow Foundation)呢??
我光是看程式碼就看不懂了

唉@@
誰能救救我呢,抓狂了!!
繼續閱讀全文 UCMA是不是都沒人在研究

UCMA 1.0 開發人員手冊

由 FUNction 於 2007年12月14日 下午4:16 發表
Development Guide for Unified Communications Managed API version 1.0
http://msdn2.microsoft.com/en-us/library/bb773385.aspx

目錄:


另外,來整理一下Joe Calev 對UCMA 的介紹吧(http://blogs.msdn.com/jcalev/archive/tags/ucma/default.aspx)
繼續閱讀全文 UCMA 1.0 開發人員手冊

發現一個UCMA Bot 開發成功的案例

由 FUNction 於 下午2:00 發表
以下引用自Unified Communications (http://unified-communications.blogspot.com/2007/10/creating-bots-using-ucma-api-and-moss.html):
Based on the series of Blog posts of Joe Calev ( http://blogs.msdn.com/jcalev/default.aspx) on using the UCMA API, my colleague (Marc Wetters) created a simple bot.

His series of blog post is an excellent start on building bots. You can ask the bot a question using keywords. The bot then searches a MOSS 2007 environment en presents the results as a series of titles and links to the a set of documents.

Next to the set of results (Max 5) the bot returns the names of the author’s. The next step for this bot is to put you through to one of the author’s (which I didn’t get to work yet ;-( )

For searching a MOSS 2007 environment Marc Wetters used the standard Search Webservice from MOSS 2007.
(http://msdn2.microsoft.com/en-us/library/search.aspx)

我有去他那兒留言...希望能得到專案的source code 阿
殘念
這是我的留言內容...由此可知我的英文是該加強了
hi
I'm really interesting in your bot...

About 3 months ago, I studied Joe Calev's blog and and followed his tips to write a bot, but I failed :(

Before 2 months, I found "Interactive Bot Sample Code" and studied it, but it used
workflow foundation and the project is really big, it seems too complicated to
understand for me...QQ, i can just run it but cannot modify the bot core(especially WF)

Could you give me some idea about bot core or mail your project to me?? Please...
Thanks a lot!!

function1122(using Gmail)
繼續閱讀全文 發現一個UCMA Bot 開發成功的案例

12/7 UCMA SDK 又更新了

由 FUNction 於 2007年12月12日 上午11:47 發表
之前睽違幾個月的Interactive Bot Source Code 在國慶日左右釋出
後來在網路上發現 Well Known Bug...
沒想到在12/7 又改版了,趕快來下載看看吧
我正在安裝XD
http://www.microsoft.com/downloads/details.aspx?FamilyID=b30306e4-7dc1-44d2-9a68-9b4a6fc5c2df&displaylang=en

希望它不要寫得太複雜
功能也不要太強大...這樣改起code 很囧
繼續閱讀全文 12/7 UCMA SDK 又更新了

第一次對機器人的共識(是吧)

由 FUNction 於 2007年12月7日 上午11:44 發表
經過一連串的誤會,我們決定要每周開一次會,這學期是周五
開會的結果是凝聚共識&回報進度&回報遇到的問題

早上與deduce討論的結果,現在對於機器人的共識是:
使用者可以對機器人至少下達兩個指令: list, search

1) 當使用者執行list 指令時
Communicator開啟右邊視窗,顯示整個列表清單
當list後面帶列表參數時,右邊視窗列出list 中的items
使用者可以閱讀item的內容或下載item 檔案

2) 當使用者直行search 指令時
使用者需要在search 後面帶參數
Communicator會開啟右邊視窗,列出搜尋結果
搜尋結果有可能是list 或是item ,如果點選list 就套用上述list 方法,列出list 內容
如果是item 就套用上述item 方法,讓使用者閱讀文章或下載檔案

所以機器人只做選擇開啟哪個視窗的功能,其他的操作都由aspx完成

轉貼jill的補充:
機器人針對不同的指令去做判斷
userA : I want need to (search find) XXX
userB : show me the XXX list lists

bot 即針對user的關鍵字去做動作
case1 search/need 使用search webservice用XXX 去抓MOSS內的資料
return result in activity windows

case2 list/lists使用webs webservice 用XXX去找
return result in activity windows


我覺得一定要開會,不管整個team是不是都是強者
還是會有很多沒有共識的時候
像我之前很不好...
專題開始沒多久,分派的工作組員都不做,然後跟我講不會
我就罵他們說,你們不懂就要問,我就會跟你講
過了一段時間,組員一直問我
我就罵他們說,你們不會自己去Google 阿!!

團隊合作就是要重溝通,不能一直希望別人都自己完成
不然就算別人辛苦的完成了,作的東西也不是你要的
你還是會抓狂XD
繼續閱讀全文 第一次對機器人的共識(是吧)

機器人的流程

由 FUNction 於 2007年12月5日 上午11:53 發表
機器人開發到現在已經三四個月了...今天詳細的跟家德討論了基本流程:
我擬出以下兩個方案

方案一:
使用者在communicator輸入MOSS上的帳號密碼
Agent列出可以使用的方法,兩個(一個是search 一個是list)

list
當使用者輸入list後,開啟activity
在act顯示網站列表(MOSS上不只一個網站)
使用者在act點選想要的網站 點選後act列出該網站有的清單
在act上點選清單後 出現檔案列表...(檔案前有checkbox 可一次下載多個)

search
search後面可以接關鍵字 執行後一樣在act顯示搜學結果
然後之後再討論act要如何呈現

方案二:
當使用者喚醒機器人後...機器人會要求使用者輸入帳密
輸入正確後立即在右邊開啟activity
act的內容是 上面有個search bar
下面是網站列表 使用者可以在search bar打關鍵字
也可以展開網站列表看list
下載檔案...後面的方法就像第一個想法一樣了


關於下載檔案:
因為要將MOSS檔案佔存到Agent的IIS目錄中,讓使用者下載
家德有提到把網站存在自己的路徑在.Net中有個方法叫 webclient 下次再研究一下
繼續閱讀全文 機器人的流程