{"id":396713,"date":"2026-11-05T14:19:32","date_gmt":"2026-11-05T14:19:32","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/cod-confirm\/"},"modified":"2026-11-05T14:19:09","modified_gmt":"2026-11-05T14:19:09","slug":"takeed-cod-order-confirmation","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/takeed-cod-order-confirmation\/","author":23600415,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.4","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Takeed COD Order Confirmation for WooCommerce","header_author":"Anis Hamdi","header_description":"Confirms cash-on-delivery orders over the official WhatsApp Cloud API: confirm, cancel or change address, pick a delivery slot, one reminder, daily summary.","assets_banners_color":"8bbaa5","last_updated":"2026-11-05 14:19:09","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/anis-automatisation.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":47,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"anishamdi","date":"2026-11-05 14:19:09","revision":3786189}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3786189,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3786189,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3786189,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3786189,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3786189,"resolution":"1","location":"assets","locale":"","width":1280,"height":800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3786189,"resolution":"2","location":"assets","locale":"","width":1280,"height":800},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3786189,"resolution":"3","location":"assets","locale":"","width":1280,"height":800},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3786189,"resolution":"4","location":"assets","locale":"","width":1280,"height":800}},"screenshots":{"1":"Settings page (WooCommerce \u2192 Takeed): your own Meta credentials, template names, reminder delay and language.","2":"Order notes written by the plugin: confirmation sent, buyer confirmed, slot chosen, a forwarded buyer message.","3":"A change of mind: the order is cancelled and the seller e-mail says \"do not ship it\".","4":"The daily summary e-mail: counts of the last 24 hours and the buyer messages."}},"plugin_section":[],"plugin_tags":[31179,31178,13827,226324,286],"plugin_category":[45],"plugin_contributors":[290896],"plugin_business_model":[],"class_list":["post-396713","plugin","type-plugin","status-publish","hentry","plugin_tags-cash-on-delivery","plugin_tags-cod","plugin_tags-delivery","plugin_tags-order-confirmation","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-anishamdi","plugin_committers-anishamdi"],"banners":{"banner":"https:\/\/ps.w.org\/takeed-cod-order-confirmation\/assets\/banner-772x250.png?rev=3786189","banner_2x":"https:\/\/ps.w.org\/takeed-cod-order-confirmation\/assets\/banner-1544x500.png?rev=3786189","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/takeed-cod-order-confirmation\/assets\/icon-128x128.png?rev=3786189","icon_2x":"https:\/\/ps.w.org\/takeed-cod-order-confirmation\/assets\/icon-256x256.png?rev=3786189","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/takeed-cod-order-confirmation\/assets\/screenshot-1.png?rev=3786189","caption":"Settings page (WooCommerce \u2192 Takeed): your own Meta credentials, template names, reminder delay and language."},{"src":"https:\/\/ps.w.org\/takeed-cod-order-confirmation\/assets\/screenshot-2.png?rev=3786189","caption":"Order notes written by the plugin: confirmation sent, buyer confirmed, slot chosen, a forwarded buyer message."},{"src":"https:\/\/ps.w.org\/takeed-cod-order-confirmation\/assets\/screenshot-3.png?rev=3786189","caption":"A change of mind: the order is cancelled and the seller e-mail says \"do not ship it\"."},{"src":"https:\/\/ps.w.org\/takeed-cod-order-confirmation\/assets\/screenshot-4.png?rev=3786189","caption":"The daily summary e-mail: counts of the last 24 hours and the buyer messages."}],"raw_content":"<!--section=description-->\n<p>Fake and forgotten cash-on-delivery (COD) orders cost you a delivery fee and a parcel that comes back. This plugin asks every COD buyer to confirm on WhatsApp before you ship, and writes every answer into the WooCommerce order.<\/p>\n\n<p>It uses the official WhatsApp Cloud API with your own Meta app and your own WhatsApp Business phone number. There is no account to open with us and no service in between.<\/p>\n\n<h4>How it works<\/h4>\n\n<ol>\n<li>A buyer places an order with the \"Cash on delivery\" payment method. The plugin sends your approved WhatsApp \"utility\" template to the billing phone: reply 1 to confirm, 2 to cancel, 3 to change the address.<\/li>\n<li><strong>Reply 1:<\/strong> the order note says \"Buyer confirmed\", and the buyer is asked for a delivery slot: A = morning, B = evening (in Arabic: \u0623 \/ \u0628).<\/li>\n<li><strong>Reply A or B:<\/strong> the slot is saved on the order and the buyer gets a short confirmation.<\/li>\n<li><strong>Reply 2:<\/strong> the order is cancelled and the buyer is told.<\/li>\n<li><strong>Reply 3:<\/strong> the order is put on hold with the note \"Call the buyer before shipping\", and you get an e-mail with the buyer's number.<\/li>\n<li><strong>No reply:<\/strong> after 6 hours (you choose 1 to 72) exactly one reminder template is sent. If there is still no answer after the same delay again, the order note says so.<\/li>\n<li><strong>Change of mind:<\/strong> a buyer who confirmed and then replies 2 before the order is completed gets the order cancelled, and you get an e-mail saying \"do not ship it\".<\/li>\n<li><strong>Anything else<\/strong> (free text, emoji, voice note, image, sticker): it is added to the order notes at once. The first message of an order is e-mailed to you straight away; later ones are grouped into at most one e-mail per order per hour. The buyer gets one short \"please reply 1, 2 or 3\" message per order, never more.<\/li>\n<li><strong>Every day<\/strong> you get one e-mail: confirmed, cancelled, no reply, address changes, morning and evening slots, and the buyer messages of the last 24 hours.<\/li>\n<\/ol>\n\n<h4>What the buyer can type<\/h4>\n\n<ul>\n<li>Western or Arabic-Indic digits: 1 or \u0661, 2 or \u0662, 3 or \u0663.<\/li>\n<li>Latin or Arabic letters for the slot: A or \u0623, B or \u0628, upper or lower case.<\/li>\n<li>Extra spaces, a trailing dot or \"!\" are fine: \" 1. \" counts as 1.<\/li>\n<\/ul>\n\n<h4>Languages<\/h4>\n\n<p>The follow-up messages to the buyer exist in Arabic, French and English. Arabic messages are right-to-left safe.<\/p>\n\n<h4>Built to be safe<\/h4>\n\n<ul>\n<li>Every webhook call is checked with your Meta app secret (X-Hub-Signature-256). Calls with a wrong signature are refused.<\/li>\n<li>Meta sometimes delivers the same message more than once. Each message is handled exactly once.<\/li>\n<li>The same answer sent twice (1 then 1, A then A) is ignored: no second message, no second note.<\/li>\n<li>Replies to an order that is cancelled, on address change, completed or refunded are ignored.<\/li>\n<li>The access token and the app secret are never shown back on the settings page.<\/li>\n<li>Works with the classic checkout and the block checkout, and with High-Performance Order Storage (HPOS).<\/li>\n<\/ul>\n\n<p>Every feature is free. There is no paid version, no limit and no upsell.<\/p>\n\n<h4>You use your own WhatsApp Business account<\/h4>\n\n<p>The plugin talks directly to the official WhatsApp Cloud API (Meta) with your own access token, phone number ID and app secret.\nMeta may charge you for WhatsApp conversations according to its own pricing. The plugin does not send your data anywhere else.<\/p>\n\n<h4>External service<\/h4>\n\n<p>This plugin connects to the WhatsApp Cloud API (graph.facebook.com), a service by Meta Platforms, Inc.\nIt sends the buyer's phone number, first name, order number and order total when a COD order is placed, and the short follow-up messages after the buyer replies. It receives the buyer's replies on the webhook URL shown on the settings page.\nTerms: https:\/\/www.whatsapp.com\/legal\/business-terms\nPrivacy policy: https:\/\/www.whatsapp.com\/legal\/privacy-policy<\/p>\n\n<p>This plugin is not made, endorsed or supported by Meta Platforms, Inc. WhatsApp is a trademark of its owner.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate WooCommerce and this plugin.<\/li>\n<li>In Meta for Developers, create an app with the WhatsApp product and a phone number. Copy the phone number ID, a permanent access token (system user) and the app secret.<\/li>\n<li>In WhatsApp Manager, create two \"utility\" templates in your language and wait for approval:\n\n<ul>\n<li>Confirmation, with variables {{1}} first name, {{2}} order number, {{3}} order total. Tell the buyer to reply 1, 2 or 3.<\/li>\n<li>Reminder, with variables {{1}} first name, {{2}} order number.<\/li>\n<\/ul><\/li>\n<li>Go to WooCommerce \u2192 Takeed. Fill in the token, phone number ID, app secret, a verify token of your choice, the two template names, the reminder delay and the language.<\/li>\n<li>In the Meta app, open WhatsApp \u2192 Configuration \u2192 Webhook. Paste the webhook URL shown on the settings page and the same verify token. Subscribe to the \"messages\" field.<\/li>\n<li>Place a test COD order with your own phone number.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20can%20the%20buyer%20reply%20to%20the%20confirmation%20message%3F\"><h3>What can the buyer reply to the confirmation message?<\/h3><\/dt>\n<dd><p>1 to confirm, 2 to cancel, 3 to change the address. Western digits (1 2 3) and Arabic-Indic digits (\u0661 \u0662 \u0663) both work, with or without extra spaces or a trailing dot. Until the buyer gives one of these three answers, they can still answer, also after the reminder and after the order was marked \"No reply\".<\/p><\/dd>\n<dt id=\"how%20does%20the%20delivery%20slot%20work%3F\"><h3>How does the delivery slot work?<\/h3><\/dt>\n<dd><p>After reply 1 the buyer is asked: A = morning, B = evening (\u0623 \/ \u0628 in Arabic). The chosen slot is saved on the order, written in an order note and counted in the daily summary. If the buyer sends something else (for example C), the slot question is asked once more. After that, wrong answers are only added to the order notes and forwarded to you; nothing more is sent to the buyer.<\/p><\/dd>\n<dt id=\"can%20the%20buyer%20change%20their%20mind%3F\"><h3>Can the buyer change their mind?<\/h3><\/dt>\n<dd><p>Yes, from \"confirmed\" to \"cancelled\": a buyer who replied 1 (with or without a slot) and then replies 2 gets the order cancelled, and you receive an e-mail \"the buyer cancelled after confirming, do not ship it\". This works until the order is completed, cancelled or refunded in WooCommerce; after that, replies are ignored. Reply 2 and reply 3 are final: after them the plugin stops answering, and any change is up to you.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20the%20buyer%20writes%20a%20message%2C%20sends%20a%20voice%20note%20or%20a%20photo%3F\"><h3>What happens when the buyer writes a message, sends a voice note or a photo?<\/h3><\/dt>\n<dd><p>While the 1 \/ 2 \/ 3 question is open, the buyer gets one short help message (\"please reply 1, 2 or 3\"), only once per order. Every such message is added to the order notes at once (\"Buyer wrote on WhatsApp: \u2026\"). Voice notes, images, stickers and videos appear as [voice], [image], [sticker], [video]; a reaction appears as its emoji. Image captions are not read.<\/p><\/dd>\n<dt id=\"will%20i%20get%20an%20e-mail%20for%20every%20buyer%20message%3F\"><h3>Will I get an e-mail for every buyer message?<\/h3><\/dt>\n<dd><p>No. The first forwarded message of an order is e-mailed to the site admin address at once. Later messages of the same order are grouped and sent together, at most one e-mail per order per hour. The grouped e-mail is sent by the plugin's 15-minute cron job, so it can arrive up to about 1 hour 15 minutes after the previous one. Order notes are always immediate.<\/p><\/dd>\n<dt id=\"how%20many%20reminders%20are%20sent%3F\"><h3>How many reminders are sent?<\/h3><\/dt>\n<dd><p>Exactly one per order, after the delay you set (6 hours by default, 1 to 72). The order is marked as reminded before the template is sent, so a repeated or failed cron run can never send a second one. If the reminder template name is empty, no reminder is sent and the order note says so.<\/p><\/dd>\n<dt id=\"what%20is%20in%20the%20daily%20summary%20e-mail%3F\"><h3>What is in the daily summary e-mail?<\/h3><\/dt>\n<dd><p>Once a day, the site admin address gets the orders sent for confirmation in the last 24 hours: confirmed, cancelled, no reply (also orders still waiting for an answer), address change requested, and morning \/ evening slots, followed by the buyer messages of the last 24 hours. On a day with no orders and no messages, nothing is sent.<\/p><\/dd>\n<dt id=\"whose%20whatsapp%20account%20sends%20the%20messages%3F\"><h3>Whose WhatsApp account sends the messages?<\/h3><\/dt>\n<dd><p>Yours. You create the app in Meta for Developers, connect your own WhatsApp Business phone number, create and get your own templates approved, and paste your token, phone number ID and app secret into WooCommerce \u2192 Takeed. Meta bills you directly for conversations, according to its own pricing. Messages for another phone number of the same Meta app are ignored.<\/p><\/dd>\n<dt id=\"what%20if%20meta%20delivers%20the%20same%20message%20twice%3F\"><h3>What if Meta delivers the same message twice?<\/h3><\/dt>\n<dd><p>It is handled once. Each WhatsApp message ID is claimed with one atomic database write before anything happens, so even two deliveries arriving at the same moment cannot both act. These markers are deleted after 7 days, and on uninstall. Separately, if the buyer sends the same answer twice (1 then 1), the second one is ignored.<\/p><\/dd>\n<dt id=\"which%20orders%20get%20a%20message%2C%20and%20why%20is%20my%20reminder%20or%20summary%20late%3F\"><h3>Which orders get a message, and why is my reminder or summary late?<\/h3><\/dt>\n<dd><p>Only new orders paid with \"Cash on delivery\", from the classic or the block checkout, once per order. The billing phone is completed with the country calling code of the billing country; if it is still not valid, the order note says the message was not sent. Reminders, grouped e-mails and the summary use WP-Cron, which runs when your site gets visits. On a quiet site, set up a real cron job that calls wp-cron.php every 5 to 15 minutes.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release: confirmation template for COD orders, replies 1 \/ 2 \/ 3, delivery slot A \/ B, one reminder, daily summary email, Arabic \/ French \/ English.<\/li>\n<\/ul>","raw_excerpt":"Ask every cash-on-delivery buyer to confirm on WhatsApp: reply 1, 2 or 3, then pick a delivery slot. Uses your own WhatsApp Business account.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/396713","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=396713"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/anishamdi"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=396713"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=396713"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=396713"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=396713"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=396713"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=396713"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}