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

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

ただいまの
回答率

88.31%

LINE Messaging APIで【エラー Webhookが200以外のHTTPステータスコードを返しました】というエラーが出る

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,784

pikari

score 14

記事と全く同じように実装してみました。

初めてオウム返しをするLINEBOTを作成しようと、コピペして実装しましたが「Webhookが200以外のHTTPステータスコードを返しました」とエラーが出てきてしまい、APIの接続確認が出来ません。
オウム返しのLINEBOTを完成させたいです。
お時間ありましたら、ご回答頂けますと幸いです。

【利用環境】
LINE MessagingAPI,GoogleAppsScript

リンク内容

【ソースコード】

var CHANNEL_ACCESS_TOKEN = 'YOUR_CHANNEL_ACCESS_TOKEN'; 

function doPost(e) {
    var event = JSON.parse(e.postData.contents).events[0];
    var replyToken= event.replyToken;

    if (typeof replyToken === 'undefined') {
    return; // エラー処理
    }
    var userId = event.source.userId;
    var nickname = getUserProfile(userId);

    if(event.type == 'follow') {
    // ユーザーにbotがフォローされた場合に起きる処理
    }

    if(event.type == 'message') {
    var userMessage = event.message.text;
    // 今回は鸚鵡返しなので届いたメッセージをそのまま返します。
    var replyMessage = userMessage

    // もし届いたユーザーからのメッセージによって他にやりたい処理
    // (ex: spread sheetへの記入など)がある場合は、ここに入れて下さい。

    var url = 'https://api.line.me/v2/bot/message/reply';

    UrlFetchApp.fetch(url, {
        'headers': {
        'Content-Type': 'application/json; charset=UTF-8',
        'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN,
        },
        'method': 'post',
        'payload': JSON.stringify({
        'replyToken': replyToken,
        'messages': [{
            'type': 'text',
            'text': replyMessage,
        }],
        }),
    });
    return ContentService.createTextOutput(
        JSON.stringify({'content': 'post ok'})
    ).setMimeType(ContentService.MimeType.JSON);
    }
}

// profileを取得してくる関数
function getUserProfile(userId){
    var url = 'https://api.line.me/v2/bot/profile/' + userId;
    var userProfile = UrlFetchApp.fetch(url,{
    'headers': {
        'Authorization' :  'Bearer ' + CHANNEL_ACCESS_TOKEN,
    },
    })
    return JSON.parse(userProfile).displayName;
}
コード
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

0

doPost()TextOutputを返すとLINEサーバー側にステータスコードとして302が返されるので、何も返さないようにすればいいです。

function doPost(e) {
    //(中略)

    //(変更前)
    //return ContentService.createTextOutput(
    //    JSON.stringify({ content: "post ok" })
    //).setMimeType(ContentService.MimeType.JSON);

    //(変更後)
    return;
}

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2020/04/26 21:31

    このようなものが返ってきましたが、問題ありますでしょうか?

    レスポンス
    HTTP/1.1 400 Bad Request

    ヘッダ 値
    Cache-Control
    キャッシュのコントロールに必要な指示や情報
    no-cache, no-store, max-age=0, must-revalidate
    Pragma
    関連するクライアント/プロキシ/サーバそれぞれに認識させるための特殊な追加情報
    no-cache
    Expires
    リソース・コンテンツの有効期限。Date値
    Mon, 01 Jan 1990 00:00:00 GMT
    Date
    日付情報。RFC822形式、RFC850形式、ANSI C形式
    Sun, 26 Apr 2020 12:27:45 GMT
    Content-Type
    リソース・コンテンツのアプリケーション・メディアタイプ。MIMEのメディアタイプと同様
    text/html; charset=utf-8
    X-Content-Type-Options
    nosniff
    X-XSS-Protection
    1; mode=block
    Server
    HTTPサーバアプリケーション種類を示す固有テキスト値
    GSE
    Accept-Ranges
    返答したデータのレンジ。単位はバイト
    none
    Vary
    指定されたフィールドがサーバによって受け入れ可能なオプションと判断された (Server Drivenネゴシエーション) ことを示す
    Accept-Encoding
    Transfer-Encoding
    利用されている転送エンコーディング形式 (Transfer Coding:形式)
    chunked
    ※ヘッダの解説は、マウスポインタを重ねることで全体が表示されます。

    キャンセル

  • 2020/04/26 21:32

    とりあえず、私が使ってるツール紹介しておきます。
    Visual Studio Code 使っているなら、REST Client というのがおすすめです。
    https://qiita.com/toshi0607/items/c4440d3fbfa72eac840c

    キャンセル

  • 2020/04/27 19:38

    遅くなりました。
    REST ClientでSendRequestしてみた所、「HTTP/1.1 200 OK」というのが返ってきました。

    キャンセル

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

  • ただいまの回答率 88.31%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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

  • トップ
  • APIに関する質問
  • LINE Messaging APIで【エラー Webhookが200以外のHTTPステータスコードを返しました】というエラーが出る