質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Azure

Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。

Q&A

解決済

2回答

4222閲覧

[LINE bot]Azureで作成したwebアプリがwebhookに設定出来ない

csuser01234

総合スコア38

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Azure

Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。

0グッド

0クリップ

投稿2017/11/27 14:34

編集2017/11/29 01:41

Visual studio 2017 の「C# LINE Bot Application」にて、コンパイル→発行まではうまく行くのですが、
LINE Developers画面の作成したLINEチャネルのwebhookのところにURLを設定し、接続確認で失敗してしまいます。
■エラー内容
**
Webhook が正常ではない HTTP ステータスを返しました。
**
Visual studio内で発行 → 設定画面の接続の検証では成功します。
ちなみにコードは一切いじっていません。
web.configの”channellSecret”と”channelAccessToken”にはLINEチャネルの値をそれぞれコピペしてあります。
webhookのURLは「https://{アプリ名}.azurewebsites.net/api/linemessage」としました。

どこか足りない設定、またはおかしい設定あるでしょうか?

気になる点としては、
1、webhookに設定するURLの後ろにつけるのは「/api/linemessage」でいいか?
2、AzureのデフォルトのURLはhttpだったので、設定画面にてsを追記してhttpsにしたがいいか?
3、visual studio側でコンパイルと発行が成功しているのに、LINEの設定で失敗する事がありえるのか?

以上、よろしくお願いします。

(追記)
Web発行が失敗しているかもしれません。
成功するとWebブラウザ上に成功しましたと英語のメッセージが出るようなのですが、エラーが出ていました。
■エラー内容
Server Error in '/' Application.

Runtime Error
Description: An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed remotely (for security reasons). It could, however, be viewed by browsers running on the local server machine.

Details: To enable the details of this specific error message to be viewable on remote machines, please create a <customErrors> tag within a "web.config" configuration file located in the root directory of the current web application. This <customErrors> tag should then have its "mode" attribute set to "Off".

<!-- Web.Config Configuration File --> <configuration> <system.web> <customErrors mode="Off"/> </system.web> </configuration>

Notes: The current error page you are seeing can be replaced by a custom error page by modifying the "defaultRedirect" attribute of the application's <customErrors> configuration tag to point to a custom error page URL.

<!-- Web.Config Configuration File --> <configuration> <system.web> <customErrors mode="RemoteOnly" defaultRedirect="mycustompage.htm"/> </system.web> </configuration>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

2、AzureのデフォルトのURLはhttpだったので、設定画面にてsを追記してhttpsにしたがいいか?

これが非常に怪しいですね。
ただhttpsにしただけならNGです。
きちんとSSL証明書を発行してサーバ設定していますか?
もしされているのだとしたら、curlなど叩いてLINE以外からのアクセスができることを確認しましょう。
ちなみに、LINEに設定するエンドポイントはhttpsでないとダメなので、SSL化するしかないかと思います。
また、自己証明書では規約NGだったかと思います。

投稿2017/11/27 23:29

yuki-saito

総合スコア928

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

csuser01234

2017/11/28 00:39

回答ありがとうございます。 SSL証明書の件、発行した覚えが無かったので改めて調べてみたところ下記のサイトを見つけたので見てみました。 http://pierre3.hatenablog.com/entry/2016/04/13/234505 ここの中に『幸い、Azure では *.azurewebsites.net ドメインの既定の証明書が使用できるため、特に何もしなくてもHTTPSが有効になっています。』と言う記載があったので大丈夫そうです。 しかし、気になる記事がありました。 Webを発行して、デプロイが成功するとWebブラウザ上に成功しましたと表示がされるそうですが、私の場合はエラーになっていました。 これが原因でしょうか
yuki-saito

2017/11/28 00:51 編集

SSL化は面倒なので、それはお得ですね。 デプロイもそうですがポートなどの問題の可能性もありますし、まずは分けて考えていった方が良いことは事実です。 ・LINEからの接続確認はサーバに届いている? Yes:認証周りの制御を確認しましょう。ログを出すのも有効です。 No:問題を特定するため、やはりまずはcurlを叩いてみるのが良いでしょう。 分からない:とりあえずcurlでどうなるか確認しましょう。
csuser01234

2017/11/29 01:32

Linuxからcurlコマンドで確認してみました。 # curl https://linebotapplication●●●●●●●.azurewebsites.net/api/linemessages ■結果 <!DOCTYPE html> <html> <head> <title>Runtime Error</title> <meta name="viewport" content="width=device-width" /> <style> body {font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;} p {font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px} b {font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px} H1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red } H2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon } pre {font-family:"Consolas","Lucida Console",Monospace;font-size:11pt;margin:0;padding:0.5em;line-height:14pt} .marker {font-weight: bold; color: black;text-decoration: none;} .version {color: gray;} .error {margin-bottom: 10px;} .expandable { text-decoration:underline; font-weight:bold; color:navy; cursor:hand; } @media screen and (max-width: 639px) { pre { width: 440px; overflow: auto; white-space: pre-wrap; word-wrap: break-word; } } @media screen and (max-width: 479px) { pre { width: 280px; } } </style> </head> <body bgcolor="white"> <span><H1>Server Error in '/' Application.<hr width=100% size=1 color=silver></H1> <h2> <i>Runtime Error</i> </h2></span> <font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif "> <b> Description: </b>An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed remotely (for security reasons). It could, however, be viewed by browsers running on the local server machine. <br><br> <b>Details:</b> To enable the details of this specific error message to be viewable on remote machines, please create a &lt;customErrors&gt; tag within a &quot;web.config&quot; configuration file located in the root directory of the current web application. This &lt;customErrors&gt; tag should then have its &quot;mode&quot; attribute set to &quot;Off&quot;.<br><br> <table width=100% bgcolor="#ffffcc"> <tr> <td> <code><pre> &lt;!-- Web.Config Configuration File --&gt; &lt;configuration&gt; &lt;system.web&gt; &lt;customErrors mode=&quot;Off&quot;/&gt; &lt;/system.web&gt; &lt;/configuration&gt;</pre></code> </td> </tr> </table> <br> <b>Notes:</b> The current error page you are seeing can be replaced by a custom error page by modifying the &quot;defaultRedirect&quot; attribute of the application&#39;s &lt;customErrors&gt; configuration tag to point to a custom error page URL.<br><br> <table width=100% bgcolor="#ffffcc"> <tr> <td> <code><pre> &lt;!-- Web.Config Configuration File --&gt; &lt;configuration&gt; &lt;system.web&gt; &lt;customErrors mode=&quot;RemoteOnly&quot; defaultRedirect=&quot;mycustompage.htm&quot;/&gt; &lt;/system.web&gt; &lt;/configuration&gt;</pre></code> </td> </tr> </table> <br> </body> </html> ・これは"Runtime Error"と出ていると言う事で失敗しているという事ですね
yuki-saito

2017/11/29 01:42

これはGETしちゃってますね。 curlでPOSTさせて確認しないとダメです。
csuser01234

2017/11/29 01:52

# curl -X POST https://linebotapplication320171127105035.azurewebsites.net/api/linemessages ■結果 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"> <HTML><HEAD><TITLE>Length Required</TITLE> <META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD> <BODY><h2>Length Required</h2> <hr><p>HTTP Error 411. The request must be chunked or have a content length.</p> </BODY></HTML> ・ネットで調べてPOSTさせるやり方を調べてやり直してみた結果 このようになりました。
yuki-saito

2017/11/29 02:17

content lengthがないって言ってますよね? curlのPOSTのやり方が間違ってます。 って言ってもcontentつけてもエラーではあるみたいですよ。 サーバ側がおかしいようなのでエラーのメッセージを見ながらサーバ設定周りの見直しが必要ですね。
yuki-saito

2017/11/29 02:26

エラーの内容を見ると、根本的なサーバ側の環境周りのエラーっぽいのでcurlを確認するまでもない気がします。 (curlやHTTPにも慣れていないようですし。) サーバ側でGETもPOSTも受け取れるのであれば OKレスポンスになるまではブラウザからGETさせて確認することをオススメします。 (GETが受け取れないなら受け取れるようにした方が良いです。) ブラウザから見れば、返って来てるHTMLが分かりやすく表示されるので読みやすくなるんじゃないですかね。 GETが通るところまでいったらLINEから確認して、それでもNGならcurlでPOST確認って感じで進めれば良いかと思います。
csuser01234

2017/11/29 04:37

確認してみたところ、そもそも新規プロジェクトを立ち上げた時点で、ビルドは通るのですがその後ローカルでデバッグ実行した時点でブラウザ上にエラーが表示していました。 ■エラー内容 '/' アプリケーションでサーバー エラーが発生しました。 ファイルまたはアセンブリ 'Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'、またはその依存関係の 1 つが読み込めませんでした。見つかったアセンブリのマニフェスト定義はアセンブリ参照に一致しません。 (HRESULT からの例外:0x80131040) 説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。 例外の詳細: System.IO.FileLoadException: ファイルまたはアセンブリ 'Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'、またはその依存関係の 1 つが読み込めませんでした。見つかったアセンブリのマニフェスト定義はアセンブリ参照に一致しません。 (HRESULT からの例外:0x80131040) このエラーが出た場合、まずどこを確認して修正する必要がありますか?
yuki-saito

2017/11/30 03:24

解決できたようでよかったです!
csuser01234

2017/11/30 06:34

SSL証明書の件、確認する事が出来ました。誠にありがとうございました。
guest

0

ベストアンサー

1.ソースコードが示されていないため、正しいかどうかは判断しかねますがこのサイトと同じように開発したのならば/api/linemessages(最後にsがあるかないか)となるのではないでしょうか?

2.むしろLINE BotはhttpsのWebhook呼び出しにしか対応していないのでSSLは必須です。
https://developers.line.me/ja/docs/messaging-api/building-bot/

注:Webhook URLにはHTTPSを使用し、認定認証局で発行されたSSL証明書を設定する必要があります。認定認証局のリストを参照してください。

3.コンパイル・発行が成功していることとプログラムが正常に動いているかは別物です。
処理は正常でも、プログラムに対して与える値によっては実行時にエラーを吐くこともあります。

投稿2017/11/27 23:23

07JP27

総合スコア191

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

csuser01234

2017/11/28 00:44

回答ありがとうございます。 まさに私が参考にしたサイトです。 最後にSが付いてるかどうか、今は確認出来ないので後で確認してみます。 ありがとうございます。
csuser01234

2017/11/29 01:33

sを付けてみましたが、ダメでした。
07JP27

2017/11/29 01:35

VisualStudioでAzureのプロセスにアタッチしてデバックすると、どこで落ちているのか、そもそもそのAzureのエンドポイントは呼び出されているのか確認できると思います。
csuser01234

2017/11/29 12:22

Azureにデプロイする以前に、確認したところローカルでデバッグ実行した時点でエラーになっていました。 ■エラー内容 '/' アプリケーションでサーバー エラーが発生しました。 ファイルまたはアセンブリ 'Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'、またはその依存関係の 1 つが読み込めませんでした。見つかったアセンブリのマニフェスト定義はアセンブリ参照に一致しません。 (HRESULT からの例外:0x80131040) 説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。 例外の詳細: System.IO.FileLoadException: ファイルまたはアセンブリ 'Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'、またはその依存関係の 1 つが読み込めませんでした。見つかったアセンブリのマニフェスト定義はアセンブリ参照に一致しません。 (HRESULT からの例外:0x80131040) ソース エラー: 現在の Web 要求の実行中にハンドルされていない例外が生成されました。障害の原因および発生場所に関する情報については、下の例外スタック トレースを使って確認できます。 アセンブリ読み込みトレース: 以下の情報は、アセンブリ 'Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' を読み込めなかった原因を調べるのに役立ちます。 ・新規プロジェクトで立ち上げた時点でエラーになるなんて事あるのでしょうか
07JP27

2017/11/29 12:53

VSのテンプレートからソリューションを新規作成をしたままでもビルドが通らないこと、配置できないことは多々あります。特に多いのがnugetパッケージの復元が何らかの理由でできずにパッケージが見つからないというエラーです。上のエラーを見るとそれと同じようなエラーのように見えるのでそこら辺の問題ではないかと思います。
07JP27

2017/11/29 12:56

上のエラーではMicrosoft.CodeDom.Providers.DotNetCompilerPlatformまたはその依存関係の 1 つが読み込めないと出ているので、ソリューションエクスプローラのnugetパッケージの管理からこのパッケージが正常に読み込まれているか確認してみてください。
csuser01234

2017/11/29 14:35

すみませんnugetパッケージが正常に読み込まれているかどうかはどこで確認できるのでしょうか?
07JP27

2017/11/29 23:22

以下を参考にNuGetパッケージマネージャーで確認してください。 また、併せてソリューションエクスプローラーの「参照」内にも対象パッケージが存在するかを確認すると良いと思います。 参考 https://qiita.com/nia_tn1012/items/77c3c1b006f7c69d30ac
csuser01234

2017/11/30 00:38

ありがとうございます。参考サイト見てみます。 ちなみにnugetパッケージが正常に読み込まれていない場合、原因と対策は一般的にどうなるのでしょうか?
07JP27

2017/11/30 00:49

原因で一番よくあるのはnuget復元中にネットワーク等のエラーでパッケージが正常にダウンロードできないこと(nugetは初回ビルド時or手動復元時にpackages.configに記述されているパッケージをネットワーク経由でダウンロードします。) 対策(修正方法)は正常に読み込まれなかったパッケージを再度nugetパッケージマネージャーで再ダウンロードすると回復が期待できます。
csuser01234

2017/11/30 02:04

デプロイ成功しました!! ご指摘頂きエラー画面に出ていたパッケージをNuGetマネージャーより再取得、更新すると今まで引っ掛かっていた例外を通過して、そのままAzure無料アカウントを使用してweb上にデプロイし、 成功した証の「Your App Service app has been created」が表示されました。 ただ、デプロイ成功したURLを LINE DevelopersサイトのチャネルのwebhookのURLに下記のように設定したのですが、 https://アプリ名.azurewebsites.net/api/linemessages やはりwebhookが正常ではない、HTTPステータスを返しました。と言うエラーになってしまいます。 web発行までうまくいっている事が確認できているので、 あとは疑うところとすれば 1、URLのアプリ名の後ろにつけるのは本当に /api/linemessages か? 2、Azureプロファイの設定?リソースグループやAppServiceの国やサイズ??(S1(1個のコア、1.75GBのRAM)とか言う選択肢がある) 辺りになってくるのでしょうか?
csuser01234

2017/11/30 02:58

LINEからメッセージを送ったら、プログラムが正常に動作しているようでした。 良くわかりませんが、エラーは出ていたのですがちゃんと動いてくれてました。 LINEとAZureの相性が悪い?のかわかりませんが、本稿解決です。 この度は誠にありがとうございました。
yuki-saito

2017/11/30 03:26 編集

そこはLINEのdeveloper画面がおかしいみたいです。 僕はAWS(ALB+EC2)+nginx+Goでやってますが、全く同じ状態です。 リリースしてから1年近く経っているので今更疎通がおかしいとは思えず メッセージやり取りもできていますので、とりあえず問題ないかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問