SendGridアカウントの罠
SendGridアカウントの罠
現在SendGridのアカウントは現在2つの提供元から作成できる
構造計画研究所 : https://sendgrid.kke.co.jp/
Twilio : https://www.twilio.com/ja-jp/products/email-api
がどちらも同じ機能が提供されているわけではない
2つのアカウントで作成されたAPIのscopesを比較する
構造計画研究所、Twilio双方ともFull Accessの権限で作成されたAPIの権限を比較する。
APIエンドポイント https://api.sendgrid.com/v3/scopes
構造計画研究所のSendGridアカウントで叩いた結果
{
"scopes": [
"2fa_required",
"access_settings.activity.read",
"access_settings.whitelist.create",
"access_settings.whitelist.delete",
"access_settings.whitelist.read",
"access_settings.whitelist.update",
"alerts.create",
"alerts.delete",
"alerts.read",
"alerts.update",
"api_keys.create",
"api_keys.delete",
"api_keys.read",
"api_keys.update",
"asm.groups.create",
"asm.groups.delete",
"asm.groups.read",
"asm.groups.suppressions.create",
"asm.groups.suppressions.delete",
"asm.groups.suppressions.read",
"asm.groups.suppressions.update",
"asm.groups.update",
"asm.suppressions.global.create",
"asm.suppressions.global.delete",
"asm.suppressions.global.read",
"asm.suppressions.global.update",
"browsers.stats.read",
"categories.create",
"categories.delete",
"categories.read",
"categories.stats.read",
"categories.stats.sums.read",
"categories.update",
"clients.desktop.stats.read",
"clients.phone.stats.read",
"clients.stats.read",
"clients.tablet.stats.read",
"clients.webmail.stats.read",
"credentials.create",
"credentials.delete",
"credentials.read",
"credentials.update",
"design_library.create",
"design_library.delete",
"design_library.read",
"design_library.update",
"devices.stats.read",
"di.bounce_block_classification.read",
"geo.stats.read",
"mail.batch.create",
"mail.batch.delete",
"mail.batch.read",
"mail.batch.update",
"mail.send",
"mail_settings.address_whitelist.create",
"mail_settings.address_whitelist.delete",
"mail_settings.address_whitelist.read",
"mail_settings.address_whitelist.update",
"mail_settings.bcc.create",
"mail_settings.bcc.delete",
"mail_settings.bcc.read",
"mail_settings.bcc.update",
"mail_settings.bounce_purge.create",
"mail_settings.bounce_purge.delete",
"mail_settings.bounce_purge.read",
"mail_settings.bounce_purge.update",
"mail_settings.footer.create",
"mail_settings.footer.delete",
"mail_settings.footer.read",
"mail_settings.footer.update",
"mail_settings.forward_bounce.create",
"mail_settings.forward_bounce.delete",
"mail_settings.forward_bounce.read",
"mail_settings.forward_bounce.update",
"mail_settings.forward_spam.create",
"mail_settings.forward_spam.delete",
"mail_settings.forward_spam.read",
"mail_settings.forward_spam.update",
"mail_settings.plain_content.create",
"mail_settings.plain_content.delete",
"mail_settings.plain_content.read",
"mail_settings.plain_content.update",
"mail_settings.read",
"mail_settings.spam_check.create",
"mail_settings.spam_check.delete",
"mail_settings.spam_check.read",
"mail_settings.spam_check.update",
"mail_settings.template.create",
"mail_settings.template.delete",
"mail_settings.template.read",
"mail_settings.template.update",
"mailbox_providers.stats.read",
"marketing_campaigns.create",
"marketing_campaigns.delete",
"marketing_campaigns.read",
"marketing_campaigns.update",
"messages.read",
"partner_settings.new_relic.create",
"partner_settings.new_relic.delete",
"partner_settings.new_relic.read",
"partner_settings.new_relic.update",
"partner_settings.read",
"partner_settings.sendwithus.create",
"partner_settings.sendwithus.delete",
"partner_settings.sendwithus.read",
"partner_settings.sendwithus.update",
"recipients.erasejob.create",
"recipients.erasejob.read",
"sender_verification_eligible",
"signup.trigger_confirmation",
"stats.global.read",
"stats.read",
"suppression.blocks.create",
"suppression.blocks.delete",
"suppression.blocks.read",
"suppression.blocks.update",
"suppression.bounces.create",
"suppression.bounces.delete",
"suppression.bounces.read",
"suppression.bounces.update",
"suppression.create",
"suppression.delete",
"suppression.invalid_emails.create",
"suppression.invalid_emails.delete",
"suppression.invalid_emails.read",
"suppression.invalid_emails.update",
"suppression.read",
"suppression.spam_reports.create",
"suppression.spam_reports.delete",
"suppression.spam_reports.read",
"suppression.spam_reports.update",
"suppression.unsubscribes.create",
"suppression.unsubscribes.delete",
"suppression.unsubscribes.read",
"suppression.unsubscribes.update",
"suppression.update",
"teammates.create",
"teammates.delete",
"teammates.read",
"teammates.update",
"templates.create",
"templates.delete",
"templates.read",
"templates.update",
"templates.versions.activate.create",
"templates.versions.activate.delete",
"templates.versions.activate.read",
"templates.versions.activate.update",
"templates.versions.create",
"templates.versions.delete",
"templates.versions.read",
"templates.versions.update",
"tracking_settings.click.create",
"tracking_settings.click.delete",
"tracking_settings.click.read",
"tracking_settings.click.update",
"tracking_settings.google_analytics.create",
"tracking_settings.google_analytics.delete",
"tracking_settings.google_analytics.read",
"tracking_settings.google_analytics.update",
"tracking_settings.open.create",
"tracking_settings.open.delete",
"tracking_settings.open.read",
"tracking_settings.open.update",
"tracking_settings.read",
"tracking_settings.subscription.create",
"tracking_settings.subscription.delete",
"tracking_settings.subscription.read",
"tracking_settings.subscription.update",
"ui.confirm_email",
"ui.provision",
"ui.signup_complete",
"user.account.read",
"user.credits.read",
"user.email.read",
"user.profile.read",
"user.scheduled_sends.create",
"user.scheduled_sends.delete",
"user.scheduled_sends.read",
"user.scheduled_sends.update",
"user.settings.enforced_tls.read",
"user.settings.enforced_tls.update",
"user.timezone.create",
"user.timezone.delete",
"user.timezone.read",
"user.timezone.update",
"user.username.read",
"user.webhooks.event.settings.create",
"user.webhooks.event.settings.delete",
"user.webhooks.event.settings.read",
"user.webhooks.event.settings.update",
"user.webhooks.event.test.create",
"user.webhooks.event.test.delete",
"user.webhooks.event.test.read",
"user.webhooks.event.test.update",
"user.webhooks.parse.settings.create",
"user.webhooks.parse.settings.delete",
"user.webhooks.parse.settings.read",
"user.webhooks.parse.settings.update",
"user.webhooks.parse.stats.read",
"whitelabel.create",
"whitelabel.delete",
"whitelabel.read",
"whitelabel.update"
]
}
TwilioのSendGridアカウントで叩いた結果
{
"scopes": [
"2fa_required",
"access_settings.activity.read",
"access_settings.whitelist.create",
"access_settings.whitelist.delete",
"access_settings.whitelist.read",
"access_settings.whitelist.update",
"alerts.create",
"alerts.delete",
"alerts.read",
"alerts.update",
"api_keys.create",
"api_keys.delete",
"api_keys.read",
"api_keys.update",
"asm.groups.create",
"asm.groups.delete",
"asm.groups.read",
"asm.groups.suppressions.create",
"asm.groups.suppressions.delete",
"asm.groups.suppressions.read",
"asm.groups.suppressions.update",
"asm.groups.update",
"asm.suppressions.global.create",
"asm.suppressions.global.delete",
"asm.suppressions.global.read",
"asm.suppressions.global.update",
"browsers.stats.read",
"categories.create",
"categories.delete",
"categories.read",
"categories.stats.read",
"categories.stats.sums.read",
"categories.update",
"clients.desktop.stats.read",
"clients.phone.stats.read",
"clients.stats.read",
"clients.tablet.stats.read",
"clients.webmail.stats.read",
"credentials.create",
"credentials.delete",
"credentials.read",
"credentials.update",
"design_library.create",
"design_library.delete",
"design_library.read",
"design_library.update",
"devices.stats.read",
"email_testing.read",
"email_testing.write",
"geo.stats.read",
"ips.pools.ips.read",
"mail.batch.create",
"mail.batch.delete",
"mail.batch.read",
"mail.batch.update",
"mail.send",
"mail_settings.address_whitelist.create",
"mail_settings.address_whitelist.delete",
"mail_settings.address_whitelist.read",
"mail_settings.address_whitelist.update",
"mail_settings.bcc.create",
"mail_settings.bcc.delete",
"mail_settings.bcc.read",
"mail_settings.bcc.update",
"mail_settings.bounce_purge.create",
"mail_settings.bounce_purge.delete",
"mail_settings.bounce_purge.read",
"mail_settings.bounce_purge.update",
"mail_settings.footer.create",
"mail_settings.footer.delete",
"mail_settings.footer.read",
"mail_settings.footer.update",
"mail_settings.forward_bounce.create",
"mail_settings.forward_bounce.delete",
"mail_settings.forward_bounce.read",
"mail_settings.forward_bounce.update",
"mail_settings.forward_spam.create",
"mail_settings.forward_spam.delete",
"mail_settings.forward_spam.read",
"mail_settings.forward_spam.update",
"mail_settings.plain_content.create",
"mail_settings.plain_content.delete",
"mail_settings.plain_content.read",
"mail_settings.plain_content.update",
"mail_settings.read",
"mail_settings.spam_check.create",
"mail_settings.spam_check.delete",
"mail_settings.spam_check.read",
"mail_settings.spam_check.update",
"mail_settings.template.create",
"mail_settings.template.delete",
"mail_settings.template.read",
"mail_settings.template.update",
"mailbox_providers.stats.read",
"marketing.automation.read",
"marketing.read",
"messages.read",
"partner_settings.new_relic.create",
"partner_settings.new_relic.delete",
"partner_settings.new_relic.read",
"partner_settings.new_relic.update",
"partner_settings.read",
"partner_settings.sendwithus.create",
"partner_settings.sendwithus.delete",
"partner_settings.sendwithus.read",
"partner_settings.sendwithus.update",
"recipients.erasejob.create",
"recipients.erasejob.read",
"sender_verification_eligible",
"signup.trigger_confirmation",
"stats.global.read",
"stats.read",
"subusers.stats.monthly.read",
"subusers.stats.read",
"subusers.stats.sums.read",
"suppression.blocks.create",
"suppression.blocks.delete",
"suppression.blocks.read",
"suppression.blocks.update",
"suppression.bounces.create",
"suppression.bounces.delete",
"suppression.bounces.read",
"suppression.bounces.update",
"suppression.create",
"suppression.delete",
"suppression.invalid_emails.create",
"suppression.invalid_emails.delete",
"suppression.invalid_emails.read",
"suppression.invalid_emails.update",
"suppression.read",
"suppression.spam_reports.create",
"suppression.spam_reports.delete",
"suppression.spam_reports.read",
"suppression.spam_reports.update",
"suppression.unsubscribes.create",
"suppression.unsubscribes.delete",
"suppression.unsubscribes.read",
"suppression.unsubscribes.update",
"suppression.update",
"teammates.create",
"teammates.delete",
"teammates.read",
"teammates.update",
"templates.create",
"templates.delete",
"templates.read",
"templates.update",
"templates.versions.activate.create",
"templates.versions.activate.delete",
"templates.versions.activate.read",
"templates.versions.activate.update",
"templates.versions.create",
"templates.versions.delete",
"templates.versions.read",
"templates.versions.update",
"tracking_settings.click.create",
"tracking_settings.click.delete",
"tracking_settings.click.read",
"tracking_settings.click.update",
"tracking_settings.google_analytics.create",
"tracking_settings.google_analytics.delete",
"tracking_settings.google_analytics.read",
"tracking_settings.google_analytics.update",
"tracking_settings.open.create",
"tracking_settings.open.delete",
"tracking_settings.open.read",
"tracking_settings.open.update",
"tracking_settings.read",
"tracking_settings.subscription.create",
"tracking_settings.subscription.delete",
"tracking_settings.subscription.read",
"tracking_settings.subscription.update",
"ui.confirm_email",
"ui.provision",
"ui.signup_complete",
"user.account.read",
"user.credits.read",
"user.email.read",
"user.profile.create",
"user.profile.delete",
"user.profile.read",
"user.profile.update",
"user.scheduled_sends.create",
"user.scheduled_sends.delete",
"user.scheduled_sends.read",
"user.scheduled_sends.update",
"user.settings.enforced_tls.read",
"user.settings.enforced_tls.update",
"user.timezone.create",
"user.timezone.delete",
"user.timezone.read",
"user.timezone.update",
"user.username.read",
"user.webhooks.event.settings.create",
"user.webhooks.event.settings.delete",
"user.webhooks.event.settings.read",
"user.webhooks.event.settings.update",
"user.webhooks.event.test.create",
"user.webhooks.event.test.delete",
"user.webhooks.event.test.read",
"user.webhooks.event.test.update",
"user.webhooks.parse.settings.create",
"user.webhooks.parse.settings.delete",
"user.webhooks.parse.settings.read",
"user.webhooks.parse.settings.update",
"user.webhooks.parse.stats.read",
"whitelabel.create",
"whitelabel.delete",
"whitelabel.read",
"whitelabel.update"
]
}
わかりにくいので次に差分を表示する。
差分
左が構造計画研究所 右がTwilio
提供される機能と権限に差がある
なぜ
構造計画研究所に問い合わせてみた。以下引用。
現在SendGridではNew Marketing Campaigns機能とLegacy Marketing Campaigns機能を提供しており、
弊社経由でご契約いただいたアカウントでは、
Legacy Marketing Campaigns機能のみが利用可能です。
構造計画研究所でアカウントを作成済みの場合、Twilio SendGridは使える?
同じアカウントを作っている場合エラーになる。
Twilio SendGridのConsoleに移動してログインすると白画面で止まる。
どうすればいいか不明なので問い合わせ予定。
この場合TwilioのSendGridは使えないので詰み。
アカウントを作り直さないとTwilio SendGridの機能は使えなさそう。
個人アカウントで作り直したらできた。
経緯
ChatGPTにSendGridの購読登録、購読解除の関数を作らせていたが
自分が見ていた構造計画研究所のAPIにないエンドポイント(/v3/marketing/contacts/search)を指定していたため。
構造計画研究所で発行したAPIキーでエンドポイントを叩いた結果
{
"errors": [
{
"message": "access forbidden. please ensure you have the correct scopes defined. see https://docs.sendgrid.com/api-reference/how-to-use-the-sendgrid-v3-api/authorization#api-key-permissions-list"
}
]
}
Twilioのドキュメントにはある
構造計画研究所のドキュメントにはない
ChatGPTくんのお陰で気づいた。
まとめ
SendGridアカウントを作る際は提供される機能(特にMarketing Campaigns機能)を確認してからアカウントを作成しよう。
どこにも書いてないから回避不能なんですがそれは...(困惑)
初投稿です。稚拙な文章ですが誰かの助けになれば幸いです。
Discussion