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

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

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

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

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Q&A

0回答

546閲覧

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

sakura_hana

総合スコア11427

Google Apps Script

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

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

0グッド

0クリップ

投稿2019/12/07 08:02

編集2019/12/09 06:37

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

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側のコードは以下の通りです。とりあえずテストがてら固定文字列を返しています。

Javascript

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

ちなみに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."}
が返って来てしまいます。
修正や確認すべき点がありましたらご指摘頂けると助かります。

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

Javascript

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

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

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

Javascript

1//ツイートを行う(成功する) 2function postTweet(postMessage) { 3 var service = twitter.getService(); 4 var endPointUrl = 'https://api.twitter.com/1.1/statuses/update.json'; 5 6 var response = service.fetch(endPointUrl, { 7 method: 'post', 8 payload: { 9 status: postMessage 10 } 11 }); 12}

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

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

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

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

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

macaron_xxx

2019/12/09 09: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 11:53

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

2019/12/09 11:58

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

2019/12/10 01:22

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問