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

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

ただいまの
回答率

91.36%

  • C#

    4749questions

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

  • Visual Studio

    1201questions

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

  • Azure

    148questions

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

  • LINE Messaging API

    50questions

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

解決済

回答 2

投稿 2017/11/27 23:34 ・編集 2017/11/29 10:41

  • 評価
  • クリップ 0
  • VIEW 96

csuser01234

score 11

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>

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

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/28 08:23

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/28 09:44

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

    キャンセル

  • 2017/11/29 10:33

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

    キャンセル

  • 2017/11/29 10:35

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

    キャンセル

  • 2017/11/29 21: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' を読み込めなかった原因を調べるのに役立ちます。



    ・新規プロジェクトで立ち上げた時点でエラーになるなんて事あるのでしょうか

    キャンセル

  • 2017/11/29 21:53

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

    キャンセル

  • 2017/11/29 21:56

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

    キャンセル

  • 2017/11/29 23:35

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

    キャンセル

  • 2017/11/30 08:22

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

    参考
    https://qiita.com/nia_tn1012/items/77c3c1b006f7c69d30ac

    キャンセル

  • 2017/11/30 09:38

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

    キャンセル

  • 2017/11/30 09:49

    原因で一番よくあるのはnuget復元中にネットワーク等のエラーでパッケージが正常にダウンロードできないこと(nugetは初回ビルド時or手動復元時にpackages.configに記述されているパッケージをネットワーク経由でダウンロードします。)

    対策(修正方法)は正常に読み込まれなかったパッケージを再度nugetパッケージマネージャーで再ダウンロードすると回復が期待できます。

    キャンセル

  • 2017/11/30 11: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)とか言う選択肢がある)

    辺りになってくるのでしょうか?

    キャンセル

  • 2017/11/30 11:58

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

    キャンセル

  • 2017/11/30 12:26 編集

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

    キャンセル

0

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

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

投稿 2017/11/28 08:29

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/28 09:39

    回答ありがとうございます。
    SSL証明書の件、発行した覚えが無かったので改めて調べてみたところ下記のサイトを見つけたので見てみました。
    http://pierre3.hatenablog.com/entry/2016/04/13/234505

    ここの中に『幸い、Azure では *.azurewebsites.net ドメインの既定の証明書が使用できるため、特に何もしなくてもHTTPSが有効になっています。』と言う記載があったので大丈夫そうです。
    しかし、気になる記事がありました。

    Webを発行して、デプロイが成功するとWebブラウザ上に成功しましたと表示がされるそうですが、私の場合はエラーになっていました。
    これが原因でしょうか

    キャンセル

  • 2017/11/28 09:51 編集

    SSL化は面倒なので、それはお得ですね。
    デプロイもそうですがポートなどの問題の可能性もありますし、まずは分けて考えていった方が良いことは事実です。

    ・LINEからの接続確認はサーバに届いている?
    Yes:認証周りの制御を確認しましょう。ログを出すのも有効です。
    No:問題を特定するため、やはりまずはcurlを叩いてみるのが良いでしょう。
    分からない:とりあえずcurlでどうなるか確認しましょう。

    キャンセル

  • 2017/11/29 10: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"と出ていると言う事で失敗しているという事ですね

    キャンセル

  • 2017/11/29 10:42

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

    キャンセル

  • 2017/11/29 10: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させるやり方を調べてやり直してみた結果
    このようになりました。

    キャンセル

  • 2017/11/29 11:17

    content lengthがないって言ってますよね?
    curlのPOSTのやり方が間違ってます。

    って言ってもcontentつけてもエラーではあるみたいですよ。
    サーバ側がおかしいようなのでエラーのメッセージを見ながらサーバ設定周りの見直しが必要ですね。

    キャンセル

  • 2017/11/29 11:26

    エラーの内容を見ると、根本的なサーバ側の環境周りのエラーっぽいのでcurlを確認するまでもない気がします。
    (curlやHTTPにも慣れていないようですし。)

    サーバ側でGETもPOSTも受け取れるのであれば
    OKレスポンスになるまではブラウザからGETさせて確認することをオススメします。
    (GETが受け取れないなら受け取れるようにした方が良いです。)

    ブラウザから見れば、返って来てるHTMLが分かりやすく表示されるので読みやすくなるんじゃないですかね。
    GETが通るところまでいったらLINEから確認して、それでもNGならcurlでPOST確認って感じで進めれば良いかと思います。

    キャンセル

  • 2017/11/29 13: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)

    このエラーが出た場合、まずどこを確認して修正する必要がありますか?

    キャンセル

  • 2017/11/30 12:24

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

    キャンセル

  • 2017/11/30 15:34

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

    キャンセル

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

ただいまの回答率

91.36%

関連した質問

同じタグがついた質問を見る

  • C#

    4749questions

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

  • Visual Studio

    1201questions

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

  • Azure

    148questions

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

  • LINE Messaging API

    50questions