驗證類別範本由 2024 年 7 月 1 日起在印度開放。
如果您的流動應用程式可供用戶選擇經由 WhatsApp 接收單次密碼或驗證碼,您必須使用驗證類別範本。
驗證類別範本由以下部分組成:
一鍵自動填入按鈕可提供最佳的用戶體驗,因此是首選的解決方案。不過,目前只有 Android 支援一鍵自動填入按鈕,而且您需要變更自己應用程式的代碼。
請查看其他守則,了解驗證類別範本的適用情況。
驗證類別範本包含一鍵自動填入按鈕。
當 WhatsApp 用戶點按自動填入按鈕時,WhatsApp 用戶端會觸發一個活動,以開啟您的應用程式並向其提供密碼或代碼。
請參閱一鍵自動填入驗證類別範本以了解其使用方法。
透過複製代碼驗證類別範本,您可連同複製代碼按鈕,向用戶傳送單次密碼或驗證碼。
WhatsApp 用戶點按複製代碼按鈕之後,WhatsApp 用戶端會將密碼或驗證碼複製至裝置的剪貼簿。然後,用戶便可以切換到您的應用程式,將有關密碼或驗證碼貼到您的應用程式。
請參閱複製代碼驗證類別範本以了解其使用方法。
透過免點按驗證類別範本,用戶可在不離開應用程式的情況下接收經由 WhatsApp 傳送的單次密碼或驗證碼。
如果您使用免點按驗證類別範本向應用程式的用戶傳送其所要求的密碼或驗證碼,則 WhatsApp 用戶端會廣播此密碼或驗證碼,然後應用程式便可使用廣播接收器擷取此密碼或驗證碼。
請參閱免點按驗證類別範本以了解其使用方法。
如果訊息無法成功傳送至 WhatsApp 用戶,我們會在一段時間內繼續嘗試傳送此訊息。這段時間稱為「存留時間」。
根據預設,訊息存留時間為 30 天,但新建立的驗證類別範本預設存留時間為 10 分鐘。
如果驗證類別範本在一定時間內無法送達,即超出存留時間,我們會停止重試並放棄此訊息。如果傳送驗證類別範本訊息的要求之間的相隔時間超過存留時間而您沒有收到 Webhook,則可假定我們已經放棄此訊息。
如要在建立驗證類別範本時覆寫預設存留時間,請加入 message_send_ttl_seconds
屬性,以及設定為介乎 60
至 600
秒的值。
至於在此功能生效前已建立的現有範本,其存留時間為 30 天。如有需要,您可以編輯現有範本,並透過設定 message_send_ttl_seconds
屬性來覆寫其存留時間。
您也可以將驗證類別範本的 message_send_ttl_seconds
屬性設定為 -1
,如此一來存留時間便會變為 30 天。
我們建議為所有驗證類別範本設定一個存留時間,最好是相當於或早於驗證碼的到期時間,以確保顧客只在驗證碼有效期間收到訊息。
請注意,傳送失敗的訊息 Webhook 可能會有些許延遲,因此建議您在預計到訊息遭放棄時預留一小段緩衝時間。
您可以使用 WhatsApp Business 帳戶 > 訊息範本預覽端點來產生不同語言的驗證類別範本文字預覽,當中可包含或不包含安全建議字串和驗證碼有效期限字串。
GET /<WHATSAPP_BUSINESS_ACCOUNT_ID>/message_template_previews ?category=AUTHENTICATION, &language=<LANGUAGE>, // Optional &add_security_recommendation=<ADD_SECURITY_RECOMMENDATION>, // Optional &code_expiration_minutes=<CODE_EXPIRATION_MINUTES>, // Optional &button_types=<BUTTON_TYPES> // Optional
預留位置 | 說明 | 範例值 |
---|---|---|
逗號分隔清單 | 此為選用項目。 您想傳回的語言版本之語言和本地設定代碼逗號分隔清單。 如省略此值,則會傳回所有支援語言。 |
|
Boolean | 此為選用項目。 如果您希望回覆中包含安全建議正文字串,請將此值設定為 如省略此值,則不會包含安全建議字串。 |
|
Int64 | 此為選用項目。 如果您希望回覆中包含驗證碼有效期限頁尾字串,請將此值設定為某個整數。 如省略此值,則不會包含驗證碼有效期限頁尾字串。 此值表示驗證碼在多少分鐘後過期。 最小為 |
|
字串逗號分隔清單 | 此為必要項目。 表示按鈕類型的字串逗號分隔清單。 如包含此值,則回覆會包含每個按鈕的按鈕文字。 如果是驗證類別範本,此值必須為 |
|
curl 'https://graph.facebook.com/v17.0/102290129340398/message_template_previews?category=AUTHENTICATION&languages=en_US,es_ES&add_security_recommendation=true&code_expiration_minutes=10&button_types=OTP' \ -H 'Authorization: Bearer EAAJB...'
{ "data": [ { "body": "*{{1}}* is your verification code. For your security, do not share this code.", "buttons": [ { "autofill_text": "Autofill", "text": "Copy code" } ], "footer": "This code expires in 10 minutes.", "language": "en_US" }, { "body": "Tu código de verificación es *{{1}}*. Por tu seguridad, no lo compartas.", "buttons": [ { "autofill_text": "Autocompletar", "text": "Copiar código" } ], "footer": "Este código caduca en 10 minutos.", "language": "es_ES" } ] }
使用 WhatsApp Business 帳戶 > Upsert 訊息範本端點批量更新或建立多語言驗證類別範本,當中包含或不包含選用的安全及過期警告。
如果已存在名稱和語言相符的範本,則此範本會更新為要求內容,否則將建立新範本。
POST /<WHATSAPP_BUSINESS_ACCOUNT_ID>/upsert_message_templates
{ "name": "<NAME>", "languages": [<LANGUAGES>], "category": "AUTHENTICATION", "components": [ { "type": "BODY", "add_security_recommendation": <ADD_SECURITY_RECOMMENDATION> // Optional }, { "type": "FOOTER", "code_expiration_minutes": <CODE_EXPIRATION_MINUTES> // Optional }, { "type": "BUTTONS", "buttons": [ { "type": "OTP", "otp_type": "<OTP_TYPE>", "package_name": "<PACKAGE_NAME>", // One-tap buttons only "signature_hash": "SIGNATURE_HASH>", // One-tap buttons only } ] } ] }
除了以下屬性,所有範本建立屬性均受支援:
text
屬性。autofill_text
屬性。此範例建立了 3 個分別以英文、西班牙文和法文顯示的驗證類別範本,當中均有複製代碼按鈕。每個範本均以「authentication_code_copy_code_button」命名,並包含安全建議和有效期限。
curl 'https://graph.facebook.com/v17.0/102290129340398/upsert_message_templates' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer EAAJB...' \ -d ' { "name": "authentication_code_copy_code_button", "languages": ["en_US","es_ES","fr"], "category": "AUTHENTICATION", "components": [ { "type": "BODY", "add_security_recommendation": true }, { "type": "FOOTER", "code_expiration_minutes": 10 }, { "type": "BUTTONS", "buttons": [ { "type": "OTP", "otp_type": "COPY_CODE" } ] } ] }'
此範例(1)更新了名為「authentication_code_autofill_button」且語言為「en_US」的現有範本,(2)建立了 2 個語言分別為西班牙文和法文的新驗證類別範本,當中均有一鍵自動填入按鈕。兩個新建立的範本均以「authentication_code_autofill_button」命名,並包含安全建議和有效期限。
curl 'https://graph.facebook.com/v17.0/102290129340398/upsert_message_templates' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer EAAJB...' \ -d ' { "name": "authentication_code_autofill_button", "languages": ["en_US","es_ES","fr"], "category": "AUTHENTICATION", "components": [ { "type": "BODY", "add_security_recommendation": true }, { "type": "FOOTER", "code_expiration_minutes": 15 }, { "type": "BUTTONS", "buttons": [ { "type": "OTP", "otp_type": "ONE_TAP", "package_name": "com.example.luckyshrub", "signature_hash": "K8a%2FAINcGX7" } ] } ] }'
{ "data": [ { "id": "954638012257287", "status": "APPROVED", "language": "en_US" }, { "id": "969725527415202", "status": "APPROVED", "language": "es_ES" }, { "id": "969725530748535", "status": "APPROVED", "language": "fr" } ] }
請參閱 Github 上適用於 Android 的 WhatsApp 單次密碼(OTP)應用程式範例。此應用程式範例示範如何透過 API 傳送和接收 OTP 密碼和代碼、如何整合一鍵自動填入和複製代碼按鈕、如何建立範本,以及如何創立伺服器範例。