{"id":100007,"date":"2026-05-07T12:45:00","date_gmt":"2026-05-07T03:45:00","guid":{"rendered":"https:\/\/support.questetra.com\/?p=100007"},"modified":"2026-05-11T16:50:04","modified_gmt":"2026-05-11T07:50:04","slug":"start-event-gmail-message-received","status":"publish","type":"post","link":"https:\/\/support.questetra.com\/en\/bpmn-icons\/start-event-gmail-message-received\/","title":{"rendered":"Start: Gmail: Email Message Received"},"content":{"rendered":"\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"58\" data-attachment-id=\"113160\" data-permalink=\"https:\/\/support.questetra.com\/en\/developer-blog\/how-to-use-timer-start-event\/attachment\/advanced-banner-new-en\/\" data-orig-file=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/05\/advanced-banner-new-en.png?fit=1200%2C68&amp;ssl=1\" data-orig-size=\"1200,68\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"advanced-banner-new-en\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/05\/advanced-banner-new-en.png?fit=1024%2C58&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/05\/advanced-banner-new-en-1024x58.png?resize=1024%2C58&#038;ssl=1\" alt=\"\" class=\"wp-image-113160\" srcset=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/05\/advanced-banner-new-en.png?resize=1024%2C58&amp;ssl=1 1024w, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/05\/advanced-banner-new-en.png?resize=600%2C34&amp;ssl=1 600w, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/05\/advanced-banner-new-en.png?resize=768%2C44&amp;ssl=1 768w, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/05\/advanced-banner-new-en.png?w=1200&amp;ssl=1 1200w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-background\" style=\"background-color:#ccffcc;margin-top:var(--wp--preset--spacing--30);margin-right:0;margin-bottom:0;margin-left:0;padding-top:0;padding-right:var(--wp--preset--spacing--20);padding-bottom:0;padding-left:var(--wp--preset--spacing--20)\"><strong>Start: Gmail: Email Message Received<\/strong><\/h4>\n\n\n\n<p class=\"has-text-align-right has-background has-small-font-size mt-0 pt-0 wp-block-paragraph\" style=\"background-color:#ccffcc;margin-top:0;margin-right:0;margin-bottom:0;margin-left:0;padding-top:0;padding-right:var(--wp--preset--spacing--30);padding-bottom:0;padding-left:var(--wp--preset--spacing--30)\"><a href=\"https:\/\/support.questetra.com\/en\/bpmn-icons\/start-event-gmail-message-received\/\">\u958b\u59cb: Gmail: \u30e1\u30fc\u30eb\u53d7\u4fe1\u6642<\/a><\/p>\n\n\n\n<p class=\"has-background mt-0 pt-0 wp-block-paragraph\" style=\"background-color:#f0fff0;margin-top:0;margin-right:0;margin-bottom:var(--wp--preset--spacing--60);margin-left:0;padding-top:var(--wp--preset--spacing--20);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--40)\">This item starts a case when Gmail has received a new message.<\/p>\n\n\n\n<figure class=\"wp-block-image alignright has-custom-border is-style-default\"><img decoding=\"async\" src=\"data:image;base64,\n        iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADPUlEQVRYR8WXX0hTURzHv2dzy5bb\n        1HKKRH+gtx7K2izooXI+BVH41F+IglAJmhVICr2kgRG6DFRERXBpGIgkZA\/Oeigir+VzIGQE1bTU\n        yXYdy90Tu+5u997dea9p3PO2nd+fz\/md359zCXReRKv\/76cPW4ysoYKAnARoCSj2gCCP16dYAMEM\n        QKYo6OuYhRsqHvnIarGtCjB7wlWELNSCohJAthajACIg6MAKmhxvmJ9r6awJECgrrSSEPgKwTaNj\n        uViYUnKncHyiI5N+RoC5clcbpaj6R8cSNULQXjDGVCvZUgQIlDn7CSHnN8O5YINSOlA4PnlBbjMN\n        YDNPnuZMIRISgMSdt2\/myeW2KCVV4pxIAvDZbsS0kHCGAgdsdQ0w2HPBPvchMvpCMxexWmGrb4Sx\n        qBiRl8NgB31i3TBi2CdURwqg3NUCCo8gme8b5g0IK8q8R7C+BuC4NUFMJU7YG70gZnNSLnj3JuL6\n        yUXgdYwxNfHfPEC8yWSxht\/iOi949Q7IMkmcccFFLHquI\/ZtRhEip\/oWtlacS9tjB\/sQ7nwi\/j+y\n        YuG2x5sVDxBwuy4RoE8soQTA71MOodaHWB4ZSh3IakWetwvG3XsVweJXEO5slexR4HKhn\/HxALPu\n        0m6AXtUEkBASrsR80AlbQ7Mk5HIKJQCA9Dj8E9cSAK5PAErWA8AHg2VBLBbV5FQGwJTDzxxaBShz\n        zScHS8JcxitQdZcuoAhAseAYZ\/KFCFC5WhoApQBRnV2AglyGCMDhZ1YtzrpdqgCxwA+w\/b2wemoB\n        YlCMQ+zrF4Sf9sBWd1+yrw6g4QriAPMXz8C4cxdyH3fxDUq8loeeIdTWDPORY7A3tqgDyK5ANQkF\n        AN6ywQD7Ay\/MzqOg0SiW7t1GdPIDv6UZAOIk1FCGEoDE+bYcd+PP1CS4pWDyxNoBRGWopREpASgl\n        glYASSNSasU7Rt+CmFL9fEMAA70Id7eJeaWtmK8E2TDKqfIg+9TZZOmtTH\/m54DaMu0\/AHtTqu3S\n        UAgLN66A+zWXUpUPIx5ANo7VHG1gX3kcxw3q+iARTqTrk0yA0PVR+j8ise5neSoSOn6YCBC6fpqJ\n        S023j9MN1Lsm1b9qWLIw6P4tOAAAAABJRU5ErkJggg==\n    \" alt=\"Auto Step icon\" class=\"has-border-color has-ast-global-color-4-border-color\" style=\"border-width:0.5em\"\/><\/figure>\n\n\n\n<div class=\"wp-block-coblocks-accordion\">\n<div class=\"wp-block-coblocks-accordion-item\"><details open><summary class=\"wp-block-coblocks-accordion-item__title\">Basic Configs<\/summary><div class=\"wp-block-coblocks-accordion-item__content\">\n<dl style=\"0 0 -0.7em 0\">\n<dt style=\"font-weight: 300; font-size: 50%; margin: -1em 0 0 0; color: #C3C3C3;\"><\/dt><dd style=\"margin: -0.5em 0 0.1em 1em\">Step Name<\/dd>\n<dt style=\"font-weight: 300; font-size: 50%; margin: -1em 0 0 0; color: #C3C3C3;\"><\/dt><dd style=\"margin: -0.5em 0 0.1em 1em\">Note<\/dd>\n<\/dl>\n<\/div><\/details><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-coblocks-accordion\">\n<div class=\"wp-block-coblocks-accordion-item\"><details open><summary class=\"wp-block-coblocks-accordion-item__title\">Configs for this Auto Step<\/summary><div class=\"wp-block-coblocks-accordion-item__content\">\n<dl style=\"0 0 -0.7em 0\">\n<dt style=\"font-weight: 300; font-size: 50%; margin: -1em 0 0 0; color: #aaa;\">conf_auth<\/dt><dd style=\"margin: -0.5em 0 0.1em 1em\">C1: OAuth2 Setting<span style=\"color:#990000;\"> *<\/span><\/dd>\n<dt style=\"font-weight: 300; font-size: 50%; margin: -1em 0 0 0; color: #aaa;\">conf_label<\/dt><dd style=\"margin: -0.5em 0 0.1em 1em\">C2: Label (Inbox if blank)<\/dd>\n<dt style=\"font-weight: 300; font-size: 50%; margin: -1em 0 0 0; color: #aaa;\">conf_idData<\/dt><dd style=\"margin: -0.5em 0 0.1em 1em\">C3: Data item to save Message ID<span style=\"color:#990000;\"> *<\/span><\/dd>\n<dt style=\"font-weight: 300; font-size: 50%; margin: -1em 0 0 0; color: #aaa;\">conf_timestampData<\/dt><dd style=\"margin: -0.5em 0 0.1em 1em\">C4: Data item to save received time<\/dd>\n<dt style=\"font-weight: 300; font-size: 50%; margin: -1em 0 0 0; color: #aaa;\">conf_rfc822msgIdData<\/dt><dd style=\"margin: -0.5em 0 0.1em 1em\">C5: Data item to save RFC 822 Message-ID header<\/dd>\n\n<\/dl>\n<\/div><\/details><\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><i class=\"fal fa-lightbulb-exclamation\"><\/i> Notes<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>This modeling element is for Google Workspace accounts only, so you cannot use it with a general user account (<em>@gmail.com<\/em>)<\/li>\n\n\n\n<li>As a preliminary step, a user with Google Workspace administrator privileges must <a href=\"https:\/\/support.google.com\/a\/answer\/7281227?hl=en#zippy=%2Cmanage-access-to-apps-trusted-limited-or-blocked\" target=\"_blank\" rel=\"noreferrer noopener\">set the target OAuth app as a trusted app in the admin console<\/a>\n<ul class=\"wp-block-list\">\n<li>If the OAuth app is not trusted, you cannot use this modeling element<\/li>\n\n\n\n<li>The client ID of the corresponding OAuth app is 13039123046-t87nmrj499ffoa58asehks3asajvgqnh.apps.googleusercontent.com<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>After the app is released, Questetra BPM Suite will periodically poll Gmail\n<ul class=\"wp-block-list\">\n<li>You can confirm the check status from the [Case Log]<\/li>\n\n\n\n<li>A Case will not be started on the first poll; only the check will be done<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Emails with the specified label will be checked\n<ul class=\"wp-block-list\">\n<li>Use Gmail&#8217;s [Label] function to assign labels to emails that should start a case<\/li>\n\n\n\n<li>If multiple labels are specified in [C2: Label], emails with all the specified labels will be checked<\/li>\n\n\n\n<li>In addition to user-created labels, system labels such as INBOX, UNREAD and STARRED are also supported\n<ul class=\"wp-block-list\">\n<li>For the list of system labels see the <a href=\"https:\/\/developers.google.com\/gmail\/api\/guides\/labels\" target=\"_blank\" rel=\"noreferrer noopener\">Gmail API Guide<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>In each poll, a certain number of newer emails with the target label are checked.\n<ul class=\"wp-block-list\">\n<li>A Case will be started for emails that have not yet been started among the checked emails<\/li>\n\n\n\n<li>If an email has the specified label, it will be included in the check even if the Case has already started\n<ul class=\"wp-block-list\">\n<li>If the label is removed from the email, it will no longer be checked\n<ul class=\"wp-block-list\">\n<li>Automated item [<a href=\"https:\/\/support.questetra.com\/en\/bpmn-icons\/service-task-gmail-message-label-remove\/\" data-type=\"link\" data-id=\"https:\/\/support.questetra.com\/bpmn-icons\/service-task-gmail-message-label-remove\/\">Gmail: Remove Label from Email Message<\/a>]<\/li>\n\n\n\n<li>By removing the label, you will be able to see that the message has been imported to Questetra on browsing your Gmail mailbox<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>If a large number of emails are received in a short period, the emails beyond a certain number will not be checked so the Case will not start\n<ul class=\"wp-block-list\">\n<li>Approx. 90 Cases every 3 minutes \uff5e 15 minutes<\/li>\n\n\n\n<li>Even if the email is not checked and does not start the Case, the case will start if checked in the following polling<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><i class=\"fal fa-images\"><\/i> Capture<\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/05\/%E9%96%8B%E5%A7%8B-Gmail-%E3%83%A1%E3%83%BC%E3%83%AB%E5%8F%97%E4%BF%A1%E6%99%82-en-18_0.png?ssl=1\" alt=\"\" style=\"border:10px solid #aaaaaa; padding:5px; margin:5px;\"><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><i class=\"fal fa-balance-scale\"><\/i> See also<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/support.questetra.com\/en\/developer-blog\/gmail-start\/\">Tutorial: Starting a Case Triggered by Receiving a Gmail<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/support.questetra.com\/en\/google-api-user-data-policy\/\" target=\"_blank\" rel=\"noreferrer noopener\">Google API User Data Policy<\/a><\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-coblocks-accordion\">\n<div class=\"wp-block-coblocks-accordion-item\"><details><summary class=\"wp-block-coblocks-accordion-item__title\">Script (click to open)<\/summary><div class=\"wp-block-coblocks-accordion-item__content\">\n<ul class=\"wp-block-list\">\n<li>An XML file that contains the code below is available to download\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/gh-cdn.questetra.net\/Questetra\/Addon-XML\/release-2026-04-20\/start_event\/gmail-message-received.xml\" target=\"_blank\" rel=\"noreferrer noopener\">gmail-message-received.xml<\/a> (C) Questetra, Inc. (MIT License)<\/li>\n\n\n\n<li>Just use it for a reference for the codes<\/li>\n\n\n\n<li>This file&nbsp;<strong>cannot be imported<\/strong>&nbsp;into a Workflow App as an Add-on<\/li>\n\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>\n\/**\n * @typedef {Object} timestamp java.sql.Timestamp \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\n *\/\n\n\/** \u65e5\u6642\u30d5\u30a9\u30fc\u30de\u30c3\u30bf\u30fc *\/\nconst datetimeFormatter = new java.text.SimpleDateFormat(&quot;yyyy-MM-dd&apos;T&apos;HH:mm:ssX&quot;);\n\n\/**\n * configs \u304b\u3089\u5fc5\u8981\u306a\u60c5\u5831\u306e\u53d6\u308a\u51fa\u3057\n * @returns {Object} setting \u8a2d\u5b9a\n * @returns {AuthSettingWrapper} setting.auth OAuth2 \u8a8d\u8a3c\u8a2d\u5b9a\n * @returns {Array} setting.labels \u30e9\u30d9\u30eb\u4e00\u89a7\n *\/\nconst prepare = () =&gt; {\n    const auth = configs.getObject(&apos;conf_auth&apos;);\n    let label = configs.get(&apos;conf_label&apos;);\n    let labels = [];\n    if (label !== null &amp;&amp; label !== &apos;&apos;) {\n        labels = label.split(&apos;\\n&apos;)\n            .map(label =&gt; label.trim())\n            .filter(label =&gt; label !== &apos;&apos;);\n    }\n    return {\n        auth,\n        labels\n    };\n};\n\n\/**\n * \u8ffd\u52a0\u3055\u308c\u305f\u30e1\u30fc\u30eb\u306e\u691c\u7d22\n * @param {Number} limit \u53d6\u5f97\u4e0a\u9650\u6570\n * @param timestampLowerLimit timestamp \u306e\u4e0b\u9650\n * @returns {Array} messages \u30e1\u30c3\u30bb\u30fc\u30b8\u4e00\u89a7\n * @returns {string} messages[].id Gmail Message ID\n * @returns {timestamp} messages[].timestamp \u30e1\u30fc\u30eb\u53d7\u4fe1\u6642\u523b\n * @returns {string} messages[].rfc822msgId RFC 822 Message-ID\n *\/\nconst list = (limit, timestampLowerLimit) =&gt; {\n    const {auth, labels} = prepare();\n    let labelIds = [&apos;INBOX&apos;];\n    if (labels.length !== 0) {\n        labelIds = getLabelIds(auth, labels);\n    }\n\n    \/\/ HTTP \u30ea\u30af\u30a8\u30b9\u30c8\u6570\u5236\u9650\u3092\u8003\u616e\u3059\u308b\n    limit = Math.min(limit, httpClient.getRequestingLimit() - 2);\n    const messages = getMessages(auth, labelIds, limit, timestampLowerLimit);\n    logMessages(messages);\n    return messages;\n};\n\n\/**\n * \u30e1\u30c3\u30bb\u30fc\u30b8\u4e00\u89a7\u306e\u30ed\u30b0\u51fa\u529b\n * @param {Array} messages \u30e1\u30c3\u30bb\u30fc\u30b8\u4e00\u89a7\n *\/\nconst logMessages = (messages) =&gt; {\n    const replacer = (key, value) =&gt; value instanceof java.sql.Timestamp ? datetimeFormatter.format(value) : value;\n    messages.forEach(msg =&gt; engine.log(JSON.stringify(msg, replacer)));\n};\n\n\/**\n * \u30e9\u30d9\u30eb\u304b\u3089\u30e9\u30d9\u30eb ID \u3092\u53d6\u5f97\u3059\u308b\n * @param {AuthSettingWrapper} auth OAuth2 \u8a8d\u8a3c\u8a2d\u5b9a\n * @param {Array&lt;String&gt;} labels \u30e9\u30d9\u30eb\u4e00\u89a7\n * @return {Array&lt;String&gt;} \u30e9\u30d9\u30eb ID \u306e\u4e00\u89a7\n *\/\nfunction getLabelIds(auth, labels) {\n    const response = httpClient.begin()\n        .authSetting(auth)\n        .get(&apos;https:\/\/gmail.googleapis.com\/gmail\/v1\/users\/me\/labels&apos;);\n    const responseJson = response.getResponseAsString();\n    const status = response.getStatusCode();\n    if (status &gt;= 300) {\n        const accessLog = `--- users.labels.list --- ${status}\\n${responseJson}\\n`;\n        engine.log(accessLog);\n        throw `Failed to get labels. status: ${status}`;\n    }\n\n    const json = JSON.parse(responseJson);\n    let found = json.labels\n        .filter(label =&gt; labels.includes(label.name));\n    const foundLabels = found.map(label =&gt; label.name);\n    const notFoundLabels = labels.filter(label =&gt; !foundLabels.includes(label));\n    if (notFoundLabels.length &gt; 0) {\n        const accessLog = `--- users.labels.list --- ${status}\\n${responseJson}\\n`;\n        engine.log(accessLog);\n        \/\/ id \u304c\u898b\u3064\u304b\u3089\u306a\u3044 label \u304c\u3042\u308b\u5834\u5408\u3001\u30a8\u30e9\u30fc\u3092\u30b9\u30ed\u30fc\n        throw `label ids of ${notFoundLabels.join(&apos;, &apos;)} not found`;\n    }\n    return found.map(label =&gt; label.id);\n}\n\n\/**\n * Gmail REST API \u306b\u30e1\u30fc\u30eb\u53d6\u5f97\u306e GET \u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u4fe1\u3057\u3001\u30e1\u30c3\u30bb\u30fc\u30b8\u4e00\u89a7\u3092\u8fd4\u3059\n * @param {AuthSettingWrapper} auth OAuth2 \u8a8d\u8a3c\u8a2d\u5b9a\n * @param {Array&lt;String&gt;} labelIds \u30e9\u30d9\u30eb ID \u306e\u4e00\u89a7\n * @param {Number} limit \u53d6\u5f97\u4e0a\u9650\u6570\n * @param timestampLowerLimit timestamp \u306e\u4e0b\u9650\n * @returns {Array} messages \u30e1\u30c3\u30bb\u30fc\u30b8\u4e00\u89a7\n * @returns {string} messages[].id Gmail Message ID\n * @returns {timestamp} messages[].timestamp \u30e1\u30fc\u30eb\u53d7\u4fe1\u6642\u523b\n * @returns {string} messages[].rfc822msgId RFC 822 Message-ID\n *\/\nfunction getMessages(auth, labelIds, limit, timestampLowerLimit) {\n    let request = httpClient.begin()\n        .authSetting(auth)\n        .queryParam(&apos;maxResults&apos;, `${limit}`);\n    engine.log(`labelIds: ${labelIds}`);\n    labelIds.forEach(labelId =&gt; {\n        request = request.queryParam(&apos;labelIds&apos;, labelId);\n    });\n    \/\/ \u5358\u4f4d\u306f\u30df\u30ea\u79d2\u3067\u306f\u306a\u304f\u79d2\n    const q = `newer: ${Math.floor(timestampLowerLimit.getTime() \/ 1000)}`;\n    engine.log(`q: ${q}`);\n    request = request.queryParam(&apos;q&apos;, q);\n    const response = request\n        .get(&apos;https:\/\/gmail.googleapis.com\/gmail\/v1\/users\/me\/messages&apos;);\n\n    \/\/ when error thrown\n    const responseJson = response.getResponseAsString();\n    const status = response.getStatusCode();\n    if (status &gt;= 300) {\n        const accessLog = `--- users.messages.list --- ${status}\\n${responseJson}\\n`;\n        engine.log(accessLog);\n        throw `Failed to get messages. status: ${status}`;\n    }\n\n    const json = JSON.parse(responseJson);\n    if (json.messages === undefined || json.messages === null) {\n        \/\/ \u8a72\u5f53\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u7121\u3044\n        engine.log(&quot;no messages&quot;);\n        return [];\n    }\n\n    return json.messages\n        .filter(msg =&gt; !engine.isProcessStarted(msg.id)) \/\/ \u65e2\u306b\u30b1\u30fc\u30b9\u958b\u59cb\u6e08\u307f\u306e\u3082\u306e\u3092\u9664\u304f\n        .map(msg =&gt; getMessage(auth, msg.id)) \/\/ id \u4ee5\u5916\u306e\u60c5\u5831\u3092\u53d6\u5f97\n        \/\/ \u691c\u7d22\u6761\u4ef6\u3067\u3059\u3067\u306b timestampLowerLimit \u306b\u3088\u308a\u30d5\u30a3\u30eb\u30bf\u3057\u3066\u3044\u308b\u304c\u3001\n        \/\/ \u691c\u7d22\u6761\u4ef6\u306e\u5bfe\u8c61\u6642\u523b\u3068\u30e1\u30fc\u30eb\u306e timestamp \u304c\u4e00\u81f4\u3057\u306a\u3044\u5834\u5408\u304c\u7a00\u306b\u3042\u308b\u305f\u3081\u3001\u518d\u30d5\u30a3\u30eb\u30bf\n        .filter(msg =&gt; {\n            const isOld = msg.timestamp.before(timestampLowerLimit);\n            if (isOld) {\n                engine.log(`excluded by timestampLowerLimit: id=${msg.id}, timestamp=${datetimeFormatter.format(msg.timestamp)}`);\n            }\n            return !isOld; \/\/ timestampLowerLimit \u4ee5\u524d\u306e\u3082\u306e\u3092\u9664\u5916\n        });\n}\n\n\/**\n * Gmail REST API \u306b\u30e1\u30fc\u30eb\u53d6\u5f97\u306e GET \u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u4fe1\u3057\u3001internalDate \u7b49\u3092\u53d6\u5f97\u3059\u308b\n * @param {AuthSettingWrapper} auth OAuth2 \u8a8d\u8a3c\u8a2d\u5b9a\n * @param id {String} \u30e1\u30c3\u30bb\u30fc\u30b8 ID\n * @return {Object} message \u30e1\u30c3\u30bb\u30fc\u30b8\n * @returns {string} message.id Gmail Message ID\n * @returns {timestamp} message.timestamp \u30e1\u30fc\u30eb\u53d7\u4fe1\u6642\u523b\n * @returns {string} message.rfc822msgId RFC 822 Message-ID\n *\/\nfunction getMessage(auth, id) {\n    const response = httpClient.begin()\n        .authSetting(auth)\n        .queryParam(&apos;format&apos;, &apos;metadata&apos;)\n        .get(`https:\/\/gmail.googleapis.com\/gmail\/v1\/users\/me\/messages\/${id}`);\n    const responseJson = response.getResponseAsString();\n    const status = response.getStatusCode();\n    if (status &gt;= 300) {\n        const accessLog = `--- users.messages.get --- ${status}\\n${responseJson}\\n`;\n        engine.log(accessLog);\n        throw `Failed to get message ${id}. status: ${status}`;\n    }\n\n    const json = JSON.parse(responseJson);\n    const msgIdHeader = json.payload.headers.find(h =&gt; h.name.toLowerCase() === &apos;message-id&apos;);\n    const rfc822msgId = msgIdHeader !== undefined ? msgIdHeader.value : &apos;&apos;;\n    return {\n        id: json.id,\n        timestamp: new java.sql.Timestamp(Number(json.internalDate)),\n        rfc822msgId\n    };\n}\n\n    <\/code><\/pre><\/div>\n<\/div><\/details><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>This item starts a Process when Gmail has received a new message.<\/p>\n","protected":false},"author":17,"featured_media":104501,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","_uag_custom_page_level_css":"","advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_seo_schema_type":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false},"categories":[551],"tags":[3162],"class_list":["post-100007","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bpmn-icons","tag-google-workspace"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/start-event-gmail-message-received.png?fit=1200%2C675&ssl=1","uagb_featured_image_src":{"full":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/start-event-gmail-message-received.png?fit=1200%2C675&ssl=1",1200,675,false],"thumbnail":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/start-event-gmail-message-received.png?resize=440%2C440&ssl=1",440,440,true],"medium":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/start-event-gmail-message-received.png?fit=560%2C315&ssl=1",560,315,true],"medium_large":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/start-event-gmail-message-received.png?fit=768%2C432&ssl=1",768,432,true],"large":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/start-event-gmail-message-received.png?fit=1024%2C576&ssl=1",1024,576,true],"1536x1536":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/start-event-gmail-message-received.png?fit=1200%2C675&ssl=1",1200,675,true],"2048x2048":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/start-event-gmail-message-received.png?fit=1200%2C675&ssl=1",1200,675,true],"newspack-article-block-landscape-large":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/start-event-gmail-message-received.png?resize=1200%2C675&ssl=1",1200,675,true],"newspack-article-block-portrait-large":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/start-event-gmail-message-received.png?resize=900%2C675&ssl=1",900,675,true],"newspack-article-block-square-large":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/start-event-gmail-message-received.png?resize=1200%2C675&ssl=1",1200,675,true],"newspack-article-block-landscape-medium":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/start-event-gmail-message-received.png?resize=800%2C600&ssl=1",800,600,true],"newspack-article-block-portrait-medium":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/start-event-gmail-message-received.png?resize=600%2C675&ssl=1",600,675,true],"newspack-article-block-square-medium":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/start-event-gmail-message-received.png?resize=800%2C675&ssl=1",800,675,true],"newspack-article-block-landscape-intermediate":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/start-event-gmail-message-received.png?resize=600%2C450&ssl=1",600,450,true],"newspack-article-block-portrait-intermediate":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/start-event-gmail-message-received.png?resize=450%2C600&ssl=1",450,600,true],"newspack-article-block-square-intermediate":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/start-event-gmail-message-received.png?resize=600%2C600&ssl=1",600,600,true],"newspack-article-block-landscape-small":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/start-event-gmail-message-received.png?resize=400%2C300&ssl=1",400,300,true],"newspack-article-block-portrait-small":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/start-event-gmail-message-received.png?resize=300%2C400&ssl=1",300,400,true],"newspack-article-block-square-small":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/start-event-gmail-message-received.png?resize=400%2C400&ssl=1",400,400,true],"newspack-article-block-landscape-tiny":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/start-event-gmail-message-received.png?resize=200%2C150&ssl=1",200,150,true],"newspack-article-block-portrait-tiny":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/start-event-gmail-message-received.png?resize=150%2C200&ssl=1",150,200,true],"newspack-article-block-square-tiny":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/start-event-gmail-message-received.png?resize=200%2C200&ssl=1",200,200,true],"newspack-article-block-uncropped":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/start-event-gmail-message-received.png?fit=1200%2C675&ssl=1",1200,675,true]},"uagb_author_info":{"display_name":"Shiho Tatsumi","author_link":"https:\/\/support.questetra.com\/en\/author\/tatsumi48c607ec82\/"},"uagb_comment_info":3,"uagb_excerpt":"This item starts a Process when Gmail has received a new message.","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9DiIh-q11","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":76145,"url":"https:\/\/support.questetra.com\/en\/bpmn-icons\/message-start-event-email\/","url_meta":{"origin":100007,"position":0},"title":"Message Start Event (email)","author":"Hirotaka NISHI","date":"2019-04-05","format":false,"excerpt":"Starts a new process automatically by receiving an email. Capable of storing the address of the received email, subject, text body, and file attachment as Data Items.","rel":"","context":"In &quot;BPMN Icons&quot;","block_context":{"text":"BPMN Icons","link":"https:\/\/support.questetra.com\/en\/category\/bpmn-icons\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2019\/10\/bpmn-icon-message-start-event-email-1200x675.png?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2019\/10\/bpmn-icon-message-start-event-email-1200x675.png?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2019\/10\/bpmn-icon-message-start-event-email-1200x675.png?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2019\/10\/bpmn-icon-message-start-event-email-1200x675.png?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2019\/10\/bpmn-icon-message-start-event-email-1200x675.png?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":112242,"url":"https:\/\/support.questetra.com\/en\/developer-blog\/gmail-start\/","url_meta":{"origin":100007,"position":1},"title":"Starting a Case Triggered by Receiving a Gmail","author":"Hirotaka NISHI","date":"2024-10-17","format":false,"excerpt":"Monitors the reception of Gmail in Google Workspace, and when an email with the specified conditions is received, it automatically starts a Case and saves the information contained in the email as Case Data. Gmail's \"label\" is used as a condition to specify an email.","rel":"","context":"In &quot;Questetra Developers Blog&quot;","block_context":{"text":"Questetra Developers Blog","link":"https:\/\/support.questetra.com\/en\/category\/developer-blog\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/08\/eye-catch-gmail-start.png?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/08\/eye-catch-gmail-start.png?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/08\/eye-catch-gmail-start.png?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/08\/eye-catch-gmail-start.png?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/08\/eye-catch-gmail-start.png?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":78638,"url":"https:\/\/support.questetra.com\/en\/developer-blog\/throwing-message-intermediate-event-email-troubleshooting\/","url_meta":{"origin":100007,"position":2},"title":"Let&#8217;s Send an Email Automatically in the Middle of a Workflow (Non-delivery response chapter)","author":"Hirotaka NISHI","date":"2020-03-23","format":false,"excerpt":"Introducing methods of cause investigation and solution when trouble occurs in automatic mail transmission by \"Throwing Message Intermediate Event (Email).\"","rel":"","context":"In &quot;Questetra Developers Blog&quot;","block_context":{"text":"Questetra Developers Blog","link":"https:\/\/support.questetra.com\/en\/category\/developer-blog\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2019\/07\/featured-image-message-intermediate-event-email.png?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2019\/07\/featured-image-message-intermediate-event-email.png?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2019\/07\/featured-image-message-intermediate-event-email.png?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2019\/07\/featured-image-message-intermediate-event-email.png?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2019\/07\/featured-image-message-intermediate-event-email.png?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":104118,"url":"https:\/\/support.questetra.com\/en\/bpmn-icons\/service-task-gmail-message-label-remove\/","url_meta":{"origin":100007,"position":3},"title":"Gmail: Remove Label from Email Message","author":"Shiho Tatsumi","date":"2024-05-23","format":false,"excerpt":"Removes labels from an email message in Gmail. You can remove multiple labels at once. When you remove multiple labels you should write one label per line.","rel":"","context":"In &quot;BPMN Icons&quot;","block_context":{"text":"BPMN Icons","link":"https:\/\/support.questetra.com\/en\/category\/bpmn-icons\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/service-task-gmail-message-label-remove.png?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/service-task-gmail-message-label-remove.png?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/service-task-gmail-message-label-remove.png?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/service-task-gmail-message-label-remove.png?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/03\/service-task-gmail-message-label-remove.png?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":78762,"url":"https:\/\/support.questetra.com\/en\/bpmn-icons\/message-start-event-webhook\/","url_meta":{"origin":100007,"position":4},"title":"Message Start Event (Webhook)","author":"Hirotaka NISHI","date":"2019-10-01","format":false,"excerpt":"Issues a URL that awaits Webhook (HTTP request) in a specified method. Starts a new Process automatically when a Webhook is received. Capable of storing the received request body in a String-type Data Item. Also possible to return an HTTP response with Business Data inserted.","rel":"","context":"In &quot;BPMN Icons&quot;","block_context":{"text":"BPMN Icons","link":"https:\/\/support.questetra.com\/en\/category\/bpmn-icons\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2019\/10\/bpmn-icon-message-start-event-webhook-1200x675.png?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2019\/10\/bpmn-icon-message-start-event-webhook-1200x675.png?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2019\/10\/bpmn-icon-message-start-event-webhook-1200x675.png?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2019\/10\/bpmn-icon-message-start-event-webhook-1200x675.png?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2019\/10\/bpmn-icon-message-start-event-webhook-1200x675.png?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":87741,"url":"https:\/\/support.questetra.com\/en\/bpmn-icons\/service-task-throwing-message-to-start-event\/","url_meta":{"origin":100007,"position":5},"title":"Service Task (Start Child Process)","author":"Peter Glover","date":"2023-04-19","format":false,"excerpt":"An automatic step that sends an HTTP request to Message Start Event (HTTP) on the same workflow platform. You can easily establish an inter-app connection simply by setting the send data. When a workflow App including Message Start Event (HTTP) is released, the corresponding Service Task is automatically generated.","rel":"","context":"In &quot;BPMN Icons&quot;","block_context":{"text":"BPMN Icons","link":"https:\/\/support.questetra.com\/en\/category\/bpmn-icons\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2020\/05\/bpmn-icon-service-task-throwing-message-to-start-event.png?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2020\/05\/bpmn-icon-service-task-throwing-message-to-start-event.png?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2020\/05\/bpmn-icon-service-task-throwing-message-to-start-event.png?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2020\/05\/bpmn-icon-service-task-throwing-message-to-start-event.png?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2020\/05\/bpmn-icon-service-task-throwing-message-to-start-event.png?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]}],"amp_enabled":false,"_links":{"self":[{"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/posts\/100007","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/users\/17"}],"replies":[{"embeddable":true,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/comments?post=100007"}],"version-history":[{"count":56,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/posts\/100007\/revisions"}],"predecessor-version":[{"id":183783,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/posts\/100007\/revisions\/183783"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/media\/104501"}],"wp:attachment":[{"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/media?parent=100007"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/categories?post=100007"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/tags?post=100007"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}