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

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

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

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

C#

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

Q&A

2回答

6569閲覧

C#でLINEに発言したいです。

movixy

総合スコア14

LINE Messaging API

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

C#

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

0グッド

1クリップ

投稿2018/07/19 13:48

編集2018/08/13 13:35

前提・実現したいこと

C#のWPFアプリケーションからLINEに発言したいです。
https://skyblock.jp/2017/12/31/line-notify/
を参考にしましたが、サーバーエラーになっています。

発生している問題・エラーメッセージ

System.Net.WebException HResult=0x80131509 Message=リモート サーバーがエラーを返しました: (401) 許可されていません Source=System スタック トレース: 場所 System.Net.HttpWebRequest.GetResponse() (f:\dd\NDP\fx\src\net\System\Net\HttpWebRequest.cs):行 2257

該当のソースコード

C#

1 var token = "mytoken"; 2 3 var url = "https://notify-api.line.me/api/notify"; 4 var encode = Encoding.UTF8; 5 var payload = "message=" + WebUtility.UrlEncode("こんにちは!"); 6 7 using (var wc = new WebClient()) 8 { 9 wc.Encoding = encode; 10 wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); 11 wc.Headers.Add("Authorization", "Bearer " + token); 12 var response = wc.UploadString(url, payload); 13

該当のソースコード(2018/08/13現在)

C#

1 var token = "mytoken"; 2 3 var url = "https://notify-api.line.me/api/notify"; 4 var encode = Encoding.UTF8; 5 var payload = "message=" + HttpUtility.UrlEncode("こんにちは!", encode); 6 7 using (var wc = new WebClient()) 8 { 9 wc.Encoding = encode; 10 wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); 11 wc.Headers.Add("Authorization", "Bearer " + token); 12 var response = wc.UploadString(url, payload); 13 } 14

補足情報(FW/ツールのバージョンなど)

Visual Studio 2017 Community

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

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

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

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

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

guest

回答2

0

こんにちは。

参考ページに記載されている通りに(コピペ)して、私の環境では動作しました。
受信イメージ

参考ページとの違いとして以下が挙げられます。

csharp

1var payload = "message=" + WebUtility.UrlEncode("こんにちは!");

次のように修正しても改善しませんか?

csharp

1var payload = "message=" + HttpUtility.UrlEncode("こんにちは!", encode);
  • HttpUtility.UrlEncodeメソッドの第2引数にencodeを追加

もしくは、Token文字列のコピーミス等を再度確認することが考えられます。

追記 (2018/08/07)

WinMergeでマージしました。以下の点は変更可能ですか?

csharp

1var payload = "message=" + WebUtility.UrlEncode("こんにちは!");

WebUtilityHttpUtilityに変更してください。

csharp

1var payload = "message=" + HttpUtility.UrlEncode("こんにちは!", enc);

投稿2018/08/03 02:04

編集2018/08/07 00:57
g_uo

総合スコア212

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

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

movixy

2018/08/06 12:07

ほんとですか。確認します!
movixy

2018/08/06 12:34

こんにちは。情報ありがとうございました。 早速encodeを追加し、念のためトークンも再発行してみましたが、ダメでした。 相変わらず401エラーになりました。
g_uo

2018/08/07 00:54

差分見つけたので回答に追記します
movixy

2018/08/13 13:46

こんにちは。差分情報ありがとうございます。 細かく修正したので、あらためて最新の状況のコードの全文を掲載しておきます。 この状態で、依然として401エラーです。 とすると、ほかの設定の課題かと思いました。 WebでMessaging API設定を確認しました。 LINE Developers API Document ステータス 利用中 利用可能なAPI REPLY_MESSAGE PUSH_MESSAGE リクエスト設定 LINE Platformからあなたのサーバーへの送信リクエストを設定します。 Webhook送信 利用する となっています。 ほかになにか設定が必要なのでしょうか…。
g_uo

2018/08/17 15:30

コメント遅くなり申し訳ありません。また各種情報の確認ありがとうございます。 しかしながら私のほうではそこまで詳しい情報の設定および確認を行っておりません。 (私のほうではLINE Notifyの登録を行ったのみ) 重ねてお詫び申し上げます。 正直申し上げてこれ以上は私の手に余ります。(Web関連の技術は疎いのです。すみません。) 私の環境で送信しているメッセージを比較すれば何かわかるのかもしれませんが、片手間では難しい状況です。 ここでより詳細な回答が得られれば良いのですが、そうでない場合はLINEに対して問い合わせを行ってはいかがでしょうか? movixyさんにとって本件がプライオリティの高い問題であれば、早く、より簡単と考えます。 ここまで書いて、改めてLINEのAPIドキュメント確認しました。 POST時の401エラーは以下の原因があると記載されています。 > もしこのAPIの呼び出しでステータスコード 401 がレスポンスされた場合、該当するアクセストークンは LINE Notify 側で無効化 (主にユーザによる無効化) されたことを示します。この場合、連携サービス側でも連携情報を削除してしまってかまいません。 レスポンスStatusの説明においても以下の記述があります。 > 401: アクセストークンが無効 (y_waiwai様が回答している内容と重複します) トークンも正常かつ、プログラム的な不備が見当たらないのであれば、LINEに問い合わせるのが、やはり良いように思います。 長文失礼しました。お役に立てず申し訳ありません。
movixy

2018/08/18 03:43

いえいえ。お詫びなんてとんでもない。恐縮です。 コードは問題なさそうなので、とすると環境に問題があるのかな、という気がして、追記しました。 何度も回答を求めているとしている通り、急いではいないですが、重要だと考えています。プライオリティは高いです。おっしゃるようにLINEにも問い合わせてみます。感謝します。
guest

0

LINE公式のドキュメントには、

リクエストヘッダに Authorization: Bearer <access_token> を付与してアクセスします。使用したアクセストークンが無効な場合、RFC6750 に基きステータスコード 401 と共に WWW-Authenticate ヘッダを返します。

とあるので、ヘッダの形式が違うか、アクセストークンが違う、ってことではないでしょうか

投稿2018/07/19 14:01

y_waiwai

総合スコア87774

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問