Sendgrid-nodejs: مثال على استخدام محلل البريد الوارد لتحليل رسائل البريد الإلكتروني الواردة

تم إنشاؤها على ١٣ أكتوبر ٢٠١٧  ·  35تعليقات  ·  مصدر: sendgrid/sendgrid-nodejs

ملخص القضية

ملخص للمشكلة والبيئة التي حدثت فيها. إذا كان ذلك مناسبًا ، فقم بتضمين الخطوات المطلوبة لإعادة إنتاج الخطأ. لا تتردد في تضمين لقطات الشاشة ، والتسجيلات الرقمية للشاشة ، وأمثلة التعليمات البرمجية.

لا يمكنني معرفة كيفية استخدام الحزمة @ sendgrid / inbound-mail-parser لتحليل رسائل البريد الإلكتروني الواردة. بحاجة إلى بعض أمثلة التعليمات البرمجية

خطوات التكاثر

قم بإعداد مسار تحليل في Sendgrid (مرتبط هنا:
https://www.dropbox.com/s/cb6lwrmon9qwjzq/Screenshot٪202017-10-12٪2016.03.49.png؟dl=0)
هذه هي محتويات نموذج بريد إلكتروني للمسار في ngrok:
https://gist.github.com/machinshin/e38cf7d20ec6319edcfda63ff7aca594

لقد قمت بتوصيل parseroute إلى webhook الخاص بي كما يلي:

router.post('/api/email/parseroute', (req, res, next) => {
// have also tried:
router.post('/api/email/parseroute', bodyParser.raw(), (req, res, next) => {

    console.log(`-------------`)
    console.log(req.body)
    console.log(`-------------`)
    console.log(req.rawBody)
    console.log(`-------------`)

}

{}

غير معرف

كما ترى ، req.body فارغ ، و req.rawBody "غير محدد"
وبالتالي ، فأنا لست واضحًا بشأن كيفية الوصول إلى بيانات البريد الإلكتروني الأولية ، ولا ما يجب فعله بهذه البيانات بعد ذلك وكيفية إنشاء المحلل اللغوي للبريد الوارد

أي معلومات أخرى تريد مشاركتها وذات صلة بالمشكلة التي يتم الإبلاغ عنها. على وجه الخصوص ، لماذا تعتبر هذا خطأ؟ ماذا تتوقع ان يحدث بدلا من ذلك؟

تفاصيل تقنية:

  • إصدار sendgrid-nodejs: 6.1.4 (الالتزام الأخير: 4c6d1cc)
  • إصدار Node.js: 4.1.2
    "@ sendgrid / inbound-mail-parser": "^ 6.1.4"،
    "@ sendgrid / mail": "^ 6.1.4"،
easy help wanted docs update

التعليق الأكثر فائدة

مرحبًا ZeroCho ،

لدينا حزمة هنا ، ولكن للأسف لا توجد وثائق استخدام جيدة. لذلك ، قد ترغب في التحقق من Python Inbound Parser .

مع أحر تحياتي،

إلمر

لذلك يجب عليك كتابة الوثائق بعد ذلك.

ال 35 كومينتر

مرحبا @ ماشينشين ،

شكرا لأخذ الوقت للإبلاغ عن هذا. لقد أضفت هذا إلى تراكم لدينا لمزيد من التحقيق.

أي تحديث على سبيل المثال؟ أحتاج حقًا إلى استخدام هذا المحلل اللغوي ولكني لا أعرف كيف يمكنني ذلك.

مرحبًا ZeroCho ،

لدينا حزمة هنا ، ولكن للأسف لا توجد وثائق استخدام جيدة. لذلك ، قد ترغب في التحقق من Python Inbound Parser .

مع أحر تحياتي،

إلمر

ترسل SendGrid بيانات التحليل الواردة JSON الخاصة بهم كبيانات نموذج / متعدد الأجزاء. لن يتم الوصول إلى هذا على الفور من قبل req.body لأن محلل الجسم لا يتعامل مع هذا التنسيق. سأستخدم الملتر كبديل.

@ shishido92 هل يمكنك التوسع في مثال جيد عن كيفية القيام بذلك. يبدو أن التوثيق الخاص بأي تحليل لرسائل البريد الإلكتروني الواردة باستخدام nodejs غير موجود. شكر!

stephenfjohnson @ ماشينشين إذا كنت تستخدم expressjs فقد يساعدك ذلك

app.use(express.json({limit: '10mb'}));
app.use(express.urlencoded({
  extended: true,
  type: "multipart/form-data",
  limit: '10mb'
}));
app.post('/endpoint',  function (req, res, next) {
  // req.body contains the text fields
  console.log(req.body);
  console.log('body' + req.body);
  res.status(200).json('ok');
})

سيؤدي القيام بذلك إلى منحك محتويات الطلب في نص الطلب.
هذا يتجاهل المرفقات رغم ذلك.

nathfreder نحن نستخدم ردود فعل رائعة على ملخص المشكلة كجزء من أولوياتنا. يرجى إعطاء 👍 في الأعلى.

@ childish-sambino ، satyajeetjadhav 👍

متأخرًا أكثر من عدمه ؛)
شكرا على التحديث ، إغلاق هذه المسألة

أعلم أن هذا قد تم إغلاقه ولكني اكتشفت هذه المشكلة للتو وقد صرحت باستخدام محلل البريد الوارد. الشيء الرئيسي الذي كنت بحاجة إلى القيام به هو استخدام مكتبة multer للتعامل مع إدخال بيانات النموذج / متعدد الأجزاء ثم استخدام طريقة keyValues ​​() لمكتبة @ sendgrid / inbound-mail-parser كما هو موضح أدناه

تتطلب في multer و Sendgrid:

const multer = تتطلب ('multer') ؛
تحميل const = multer () ؛
const mailParse = تتطلب ('@ sendgrid / inbound-mail-parser') ؛

في إعلان جهاز التوجيه الخاص بي عن طريقة POST ، استخدم طريقة upload.none () لأنني كنت أحصل على نص (لا توجد مرفقات):

router.post ('/ mail'، upload.none ()، الوظيفة (req، res، next)

ضمن تعريف POST ، أستخدم طريقة keyValues ​​() للحصول على الأجزاء ذات الصلة من البريد الإلكتروني:

محاولة {
const config = {keys: ['to'، 'from'، 'subject'، 'text'،]}؛
تحليل const = mailParse جديد (config ، req.body) ؛
دع الاستجابة = parsing.keyValues ​​() ؛
السماح ل = response.to ؛
السماح من = response.from ؛
دع الموضوع = response.subject ؛
دع messageBody = response.text
console.log ('هذا هو الموضوع من البريد:' ، الموضوع) ؛
}

اتمنى ان يكون هذا مفيدا

مرحبًا بالجميع ، هل يمكن لشخص ما مشاركة مثال حول كيفية تحليل المرفقات؟ أنا أستخدم نفس التكوينات ، لكن المرفق يأتي في سلسلة غير مقروءة


const app = express();
app.use(cors);
app.use(busboy());
app.use(cookieParser());
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies.
app.use(bodyParser.json({limit: '5mb'}));

router.post('', upload.any(),function(req, res) {
  // console.log(req.body);
  // console.log(req.files);
  // res.send(req.body);

  const config = {keys: ['to', 'from', 'subject', 'text','attachments']};
  const parsing = new mailParse(config, req.body);
  let response = parsing.keyValues();
  let to = response.to;
  let from = response.from;
  let subject = response.subject;
  let messageBody = response.text
  console.log('This is the subject from the mail: ', response);
  res.send(200);
});

كان الكود الذي نشره @ jhorsfield-tw مفيدًا جدًا نظرًا لعدم وجود وثائق على @sendgrid/inbound-mail-parser ، إلا أنه لم ينجح معي تمامًا. منشئ mailParse يأخذ request كمعلمة وليس نص الطلب.

const parsing = new mailParse(config, req);

مرحبًا ZeroCho ،

لدينا حزمة هنا ، ولكن للأسف لا توجد وثائق استخدام جيدة. لذلك ، قد ترغب في التحقق من Python Inbound Parser .

مع أحر تحياتي،

إلمر

لذلك يجب عليك كتابة الوثائق بعد ذلك.

كيف لا يزال هذا غير موثق

ما زلت لا تستطيع معرفة ذلك باستخدام nodejs express ...

إعادة الفتح حيث لا يوجد حتى الآن مثال على ذلك في المستندات.

نرحب بطلبات السحب لإضافة هذه الميزة وستتم مراجعتها بناءً على الأولوية ، لكن Twilio SendGrid لا يعمل بنشاط على بناء وظائف جديدة للمكتبة.

أحاول تلقي المرفقات ولكن لا حظ في ذلك ...

أحاول تلقي المرفقات ولكن لا حظ في ذلك ...

استخدم RAW

const config = {
          keys: ['to', 'from', 'subject', 'text', 'attachments']
        };
        const parsedMail = new parse(config, req); // req is https.Request type

        parsedMail.getRawEmail((rawMail: any) => {
           console.log(rawMail); // returns null or {}
       }

         parsedMail.attachments((attachmentData: Attachment[]) => {
              console.log('attachments1:'); // returns [ ]
              console.log(attachmentData);
              console.log(JSON.stringify(attachmentData));
            });

أحاول ذلك ولكن بدون حظ ... يقوم بإرجاع كائن فارغ وعندما أقوم بعمل .attachments() أحصل أيضًا على مصفوفة فارغة.

أنا أستخدم وظائف سحابة Firebase ، ولم أحقق أي نجاح باستخدام محلل البريد الوارد وأنا أتطلع إلى بعض الوثائق التي يمكن أن تساعدني في استخدام المكتبة ...

لكن استخدام busboy (وإلغاء تحديد "raw" في إعدادات Sendgrid) يعمل جيدًا ، باستثناء مشكلة واحدة دفعتني إلى محاولة استخدام محلل البريد ...

يسرد Sendgrid الترميزات المختلفة في حقل "charsets" مثل هذا:
بريد إلكتروني من Gmail:
{"to": "UTF-8"، "html": "UTF-8"، "subject": "UTF-8"، "from": "UTF-8"، "text": "UTF-8" }
بريد إلكتروني من Outlook:
{"to": "UTF-8"، "html": "iso-8859-1"، "subject": "UTF-8"، "from": "UTF-8"، "text": "iso- 8859-1 "}

عندما تحتوي رسائل البريد الإلكتروني على أحرف دولية (مثل ÆØÅ) ، تكون النتيجة أن النص وحقول html يحتويان على علامات استفهام بدلاً من الأحرف الشمالية الفعلية.

إذا قمت بتغيير defCharset على busboy إلى Windows-1252 ، فسيتم عرض قيم النص و html بشكل صحيح ، لكن الحقول الأخرى ستعرض بشكل خاطئ.

هل ستكون هذه مشكلة أيضًا في المحلل اللغوي للبريد ، أم هل يتعامل محلل البريد مع ترميزات مختلفة في الحقول؟

الكود الخاص بي للتحليل باستخدام busboy لأي شخص مهتم:
(إذا كان بإمكان أي شخص إخباري بكيفية حل المشكلة أعلاه باستخدام busboy ، فسأكون ممتنًا ..)

export.sendgridparse = function.https.onRequest ((req، res) => {
مسار ثابت = يتطلب ('مسار') ؛
const os = تتطلب ('os') ؛
const fs = تتطلب ('fs') ؛
const Busboy = تتطلب ('busboy') ؛

if (req.method !== 'POST') {
    // Return a "method not allowed" error
    return res.status(405).end();
}
const busboy = new Busboy({ headers: req.headers });    
const fields = {};
busboy.on('field', function(fieldname, value, fieldnameTruncated, valTruncated, encoding, mimetype){
    console.log('Busboy fild [' + fieldname + ']: value: ' + val);
fields[fieldname] = value;
});

دع imageToBeUploaded = {} ؛
السماح للصور بالتحميل = [] ؛
دع imageFileName ؛

busboy.on ('file'، (fieldname، file، filename، encoding، mimetype) => {
console.log (اسم المجال ، الملف ، اسم الملف ، الترميز ، mimetype) ؛

file.on ("البيانات" ، الوظيفة (البيانات) {
console.log ('File [' + fieldname + '] حصل على' + data.length + 'bytes') ؛
}) ؛
file.on ('end'، function () {
console.log ('File [' + fieldname + '] Finished') ؛
}) ؛

const imageExtension = filename.split ('.') [filename.split ('.'). length - 1] ؛
imageFileName = ${Math.round(Math.random() * 1000000000000).toString()}.${imageExtension} ؛
const filepath = path.join (os.tmpdir () ، imageFileName) ؛
رابط url = https://firebasestorage.googleapis.com/v0/b/${environment.firebase.storageBucket}/o/${imageFileName}?alt=media ؛
imageToBeUploaded = {filepath، mimetype، imageFileName، imageExtension، url} ؛
imagestobeuploaded.push (imageToBeUploaded) ؛
file.pipe (fs.createWriteStream (filepath)) ؛
}) ؛

busboy.on ('finish'، async () => {
// جميع الحقول متاحة (الصور محملة والحقول) ويمكن حفظها في ديسيبل
res.send (200) ؛
}) ؛
busboy.end (req.rawBody) ؛
}) ؛

hhetland إذاً ، هل تمكنت من الحصول على الملفات باستخدام busboy؟ أنا أستخدمه أيضًا للحصول على البيانات الأخرى من البريد الإلكتروني ، لكن لم أتمكن من الحصول على الملفات ... هل يعمل الحصول على الملفات من أجلك؟

matheustavaresdev - نعم ، أحصل على الملفات باستخدام busboy.

يتم أولاً حفظها في مجلد tmp في busboy.on ("ملف") ، ثم باستخدام المعلومات الموجودة في المتغير "imageestobeuploaded" ، أقوم بحفظها في دلو تخزين في firebase في busboy.on ("إنهاء").

رائع شكرا!!!!!!!!!!!!

أبريل 2020 ، لا يوجد مستندات رسمية حتى الآن ، أليس كذلك؟

أعلم أن هذا قد تم إغلاقه ولكني اكتشفت هذه المشكلة للتو وقد صرحت باستخدام محلل البريد الوارد. الشيء الرئيسي الذي كنت بحاجة إلى القيام به هو استخدام مكتبة multer للتعامل مع إدخال بيانات النموذج / متعدد الأجزاء ثم استخدام طريقة keyValues ​​() لمكتبة @ sendgrid / inbound-mail-parser كما هو موضح أدناه

تتطلب في multer و Sendgrid:

const multer = تتطلب ('multer') ؛
تحميل const = multer () ؛
const mailParse = تتطلب ('@ sendgrid / inbound-mail-parser') ؛

في إعلان جهاز التوجيه الخاص بي عن طريقة POST ، استخدم طريقة upload.none () لأنني كنت أحصل على نص (لا توجد مرفقات):

router.post ('/ mail'، upload.none ()، الوظيفة (req، res، next)

ضمن تعريف POST ، أستخدم طريقة keyValues ​​() للحصول على الأجزاء ذات الصلة من البريد الإلكتروني:

محاولة {
const config = {keys: ['to'، 'from'، 'subject'، 'text'،]}؛
تحليل const = mailParse جديد (config ، req.body) ؛
دع الاستجابة = parsing.keyValues ​​() ؛
السماح ل = response.to ؛
السماح من = response.from ؛
دع الموضوع = response.subject ؛
دع messageBody = response.text
console.log ('هذا هو الموضوع من البريد:' ، الموضوع) ؛
}

اتمنى ان يكون هذا مفيدا

ما وجدته هو أن request.body موجود في نموذج بيانات وأرى خطأ:
[Nest] 24687 - 05/01/2020 ، 1:29:51 مساءً [استثناءات Handler] تقليل المصفوفة الفارغة بدون قيمة أولية
TypeError: تقليل مجموعة فارغة بدون قيمة أولية
في Array.reduce ()

الرمز:
القيم الأساسية() {
العودة هذه. المفاتيح
.filter (key => this.payload [مفتاح])
.map (key => ({[key]: this.payload [key]}))
.reduce ((keyValues، keyPayload) => Object.assign (keyValues، keyPayload)) ؛
}

تُرجع خطأ لأن this.payload ليست بيانات منظمة ولكنها بيانات نموذج متعددة الأجزاء.

لم أتمكن من الحصول على هذا العمل مع nest-js. بيانات الويب هوك التي أتلقاها في وحدة تحكم NestJS هي بيانات متعددة الأشكال. أنا غير متأكد من كيفية استخدام Multer في هذه الحالة.

Outer.post ('/ mail'، upload.none ()، الوظيفة (req، res، next)

حاولت القيام بذلك:

export class MultiformParser implements NestMiddleware { async use(req: Request, res: Response, next: Function) { console.log("before: ", req.body) var upload = multer(); await new Promise((resolve, reject) => { upload.none()(req, res, err => { if (err) { console.log(err) reject(err) } else { resolve() console.log("request: ", req.body) } }); }); console.log("after: ", req.body) next(); } }

ومع ذلك ، يعود الجسم المطلوب:
request: [Object: null prototype] {}

قبل طباعة بيانات متعددة الأشكال.

فيما يلي التغييرات التي كان يجب علي إجراؤها حتى أتمكن من استخدام multer:

app.use (express.json ())
app.use (express.urlencoded ({extension: true})) ؛
تحميل const = multer () ؛
app.use (upload.none ()) ؛

بمجرد القيام بذلك ، تمكنت من استخدام multer لتحليل بيانات الويب هوك إلى ملف
مفتاح منظم ، زوج القيمة.

يوم الأحد 24 مايو 2020 الساعة 4:51 مساءً الدنماركي Mohd [email protected]
كتب:

إذا كنت تعمل بدون خادم (وظائف Google Cloud أو Firebase)
هذا قد يساعد:
https://stackoverflow.com/questions/47242340/how-to-perform-an-http-file-upload-using-express-on-cloud-functions-for-firebase/48648805#48648805

استخدم Formidable لتحليل الأجزاء المتعددة على الخادم:
https://github.com/DanisHack/formidable-serverless

-
أنت تتلقى هذا لأنك علقت.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/sendgrid/sendgrid-nodejs/issues/482#issuecomment-633312295 ،
أو إلغاء الاشتراك
https://github.com/notifications/unsubscribe-auth/AB2ATHHFKBRZZDGGJ2D7SOLRTGQHNANCNFSM4D67CVZQ
.

-

شويتا باندير ، دكتوراه | مهندس برمجيات رئيسي

[email protected]

https://hicleo.com/
hicleo.com | لينكد إن https://www.linkedin.com/company/hicleo/ | تويتر
https://twitter.com/hi_cleo/ | انستغرام
https://www.instagram.com/hicleo.co/ | موقع التواصل الاجتماعي الفيسبوك
https://www.facebook.com/hicleolabs

-

قد تحتوي هذه الرسالة على سرية أو ملكية أو محميةمعلومات.
إذا تلقيت هذه الرسالة عن طريق الخطأ ،يرجى إبلاغ المرسل عن طريق الرد على البريد الإلكتروني وحذف هذه الرسالة.

لقد أمضينا الكثير من الوقت في محاولة جعل هذا يعمل في Google Cloud Functions مع Busboy ولم نتمكن من تحقيق ذلك بغض النظر عن البرنامج التعليمي أو المؤشرات التي اتبعناها.

لذلك سأترك هذا هنا للشخص التالي في موقف مشابه حيث لديك القليل من المرونة: استخدم محلل بايثون للداخل . لقد كانت إلى حد كبير وظيفة نسخ / لصق من الكود الذي يقدمونه واستغرق تشغيله أقل من ساعة.

أعلم أن هذا لا يحل المشكلة هنا ، لكني آمل أن يوفر على شخص آخر ساعات من الضرب بالرأس.

أنا سعيد لأنني وجدت هذه التذكرة ... كنت مجنونة في محاولة العثور على بعض الوثائق حول هذا ، وبطريقة ما لا يوجد أي منها .

أنا في الواقع محتار. لقد افترضت للتو أنه سيكون هناك وثائق قياسية - خاصةً لأنه في حين أن هذا مفتوح المصدر ، فإنه مدعوم من SendGrid (وفي النهاية Twilio ، الذي يحتوي على وثائق رائعة).

لشيء بسيط مثل هذا ، قد تتخيل أنه سيكون على الأقل مثال.

ومع ذلك ، لأي شخص يصادف هذا ...

أوصي باستخدام MailParser بدلاً من ذلك.

أنا متأكد من أن هذا يستخدمه تحت الغطاء ، ولكن على الأقل MailParser لديه الكثير من الوثائق. فقط تأكد من أنه في إعدادات التحليل الوارد لديك تم تحديد POST the raw, full MIME message كما هو موضح أدناه (_wow ، مثال_).

Example

عند القراءة من خلال مستندات MailParser ، حصلت على هذا خلال دقائق:

import { Request, Response } from "express";
import { simpleParser } from "mailparser";

export const inboundEmails = async (req: Request, res: Response) => {
  const parsedEmail = await simpleParser(req.body.email);

  console.log("subject", parsedEmail.subject);
  console.log("from", parsedEmail.from);
  console.log("to", parsedEmail.to);
  console.log("cc", parsedEmail.cc);
  console.log("bcc", parsedEmail.bcc);
  console.log("date", parsedEmail.date);
  console.log("messageId", parsedEmail.messageId);
  console.log("inReplyTo", parsedEmail.inReplyTo);
  console.log("replyTo", parsedEmail.replyTo);
  console.log("references", parsedEmail.references);
  console.log("html", parsedEmail.html);
  console.log("text", parsedEmail.text);
  console.log("textAsHtml", parsedEmail.textAsHtml);
  console.log("attachments", parsedEmail.attachments);

  res.sendStatus(200);
};

جميع البيانات كما تريدها.

كما أنني أستخدم البرمجيات الوسيطة

الأمر بسيط مثل multer().any() ضمن تدفق البرامج الوسيطة.

في صحتك

لقد استخدمت رسالة MIME الكاملة الخام وحصلت عليها تعمل مع simpleParser ، لكنني أعود إلى الإصدار المعالج وأستخدم محلل البريد الوارد من sengrid لأن simpleParser لا يحول MIME إلى نص و html بشكل جيد.

بالتأكيد بحاجة إلى بعض الوثائق بالرغم من ذلك.

theweiweiway هل تمانع في نشر مثال على الاختلاف في النص و html بين الطريقتين؟ لم ألاحظ أي اختلافات وأنا أشعر بالفضول.

للنص

Hi 123 Hi 123 Hi 123 www.hello.com

ضد

Hi 123 Hi 123 Hi 123 www. <http://www.hello.com/>hello <http://www.hello.com/>.com <http://www.hello.com/>

^ dunno لماذا حدث ذلك

ل html

<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hi 123<div class=""><b class="">Hi 123</b></div><div class=""><b class=""><u class="">Hi 123</u></b></div><div class=""><b class=""><u class="">www.</u>hello</b>.com</div></body></html>

ضد

<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><span style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);" class="">Hi 123</span><div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);"><b class="">Hi 123</b></div><div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);"><b class=""><u class="">Hi 123</u></b></div><div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);"><b class=""><u class=""><a href="http://www.hello.com" class="">www.</a></u><a href="http://www.hello.com" class="">hello</a></b><a href="http://www.hello.com" class="">.com</a></div></body></html>

أعتقد أن الأمر يتعلق أكثر بحزمة simpleParser مع ذلك

إليك تحليل repo POST the raw, full MIME message تحديد حيث يمكنك الوصول إلى المزيد من بيانات البريد الإلكتروني.

console.log('dkim: ', body.dkim)
console.log('to: ', body.to)
console.log('cc: ', body.cc)
console.log('from: ', body.from)
console.log('subject: ', body.subject)
console.log('sender_ip: ', body.sender_ip)
console.log('spam_report: ', body.spam_report)
console.log('envelope: ', body.envelope)
console.log('charsets: ', body.charsets)
console.log('SPF: ', body.SPF)
console.log('spam_score: ', body.spam_score)

if (rawFullMimeMessageChecked) {
    console.log('email: ', body.email)
} else {
    console.log('headers: ', body.headers)
    console.log('html: ', body.html)
    console.log('text: ', body.text)
    console.log('attachments: ', body.attachments)
    console.log('attachment-info: ', body['attachment-info'])
    console.log('content-ids: ', body['content-ids'])
}

حاول ذلك على وظيفة السحابة Firebase.
لا تعمل بالتأكيد.
أي حل آخر؟

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

wooyah picture wooyah  ·  4تعليقات

danielflippance picture danielflippance  ·  4تعليقات

amlcodes picture amlcodes  ·  4تعليقات

thinkingserious picture thinkingserious  ·  4تعليقات

kiranshashiny picture kiranshashiny  ·  4تعليقات