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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

2回答

4940閲覧

GAS 401エラーが解決できません。

ryusei_toyo

総合スコア0

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2021/06/17 23:24

前提・実現したいこと

下記のエラーコードが発生します。
これはアクセスができないということでしょうか。
抽象的な質問になりますがご教示いただけますと幸いです。

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

Exception: Request failed for https://api.line.me returned code 401. Truncated server response: {"message":"Authorization header required. Must follow the scheme, 'Authorization: Bearer <ACCESS TOKEN>'"} (use muteHttpExceptions option to examine full response)

該当のソースコード

GAS

function notifyLINE(){
const ACCESS_TOKEN = "----";

const USER_ID = "----";

let url = "https://api.line.me/v2/bot/message/push";
let headers = {
"Content-Type": "application/json;charaset=UTF-8",
"Authorization": "Bearer"+ACCESS_TOKEN
};

let message = "テスト通知です";

let data = {
"to": USER_ID,
"messages": [
{
"type": "text",
"text": message
}
]
};

let options = {
"method": "post",
"headers": headers,
"payload": JSON.stringify(data)
};

UrlFetchApp.fetch(url, options);

}

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

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

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

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

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

guest

回答2

0

多分、ですが、BearerのあとにすぐTokenをつなげてますが、bearerの後には半角スペースでの区切りが必要です。

以下のコードは通知をおくるものですが、

JavaScript

1//送信オプション組み立て 2 var options = 3 { 4 "method" : "post", 5 "payload" : "message=" + message, 6 "headers" : {"Authorization" : "Bearer "+ token} 7 }; 8 9 //通知を送る 10 UrlFetchApp.fetch(endpoint,options);

となります。 Bearerの後の半角スペースを忘れる人がとても多いです。

参考リンク:Google Apps ScriptでLINEに通知を送る

投稿2021/06/19 23:45

officeforest

総合スコア412

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

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

0

検証環境を持っていないので推測である事を先に明記します。
的外れな回答でしたらすみません。

LineのAPIは使った事ないですが、401エラー、つまりBad Requestなのでクライアントの投げるリクエストが悪いと言っています。
更にメッセージを読むと、ヘッダの作成方法がダメなのではと思いました。

Exception: Request failed for https://api.line.me returned code 401. Truncated server response: {"message":"Authorization header required. Must follow the scheme, 'Authorization: Bearer <ACCESS TOKEN>'"} (use muteHttpExceptions option to examine full response)

↓(Google翻訳)

例外:https://api.line.meがコード401を返したため、リクエストが失敗しました。サーバーの応答が切り捨てられました:{"message": "認証ヘッダーが必要です。スキームに従う必要があります。 '認証:ベアラー<アクセストークン>'"}(使用完全な応答を調べるためのmuteHttpExceptionsオプション)

個人的に気になるのはこの箇所です。
認証ヘッダーが必要です。スキームに従う必要があります

json

1{"message":"Authorization header required. Must follow the scheme, 'Authorization: Bearer <ACCESS TOKEN>'"}

更に見るとココです。何らかの理由でAuthorizationヘッダを読むのに失敗したので、この書き方に倣うように指摘していると思います。

'Authorization: Bearer <ACCESS TOKEN>'

では、ソースコード中のAuthorizationヘッダの作り方を見ると、Bearer<ACCESS TOKEN>がくっ付いているように思えます。

gas

1let headers = { 2 "Content-Type": "application/json;charaset=UTF-8", 3 "Authorization": "Bearer"+ACCESS_TOKEN 4}; 5

Logger.log(headers)Logger.log(JSON.stringify(headers))あたりを使ってデバッグログに出して、実際のヘッダJSONと比較すると良いと思います。

今回の勘所としては、クォーテーション、ダブルクォーテーション等はプログラマが見た時には文字列であると認識する事が多いと思います。つまりそういう箇所は一字一句間違ってはいけません。

書式をコピペして、トークン部分だけを書き換えるくらいの慎重さは必要だと思います。

ログやメッセージにも通じる事はあって、この辺りを気にしないと理由に辿りつけない事がありますので、心に留めておくと良いかと思います。

その他、気になった個所

質問は修正できるので、ソースコード部分はコードブロックで括っておいて下さい。
インデントやハイライトも行われるので見やすさが段違いです。

イメージ説明

ソースコードを選択した状態で<code>ボタンを押下するか、
直接エディタ上で、バッククォート3つ(Shift+@で入力)で括ってください。

投稿2021/06/18 01:05

neonemo

総合スコア191

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問