Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SendGridと連携して顧客にマーケティングメールを送るZendeskアプリを作ってみた

 SendGridと連携して顧客にマーケティングメールを送るZendeskアプリを作ってみた

入井 啓太

August 22, 2023
Tweet

More Decks by 入井 啓太

Other Decks in Programming

Transcript

  1. Zendeskって何? 4 • Zendesk Support • Zendesk Guide • Zendesk

    Explore • Zendesk Talk • Zendesk Chat チケットというシステムで、問い合わせ対応 自動化や他製品との連携など様々なカスタマイズが可能 操作がシンプルで簡単
  2. Zendesk Suite全体のイメージ 5 ・・・ オムニチャネル FAQサイト お客様 お客様 他ツールと連携 (Slackなど)

    自社 問い合わせの データを可視化 オペレーターとの コンタクト チャット ボット チケット オペレーター エンジニア 自己解決 Zendesk • オペレーターの作業効率向上 • オムニチャネルで幅広く対応 • 課題解決のためのデータの可視化
  3. メリットとデメリット 10 SendGridとの連携 Zendesk Sellとの連携 Zendeskアプリとの連携 (Proactive Campaigns) メリット ・操作が簡単

    ・メールの到達性が高い ・一度に送信できる数が多い ・メールを開いた数が既読マー クで分かる ・Supportの操作と近い ・Zendeskのプラットフォーム上 でそのまま実行できる ・導入までが速い デメリット ・ZendeskとSendGrid両方で コストがかかる ・アプリの作成が必要 ・SupportからSellへ顧客情報 を送る手間がかかる ・一番下のプラン(Zendesk Sell Team)ではできない ・一度に送れる数が少ない (24時間以内に300通/1ユー ザー) ・プランによって一度に 1000通 までしか送れない ・複雑なメールが送れない
  4. 実現したいことの流れ 11 Zendesk SendGrid 一斉送信 顧客情報一覧   TEL:・・・   mail:・・・   TEL:・・・   mail:・・・

      TEL:・・・   mail:・・・   TEL:・・・   mail:・・・ 宛先  ⇒ Zendeskの顧客一覧 一斉送信のメール作成 Zendeskアプリ API 顧客情報
  5. ZCLIのコマンド例 14 zcli apps:new • プロジェクト初期ファイル生成 • オプションによりReactプロジェクトも作成可能 zcli apps:server

    • ローカルでの開発中アプリの実行 • アプリの操作自体はZendesk上で行う zcli apps:create • アプリのビルドとZendesk環境へのデプロイ
  6. プロジェクトのTypeScript化 16 以下の対応によってTypeScript化 • npmでTS関係パッケージインストール • tsconfig作成 • webpack設定変更 ◦

    Babelでトランスパイル • ついでにESLint, Prettierも導入 • 既存コードのTypeScript対応 ◦ アプリの起動部分はJSのまま ◦ ZAF Clientもany型使用で妥協
  7. コード紹介 - Zendeskの顧客情報取得 18 export const GetEndUsers = async (client:

    any) => { const options = { url: "/api/v2/users.json", type: "GET", autoRetry: false, data: { role: "end-user", }, }; const result = await client.request(options); return result.users.map((user: any) => ({ id: user.id, name: user.name, email: user.email, })); }; ZAF経由でZendesk APIに接続し、顧 客データを取得 取得した顧客データから必要なプロパ ティのみ取得
  8. コード紹介 - SendGridのAPI呼び出し 19 export const sendEmailBySendGrid = async (

    client: any, emails: string[], text: string ) => { const options = { url: "https://api.sendgrid.com/v3/mail/send", type: "POST", headers: { Authorization: "Bearer {{setting.sendgridApiKey}}", }, contentType: "application/json", data: (次ページで解説), secure: true, }; const res = await client.request(options); }; 引数として、宛先アドレスの配列とメー ル本文文字列受取り ZAFの機能でZendesk外部の SendGrid API呼び出し
  9. コード紹介 - SendGridのAPI呼び出し 20 data: JSON.stringify({ personalizations: [ { to:

    emails.map((email) => ({email})), subject: "一斉送信テストメール", }, ], from: { email: "[email protected]", }, content: [ { type: "text/plain", value: text, }, ], }), 宛先アドレス指定 メールタイトル指定 送信元アドレス指定 メール本文情報指定
  10. まとめ 22 Zendeskで一斉送信を実現する方法 • Zendesk Support ✖ SendGrid(今回採用) ◦ 簡単な操作で一斉送信ができる

    ◦ アプリ作成が手間だが、一度作れば後は簡単 • Zendesk アプリ • Zendesk Sell