{"title":"Ask to select one or more answers from a list","category":"default","creationDate":1776961627,"content":"<div class=\"additional-info-block output-inline\">\n<h5 class=\"article__heading additional-info-block__title\">Single-answer option<\/h5><div class=\"additional-info-block__body\"><p>For cases where you require the user to select only one option, you can use a <a href=\"\/pt\/point-of-sale\/shopper-engagement\/shopper-input\/menu\">single-answer question<\/a>.<\/p><\/div><\/div>\n\n<p>We describe here how you can use an input request to ask the shopper a question and allow them to select more than one answer. You can use this, for example, to create a customer survey. You can show a header (your question) and up to 15 scrollable option buttons. Each option button can contain one text line.<\/p>\n<h2>Requirements<\/h2>\n<p>Before you begin, take into account the following requirement.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Requirement<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><strong>Integration type<\/strong><\/td>\n<td style=\"text-align: left;\">A <a href=\"\/pt\/point-of-sale\/get-started\">Terminal API integration<\/a> with payment terminals.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>How it works<\/h2>\n<p>When you use a <span translate=\"no\"><strong>MenuButtons<\/strong><\/span> <code>InputRequest<\/code>, the terminal prompts the shopper to answer a question that allows them to select multiple answers. The terminal continues to show your input request until one of these events occurs:<\/p>\n<ul>\n<li>The user has provided input.<\/li>\n<li>The maximum input time expires. You can set this time in the request.<\/li>\n<li>On the terminal, <strong>Cancel<\/strong> <strong><img alt=\"\" src=\"\/images\/6\/2\/0\/e\/0\/620e0c5c343676dd2b947bbdb1573f7eebc3caf7-cancel2x.png\" \/><\/strong> is selected.<\/li>\n<li>The terminal receives a <a href=\"\/pt\/point-of-sale\/shopper-engagement\/shopper-input\/cancel-input\">request to cancel collecting input<\/a> or any other request from the POS app.<\/li>\n<\/ul>\n<h3>Examples<\/h3>\n<p>This example shows a list where the shopper can select more than one of the answers on a portrait, small portrait, and landscape display<\/p>\n<div class=\"sc-columns\" style=\"columns:2 auto;-moz-columns:2 auto;column-gap:normal;-moz-column-gap:normal;\">\n<div style=\"text-align: center;\">\n<p><img alt=\"\" src=\"\/images\/f\/8\/f\/1\/6\/f8f164f0f78fe269697b4d1ede99219ef1f9030d-screen-enmultiselectportrait.png\" \/><\/p>\n<\/div>\n<div style=\"text-align: center;\">\n<p><img alt=\"\" src=\"\/images\/b\/1\/a\/d\/f\/b1adf5b3c18dafcdc330ba08a42fd224d5c32dcd-screen-enmultiselect285.png\" \/><\/p>\n<\/div>\n<\/div>\n<p><br><\/p>\n<div style=\"text-align: center;\">\n<p><img alt=\"\" src=\"\/images\/b\/5\/2\/8\/1\/b528182215db19f4e945e74601ea472969751592-screen-enmultiselectlandscape.png\" \/><\/p>\n<\/div>\n<h2 id=\"menu-input-request\">Make a multiple-answers MenuButtons input request<\/h2>\n<p>We support two <span translate=\"no\"><strong>MenuButtons<\/strong><\/span> input requests:<\/p>\n<ul>\n<li><a href=\"\/pt\/point-of-sale\/shopper-engagement\/shopper-input\/menu\">Multiple choice\u2014single answer<\/a>: ensures no more than one answer is selected.<\/li>\n<li>Multiple choice&mdash;multiple answers: allows selecting more than one answer.<\/li>\n<\/ul>\n<p>To enable the selection of multiple answers, your request needs to include the <code>MinLength<\/code> or <code>MaxLength<\/code> parameters.<\/p>\n<p>To use the payment terminal to show a menu that allows the user to select more than one option:<\/p>\n<ol>\n<li>\n<p>Make a <a href=\"\/pt\/point-of-sale\/design-your-integration\/terminal-api\">Terminal API<\/a> input request, specifying:<\/p>\n<ul>\n<li>\n<p>The standard <a href=\"\/pt\/point-of-sale\/design-your-integration\/terminal-api#request-message-header\">\n  <code>SaleToPOIRequest.MessageHeader<\/code>\n<\/a> object, with <code>MessageClass<\/code> set to <span translate=\"no\"><strong>Device<\/strong><\/span> and <code>MessageCategory<\/code> set to <span translate=\"no\"><strong>Input<\/strong><\/span>.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: center;\">Required<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>ProtocolVersion<\/code><\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\"><strong>3.0<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>MessageClass<\/code><\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>Device<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>MessageCategory<\/code><\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>Input<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>MessageType<\/code><\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>Request<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>ServiceID<\/code><\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Your unique ID for this request, consisting of 1-10 alphanumeric characters. Must be unique within the last 48 hours for the terminal (<code>POIID<\/code>) being used.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>SaleID<\/code><\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Your unique ID for the system where you send this request from.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>POIID<\/code><\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">The unique ID of the terminal to send this request to. Format: <em>[device model]-[serial number]<\/em>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>The  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/terminal-api\/latest\/post\/input#request-DisplayOutput\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">InputRequest.DisplayOutput<\/a> object to define what is shown on the terminal:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>Device<\/code><\/td>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>CustomerDisplay<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>InfoQualify<\/code><\/td>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>Display<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>OutputContent.OutputFormat<\/code><\/td>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>Text<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>OutputContent.PredefinedContent.ReferenceID<\/code><\/td>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>MenuButtons<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>OutputContent.OutputText<\/code><\/td>\n<td style=\"text-align: left;\">An array of one <code>Text<\/code> field to specify the header. For example, to ask a multiple-choice question.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<li>\n<p>The  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/terminal-api\/latest\/post\/input#request-DisplayOutput-MenuEntry\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">InputRequest.DisplayOutput.MenuEntry<\/a> array of up to 15 items representing the options to choose from. The terminal shows these items as a scrollable list of buttons that the user can tap to select. Each item in the array has:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>OutputFormat<\/code><\/td>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>Text<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>OutputText<\/code><\/td>\n<td style=\"text-align: left;\">An array of one <code>Text<\/code> field to specify the answer or menu button.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<li>\n<p>The  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/terminal-api\/latest\/post\/input#request-InputData\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">InputRequest.InputData<\/a> object to handle the user input:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>Device<\/code><\/td>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>CustomerInput<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>InfoQualify<\/code><\/td>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>Input<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>InputCommand<\/code><\/td>\n<td style=\"text-align: left;\"><span translate=\"no\"><strong>GetMenuEntry<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>MaxInputTime<\/code><\/td>\n<td style=\"text-align: left;\">(Integer) Time-out in seconds. This is the time that the user gets to finish their input.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>MinLength<\/code><\/td>\n<td style=\"text-align: left;\">The minimum number of answers the user must select.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>MaxLength<\/code><\/td>\n<td style=\"text-align: left;\">The maximum number of answers the user is allowed to select.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"notices yellow\">\n<p>To allow selecting multiple answers, you must include the <code>MinLength<\/code> or <code>MaxLength<\/code> parameters.<\/p>\n<\/div>\n<\/li>\n<\/ul>\n<p>The following example asks the shopper to select options from a list.<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"''\" :id=\"'shopper-input_multiple'\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"JSON\",\"content\":\"{\\n    \\\"SaleToPOIRequest\\\":{\\n        \\\"MessageHeader\\\":{\\n            \\\"ProtocolVersion\\\":\\\"3.0\\\",\\n            \\\"MessageClass\\\":\\\"Device\\\",\\n            \\\"MessageCategory\\\":\\\"Input\\\",\\n            \\\"MessageType\\\":\\\"Request\\\",\\n            \\\"ServiceID\\\":\\\"0207111104\\\",\\n            \\\"SaleID\\\":\\\"POSSystemID12345\\\",\\n            \\\"POIID\\\":\\\"V400m-324688179\\\"\\n        },\\n        \\\"InputRequest\\\":{\\n            \\\"DisplayOutput\\\":{\\n                \\\"Device\\\":\\\"CustomerDisplay\\\",\\n                \\\"InfoQualify\\\":\\\"Display\\\",\\n                \\\"OutputContent\\\":{\\n                    \\\"OutputFormat\\\":\\\"Text\\\",\\n                    \\\"PredefinedContent\\\":{\\n                        \\\"ReferenceID\\\":\\\"MenuButtons\\\"\\n                    },\\n                    \\\"OutputText\\\":[\\n                        {\\n                            \\\"Text\\\": \\\"Subscribe to the following channels?\\\"\\n                        }\\n                    ]\\n                },\\n                \\\"MenuEntry\\\": [\\n                    {\\n                        \\\"OutputFormat\\\": \\\"Text\\\",\\n                        \\\"OutputText\\\": [\\n                            {\\n                                \\\"Text\\\": \\\"Email\\\"\\n                            }\\n                        ]\\n                    },\\n                    {\\n                        \\\"OutputFormat\\\": \\\"Text\\\",\\n                        \\\"OutputText\\\": [\\n                            {\\n                                \\\"Text\\\": \\\"SMS\\\"\\n                            }\\n                        ]\\n                    },\\n                    {\\n                        \\\"OutputFormat\\\": \\\"Text\\\",\\n                        \\\"OutputText\\\": [\\n                            {\\n                                \\\"Text\\\": \\\"Post\\\"\\n                            }\\n                        ]\\n                    }\\n                ]\\n            },\\n            \\\"InputData\\\": {\\n                \\\"Device\\\": \\\"CustomerInput\\\",\\n                \\\"InfoQualify\\\": \\\"Input\\\",\\n                \\\"InputCommand\\\": \\\"GetMenuEntry\\\",\\n                \\\"MaxInputTime\\\": 60,\\n                \\\"MinLength\\\": 0,\\n                \\\"MaxLength\\\": 3\\n            }\\n        }\\n    }\\n}\"},{\"language\":\"java\",\"tabTitle\":\"Java\",\"content\":\"SaleToPOIRequest saleToPOIRequest = new SaleToPOIRequest();\\nMessageHeader messageHeader = new MessageHeader();\\nsaleToPOIRequest.setMessageHeader(messageHeader);\\n\\nInputRequest inputRequest = new InputRequest();\\nDisplayOutput displayOutput = new DisplayOutput();\\ndisplayOutput.setDevice( DeviceType.CUSTOMER_DISPLAY );\\ndisplayOutput.setInfoQualify( InfoQualifyType.DISPLAY );\\nOutputContent outputContent = new OutputContent();\\noutputContent.setOutputFormat( OutputFormatType.TEXT );\\nPredefinedContent predefinedContent = new PredefinedContent();\\npredefinedContent.setReferenceID(\\\"MenuButtons\\\");\\noutputContent.setPredefinedContent(predefinedContent);\\nOutputText headerLine1 = new OutputText();\\nheaderLine1.setText(\\\"Subscribe to the following channels?\\\");\\noutputContent.getOutputText().add(headerLine1);\\ndisplayOutput.setOutputContent(outputContent);\\n\\nMenuEntry menuEntry1 = new MenuEntry();\\nmenuEntry1.setOutputFormat( OutputFormatType.TEXT );\\nOutputText option1Line1 = new OutputText();\\noption1Line1.setText(\\\"Email\\\");\\nmenuEntry1.getOutputText().add(option1Line1);\\ndisplayOutput.getMenuEntry().add(menuEntry1);\\n\\nMenuEntry menuEntry2 = new MenuEntry();\\nmenuEntry2.setOutputFormat( OutputFormatType.TEXT );\\nOutputText option2Line1 = new OutputText();\\noption2Line1.setText(\\\"SMS\\\");\\nmenuEntry2.getOutputText().add(option2Line1);\\ndisplayOutput.getMenuEntry().add(menuEntry2);\\n\\nMenuEntry menuEntry3 = new MenuEntry();\\nmenuEntry3.setOutputFormat( OutputFormatType.TEXT );\\nOutputText option3Line1 = new OutputText();\\noption3Line1.setText(\\\"Post\\\");\\nmenuEntry3.getOutputText().add(option3Line1);\\ndisplayOutput.getMenuEntry().add(menuEntry3);\\n\\ninputRequest.setDisplayOutput(displayOutput);\\n\\nInputData inputData = new InputData();\\ninputData.setDevice( DeviceType.CUSTOMER_INPUT );\\ninputData.setInfoQualify( InfoQualifyType.INPUT );\\ninputData.setInputCommand( InputCommandType.GET_MENU_ENTRY );\\ninputData.setMaxInputTime( BigInteger.valueOf(60) );\\ninputData.setMinLength( Integer.valueOf(0) );\\ninputData.setMaxLength( Integer.valueOf(3) );\\ninputRequest.setInputData(inputData);\\nsaleToPOIRequest.setInputRequest(inputRequest);\\nterminalAPIRequest.setSaleToPOIRequest(saleToPOIRequest);\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<li>\n<p>Wait for the user to supply the requested input.<\/p>\n<p>If input is received from the terminal, the input response includes an  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/terminal-api\/latest\/post\/input#responses-200-InputResult\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">InputResult<\/a> object with:<\/p>\n<ul>\n<li><code>Input.MenuEntryNumber<\/code>: An array that indicates the options that the user selected. For example, if the shopper selects the first and third options, the first and third items in the array are <code>1<\/code> and all other array items are <code>0<\/code>.<\/li>\n<\/ul>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Example response when the shopper selects the first and third options'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n \\\"SaleToPOIResponse\\\": {\\n     \\\"InputResponse\\\": {\\n         \\\"InputResult\\\": {\\n             \\\"Device\\\": \\\"CustomerInput\\\",\\n             \\\"InfoQualify\\\": \\\"Input\\\",\\n             \\\"Input\\\": {\\n                 \\\"InputCommand\\\": \\\"GetMenuEntry\\\",\\n                 \\\"MenuEntryNumber\\\": [\\n                     1,\\n                     0,\\n                     1\\n                 ]\\n             },\\n             \\\"Response\\\": {\\n                 \\\"AdditionalResponse\\\": \\\"outputTextWarning=The%20number%20of%20usable%20button%20text%20fields%20is%20three.\\\",\\n                 \\\"Result\\\": \\\"Success\\\"\\n             }\\n         },\\n         \\\"OutputResult\\\": {\\n             \\\"Device\\\": \\\"CustomerDisplay\\\",\\n             \\\"InfoQualify\\\": \\\"Display\\\",\\n             \\\"Response\\\": {\\n                 \\\"Result\\\": \\\"Success\\\"\\n             }\\n         }\\n     },\\n     \\\"MessageHeader\\\": {\\n         \\\"ProtocolVersion\\\":\\\"3.0\\\",\\n         \\\"MessageClass\\\":\\\"Device\\\",\\n         \\\"MessageCategory\\\":\\\"Input\\\",\\n         \\\"MessageType\\\":\\\"Request\\\",\\n         \\\"ServiceID\\\":\\\"0207111104\\\",\\n         \\\"SaleID\\\":\\\"POSSystemID12345\\\",\\n         \\\"POIID\\\":\\\"V400m-324688179\\\"\\n     }\\n }\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<ul>\n<li>\n<p>If the user selects fewer than the minimum number of answers specified in the <code>MinLength<\/code> parameter or more than the maximum number of answers specified in the <code>MaxLength<\/code> parameter, the response contains:<\/p>\n<ul>\n<li><code>InputResult.Response.Result<\/code>: <span translate=\"no\"><strong>Failure<\/strong><\/span><\/li>\n<li><code>Response.ErrorCondition<\/code>: <span translate=\"no\"><strong>NotAllowed<\/strong><\/span><\/li>\n<li>\n<p><code>AdditionalResponse<\/code>: contains the message <em>The number of selections are below the MinLength<\/em> or <em>The number of selections are above the MaxLength<\/em>.<\/p>\n<!-- list separator -->\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>If the input request times out, you receive an <a href=\"\/pt\/point-of-sale\/design-your-integration\/notifications\/event-notifications\">\n  <code>EventNotification<\/code>\n<\/a> with <code>EventDetails<\/code>: <span translate=\"no\"><strong>message=Did+not+receive+a+response+from+the+POI.<\/strong><\/span><\/p>\n<\/li>\n<li>\n<p>If you make a payment request while the input request is waiting for input on the terminal, the payment request overrides the input request. The <code>InputResult<\/code> has <code>Response.Result<\/code>: <span translate=\"no\"><strong>Failure<\/strong><\/span>, <code>Response.ErrorCondition<\/code>: <span translate=\"no\"><strong>Busy<\/strong><\/span>, and an <code>AdditionalResponse<\/code> containing the message <em>A higher priority request has been received<\/em>.<\/p>\n<\/li>\n<li>\n<p>If the user declined to respond (selected the <strong>Cancel<\/strong> key <strong><img alt=\"\" src=\"\/images\/6\/2\/0\/e\/0\/620e0c5c343676dd2b947bbdb1573f7eebc3caf7-cancel2x.png\" \/><\/strong>), the <code>InputResult<\/code> has <code>Response.Result<\/code>: <span translate=\"no\"><strong>Failure<\/strong><\/span> and <code>Response.ErrorCondition<\/code>: <span translate=\"no\"><strong>Cancel<\/strong><\/span>.<\/p>\n<!-- list separator -->\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Pass the relevant data from <code>InputResult.Input<\/code> to your system for validation and further use.<\/p>\n<\/li>\n<\/ol>\n<h2>See also<\/h2>\n<div class=\"see-also-links output-inline\" id=\"see-also\">\n<ul><li><a href=\"\/point-of-sale\/shopper-engagement\/shopper-input\/menu\"\n                        target=\"_self\"\n                        >\n                    Multiple choice - single answer\n                <\/a><\/li><li><a href=\"\/point-of-sale\/shopper-engagement\/shopper-input\/cancel-input\"\n                        target=\"_self\"\n                        >\n                    Cancel an input request\n                <\/a><\/li><li><a href=\"\/point-of-sale\/shopper-engagement\/shopper-input\/select-input-request\"\n                        target=\"_self\"\n                        >\n                    Ask for another type of input\n                <\/a><\/li><li><a href=\"\/point-of-sale\/shopper-engagement\/create-session\"\n                        target=\"_self\"\n                        >\n                    Create a session\n                <\/a><\/li><\/ul><\/div>\n","url":"https:\/\/docs.adyen.com\/pt\/point-of-sale\/shopper-engagement\/shopper-input\/multi-menu","articleFields":{"description":"Use an input request to ask a multiple-choice question and allow more than one answer.","feedback_component":true,"last_edit_on":"10-11-2021 17:17"},"algolia":{"url":"https:\/\/docs.adyen.com\/pt\/point-of-sale\/shopper-engagement\/shopper-input\/multi-menu","title":"Ask to select one or more answers from a list","content":"\nSingle-answer optionFor cases where you require the user to select only one option, you can use a single-answer question.\n\nWe describe here how you can use an input request to ask the shopper a question and allow them to select more than one answer. You can use this, for example, to create a customer survey. You can show a header (your question) and up to 15 scrollable option buttons. Each option button can contain one text line.\nRequirements\nBefore you begin, take into account the following requirement.\n\n\n\nRequirement\nDescription\n\n\n\n\nIntegration type\nA Terminal API integration with payment terminals.\n\n\n\nHow it works\nWhen you use a MenuButtons InputRequest, the terminal prompts the shopper to answer a question that allows them to select multiple answers. The terminal continues to show your input request until one of these events occurs:\n\nThe user has provided input.\nThe maximum input time expires. You can set this time in the request.\nOn the terminal, Cancel  is selected.\nThe terminal receives a request to cancel collecting input or any other request from the POS app.\n\nExamples\nThis example shows a list where the shopper can select more than one of the answers on a portrait, small portrait, and landscape display\n\n\n\n\n\n\n\n\n\n\n\n\nMake a multiple-answers MenuButtons input request\nWe support two MenuButtons input requests:\n\nMultiple choice\u2014single answer: ensures no more than one answer is selected.\nMultiple choice&mdash;multiple answers: allows selecting more than one answer.\n\nTo enable the selection of multiple answers, your request needs to include the MinLength or MaxLength parameters.\nTo use the payment terminal to show a menu that allows the user to select more than one option:\n\n\nMake a Terminal API input request, specifying:\n\n\nThe standard \n  SaleToPOIRequest.MessageHeader\n object, with MessageClass set to Device and MessageCategory set to Input.\n\n\n\nParameter\nRequired\nDescription\n\n\n\n\nProtocolVersion\n\n3.0\n\n\nMessageClass\n\nDevice\n\n\nMessageCategory\n\nInput\n\n\nMessageType\n\nRequest\n\n\nServiceID\n\nYour unique ID for this request, consisting of 1-10 alphanumeric characters. Must be unique within the last 48 hours for the terminal (POIID) being used.\n\n\nSaleID\n\nYour unique ID for the system where you send this request from.\n\n\nPOIID\n\nThe unique ID of the terminal to send this request to. Format: [device model]-[serial number].\n\n\n\n\n\n\n\nThe  InputRequest.DisplayOutput object to define what is shown on the terminal:\n\n\n\nParameter\nDescription\n\n\n\n\nDevice\nCustomerDisplay\n\n\nInfoQualify\nDisplay\n\n\nOutputContent.OutputFormat\nText\n\n\nOutputContent.PredefinedContent.ReferenceID\nMenuButtons\n\n\nOutputContent.OutputText\nAn array of one Text field to specify the header. For example, to ask a multiple-choice question.\n\n\n\n\n\nThe  InputRequest.DisplayOutput.MenuEntry array of up to 15 items representing the options to choose from. The terminal shows these items as a scrollable list of buttons that the user can tap to select. Each item in the array has:\n\n\n\nParameter\nDescription\n\n\n\n\nOutputFormat\nText\n\n\nOutputText\nAn array of one Text field to specify the answer or menu button.\n\n\n\n\n\nThe  InputRequest.InputData object to handle the user input:\n\n\n\nParameter\nDescription\n\n\n\n\nDevice\nCustomerInput\n\n\nInfoQualify\nInput\n\n\nInputCommand\nGetMenuEntry\n\n\nMaxInputTime\n(Integer) Time-out in seconds. This is the time that the user gets to finish their input.\n\n\nMinLength\nThe minimum number of answers the user must select.\n\n\nMaxLength\nThe maximum number of answers the user is allowed to select.\n\n\n\n\nTo allow selecting multiple answers, you must include the MinLength or MaxLength parameters.\n\n\n\nThe following example asks the shopper to select options from a list.\n\n\n\n\n\nWait for the user to supply the requested input.\nIf input is received from the terminal, the input response includes an  InputResult object with:\n\nInput.MenuEntryNumber: An array that indicates the options that the user selected. For example, if the shopper selects the first and third options, the first and third items in the array are 1 and all other array items are 0.\n\n\n\n\n\n\nIf the user selects fewer than the minimum number of answers specified in the MinLength parameter or more than the maximum number of answers specified in the MaxLength parameter, the response contains:\n\nInputResult.Response.Result: Failure\nResponse.ErrorCondition: NotAllowed\n\nAdditionalResponse: contains the message The number of selections are below the MinLength or The number of selections are above the MaxLength.\n\n\n\n\n\nIf the input request times out, you receive an \n  EventNotification\n with EventDetails: message=Did+not+receive+a+response+from+the+POI.\n\n\nIf you make a payment request while the input request is waiting for input on the terminal, the payment request overrides the input request. The InputResult has Response.Result: Failure, Response.ErrorCondition: Busy, and an AdditionalResponse containing the message A higher priority request has been received.\n\n\nIf the user declined to respond (selected the Cancel key ), the InputResult has Response.Result: Failure and Response.ErrorCondition: Cancel.\n\n\n\n\n\nPass the relevant data from InputResult.Input to your system for validation and further use.\n\n\nSee also\n\n\n                    Multiple choice - single answer\n                \n                    Cancel an input request\n                \n                    Ask for another type of input\n                \n                    Create a session\n                \n","type":"page","locale":"pt","boost":16,"hierarchy":{"lvl0":"Home","lvl1":"Terminais","lvl2":"Shopper engagement","lvl3":"Coletar informa\u00e7\u00f5es","lvl4":"Ask to select one or more answers from a list"},"hierarchy_url":{"lvl0":"https:\/\/docs.adyen.com\/pt","lvl1":"https:\/\/docs.adyen.com\/pt\/point-of-sale","lvl2":"https:\/\/docs.adyen.com\/pt\/point-of-sale\/shopper-engagement","lvl3":"https:\/\/docs.adyen.com\/pt\/point-of-sale\/shopper-engagement\/shopper-input","lvl4":"\/pt\/point-of-sale\/shopper-engagement\/shopper-input\/multi-menu"},"levels":5,"category":"In-person payments","category_color":"green","tags":["select","answers"]},"articleFiles":{"screen-EN_MultiSelect_285.png":"<img alt=\"\" src=\"https:\/\/docs.adyen.com\/images\/2\/f\/5\/2\/1\/2f5212e1e5ac37879e35b78a903a7f79066eae04-screen-enmultiselect285.png\" \/>","screen-EN_MultiSelect_landscape.png":"<img alt=\"\" src=\"https:\/\/docs.adyen.com\/images\/f\/7\/3\/a\/3\/f73a32bee138c95ab8866a6b976b1df20184714f-screen-enmultiselectlandscape.png\" \/>","screen-EN_MultiSelect_portrait.png":"<img alt=\"\" src=\"https:\/\/docs.adyen.com\/images\/c\/6\/7\/3\/0\/c6730c4cd8008ff616cc31db109dfa5948d2fed3-screen-enmultiselectportrait.png\" \/>","shopper-input_multiple.json":"<p alt=\"\">shopper-input_multiple.json<\/p>","shopper-response_multiple.json":"<p alt=\"\">shopper-response_multiple.json<\/p>"}}
