3行で説明
- Googleアドセンスやるには問い合わせorメールアドレスの公開が必要
- お問い合わせきても分からない気がする
- GAS(Google App Script)使って、DiscordへWebhook使ってメンション付きで通知されるようにしてみよっと
きっかけ
Googleアドセンスって人生で関わったことがないけれど、ちょっとやってみたいなぁと思ってた。ちらっと調べてみると、はてなが公式で分かりやすそうな資料を公開してたので、挑戦してみようと考えた。資料をみるに連絡先が必要そうだが、メールアドレスは迷惑メールきそうで嫌。その場合、お問い合わせを作る必要がある。しかし、お問い合わせ来たのに気づかないのでは...。
説明しないこと
slackやDiscordのUserIDの取得方法は詳しく書かない。必要があれば下記を参照してほしい。
ユーザー-サーバー-メッセージIDはどこで見つけられる
SlackのIncoming Webhooksでメンションを飛ばす方法 - Qiita
Webhookの取得方法も同様詳しく書かない。必要があれば下記を参照してほしい。
タイトル: Webhooksへの序章 - Discord
Slack での Incoming Webhook の利用 | Slack
GAS作成時、承認が必要になるが、詳しく書かない。必要があれば下記を参照してほしい。
【初心者向けGAS】スクリプト実行時の「承認」でびっくりしないために
やったこと
(1)Google Formsでお問い合わせのフォームを作成
(2)お問い合わせのフォームにスクリプトを設定
送信の右にあるメニュー的なやつで「スクリプトエディタ」を選択。
コード.gsが作成されているので、その中身を以下に書き換え(WebhookのURL、メッセージは適宜変更)。
function onFormSubmit(e) { Logger.log('フォームが送信されたぞ'); const webhookurl = 'https://discord.com/api/webhooks/xxxxxxxxxxxxxxxxxxxxxxxxxxxxx';// DiscordかSlackのWebhookをとってきてね! const user_name = 'お問い合わせフォーム';// 好きな名前に変更してね! const message_text = '<@!9999999999999> お問い合わせが来ました!';//好きなメッセージに変更してね! 数字の部分は自分のIDにしてね! postDiscord(webhookurl, user_name, message_text); // postSlack(webhookurl, user_name, message_text);// slackがいいならこっちを使う }
左の+ボタンから「スクリプト」を選択し、utilsと名前をつける(最初utils.gsってつけたら、utils.gs.gsが作成されて涙目になった...)。
以下のコードを貼り付け(Discordの画像URLは適宜変更のこと)。
function postSlack(webhookurl, user_name, message_text) { if (!webhookurl){ return } if (!user_name){ user_name = 'Bot' } if (!message_text){ message_text = '' } // POSTの値 var requestPayload = { 'text': message_text, 'username': user_name } // リクエストヘッダー var requestHeaders = { 'Content-Type': 'application/json' } // リクエストオプション var requestOptions = { 'method' : 'post', 'payload' : JSON.stringify(requestPayload), 'headers' : requestHeaders } try { response = UrlFetchApp.fetch(webhookurl, requestOptions); Logger.log('postSlack-Finished!\n' + response); } catch(e) { Logger.log(e); } } function postDiscord(webhookurl, user_name, message_text) { if (!webhookurl){ return } if (!user_name){ user_name = 'Bot' } if (!message_text){ message_text = '' } const parse = 'full'; var requestPayload = { 'content': message_text, 'username' : user_name, 'avatar_url' : 'https://cdn.discordapp.com/attachments/792765244040675389/921661726863282176/pngegg.png',//好きな画像にしよう! 'parse' : parse }; // リクエストヘッダー var requestHeaders = { 'Content-Type': 'application/json' } const requestOptions = { 'method' : 'post', 'payload' : JSON.stringify(requestPayload), 'muteHttpExceptions': false, 'headers' : requestHeaders } try { response = UrlFetchApp.fetch(webhookurl, requestOptions); Logger.log('postDiscord-Finished!\n' + response); } catch(e) { Logger.log(e); } }
ここまで対応したら、一旦「onFormSubmit」メソッドを実行して、通知されるか確認する。
問題なさそうなら、「新しいデプロイ」からWebアプリとしてデプロイする。最初のやつだけ、本人確認やユーザー作成のスクリプトだけど大丈夫?みたいなものがくるのでOKしていく。
スクリプトのデプロイ(や承認)が完了したらこの手順は終了。
(3)フォームが送信されたらスクリプトが起動するようにトリガーを設定
左にカーソルを移動し、時計みたいなマーク(トリガー)をクリック。
実行する関数が「onFormSubmit」になっていることを確認し、イベントの種類を「フォーム送信時」に変更。保存する。
(4)フォームを送信してみて、想定通り動くことを確認
Google Formsに戻り、右上の目玉みたいなマーク(プレビュー)からフォームを開き、実際に送信してみる。ちゃんとDiscordにメッセージが来ていればOK。
終わりに
改めてGASって便利だなぁと思った。こんな記事書くのに1時間くらいかかってしまって悲しい。この記事が誰かの参考になれば嬉しい。