使用C#開發LineBot(3) - 使用LineBotSDK發送Line訊息
新版的Line Messaging API,要主動發送訊息給用戶不是很困難,主要是透過Push API,可以參考底下的官方說明 : https://devdocs.line.me/en/#push-message
另外,如果你想申請一個Line Bot,可參考: 關於LineBot (1) - 用c#建立一個LineBot
前陣子說過,我們為了團隊開發方便,做了一個Nuget Package以便於讓撰寫C#的開發人員可以方便的進行Line Messaging API的操作。
所以,如果你想要透過該SDK來發送訊息給用戶,可以透過底下的指令:
isRock.LineBot.Utility.PushMessage(
UserId, 要傳送的訊息, AccessToken);
別忘了使用前,要先引用linebotSDK這個套件:
當您在.net 4.x的專案中,安裝上述lintbotSDK,即可透過前面提到的指令發送訊息給用戶,但請注意,該用戶必須加你的bot為好友。
你可能在使用時會碰到一個問題,怎麼知道用戶的id呢?
請注意,PushAPI的Line用戶id並非你的line ID,而是一長串項是底下這樣的id:
U6OX388eOX3634X2OX2e341OX06b8OX4123
這個ID會在你的用戶跟你的bot交朋友,或是對談的時候,由系統傳送給你所設定的WebHook網址(其本質上是一個asp.net WebAPI或類似的API服務)。你會在Line傳遞給該WebHook URL的封包中的JSON形式資料內獲得。
也就是說,當你的用戶傳訊息給你的Bot,或是與你的Bot做朋友(或封鎖),你所在你的LineBot後台,所設定的這個WebHook,都會收到這些相關的訊息。其設定位置如下:
訊息內容是以JSON的格式出現。
但是,如果你還不知道怎麼寫一個WebHook,該怎麼辦呢? 寫個WebHook其實很簡單,以asp.net來說,就是寫一個asp.net WebAPI即可。(有空我再說明,但今天比較沒空)
(2017更新,WebHook開發方式請參考這裡)
如果你沒空寫,可以先用底下這個工具(注意這個工具僅限測試使用,我們不保證其穩定性與可用性、與資料安全性):
http://isbaas.azurewebsites.net/WebForms/LineTokenManage.aspx
上面這個工具可以幫你產生一個臨時的WebHook網址,你只要到上面這個網址,把Line後台取得的Access Token輸入,並且順便輸入一個你想監聽該封包的 email(一般來說就是你自己的email啦),按下產生WebHook URL,系統會幫你產生一組像是底下這樣的URL:
https://isbaas.azurewebsites.net/api/LineWebHook?key=677510db-c204-46a0-9c72-d74ffac7e51c
你只需要把上面這組URL貼到你的Line管理後台WebHook URL的位置:
你就有一個公版的測試用WebHook了,這時你就可以跟你的line bot說話:
這個WebHook會echo用戶輸入的訊息,並且把整包JSON mail到你指定的email位置,同時間,你也可以透過跟bot說 /showmyid 取得你的line id,以便於測試。
取得你的用戶id之後,你就可以透過底下的程式碼來發訊息給特定用戶:
isRock.LineBot.Utility.PushMessage(
UserId, 要傳送的訊息, ChannelAccessToken);
請注意,這個小工具只是為了我們團隊內部測試方便使用,如果可以,我們還是建議你自行建立WebHook,我們並不負責為您保管Channel Access Token,建議您測試完成後,立刻重新Issue你的bot Access Token,以確保安全。
相關課程: http://www.studyhost.tw/NewCourses
留言
現在已申請好Azure的空間
正在著手建立自己的webhook
可是現在卡在幾個部分
請問要如何把Line Channel Access Token轉成key值..
是有什麼function負責處理這塊嗎?
如果前輩有空懇請賜教
謝謝
// POST: api/chat
[HttpPost]
public HttpResponseMessage Post()
{
try
{
//Get Post RawData
string postData = Request.Content.ReadAsStringAsync().Result;
var ReceivedMessage = isRock.LineBot.Utility.Parsing(postData);
...略...
透過ReceivedMessage就可以抓取到Line用戶傳遞給bot的Message...
Message API 可以抓到 Bot 好友的列表嗎
http://soldierzx0705.blogspot.com/2017/01/public-string-send-string-result-null.html
http://studyhost.blogspot.tw/2016/12/linebot4-aspnetlinewebhook.html
PushMessage API ERROR:Error Code: 407 Proxy Authentication Required. Forefront TMG requires authorization to fulfill the request. Access to the Web Proxy filter is denied. (12209)
我剛剛實驗申請帳號
結果不知怎麼搞得,申請了三個相同名稱的帳號
在帳號清單裡,功能分成
1.Line@免費版
2.Line@Develop
3.Line@Develop+Message API
請問該如何刪除多餘的部分,謝謝
還有,我想參考大大文章來發送訊息,目前不需要接收訊息
我已安裝您提供的API,但是PushAPI的Line這段實在看不懂
請問我有甚麼方法可以很簡單的從我同學的Line看到他真實的id呢
我想先實驗看看,謝謝
我依據大大寫的API
isRock.LineBot.Utility.PushMessage("U4d44887ca7a344104215a5456060ea9b", "OK", "y7083u7A0+s0GL9m8apVSSlJe7Dd4LiAS1SlZ4AvElckAeaERkDY8p1FFaP+xvIehWKbCbfarlNvHPlSOs63Kbcbe6e5J81TbC+2MLyhK2Uf+0aobbpWECZ+DTRsLA2iXlXal4D1zhfP+aWDz3Z9CgdB04t89/1O/w1cDnyilFU=")
id是我建立的bot ID
Token也是我建立的bot(點選Issue產生) Channel Access Token
執行後程式就出問題"使用者未處理NullReferenceException"
請問是哪邊出問題嗎??
userID要輸入對方的ID,可是我在加入者(非bot)輸入/showmyid是不會回應的
加入者其實就是我現在在用的Line帳號
還有Token是要用bot的Token嗎??
這是幫不熟悉的開發人員做的共用WebHook,僅供測試用。
如果你要自己取得UserId,則要自行建立WebHook,並且透過用戶加入好友或傳遞訊息給你的bot的時候,所得到的JSON來取得。
可以從底下位置找到聯絡方式:
http://www.isrock.com.tw/About-us/Contact-us
可透過Line或Email與我們聯繫。
只會發送給第一行程式的人 想問有辦法傳給兩個人嗎
Reply是回覆訊息,因此只會回覆給某一個人(或群組),如果你要分別發給兩個人,要用Push API...
可是把test加入某個群組後,卻發現只有自己與測試帳號的聊天OK,群組聊天室都沒反應。請問要如何push訊息到群組聊天室?我的json簡單如下:
{
"to":"xxxxx",
"messages":[
{
"type":"text",
"text":"這是由程式發送的LINE TEST訊息"
}
]
}
謝謝您
請問一下 /showmyid 可以取得 user MID
那 bot 加入了一個群組(group)後,要怎麼取得群組 MID 來對群組丟訊息呢
謝謝
bot加入群組之後,依舊是透過 reply API來回覆訊息,因此只需要replyToken即可。
例如在整點的時候將時間pushmessage給所有有加入bot好友的人
string ChannelAccessToken = ....
// 取得UserID
String userID = ReceivedMessage.events[0].source.userId;
if(DateTime.Now.Second == 0 & DateTime.Now.Minute == 0)
isRock.LineBot.Utility.PushMessage(userID, DateTime.Now.Hour.ToString(), ChannelAccessToken);
這是我寫的程式,不過執行起來沒有作用,想請教老師是哪個環節出問題
謝謝您
因為可能先用了一陣子的 Line@ App ,已經有一些 follower 了,後來才改成用 line bot。
此時怎麼抓所有的 follow user 的 ID 呢?
對方僅加入 Line@群
沒有發言, 那要如何push 發送
最近在使用的時候,要傳送表情圖案出現問題,
想請問要如何才能傳送Line emoji裡面的圖案?
System.Exception
HResult=0x80131500
Message=PushMessage API ERROR: {"message":"The property, 'to', in the request body is invalid (line: -, column: -)"}
Source=LineBot
StackTrace:
於 isRock.LineBot.Utility.PushMessage(String ToUserID, String Message, String ChannelAccessToken)
於 isRock.LineBot.Bot.PushMessage(String ToUserID, String TextMessage)
於 LINEBOT0507.Form1.button1_Click(Object sender, EventArgs e) 在 C:\Users\Douglas\Desktop\C#_class\LINE_bot\LINEBOT0507\Form1.cs:行 27 中
於 System.Windows.Forms.Control.OnClick(EventArgs e)
於 System.Windows.Forms.Button.OnClick(EventArgs e)
於 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
於 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
於 System.Windows.Forms.Control.WndProc(Message& m)
於 System.Windows.Forms.ButtonBase.WndProc(Message& m)
於 System.Windows.Forms.Button.WndProc(Message& m)
於 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
於 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
於 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
於 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
於 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
於 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
於 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
於 System.Windows.Forms.Application.Run(Form mainForm)
於 LINEBOT0507.Program.Main() 在 C:\Users\Douglas\Desktop\C#_class\LINE_bot\LINEBOT0507\Program.cs:行 19 中
內部例外狀況 1:
WebException: 遠端伺服器傳回一個錯誤: (400) 不正確的要求。
================================================================
請協助,謝謝!