1
0

More than 1 year has passed since last update.

DiscordのWebhookでNotionのURLがうまく表示されない件の対応メモ

Last updated at Posted at 2023-08-08

こんな感じの通知を送りたいなと思った時にWebhookで送信するとうまくいかなかったという話です。

  • 理想

スクリーンショット 2023-08-05 17.38.34.png

  • 現実

スクリーンショット 2023-08-08 23.29.57.png

こんな感じでURLがうまく表示されません。

表示されないだけでなくクリックしても無効なリンクになってしまっています。

NotionのページURLに-_-という箇所がある

実際には_が悪さをしてそうでした。

以下はコードの試した時の一部抜粋です。

  • パターン1
const sendMsg = `[最終更新: ${editTimeJP}] ${studentName}さんのページ( ${update.url})を${update.block.last_edited_user?.name}さんが更新。 ${update.block.text} \n\n`;
  • パターン2
const sendMsg = `[最終更新: ${editTimeJP}] ${studentName}さんの[メンタリング情報](${update.url})を${update.block.last_edited_user?.name}さんが更新。 ${update.block.text} \n\n`;

という感じで( https://~~~~~ )やマークダウンにして[テキスト](https://~~~~~)といった指定でもうまくいかず、最初に貼った画像のように_が消え去ってURLは開けない状態になってました。

ユーザー名にも_が含まれていた

PO0000-○○さん_詳細といったDBのレコードタイトル付けになっていて、PO0000-○○さん_詳細さんの情報を更新しました。 https://hogehoge.com/hoge-_-hogehoge といったURLになっていました。

これによって_と_で囲まれる部分が発生してマークダウンとして機能してしまってうまく表示できない といった状態になってました。

const sendMsg = `${studentName}さんの_[対象ページ](${update.url})  \n`;

といった形で_をつけた上でURLを展開するとURLの展開前に一旦_のブロックが閉じられるので次のURL部分はちゃんとURLとして認識されるといった流れのようでした。

SQLインジェクションっぽいですね。

ユーザー名側の_を先に消しておく

結果どうなったかというと、ユーザー名側の"_詳細"の部分をsplitして削除する処理を挟み、、

const studentName = (update.studentName) ? update.studentName.split('_')[0] : '';

マークダウンの[テキスト](URL)の形式にしてあげることで回避できました。

const sendMsg = `[最終更新: ${editTimeJP}] ${studentName}さんの[メンタリング情報](${update.url})を${update.block.last_edited_user?.name}さんが更新。 ${update.block.text} \n\n`

まとめ - _が入るURL注意

1回のDiscord Webhookに送る文章を複数の変数を展開して作る時には_などが含まれてしまってないかを確認しましょう。自戒。

~はURLになることはほぼない気もするけど、*-_は注意したいなと思いました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0