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

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

ただいまの
回答率

88.37%

Twitter webhook登録時にエラーになる

受付中

回答 0

投稿 編集

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

sakura_hana

Unity総合1位

※状況が進みましたので質問を編集しています。

Google Apps ScriptでTwitter Botを作っています。
リプライ時の返答を行う為、Webhookの設定をしていますが、TwitterにURLを登録しようとするとエラーになります。

APIキーやトークンの作り直し等も試しましたが動かなかった為、
試しに「GitHub - twitterdev/account-activity-dashboard」を使用してみたところ、
エラーメッセージが以下に変わりました。
{"code":214,"message":"Non-200 response code during CRC GET request (i.e. 404, 500, etc)."}

GAS側のコードは以下の通りです。とりあえずテストがてら固定文字列を返しています。

function doGet(e) {
  var service = ContentService.createTextOutput("hogehoge");
  return service;
}


ちなみにURLに直接ブラウザからアクセスした場合は正しく文字列が表示されます(ディベロッパーコンソールで確認すると200が返って来てます)。

なお、GAS側をreturn 'service';にしてみる(つまりHTTPとしては何も返さない状態にする)と以下になります。
{"code":214,"message":"Webhook URL does not meet the requirements. Invalid CRC token or json response format."}

このことから、
「認証は通ったらしい(32ではない)」
「URLにアクセス出来ていない訳ではない(404ではない)」
「スクリプトの中身でエラーになっている訳ではない(500ではない)」
と思うのですが、ここから先に進めない状態です。

何か情報があればお教え頂ければ幸いです。


(以下は初回の質問)

{"code":32,"message":"Could not authenticate you."}
が返って来てしまいます。
修正や確認すべき点がありましたらご指摘頂けると助かります。

■登録時に使っているコード

//GASのエディタ画面から手動で実行しています
function registWebhook() {
  var endPointUrl = 'https://api.twitter.com/1.1/account_activity/webhooks.json?url=GASのURL'
  var response = twitter.getService().fetch(endPointUrl, {
    method: 'post',
    payload: {}
  });
  Logger.log(response);
}


なお、試しに
Twitter REST APIの使い方
このサイトの「post-oauth1.php」を用いてPHPで実行してみましたが、結果は同様でした。
また、https://api.twitter.com/1.1/account_activity/webhooks.jsonに対してGETでアクセスした場合も同様の結果となりました。

■やったこと
「TwitterWebService」ライブラリを入れました。
これを用いたツイートの投稿は上手くいっているので、APIキーとAPIシークレットキーは正常に設定出来ていると思います。

//ツイートを行う(成功する)
function postTweet(postMessage) {
  var service  = twitter.getService();
  var endPointUrl = 'https://api.twitter.com/1.1/statuses/update.json';

  var response = service.fetch(endPointUrl, {
    method: 'post',
    payload: {
      status: postMessage
    }
  });
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正の依頼

  • macaron_xxx

    2019/12/09 18:18

    何を解決するわけではないですが、
    {"code":214,"message":"Non-200 response code during CRC GET request (i.e. 404, 500, etc)."}
    これは200以外が返ってきてるぜ
    {"code":214,"message":"Webhook URL does not meet the requirements. Invalid CRC token or json response format."}
    これは、Webhook URLがなんか変だぜ(要件を満たしてない)
    ということですので、どちらもそもそもおかしいってことですね。

    キャンセル

  • sakura_hana

    2019/12/09 20:53

    それは分かっています。
    return 'service';(GASの場合返却無し扱い?)だと「CRCトークンが正しくない」と言っているのでコード200は返って来ていそう(このエラーが出るのは正しい処理)、
    でもContentServiceを返そうとするとコード200ではない扱いになる、というのが不思議でして。
    ダミー文字列の返却に成功しているならContentServiceを返した場合でも「Invalid CRC token〜」が返って来る筈なのにどうしてだ?と思っている次第です。

    キャンセル

  • macaron_xxx

    2019/12/09 20:58

    > return 'service';(GASの場合返却無し扱い?)だと「CRCトークンが正しくない」と言っているのでコード200は返って来ていそう(このエラーが出るのは正しい処理)
    そんなことないです。200が返ってなくてもこのエラーはでます。

    キャンセル

  • sakura_hana

    2019/12/10 10:22

    そうだとすると、何が返って来ていると予想されますか?(200以外なら「Non-200 response code〜」になるかと思っていたのですが)

    キャンセル

まだ回答がついていません

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

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

関連した質問

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