Azure FunctionsでLine Botを作ってみた
2017年3月15日
第6回 城東.NET勉強会
まずは自己紹介・名前
木下 裕之
・HN:Kingkino
・SNS
Twitter @kingkinoko FaceBookやってます。GitとLinkedInもちょこっと・・・。
・Azure暦:6年
・Azure Function暦:7ヶ月
・MCSE : Cloud Platform and Infrastructure 2017
(MCP 70-532 : 70-533 : 70-534)
※この資料は2017年3月15日時点での情報を元に作成しています。
Azure FunctionsでLine Botを作った経緯
ネットで検索してもAzure FunctionsとC#でLine Bot作ったという情報があまり出てきません。検索して出てくる目ぼしいサイトは下記のサイトくらいです。
・ Azure Functions + Node.jsのサンプルhttp://qiita.com/yorifuji/items/7f892564958cf464a812http://qiita.com/maaya8585/items/caf5c79610ed75b051a0
・ WebApps + C#のサンプル (BOT API Trial)(ピエールさんのブログ)http://pierre3.hatenablog.com/entry/2016/04/13/234505
・ Azure Functions + C#のサンプル (BOT API Trial)( guitarrapc_techさんのブログ)http://tech.guitarrapc.com/entry/2016/04/14/135520
・ WebApps + C#のサンプル MSの中の人のサンプル、※現時点で一番利用しやすそうhttps://blogs.msdn.microsoft.com/kenakamu/2017/01/10/linebotwithcsharp/
その他にもpythonやJAVA、Ruby等で作ってみたという情報はあるのですが最新のMessage APIとAzure Functions + C#で作成したという情報がなかったので開発に着手しました。ちなみにLine Message APIは昨年の9月にリリースされています。
Azure FunctionsでどんなLine Botを作ったのか
Azure Functions + C#でLine Botを作ってみました。Bot名は「大変よくできました!」で無条件で誉め続けてくれるBotです。
年を重ねる度に褒めてもらう機会が減り褒める事が多くなってくると思います。誰しも褒めて貰える事は嬉しいのでそんな人向けをコンセプトに作ってみました。
暫くの間、公開しているのでよければ友達使ってみてください。
作っておいてなんですがやればやるほど空しくなるので是非お試しあれ。
Lineの友達登録からQRコードで登録を選択して右記のQRコードを読み取ってください。
※なお、このBotは予告なく削除しますので予めご承知おきください。
Azure Functionsで動くLine Botの仕組み
Azure FunctionsはHttpTriggerCsharpテンプレートを利用して作成します。LineのMessaging APIにAzure FunctionsのWebhook URLを登録して連携します。今回利用したMessage APIはWebhook(Lineからの通知)とReply Message(Functionsからの返信)です。
Azure FunctionsのWebhook URLを登録する
HTTP Trigger Csharp
Reply Message
HTTP trigger
HTTP output
Azure Storage
②Line Reply Message APIにリクエスト
①Webhookによるトリガー
AzureStorageに配置したデータを読み込む
③HTTPtriggerのレスポンスを返却
苦労した点
ネットで検索しても情報があまり出てこない系の開発だったので情報が少なくて難儀しました。Message APIのリファレンスはあるのですが何故かC#のサンプルがないという悲しい現実もあります。GOですらあるのに。
あと、Azure Functions + C#は本当に開発しづらいです。VS2015でもインテリセンスが効かない部分が多いのとMessage APIの連携がWebHookのためローカルの開発環境だとIFが通らなかったり、仕方ないのでAzure PortalのFunctions Editorを利用するがメモ帳で開発するのと同じレベルで実行時にしかエラーが判断できなかったりと苦労しました。
C#のサンプルがないリファレンス Functionsの開発画面
Azure FunctionsでLine Botを作ってみた感想
「ハマる事もあるけれど、私Azure Functionsが大好きです。」
と、言えるようになりたい・・・。
最初はそこそこはまりましたけど、一回作り方を覚えてしまえば大して苦労せずに作れると思います。Cognitive Serviceと組み合わせると面白いBotが作れるんじゃないかと画策もしています。とりあえずもう少しまともなやり取りができるようにLUISあたりを使ってみたら面白いんじゃないかな。もちろん、「りんな」は目指しません。
無料アカウントで作成しているのでいろいろと制限はありますが有料で利用できるカルーセル等のリッチUIや認証機能を使って最終的な野望である「モスバーガーのチャットBot注文」が作れるといいなぁなんて思ってます。
最後に・・・・
参考:Azure Functionsの構築方法とLine message APIの開設と設定方法とサンプルソース
LINE BUSINESS CENTERhttps://business.line.me/ja/services/bot
LINE BOTの作り方を世界一わかりやすく解説(1)【アカウント準備編】http://qiita.com/yoshizaki_kkgk/items/bd4277d3943200beab26
LINE API Referencehttps://devdocs.line.me/ja/
Azure Functionsの開発環境構築http://www.buildinsider.net/pr/microsoft/azure/dictionary06
Azure Functions + C# Line Echo Bot Samplehttps://github.com/kingkino/kokoni-SmapleLineEchoBot
Azure Functions + C# Line Praise Line Bothttps://github.com/kingkino/kokoni-PraiseLineBot