LINE Messaging API を使って C# で LINE にメッセージを送る
LINE の Messaging API アカウントを使って、C# からメッセージを送る方法のメモです。これは前回の記事の内容にも関連しています。
Messaging API を作る
まずはこれがないと何もできません。LINE Developers にアクセスして作成します。
作成方法はこちらを参考にしてください。
こんな感じに作成できれば OK です。
リファレンスを読む
Messaging API は Webhook を投げることで動かすことができます。今回はブロードキャストメッセージ(友達登録した相手にメッセージを送る)を使用します。まずはリファレンスを読んで、どんな形式で Webhook を投げれば良いかを確認しておきます。
リファレンスの目次に、「ブロードキャストメッセージを送る」という項目があるので確認します。
どうやらこんな感じに JSON 形式で送れば良さそうです。
//ここはヘッダー { "messages":[ { "type":"text", "text":"Hello, world1" }, { "type":"text", "text":"Hello, world2" } ] }
-h
と書いてあるのはリクエストヘッダーで、-d
はリクエストボディーです。
C# プログラムを書く
まずは Messaging API アカウントのチャネルアクセストークンをコピーしておきましょう。Messaging API 設定
のタブを選択し、下にスクロールするとあります。
あとはリファレンスに沿った形式で Webhook を投げれるように、JSON にシリアライズしていきます。シリアライズに関してはこの記事を参考にどうぞ。
WebClient
を使うと簡単に POST できます。また、Headers.Add
メソッドを使ってリクエストヘッダーを指定しています。 UploadString
にて LINE のブロードキャスト(共通の)アドレスへ接続し、シリアライズされた JSON 文字列がアップロードされます。Headers.Add
にはチャネルアクセストークンがあるので、アカウントを識別してメッセージが送信されます。
using System.Collections.Generic; using System.Runtime.Serialization; using System.IO; using System.Runtime.Serialization.Json; using System.Net; using System.Text; class Program { public static string LineToken = @"チャネルアクセストークンの文字列"; public static string LineURL = @"https://api.line.me/v2/bot/message/broadcast"; static void Main(string[] args) { SendMessage("やぁ、たくのろじぃだよ"); SendMessage("C# が好きなイカだよ"); } public static void SendMessage(string TextMessage) { var LineMessage = new LineMessage(); LineMessage.Message.Add(new Message { Type = "text", Text = TextMessage }); var Serializer = new DataContractJsonSerializer(typeof(LineMessage)); var ms = new MemoryStream(); Serializer.WriteObject(ms, LineMessage); using (WebClient client = new WebClient()) { client.Encoding = Encoding.UTF8; client.Headers.Add("Content-Type", "application/json"); client.Headers.Add("Authorization", $"Bearer {LineToken}"); client.UploadString(LineURL, Encoding.UTF8.GetString(ms.ToArray())); } } [DataContract] public class LineMessage { [DataMember(Name = "messages")] public IList<Message> Message { get; set; } = new List<Message>(); } [DataContract] public class Message { [DataMember(Name = "type")] public string Type { get; set; } [DataMember(Name = "text")] public string Text { get; set; } } }
実行結果
イカからメッセージが送られてくるのってなかなかにシュールですね(笑)。ちなみに、このイカは「いかのろじぃ」といいます。(聞いてない)
実はSDKがあった
今回は全て自分の手でコーディングしましたが、どうやら LINE 用の拡張機能があったみたいです。
おわりに
チャネルアクセストークンを用いて C# からメッセージを送ることができました。これを Azure Functions と組み合わせたのが前回の記事の内容でした。もしよろしければご覧ください。
宣伝的なもの
LINE Developers Community の方々による LINE API を用いた開発や最新情報などを共有するコミュニティがあります。私も先日、コミュニティのイベントに参加してきました。
linedevelopercommunity.connpass.com
動いたぁ!#linedc #mstechcampjp pic.twitter.com/XIZ1SyPJFI
— たくのろじぃ / Takunology (@takunology_net) February 27, 2021
また、学生による学生のためのMicrosoft技術勉強会コミュニティ Microsoft Student Partners Japan もあります。日本に所属する Microsoft Learn Student Ambassadors が月1でイベントを開催しています。
私も今年から Ambassador として活動し始めました。一応専門は Minecraft を用いた C# プログラミングなのですが、どのようにイベントを企画しようか検討中です。
また、Minecraft を使いながら楽しく学べるコンテンツも製作中です。