Sendgrid-nodejs: Tambahkan Dukungan Template Dinamis

Dibuat pada 24 Jul 2018  ·  30Komentar  ·  Sumber: sendgrid/sendgrid-nodejs

Ringkasan Masalah

Pada 24/7/2018, tim kami secara publik meluncurkan konten dinamis untuk template transaksional. Sekarang tersedia untuk semua pelanggan yang mengirim melalui v3 dari API Kirim Email kami. Ulangi daftar, tangani kondisional, dan lainnya, berkat dukungan asli untuk subset sintaks Handlebars!

Informasi lebih lanjut dapat ditemukan di pengumuman posting blog kami.

Saat ini Anda dapat menggunakan fitur ini dengan membuat badan permintaan secara manual seperti yang ditunjukkan di sini .

Sekarang, kita perlu membuat kode pembantu ( ini selesai ) dan contoh untuk SDK ini.

Kriteria penerimaan

  • [[SELESAI](https://github.com/sendgrid/sendgrid-nodejs/pull/691#issuecomment-407490342)] [Terapkan pembantu yang serupa dengan yang kami miliki untuk template lama](https://github.com /sendgrid/sendgrid-nodejs/blob/master/packages/mail/USE_CASES.md#transactional-templates)
  • Perbarui contoh USE_CASES.md untuk mendemonstrasikan Template Dinamis baru menggunakan helper dan beri nama ulang contoh saat ini menjadi Legacy

Dokumentasi

medium docs update

Komentar yang paling membantu

Harap perbarui dokumentasi Anda- Saya baru saja menghabiskan waktu satu jam untuk mencari tahu mengapa substitusi tidak berfungsi dengan API v3.

Semua 30 komentar

Harap perbarui dokumentasi Anda- Saya baru saja menghabiskan waktu satu jam untuk mencari tahu mengapa substitusi tidak berfungsi dengan API v3.

Saya minta maaf atas pengalaman buruk @jharris-code.

Saya telah menambahkan suara Anda ke masalah ini untuk membantunya mendapatkan prioritas. Saya pikir itu akan segera diperbarui karena kami memiliki PR #711.

Sangat konyol bahwa tidak adanya dokumentasi menghalangi pelepasan kode yang sebenarnya.

Hai @catamphetamine ,

Kode dirilis di v6.3.1 . Saya harap itu membantu, terima kasih!

Salam hangat,

Elmer

@thinkingserious Oh, keren, sebenarnya tidak terlintas di benak saya untuk memperbarui versi perpustakaan.
Saya akan mencobanya, thx.

Catatan untuk pengguna: saat menggunakan templat, berikan dynamic_template_data alih-alih substitutions .

Sekarang Anda harus mengubah "substitusi:" menjadi "dynamic_template_data:"

Dan template menggunakan setang tidak perlu lagi menentukan "substitusiWrappers"

Contoh ini dalam kasus penggunaan Anda masih menggunakan substitusi daripada dynamic_template_data. Tolong perbarui, saya pasti butuh beberapa jam bermain dengan SDK dan mencari sebelum saya menemukan utas ini. (Juga dokumen api Anda tidak menyebutkan apa pun tentang ini, yang juga tidak membantu.
Juga, substitusiWrappers tampaknya tidak berfungsi dengan dynamic_template_data sama sekali. Terlepas dari memasukkan pasangan nilai kunci substitutionWrappers: ['*|', '|*'] dalam objek pesan saya, hanya var template yang dibungkus dengan kurung kurawal yang diisi. (Apakah kalian sekarang dengan sengaja memaksa semua orang untuk menggunakan sintaks stang untuk template?)

Saya minta maaf @josh-yonomi,

Saya telah memperbarui dokumentasi berdasarkan masukan Anda.

Untuk template baru kami, mereka menggunakan sintaks setang. Template lawas masih berfungsi seperti sebelumnya.

Salam hangat,

Elmer

Saya menerima email tetapi penggantian tidak berfungsi. Apa yang bisa menyebabkan masalah?

const msg = {
    to: email,
    from: sendGridMail,
    templateId: emailTemplate.confirmationEmail,
    dynamic_template_data: {
      firstName: firstName,
      lastName: lastName,
      link: link
    }
  };

EDIT melalui @thinkingserious

Apakah Anda keberatan memberi tahu kami di mana masalahnya? Kami akan senang untuk memahami frustrasi Anda sehingga kami dapat meningkatkan.

@drav96 ,

Apakah Anda keberatan membagikan seperti apa template Anda?

Salam hangat,

Elmer

mengapa Anda menghapus karakter khusus di substitusiWrappers ??

dynamic_template_data: {
      'foo-bar': 'wtf',
      'bar_baz': 'wtf',
      'baz.bro': 'wtf',
      'foo': 'wtf'
    }

hanya {{foo}} mengembalikan wtf string dalam email.

Saya tidak yakin @larafale , tapi itu sepertinya tidak masuk akal. Melihat kode sumber untuk SDK ini, saya tidak melihat di mana kunci-kunci itu dimodifikasi.

Apakah Anda keberatan membuat masalah terpisah untuk masalah ini dan menyertakan seperti apa template HTML Anda? Saya akan menandai masalah baru sebagai bug dan mencoba mereproduksi dan memperbaikinya jika perlu.

Halo,

Jadi, saya mencoba mengirim email templat dinamis, namun, saya tidak dapat menggunakan substitusi atau dynamic_template_data .
Template saya memiliki tag seperti {{fullname}} atau {{date}} dan properti ini telah dikirim ke fungsi send :

const msg = {
        to,
        from,
        templateId: template.id,
        dynamic_template_data: substitutions,
    };

    return sgMail.send(msg)

Saya mengkonfirmasi bahwa objek substitutions memiliki properti yang tepat dengan nilai yang tepat tetapi substitusi tidak berfungsi.

Tahu apa yang saya lakukan salah?

Terima kasih.

@gianfelipe93
Strukturnya benar. Saya memiliki masalah yang sama.
Solusi saya adalah menghapus paket @sendgrid dari proyek saya dan menginstalnya lagi
Beri tahu saya jika itu berhasil untuk Anda
const msg= { to: email, from: sendGridMail, templateId: emailTemplate.requestDemoEmail, dynamic_template_data: { name: data.name, email: data.email, } };

@drav96 terima kasih sobat, ini berfungsi sekarang

Menambahkan apa yang saya harap akan menjadi beberapa dokumentasi definitif setelah menghabiskan satu jam lagi dari waktu saya untuk ini. (Pertama, terima kasih kepada semua orang yang membuang waktu berjam-jam sebelum saya.)

  1. Jika id template Anda dimulai dengan d- , maka substitutions tidak akan berfungsi, dan Anda harus menggunakan CAMEL-CASE dynamicTemplateData (lihat di sini , di mana mereka mengonversi kunci snake_case menjadi camelCase )
  2. Jika template Anda dimulai dengan d- , maka setSubstitutionWrappers diam-diam diabaikan, dan Anda harus menggunakan {{ dan }} di template Anda

Menambahkan apa yang saya harap akan menjadi beberapa dokumentasi definitif setelah menghabiskan satu jam lagi dari waktu saya untuk ini. (Pertama, terima kasih kepada semua orang yang membuang waktu berjam-jam sebelum saya.)

  1. Jika id template Anda dimulai dengan d- , maka substitutions tidak akan berfungsi, dan Anda harus menggunakan CAMEL-CASE dynamicTemplateData (lihat di sini , di mana mereka mengonversi kunci snake_case menjadi camelCase )
  2. Jika template Anda dimulai dengan d- , maka setSubstitutionWrappers diam-diam diabaikan, dan Anda harus menggunakan {{ dan }} di template Anda

Dalam kasus saya ini bekerja dengan dynamic_template_data bahkan jika dalam template id huruf d-

Ya, ini berfungsi dengan kunci case ular, tetapi tampaknya para pengembang telah berkomitmen secara internal untuk case unta (lihat baris yang saya tautkan dalam laporan saya di atas). Jadi, saya akan merekomendasikan semua kode baru menggunakan kasing unta.

Halo @kael-shipman,

Terima kasih telah meluangkan waktu untuk membantu, kami sangat menghargainya!

Apakah Anda kebetulan melihat dokumentasi ini ? Jika tidak, maukah Anda menjelaskan jalan penemuan Anda yang menyebabkan waktu terbuang sia-sia. Saya ingin itu tidak pernah terjadi lagi dan saya minta maaf atas pengalaman yang buruk.

Salam hangat,

Elmer

@thinkingserious , terima kasih atas pengertian dan kesediaan Anda untuk memperbaiki situasi. Dan maaf untuk mendapatkan potongan di sana. Telah memiliki hari looooooooooooooong;).

Bagaimanapun, masalahnya bukan pada dokumentasi yang benar (ish) ada di suatu tempat, tetapi banyak dokumentasi lama masih terjebak dalam pencarian Google. Saya melakukan pencarian untuk "bidang templat sendgrid" (baru saja) dan hasil non-iklan pertama adalah this , yang menurut semua indikasi adalah dokumentasi resmi, tetapi jelas sudah ketinggalan zaman. Tidak hanya itu, tetapi juga memiliki dua format substitusi yang berbeda ( -firstName- dan %firstName% ) dan hanya mengatakan "apa yang Anda gunakan mungkin bergantung pada pustaka SDK yang Anda gunakan", yang tampaknya sangat salah, mengingat bahwa semua pustaka SDK mungkin akan menunjuk ke kuil tunggal yang sama (yang hanya memiliki satu gaya tag substitusi).

Dalam pengalaman saya dengan sendgrid, sementara saya sangat menghargai apa yang telah dibangun, kebingungan dokumentasi ini sebenarnya adalah aturannya, bukan pengecualian. Saya tahu itu mungkin meluncur maju seperti halnya dunia perangkat lunak lainnya, tetapi akan menyenangkan untuk mengambil sekitar satu bulan untuk menormalkan semua dokumentasi, meletakkan nomor versi di atasnya, dll., dan mungkin melakukan sesuatu tentang hits Google teratas.

Bagaimanapun, terima kasih sekali lagi!

Juga, dokumentasi yang Anda tautkan masih menunjukkan dynamic_template_data dalam kasus ular, dan jika itu benar, maka saya tidak yakin mengapa kode itu sendiri tampaknya mengubahnya menjadi camelCase. Seperti disebutkan di atas, saya menyadari bahwa kasus ular berfungsi, tetapi mengingat kodenya, sepertinya dokumentasi tidak merekomendasikan untuk menggunakannya.

Halo @kael-shipman,

Terima kasih telah meluangkan waktu untuk memberikan umpan balik yang mendetail!

Sehubungan dengan tautan yang Anda berikan, dokumentasi tersebut mengacu pada API SMTP SendGrid kami, bukan API REST SendGrid v3 yang didukung SDK ini. Yang mengatakan, Anda seharusnya tidak diharapkan untuk mengetahuinya. Saya akan menyampaikan masalah ini kepada tim dokumentasi kami untuk melihat apakah ada cara untuk memperjelasnya.

Kami baru saja memperbarui dan meluncurkan kembali dokumentasi open source kami . Saya harap Anda merasa lebih mudah untuk menavigasi.

Saya akan memperbaiki README untuk menggunakan camelCase untuk konsistensi. Terima kasih telah menangkap itu dan membawanya ke perhatian kami!

Sekali lagi terima kasih dan sebagai tanda penghargaan kami atas umpan balik terperinci Anda, kami ingin menawarkan barang curian kepada Anda. Menikmati!

Salam hangat,

Elmer

Hei keren, terima kasih :D

Pada Selasa, 18 Sep 2018 pukul 18:09 Elmer Thomas [email protected]
menulis:

Halo @kael-shipman https://github.com/kael-shipman ,

Terima kasih telah meluangkan waktu untuk memberikan umpan balik yang mendetail!

Sehubungan dengan tautan yang Anda berikan, dokumentasi itu adalah referensi
ke API SMTP SendGrid kami, bukan API REST SendGrid v3 yang SDK ini
mendukung. Yang mengatakan, Anda seharusnya tidak diharapkan untuk mengetahuinya. saya akan membawa
masalah ini menjadi perhatian tim dokumentasi kami untuk melihat apakah ada
cara untuk membuatnya jelas.

Kami baru saja memperbarui dan meluncurkan kembali dokumentasi open source kami
https://sendgrid.com/blog/how-to-get-the-most-from-sendgrids-new-knowledge-center/ .
Saya harap Anda merasa lebih mudah untuk menavigasi.

Saya akan memperbaiki README untuk menggunakan camelCase untuk konsistensi. Terima kasih untuk
menangkap itu dan membawanya ke perhatian kita!

Sekali lagi terima kasih dan sebagai tanda penghargaan kami atas detail Anda
umpan balik, kami ingin menawarkan beberapa barang curian
https://dx.sendgrid.com/swag . Menikmati!

Salam hangat,

Elmer


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/sendgrid/sendgrid-nodejs/issues/703#issuecomment-422588492 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/ADUIglZIH2d7imy-H7dekTo5A-v2Xau8ks5ucX0agaJpZM4Vev8b
.

Saya dapat membuat dynamic_template_data berfungsi untuk variabel email umum, tetapi bagaimana jika kita juga perlu menambahkan data dinamis per penerima? Misalnya Nomor pesanan, jumlah pesanan, dll. Saya tidak melihat kasus penggunaan untuk ini di dokumen, tapi mungkin saya mengabaikannya.

Catatan untuk pengguna: saat menggunakan templat, berikan dynamic_template_data alih-alih substitutions .

@catamphetamine Sayangnya, saya telah dynamicTemplateData , tetapi dalam kasus saya, penggantian dihapus begitu saja. Saya hanya berharap orang lain memiliki pengalaman yang lebih baik.

Versi saya:
"@sendgrid/mail": "^6.3.1"

Ternyata bagi saya, saya harus melakukan hal berikut (kebalikan dari apa yang orang katakan):

// This seems to be the default, however, to avoid unexpected API changes,
// I'd rather set this manually
setSubstitutionWrappers("{{", "}}");

{
      subject: EMAIL_SUBJECT_ONBOARDING,
      templateId: "templateId",
      personalizations: [{
        to,
        // NOT WORKING WITH THIS ❌
        // dynamicTemplateData: {
        //   senderName: EMAIL_FROM_NAME,
        //   senderAddress: "an actual adress",
        // },

        // WORKS WITH THIS ✅
        substitutions: {
            senderName: EMAIL_FROM_NAME,
            senderAddress: "an actual adress",
        },
    }],
}

@thinkingserious menyukai alat ini. Harap terus tingkatkan dokumen, cover edge-cases, dll. 🎉❤️


MEMPERBARUI:

Terima kasih kepada @catamphetamine downvote. Itu membuat saya berpikir bahwa mungkin substitutions berhasil karena saya melakukannya setSubstitutionWrappers("{{", "}}"); . Sayangnya, tidak. Saya tidak tahu apa yang terjadi. Saya mungkin lelah, tetapi dynamicTemplateData berhasil . Perhatikan, itu camelCase _(lihat komentar @kael-shipman)_ Saya melihat sebagian besar contoh kasus ular. Juga, saya menggunakan tipe TS untuk sendgrid. Tidak ada kunci snake_case yang tersedia dalam definisi.


PEMBARUAN 2:

Mengenai jenis yang tersedia. Saya menemukan dynamic_template_data dalam tipe PersonalizationJSON . Jika Anda menggunakan yang berikut ini:
import { send } from "@sendgrid/mail";
kemudian setelah memeriksa param pertama untuk pengiriman Anda akan melihat MailData yang memiliki definisi berikut:

export interface MailData {
  // ...
  personalizations?: PersonalizationData[],
  // ...
}

Kemudian saya menemukan 2 jenis berikut:

export interface PersonalizationData {
  // omitted keys...
  dynamicTemplateData?: { [key: string]: string; };
  customArgs?: { [key: string]: string };
  sendAt?: number;
}

export interface PersonalizationJSON {
  // same omitted keys...
  dynamic_template_data?: { [key: string]: string; };
  custom_args?: { [key: string]: string; };
  send_at?: number;
}

Akhirnya, saya mendapatkan dynamic_template_data untuk bekerja secara konsisten seperti:

{
    templateId: "d-templateId",
    dynamic_template_data: { name: "elton yet again"}, // <-- either here
    personalizations: [{
        to,
        dynamic_template_data: { name: "Elton again" }, // <-- or here
    }],
}

@thinkingserious Jelas, ada masalah definisi tipe yang perlu diperbaiki. Saya dapat membuat PR nanti.

Oke, saya perlu menyelidiki lagi. Saya tercengang karena sekarang dynamicTemplateData maupun substitutions berfungsi untuk saya.

MEMPERBARUI:
Membalik beberapa tabel, tetapi membuatnya berfungsi dan memperbarui komentar saya sebelumnya.

Akhirnya, saya mendapatkan dynamic_template_data untuk bekerja secara konsisten seperti:

{
    templateId: "d-templateId",
    dynamic_template_data: { name: "elton yet again"}, // <-- either here
    personalizations: [{
        to,
        dynamic_template_data: { name: "Elton again" }, // <-- or here
    }],
}

Ini adalah poin penting bagi saya. Saya mencoba mengatur subjek dalam templat transaksional yang berbeda untuk email ke vs cc. Ini berfungsi ketika saya meletakkan properti dynamic_template_data di dalam array personalisasi seperti di atas.

    const msg = {


         personalizations: [
            {
              to: req.body.to,
              dynamic_template_data : {
                subject: "Just to adsf...",
                full_name_from: req.body.full_name_from,
                full_name_to: req.body.full_name_to,
                manager: req.body.manager,
                message: req.body.message,
                badge: req.body.badge,
                badge_image: 'https://asdf' + req.body.badge_image
             }
            },
            {
              to: req.body.manager,
              dynamic_template_data : {
                subject: req.body.full_name_from + ' received a asdf asdf',
                full_name_from: req.body.full_name_from,
                full_name_to: req.body.full_name_to,
                manager: req.body.manager,
                message: req.body.message,
                badge: req.body.badge,
                badge_image: 'https://asdf' + req.body.badge_image
             }
            }
          ]
    };

Solusi yang berhasil bagi saya adalah menempatkan dynamic_template_data di dalam objek personalisasi dengan cara yang persis seperti yang terlihat di bawah ini:

    "personalizations": [
        {
              "dynamic_template_data": {
            "fullname": "full Name",
            "useremail": ":[email protected]",
            "userphone": "56456",
            "usermsg": "tex fdsfgasdf t"
    },
            "to": [
                {
                    "email": "[email protected]"
                }
            ],
            "cc": [
                {
                    "email": "[email protected]"
                }
            ]
        }
]
Apakah halaman ini membantu?
0 / 5 - 0 peringkat