웹훅은 JSON 형태로 데이터를 전송합니다. 아래 페이로드에 대한 기본 구조 및 모아폼으로 만들 수 있는 모든 종류의 질문 형태들로 제작된 설문에 대한 샘플 답변을 웹훅으로 전송했을 때의 예시가 있습니다.
테스트 전송을 통해 본인이 만든 설문에 대한 샘플 페이로드만 받아서 참고하셔도 됩니다.
페이로드 구조
페이로드는 크게 이벤트 정보, form
, answers
, thankyou
로 구성되어 있습니다.
이벤트 정보는 해당 웹훅의 기본 정보, 발송 조건 등에 대한 정보입니다. form
은 해당 설문의 기본 정보를 담고 있고, answers
는 각 답변 데이터들의 세부 데이터를 담고 있습니다. thankyou
는 맺음말 페이지 정보를 가지고 있습니다.
이벤트 정보
웹훅의 기본 정보입니다.
ELEMENT | TYPE | DESCRIPTION |
---|---|---|
event_id | string | 웹훅의 고유 ID. 자동으로 부여됨 |
event_type | string | 웹훅 발송 조건, 현재는 'response_completed' 만 가능 |
object_type | string | event의 object_type, 현재는 'response'만 반환 |
response_id | string | 답변의 고유 ID |
submitted_at | string | 답변 제출 일시 |
form
form
은 해당 설문지의 object 이며, 설문지의 정보를 보여줍니다. API를 이용하면 이보다 더 자세한 설문지 정보를 알 수 있습니다.
ELEMENT | TYPE | DESCRIPTION |
---|---|---|
form | object | |
↳ id | string | 설문의 고유 ID |
↳ title | string | 설문 제목 |
↳ answer_url | string | 답변수집용 URL |
↳ report_url | string | 결과확인 페이지 URL |
hidden | object | |
↳ d[n] | string | 히든필드가 있을 경우에만 모든 히든 필드들을 같은 위계로 표시. n=1~100 |
answers
answers
는 해당 설문지 내 질문들에 대한 답변들을 보여주는 array of objects 입니다.
ELEMENT | TYPE | DESCRIPTION |
---|---|---|
answers | [object] | |
↳ type | string | 답변의 타입 |
↳ block | object | |
↳ id | string | 항목의 고유 ID |
↳ type | string | 항목의 종류 |
↳ content | string | 항목의 내용 |
... | ... | ... |
위 표의 answers
> type
에 각 답변의 타입이 나오고, 그 각 타입별로 세부 데이터가 달라지며 아래 별도 table 에서 설명드립니다. 각 타입별로 위 표의 ... 위치를 대체합니다.
choice (여러 보기들 중 하나만 선택)
ELEMENT | TYPE | DESCRIPTION |
---|---|---|
↳ choice | object | |
↳ id | string | 보기의 고유 ID |
↳ label | string | 보기의 내용 |
↳ other | string | 기타 보기에 입력한 답변 (기타 답변일 경우에만 나타남) |
↳ score | number | 보기에 할당된 점수 (점수가 할당되어야만 나옴) |
choices (여러 보기들 중 여러개 선택)
ELEMENT | TYPE | DESCRIPTION |
---|---|---|
↳ choices | [object] | |
↳ id | string | 보기의 고유 ID |
↳ label | string | 보기의 내용 |
↳ other | string | 기타 보기에 입력한 답변 (기타 답변일 경우에만 나타남) |
↳ score | number | 보기에 할당된 점수 (점수가 할당되어야만 나옴) |
순위형 질문의 경우 나열되는 답변의 순서가 곧 순위입니다.
media_choice (여러 미디어 보기들 중 하나만 선택)
ELEMENT | TYPE | DESCRIPTION |
---|---|---|
↳ media_choice | object | |
↳ id | string | 보기의 고유 ID |
↳ label | string | 보기의 내용 |
↳ other | string | 기타 보기에 입력한 답변 (기타 답변일 경우에만 나타남) |
↳ score | number | 보기에 할당된 점수 (점수가 할당되어야만 나옴) |
↳ media | object | |
↳ url | string | 이미지 URL |
↳ type | string | 미디어 형태 (현재는 image only) |
media_choices (여러 미디어 보기들 중 여러개 선택)
ELEMENT | TYPE | DESCRIPTION |
---|---|---|
↳ media_choices | [object] | |
↳ id | string | 보기의 고유 ID |
↳ label | string | 보기의 내용 |
↳ other | string | 기타 보기에 입력한 답변 (기타 답변일 경우에만 나타남) |
↳ score | number | 보기에 할당된 점수 (점수가 할당되어야만 나옴) |
↳ media | object | |
↳ url | string | 이미지 URL |
↳ type | string | 미디어 형태 (현재는 image only) |
순위형 질문의 경우 나열되는 답변의 순서가 곧 순위입니다.
text (주관식)
ELEMENT | TYPE | DESCRIPTION |
---|---|---|
↳ text | string | 텍스트 입력값 |
↳ encrypted | boolean | 답변 암호화 저장 여부 ("true" 일때만 나옴) |
email (이메일)
ELEMENT | TYPE | DESCRIPTION |
---|---|---|
string | 이메일 주소 | |
↳ encrypted | boolean | 답변 암호화 저장 여부 ("true" 일때만 나옴) |
url (url)
ELEMENT | TYPE | DESCRIPTION |
---|---|---|
↳ url | string | 웹사이트 URL |
↳ encrypted | boolean | 답변 암호화 저장 여부 ("true" 일때만 나옴) |
number (답변이 숫자인 경우, 척도형, 별점형, 수치입력형 등)
ELEMENT | TYPE | DESCRIPTION |
---|---|---|
↳ number | number | 답변 숫자값 |
↳ encrypted | boolean | 답변 암호화 저장 여부 (수치입력형만, "true" 일때만 나옴) |
address (주소)
ELEMENT | TYPE | DESCRIPTION |
---|---|---|
↳ address | [object] | |
↳ street | string | street 입력값 (visibile_fields로 정의되어야만 나옴) |
↳ detail | string | detail 입력값 (visibile_fields로 정의되어야만 나옴) |
↳ city | string | city 입력값 (visibile_fields로 정의되어야만 나옴) |
↳ region | string | region 입력값 (visibile_fields로 정의되어야만 나옴) |
↳ postal_code | string | postal_code 입력값 (visibile_fields로 정의되어야만 나옴) |
↳ country | string | country 입력값 (visibile_fields로 정의되어야만 나옴) |
↳ encrypted | boolean | 답변 암호화 저장 여부 ("true" 일때만 나옴) |
files (첨부파일)
ELEMENT | TYPE | DESCRIPTION |
---|---|---|
↳ files | [object] | |
↳ name | string | 파일명 |
↳ size | integer | 파일 사이즈 |
↳ url | object | |
↳ api | string | 파일 다운로드 API URL (API 를 통해서만 다운로드 가능한 URL) |
↳ report | string | 파일 다운로드 웹사이트 URL (소유자이거나 공동작업자이면서 PRO 회원이면 바로 다운로드 가능한 URL) |
row (격자형)
격자형 질문의 경우 choice 와 choices 의 array 이므로 아래 표에서 ... 위치에 위 choice 또는 choices 표가 또 들어가는 형태다. 이때 choice 또는 choices 는 rows object 의 하위로 들어간다.
ELEMENT | TYPE | DESCRIPTION |
---|---|---|
↳ rows | [object] | |
↳ type | string | 답변 타입 |
↳ block | object | |
↳ id | string | 소질문의 고유 ID |
↳ content | string | 소질문의 내용 |
... | ... | ... |
answers
array는 답변 데이터가 있는 경우만 페이로드에 표시됩니다. 답변자가 비필수 질문에 답변하지 않았거나, 로직으로 질문을 건너뛰어서 답변하지 않아서 그 질문에 답변 데이터가 없으면 페이로드에 그 질문의 answers
array가 표시되지 않습니다.
thankyou
모아폼으로 제작된 설문에 답변을 마치고 최종 제출하면 항상 맺음말 페이지로 이동하게 됩니다. 맺음말 페이지는 여러개 존재할 수 있고, 답변자를 로직을 통해 이들 중 하나의 맺음말 페이지로 이동하게 됩니다. 해당 답변자가 최종적으로 도달한 맺음말 페이지의 id와 url을 페이로드에 표시해 줍니다.
ELEMENT | TYPE | DESCRIPTION |
---|---|---|
thankyou | object | |
↳ id | string | 맺음말의 고유 ID |
↳ url | string | 맺음말 페이지 url |
페이로드 예시
모아폼의 모든 형태의 질문들이 포함된 페이로드 예시입니다.
{
"event_id": "4ebbbcdb-7f4b-47a9-a72c-1009b4990d12",
"event_type": "response_completed",
"hidden": {
"d1": "andrew"
},
"response_id": "123-45-67890",
"submitted_at": "2024-02-01T04:55:13Z",
"form": {
"id": "jW5o2M",
"title": "Google Gemini User Experience Survey",
"report_url": "https://www.moaform.com/reports/aZlOQ0RjJNR64YWb",
"answer_url": "https://moaform.com/q/yGV1GF"
},
"answers": [
{
"block": {
"id": "cls2lcsmq00082v6moddhz0hs",
"type": "single_choice",
"title": "<p>How often do you use Google Gemini?</p>"
},
"type": "choice",
"choice": {
"id": "cls2lcsmq000a2v6mfnn8y93n",
"label": "<p>Daily</p>",
"score": 1
},
},
{
"block": {
"id": "cls2ldkvd00062v6nbpberh35",
"type": "multiple_choice",
"title": "<p>Which features of Google Gemini do you use? Select all that apply.</p>"
},
"type": "choices",
"choices": [
{
"id": "cls2ldkvd00092v6nfe42p10y",
"label": "<p>Cloud Storage</p>",
"score": 1
},
{
"id": "cls2lu0iy003p2v6n57wd3ave",
"label": "<p>Maps</p>",
"score": 2
},
{
"id": "cls2ldkvd00072v6nvno7ue6h",
"label": "<p>Search Engine</p>",
"score": 3
}
],
},
{
"block": {
"id": "cls2ldvil000c2v6nefizm132",
"type": "dropdown",
"title": "<p>Did you experience any issues while using Google Gemini?</p>"
},
"type": "choice",
"choice": {
"id": "cls2ldvil000e2v6n90i4kec7",
"label": "<p>No</p>",
"score": 2
},
},
{
"block": {
"id": "cls2le19d000i2v6n0ppo6jxl",
"type": "ranking",
"title": "<p>Please rank the following Google Gemini services in order of importance to you.</p>"
},
"type": "choices",
"choices": [
{
"id": "cls2le19d000l2v6n61biepmr",
"label": "<p>Cloud storage space</p>"
},
{
"id": "cls2le19d000j2v6nla70peux",
"label": "<p>Search accuracy</p>"
}
]
},
{
"block": {
"id": "cls2le8ax000o2v6n6eg0bx8a",
"type": "media_single_choice",
"title": "<p>Which type of media do you consume most frequently on Google Gemini platforms?</p>"
},
"type": "media_choice",
"media_choice": {
"id": "cls2m6nhn00402v6nxbmsqna6",
"label": "<p>E-Books</p>",
"score": 5
"media": {
"type": "image",
"url": "https://robohash.org/commodioptioearum.png"
}
},
},
{
"block": {
"id": "cls2lgcvg000u2v6nfh7o8ivp",
"type": "media_multiple_choice",
"title": "<p>Select the types of media you have used or interacted with on Google Gemini services.</p>"
},
"type": "media_choices",
"media_choices": [
{
"id": "cls2lgcvg000v2v6nszdcdswo",
"label": "<p>Video tutorials</p>",
"score": 1,
"media": {
"type": "image",
"url": "https://robohash.org/doloresveldolor.png"
}
},
{
"id": "cls2m79fz00412v6nsff1q9wz",
"label": "<p>News articles</p>",
"score": 4,
"media": {
"type": "image",
"url": "https://robohash.org/nihilrerummaiores.png"
}
}
],
},
{
"block": {
"id": "cls2lgoh100102v6noq3j19po",
"type": "media_ranking",
"title": "<p>Rank the following media types based on your preference for content consumption on Google Gemini.</p>"
},
"type": "media_choices",
"media_choices": [
{
"id": "cls2lgoh100122v6nndvd1m8c",
"label": "<p>Audio Content</p>",
"media": {
"type": "image",
"url": "https://robohash.org/perferendisestomnis.png"
}
},
{
"id": "cls2m864s00442v6nibp8yiey",
"label": "<p>Visual Content</p>",
"media": {
"type": "image",
"url": "https://robohash.org/teneturrationealias.png"
}
},
{
"id": "cls2lgoh100112v6n1z0bpnym",
"label": "<p>Video Content</p>",
"media": {
"type": "image",
"url": "https://robohash.org/minusiureexplicabo.png"
}
},
{
"id": "cls2m80g000432v6n6a74huoc",
"label": "<p>Interactive Content</p>",
"media": {
"type": "image",
"url": "https://robohash.org/aspernaturreprehenderitaut.png"
}
},
{
"id": "cls2lgoh100132v6ngiepv9jk",
"label": "<p>Written Content</p>",
"media": {
"type": "image",
"url": "https://robohash.org/aspernaturautut.png"
}
},
{
"id": "cls2lgoh100152v6nyggfy2y7",
"label": "other",
"other": "You can get anything you want at Alice's restaurant.",
"media": {
"type": "image",
"url": ""
}
},
]
},
{
"block": {
"id": "cls2lv2jp003r2v6nc14yp877",
"type": "point_scale",
"title": "<p>On a scale from -5 to 5, how would you rate the overall performance of Google Gemini?</p>"
},
"type": "number",
"number": 3
},
{
"block": {
"id": "cls2lhfaa001c2v6n703dea3q",
"type": "nps",
"title": "<p>How likely are you to recommend Google Gemini to a friend or colleague? </p>"
},
"type": "number",
"number": 5
},
{
"block": {
"id": "cls2lgyu700162v6nog617gmn",
"type": "rating",
"title": "<p>How would you rate the user interface of Google Gemini?</p>"
},
"type": "number",
"number": 7
},
{
"block": {
"id": "cls2lho58001i2v6n4t10n5oj",
"type": "matrix_single_choice",
"title": "<p>What is your primary purpose for using Google Gemini?</p>"
},
"rows": [
{
"block": {
"id": "cls2lho58001m2v6ns4hdd9nn",
"title": "<p>at Home</p>"
},
"type": "choice",
"choice": {
"id": "cls2lho58001m2v6ns4hdd9nn:cls2lho58001l2v6nueh42tzp",
"label": "<p>Educational activities</p>",
"score": 3
},
},
{
"block": {
"id": "cls2li5zy001o2v6n1dcjwute",
"title": "<p>at Office</p>"
},
"type": "choice",
"choice": {
"id": "cls2li5zy001o2v6n1dcjwute:cls2lho58001j2v6np1atlo93",
"label": "<p>Personal use</p>",
"score": 1
},
}
]
},
{
"block": {
"id": "cls2lictr001p2v6nbqdrpp6s",
"type": "matrix_multiple_choice",
"title": "<p>Which Google Gemini features do you use regularly? Select all that apply.</p>"
},
"rows": [
{
"block": {
"id": "cls2lictr001t2v6nxzl24rsy",
"title": "<p>at Home</p>"
},
"type": "choices",
"choices": [
{
"id": "cls2lictr001t2v6nxzl24rsy:cls2mchoe00462v6n5trjchsw",
"label": "<p>Maps</p>".
"score": 4
}
],
},
{
"block": {
"id": "cls2lictr001u2v6n9xntfosy",
"title": "<p>at Office</p>"
},
"type": "choices",
"choices": [
{
"id": "cls2lictr001u2v6n9xntfosy:cls2lictr001s2v6na1kvxgh8",
"label": "<p>Drive</p>",
"score": 1
},
{
"id": "cls2lictr001u2v6n9xntfosy:cls2lictr001q2v6nh82ekevh",
"label": "<p>Search</p>",
"score": 3
}
],
}
]
},
{
"block": {
"id": "cls2lipfv001w2v6nothvfcj1",
"type": "matrix_ranking",
"title": "<p>Rank the devices you most frequently use to access Google Gemini services.</p>"
},
"rows": [
{
"block": {
"id": "cls2lipfv00202v6nsd0qhctz",
"title": "<p>at Home</p>"
},
"type": "choices",
"choices": [
{
"id": "cls2lipfv00202v6nsd0qhctz:cls2lipfv001x2v6n08hhaqo8",
"label": "<p>Smartphone</p>"
},
{
"id": "cls2lipfv00202v6nsd0qhctz:cls2lipfv001y2v6niexsh5ro",
"label": "<p>Tablet</p>"
},
{
"id": "cls2lipfv00202v6nsd0qhctz:cls2me0bu00492v6nqtwno5mg",
"label": "<p>Smartwatch</p>"
},
{
"id": "cls2lipfv00202v6nsd0qhctz:cls2lipfv001z2v6nygztclsc",
"label": "<p>Laptop</p>"
},
{
"id": "cls2lipfv00202v6nsd0qhctz:cls2mdwe300482v6nzia1b5bc",
"label": "<p>Desktop</p>"
}
]
},
{
"block": {
"id": "cls2lipfv00212v6n0jsyogyx",
"title": "<p>at Office</p>"
},
"type": "choices",
"choices": [
{
"id": "cls2lipfv00212v6n0jsyogyx:cls2lipfv001x2v6n08hhaqo8",
"label": "<p>Smartphone</p>"
}
]
},
{
"block": {
"id": "cls2meu2a004a2v6nqt0ambov",
"title": "<p>at School</p>"
},
"type": "choices",
"choices": [
{
"id": "cls2meu2a004a2v6nqt0ambov:cls2lipfv001y2v6niexsh5ro",
"label": "<p>Tablet</p>"
},
{
"id": "cls2meu2a004a2v6nqt0ambov:cls2mdwe300482v6nzia1b5bc",
"label": "<p>Desktop</p>"
}
]
}
]
},
{
"block": {
"id": "cls2lixno00232v6nrofkx97v",
"type": "long_text",
"title": "<p>What improvements would you like to see in future updates of Google Gemini? </p>",
"encrypted": true
},
"type": "text",
"text": "Culpa architecto nesciunt. Distinctio asperiores dolore. Fuga a consequatur.\nBeatae eum blanditiis. Quia ut aspernatur. Est et est.\nMinus incidunt expedita. Autem vel quia. Nisi nobis quam."
},
{
"block": {
"id": "cls2ljluw002a2v6nhec80sfu",
"type": "short_text",
"title": "<p>What is your favorite aspect of Google Gemini?</p>",
"encrypted": true
},
"type": "text",
"text": "Nemo aperiam voluptatem.\nSunt cum aut.\nVel accusantium deleniti."
},
{
"block": {
"id": "cls2lkb4z002h2v6neg2u3axs",
"type": "address",
"title": "<p>Please provide your full address for our records.</p>",
"encrypted": true
},
"type": "address",
"address": [
{
"street": "1264 Bashirian River"
},
{
"detail": "Apt. 204"
},
{
"city": "Antoinefort"
},
{
"region": "Tennessee"
},
{
"postal_code": "11952"
},
{
"country": "American Samoa"
}
]
},
{
"block": {
"id": "cls2lks7x002o2v6n4o653zs9",
"type": "numeric_value",
"title": "<p>How many years have you been using Google Gemini?</p>",
"encrypted": true
},
"type": "number",
"number": 10
},
{
"block": {
"id": "cls2ll3pd002v2v6n3zja3wmp",
"type": "email",
"title": "<p>Enter your email address to receive updates or to be contacted for further feedback.</p>",
"encrypted": true
},
"type": "email",
"email": "cinthia@hodkiewicz.example"
},
{
"block": {
"id": "cls2llc4b00322v6nsi7sgi9o",
"type": "url",
"title": "<p>If you have a personal website or a portfolio, please enter the URL here.</p>",
"encrypted": true
},
"type": "url",
"url": "http://metz.example/jacinto_christiansen"
},
{
"block": {
"id": "cls2llkus00392v6n0b5heal9",
"type": "file_upload",
"title": "<p>If you have any screenshots of issues or errors, please upload them here.</p>"
},
"type": "files",
"files": [
{
"name": "porro.doc",
"size": 40389,
"url": {
"report": "https://www.moaform.com/reports/aZlOQ0RjJNR64YWb/responses/4EICalTehPKULp1_hzvo2Q/download/submission_files/bab2d598-1405-4da7-82d2-ceabd193e4c5",
"api": "https://api.moaform.com/v1/forms/jW5o2M/responses/123-45-67890/files/bab2d598-1405-4da7-82d2-ceabd193e4c5"
}
]
}
],
"thankyou": {
"id": "cls2lbwjk00010enyd9gjjvur",
"url": "https://answer.moaform.com/answers/jW5o2M/thankyou/Wo2b1Z09wx5"
}
}