C# で LINE Bot

みなさん、こんにちは。Bot 開発してますか?

昨年発表された LINE 社の Messaging API とてもいい感じですが、個人的には、

- C# ライブラリが無い
- Microsoft Bot Framework が LINE 対応していない

という 2 点が嫌だったので、ライブラリを作ってみました 。今回はこちらを紹介します。
全てのソースはこちら: https://github.com/kenakamu/line-bot-sdk-csharp

LINE Messaging API の申し込みと準備

1. LINE ビジネスセンターよりアカウント作成。https://business.line.me/ja/
2. 会社/事業者を作成
3. サービスを利用開始のページより Messaging API を選択。

image

4. ここで間違えずに 「Developer Trial を始める」をクリック。

image

5. 適当に名前を付け、業種を選択したら、「確認する」をクリックし、「申し込み」をクリック。
6. 続いて「LINE@MANAGER へ」をクリック。
7. 「Enable API」をクリックして API を有効化。確認画面もクリックして完了する。

image

8. Request とDetails の設定を適切に変更して、保存。

image

9. LINE ビジネスセンターに戻って、アカウント一覧より Messaging API の 「LINE Developer」 をクリック。

image

10. Channel Secret の右側にある「Show」をクリックして Secret を取得。同様に一番下にある Channel Access Token の右にある「Issue」をクリックして、Token を取得。これらの値は後から利用。とりあえず事前準備はここまで。

C# SDK for LINE Messaging API

何はともあれ、Messaging API の大元を C# でラップしましょうという事で、Messaging API のドキュメントを参照して作りました。

GitHub: https://github.com/kenakamu/line-bot-sdk-csharp/tree/master/LineMessagingAPISDK

ライブラリなので NuGet に上げてあります。Install-Package LineMessagingAPI.CSharp でどうぞ。
しかしこれだけでは意味が無いので Visual Studio 2015 用のプロジェクトテンプレートを 2 つ用意しました。

いずれのテンプレートも zip をダウンロードして、"%USERPROFILE%\Documents\Visual Studio 2015\Templates\ProjectTemplates\Visual C#\ に保存してください。

LINE Bot Application テンプレート
ダウンロード: https://github.com/kenakamu/line-bot-sdk-csharp/releases/tag/LineBotApplication

このテンプレートは、Bot Framework とは関係なく、独立した LINE Bot を開発したい場合に利用します。

プロジェクトの作成と公開

1. Visual Studio 2015 を起動して、「新しいプロジェクト」を選択。
2. Line Bot Application を選択し、任意の名前を付けて「OK」をクリック。

image

3. Web.config ファイルを開き、上記で取得した Secret と Token を貼り付け。

image

4. なにも考えずとりあえず、Azure に Deploy。プロジェクトを右クリックして「公開」を選択。

image

5. 手持ちの Azure Subscription で AppService に公開。この際、ビルドは Debug を選択。

image

6. 公開されたアドレスをコピー。

7.サーバーエクスプローラーより、Azure | App Services | <展開先> | <サービス名> を右クリックして、「Attach Debugger」をクリック。

image

8. LineMessagesController.cs の Post メソッド直後にブレークポイントを設定して待機。

image

 

LINE 側の情報更新と利用

1. LINE ビジネスセンターより、先ほど Channel Secret を取得した Messaging API の画面に遷移。

2. 画面一番下の「Edit」 をクリック。

3. 「Webhook URL」にコピーしたアドレスをペーストし、/api/linemessages を付与。またプロトコルは https とする。「SAVE」をクリックして保存。

image

4. Webhook URL の右側にある「VERIFY」をクリック。たまに失敗しますが、とりあえず無視。

5. iOS か Android の最新 LINE アプリケーションから、QR コードでアカウントを追加。
※以下のコードはそのうち動かないかもしれません。

image

6. 許諾等もろもろ承諾して、サービスアカウントを追加。追加した時点でブレークポイントがヒットします。

7. メッセージや画像、スタンプや位置を送ったりして動作確認。尚、メッセージとして buttons, confirm, carousel と送るとそれぞれリッチメッセージが返答されます。

継続して開発

ここから先は自由に開発してください。

LINE With Bot Framework Application テンプレート
ダウンロード: https://github.com/kenakamu/line-bot-sdk-csharp/releases/tag/LineWithBotFrameworkApplication

このテンプレートは、Bot Framework で既に開発している、または今後開発するものと LINE を接続したい場合に利用します。
LINE プラットーフォームから受信したメッセージをそのまま Direct Line に転送し、その結果をまた LINE プラットフォームに返信するだけのリダイレクト機能であるため、基本的にコードの変更は不要ですが、必要に応じで変更してください。

Bot Framework で Direct Line の作成とキーの取得

接続する先の Bot Framework アプリケーションで Direct Line の有効化とキーの取得を行います。

1. https://dev.botframework.com より登録済 Bot を選択。

2.  Add another channel より Direct Line の右にある 「Add」 をクリックし有効化。

3. Direct Line の画面で Secret Key を取得。

Bot Framework 側のコード変更

Direct Line の制限と、LINE プラットフォームでサポートされる内容の差異から、カルーセルやサムネイルといったリッチコンテンツおよび、Place と GeoCoordinates は ChannelData に入れる必要があります。ChannelData は文字列を受け取るので、JSON.NET でシリアライズします。

[カルーセルの場合]

// 既に Attachments にデータがある前提
if (channelId.Contains("direct"))
{
// 返信メッセージを作成
var replyForLine = context.MakeMessage();
// Attachments を ChannelData にコピーして、Type を Rich に設定
Entity heroCard = new Entity() { Type = "Rich", Properties = new JObject(new JProperty("Attachments", JArray.FromObject(reply.Attachments))) };
replyForLine.ChannelData = JsonConvert.SerializeObject(heroCard);
}

[Place や Geocooridinates の場合]
if (channelId.Contains("direct"))
{
// Entity をChannelData にコピー
reply.ChannelData = JsonConvert.SerializeObject(entity);
}

プロジェクトの作成と公開

1. Visual Studio 2015 を起動して、「新しいプロジェクト」を選択。

2. Line With BotFramework Application を選択し、任意の名前を付けて「OK」をクリック。

image

3. Web.config ファイルを開き、上記で取得した LINE Channel Secret と Token、および DirectLine の Secret を貼り付け。

image

4. 以下は先ほどと同じ手順。なにも考えずとりあえず、Azure に Deploy。プロジェクトを右クリックして「公開」を選択。

5. 手持ちの Azure Subscription で AppService に公開。この際、ビルドは Debug を選択。

6. 公開されたアドレスをコピー。

7.サーバーエクスプローラーより、Azure | App Services | <展開先> | <サービス名> を右クリックして、「Attach Debugger」をクリック。

8. LineMessagesController.cs の Post メソッド直後にブレークポイントを設定して待機。

LINE 側の情報更新と利用

上記と同じ手順のため割愛。

継続して開発

テンプレートから作成したプロジェクトを変更する必要はありませんが、Bot Framework 側でリッチコンテンツを返信している場合に、上記の変更が必要となります。

問題が発生したら https://github.com/kenakamu/line-bot-sdk-csharp/issues に報告お願いします。もちろん PR で修正してもらってもかまいません。

やはり日本は LINE 文化ですので、既に Bot Framework に公開済のサービスも LINE 対応してみてください。

- 中村 憲一郎