2016年12月24日 星期六

LineBot Messaging API 主動傳訊息給使用者

LineBot API不知道後續會不會再改版,我只經歷過上一個版本,跟目前這個版本,不知道還有沒有更前面的版本,最近這次改版更動蠻大的,以後不知道還不會有,所以在這裡先記錄下來。

如果有需要看官方舊版的文件的話,網址在這:
舊版API文件:https://developers.line.me/bot-api/overview

新版的在這:
新版API文件:https://developers.line.me/messaging-api/overview


這篇只是單純的把想要推播的訊息推送給對方,單純只推送訊息就不用用到Webhook去接收使用者回傳得訊息,所以這程式也不用放到Server端在本機就能測試,但前提是要知道對方的使用者ID。


Http request
POST https://api.line.me/v2/bot/message/push

Request headers
Content-Type :application/json
Authorization :Bearer {Channel Access Token}

Request body
to : ID (字串格式)
messages :message 物件

message 物件
文字類別:
type : text (字串)
text  : 要傳送的訊息(字串,最多2000字)


目前可以推播的訊息種類有8種,這邊就以推播純文字的方式來示範

建立LineMessagingService及設定一些上面敘述所要發送的資料,

using System.Net.Http;
using System.Net.Http.Headers;
using System.Net;
using System.Threading.Tasks;

namespace SevenDollarsLineBot.Utility
{
    public class LineMessagingService
    {
        HttpClient Client = new HttpClient();

        public LineMessagingService(string ChannelAccessToken)
        {
            Client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            Client.DefaultRequestHeaders.Add("Authorization", $"Bearer {ChannelAccessToken}");
        }

        public async Task<HttpStatusCode> PushMessage(string ID, string s)
        {
            try
            {
                var PostResult = await Client.PostAsJsonAsync("https://api.line.me/v2/bot/message/push",
                   new
                   {
                       to = ID,
                       messages = new[]
                           {
                            new {
                                type="text",
                                text =s,
                            }
                           }
                   });

                return PostResult.StatusCode;
            }
            catch
            {
                return HttpStatusCode.BadRequest;
            }
        }
    }
}


Controller部分


using SevenDollarsLineBot.Utility;
using System.Threading.Tasks;
using System.Web.Http;

namespace SevenDollarsLineBot.Controllers
{
    public class ChatController : ApiController
    {
        //Line開發者頁面裡面的Basic information頁面找的到 ChannelAccessToken
        string ChannelAccessToken = "YourChannelAccessToken";

        /// <summary>
        /// 推播訊息給使用者
        /// </summary>
        /// <param name="ID">使用者ID</param>
        /// <param name="s">要說的話</param>
        /// <returns></returns>
        public async Task<IHttpActionResult> Get(string id = "", string s = "")
        {
            LineMessagingService Service = new LineMessagingService(ChannelAccessToken);

            var HttpStatusCode = await Service.PushMessage(id, s);

            return Content(HttpStatusCode, HttpStatusCode);

        }
    }
}


Postman 發送測試,注意網址參數及右下角訊息

點選Send後,右下角馬上跳出電腦版的Line訊息


電腦版Line訊息框


手機版也有出現訊息



除了Line 以外還有很多大公司也有在做這部分,不知道以後會發展到怎樣,如果你有好的想法去應用在這上面,可以去參加Line官方的比賽,以下是官方的訊息:

開發更多活用Messaging API特性的帳號,是LINE目前的目標。
我們將提供最多1,000萬日圓的獎金給冠軍。
衷心期待各位擁有高超技術及想法的朋友踴躍參加。

最後希望大家都能開發出自己喜歡的機器人。

2 則留言:

  1. 您好
    謝謝您的分享,想請教使用ID是如何取得?
    是透過line好友傳訉息嗎?
    以上 煩請協助了解謝謝

    回覆刪除
  2. user 加入好友,在webhook時會有該user ID

    回覆刪除