見出し画像

discordにグーグルフォームの投稿を連携したい

発端

問い合わせについて。

  • 問い合わせ内容を、フリースタイルではなく一定の項目に沿って書かせたい

  • 全体知にするために、投稿された内容はdiscordで共有したい

  • 問い合わせ番号振ってね

  • 可能なら、フォーラムチャットでやって

OK、やってみましょう
なにせ、chatGPTっていう味方もいるからね!

ベース(参考URL)

ぶっちゃけ、ほぼこれで出来る。

変更したところ①連番を振るなどの表記加工する


連番付与

連番自体は難しくない。

=ArrayFormula(if(B2:B="",,"Q" & text(row(B2:B)-1,"0000")))

こういう数式をA1に書けば、「行数-1を、"Q0000"の形式に変換する」ができる。
(1行目が見出し、2行目以降がデータ想定。
 同様に、A列が連番、B列以降が中身の想定)

別シートで、連携情報生成

ほかにも加工したかったので、フォームと連携しているシートでどうこうするのではなく、同ブック別シートにした。


なので、利用するシートはシート名で明記。
この書き方で、「一番最後に書き込まれた行のA列からC列まで」の範囲指定が可能。

    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = spreadsheet.getSheetByName("送付情報"); 

    const lastRow = sheet.getLastRow();
    const range = sheet.getRange(`A${lastRow}:C${lastRow}`);

※問い合わせ重複ないだろう前提の書き方なので、めっちゃ問い合わせがくるようになったら、「discord連携フラグ列」みたいなのを作った方がいいかも。

難点:トリガー設定

ここで迷ったのが、「トリガーはどう設定すればいいのか」ということ。
変更されたとき?とか色々変えたけどうまくいかず…

結論は「フォーム送信時」で大丈夫だった。

フォーム送信時のイベントで、フォームの回答1シートに書きこまれる→その時点で送付情報シートにも反映される→送付情報シートの内容をもとにdiscordに反映する…という流れなのかな。

計算式が早いからなりたっているだけかも?

変更したところ②フォーラムチャンネルなので、スレッド名を明記

フォーラムチャンネルとは




Exception: Request failed for https://discord.com returned code 400. Truncated server response: {"message": "Webhooks posted to forum channels must have a thread_name or thread_id", "code": 220001} (use muteHttpExceptions option to examine full response)

このエラーは、DiscordのWebhook APIを使用してフォーラムチャンネルに投稿しようとしたときに発生する可能性があります。エラーのメッセージによると、フォーラムチャンネルに投稿する際には、スレッドの名前またはスレッドIDが必要であることが示されています。

したがって、Webhookのペイロードにthread_nameまたはthread_idを追加して、スレッドを指定する必要があります。

chatGPT

とのことなので、json_dataの要素に以下を追加

"thread_name": "My Thread"


参考:


変更したところ③ メンションをつける

担当者にわかりやすいように、メンション付与。
ユーザ名ではなく、内部で保持しているIDを書くらしい。

ここ参考。


変更したところ④ 表記にembedsを使う


情報がおおいので。
embedsについて、概要はは上の記事参考。


もっと技術的なことはこちらの記事。


けっこうごちゃごちゃ大変で…
いい練習サイトがあったので、また見つけたら記載する。

jsonとして形式があっているかはここ使って確認


結論

上司に「いいじゃん」をもらえました!
万歳!


有用な情報をweb上で開示してくださる方々に感謝を。
ハブ記事としてうちの記事がお役に立てれば幸いです。


この記事が気に入ったらサポートをしてみませんか?