Loading...

We're setting up your new app...

Explore a library of common app use cases that can be copied and customized, or referenced as inspiration for your specific project. Or start with an idea.
Loading...
").appendTo($buttonView); } else { for (var i = 0; i < payload.buttons.length; i++) { var thisButton = payload.buttons[i]; renderButton(thisButton, $buttonView); } } $buttonView.appendTo($container); } var renderPayloadElement = function (element, $container) { var $elementView = $('
').addClass("PayloadElement"); if (null != element.image_url) { $elementView.append($('
').addClass("PayloadElementImage").css('background-image', 'url("' + element.image_url + '")')); } $elementView.append($('
').addClass("PayloadElementTitle").text(element.title)); if (null != element.subtitle) { $elementView.append($('
').addClass("PayloadElementSubTitle").text(element.subtitle)); } if (element.buttons && element.buttons.length > MAX_BUTTONS) { $("
Error -- too many buttons
").appendTo($elementView); } else if (element.buttons) { for (var i = 0; i < element.buttons.length; i++) { var thisButton = element.buttons[i]; renderButton(thisButton, $elementView); } } $elementView.appendTo($container); } var renderGenericPayload = function (payload, $container) { var $payloadView = $('
').addClass("Payload GenericPayload ThinScrollBar"); $payloadView.append($('
').addClass("PayloadTitle").text(payload.text)); if (payload.elements.length > MAX_GENERIC_ELEMENTS) { $("
Error -- too many elements
").appendTo($payloadView); } else { for (var i = 0; i < payload.elements.length; i++) { var thisElement = payload.elements[i]; renderPayloadElement(thisElement, $payloadView); } $payloadView.appendTo($container); } } var renderListPayload = function (payload, $container) { var $payloadView = $('
').addClass("Payload ListPayload ThinScrollBar"); $payloadView.append($('
').addClass("PayloadTitle").text(payload.text)); if (payload.elements.length > MAX_LIST_ELEMENTS) { $("
Error -- too many elements
").appendTo($payloadView); } else { for (var i = 0; i < payload.elements.length; i++) { var thisElement = payload.elements[i]; renderPayloadElement(thisElement, $payloadView); } $payloadView.appendTo($container); } } var renderAttachment = function (attachment, $container) { switch (attachment.payload.template_type) { case "generic": renderGenericPayload(attachment.payload, $container); break; case "list": renderListPayload(attachment.payload, $container); break; case "button": renderButtonPayload(attachment.payload, $container); break; } } var scrollAndShow = function () { var height = $msgWrapper[0].scrollHeight; $msgWrapper.scrollTop(height); } var showWaitingIndicator = function () { $(".MessengerWindow .WaitingGif").first().clone().attr('id', "WaitingGif1").show().appendTo($msgWrapper); } var hideWaitingIndicator = function () { $msgWrapper.find("#WaitingGif1").remove(); } var pad2 = function(n) { return ((n < 10) && (n >=0 )) ? ("0" + n) : n; } var makeTimestamp = function () { var now = new Date(); var hours = now.getHours(); var ampm = 'am'; if (hours >= 12) { ampm = 'pm'; } if (hours > 12) { hours = hours - 12; } var minutes = pad2(now.getMinutes()); return $('').addClass("Timestamp").text(hours + ":" + minutes + ampm); } var showTextResponse = function (textResponse, showTimestamp) { var $newMessage = $('').addClass("ReceivedMessage ThinScrollBar").text(textResponse); if (showTimestamp) { $newMessage = $newMessage.prepend(makeTimestamp()); } $msgWrapper.append($newMessage); } var showAttachmentResponse = function (attachmentResponse, showTimestamp) { var $recvdMessage = $('').addClass("ReceivedMessage ThinScrollBar"); renderAttachment(attachmentResponse, $recvdMessage); if (showTimestamp) { $recvdMessage = $recvdMessage.prepend(makeTimestamp()); } $msgWrapper.append($recvdMessage); } var showResponse = function (responses, i, callback) { if (null == responses || responses.length <= i) { showTextResponse('', (i == 0)) scrollAndShow(); } else { var response = JSON.parse(responses[i]).message; if (response.text) { showTextResponse(response.text, (i == 0)) } else if (response.attachment) { showAttachmentResponse(response.attachment, (i == 0)) } setTimeout(function () { scrollAndShow(); callback(i + 1) }, 200); } } var sendPayload = function (payload) { showWaitingIndicator(); verifiedAjaxPost({ url: "/api/chatbot/facebook", data: JSON.stringify(payload), contentType: "application/json", success: function (data) { var responses = JSON.parse(data); var callbackFn = function (i) { if (i < responses.length) { showResponse(responses, i, callbackFn) } } showResponse(responses, 0, callbackFn) }, error: function (errResult) { showTextResponse(errResult.responseText); }, complete: function () { hideWaitingIndicator(); } }); } var hideChatbotEmulator = function () { $(".MessengerWindow").hide(); } var showChatbotEmulator = function () { $(".MessengerWindow .Messages .MessageWrapper").children().remove(); $(".MessengerWindow").show(); $('#MessageInput').val('#start'); document.getElementById('SendButton').click(); } var initChatbotPartial = function (appId, pageId, doNotShow) { $msgWrapper = $(".MessengerWindow .Messages .MessageWrapper") $('#MessageInput') .off('keyup') .on('keyup', function (e) { if (e.keyCode == 13) { document.getElementById('SendButton').click(); } }); $('#ImageInput') .off('change') .on('change', function () { var fileToLoad = $(this)[0].files[0]; if (null != fileToLoad) { var fileReader = new FileReader(); fileReader.onloadend = function (e) { // submit the entry var payload = { object: "debugger", debugAppId: appId, entry: [ { id: msgCounter++, time: 200, messaging: [ { sender: { id: thisUserId }, recipient: { id: pageId }, timestamp: 222, message: { mid: "foo", seq: msgCounter, attachments: [ { type: 'image', payload: { url: e.target.result } } ] } } ] } ] } sendPayload(payload); }; fileReader.onerror = function (e) { alert('error with filereader'); }; fileReader.readAsDataURL(fileToLoad); } }); $("#SendImageButton") .off('click') .on('click', function () { document.getElementById('ImageInput').click(); }); $("#SendButton") .off('click') .on('click', function () { var message = $("#MessageInput").val(); $("#MessageInput").val(''); $msgWrapper.append($('').addClass("SentMessage").text(message)); var payload = { object: "debugger", debugAppId: appId, entry: [ { id: msgCounter++, time: 200, messaging: [ { sender: { id: thisUserId }, recipient: { id: pageId }, timestamp: 222, message: { mid: "foo", seq: 1, text: message } } ] } ] } sendPayload(payload); }); $(document) .off('click', '.PostbackActionLink') .on('click', '.PostbackActionLink', function (e) { var payload = $(this).data('payload'); if (null != payload) { e.preventDefault(); e.stopImmediatePropagation(); var postbackPayload = { object: "debugger", debugAppId: appId, entry: [ { id: msgCounter++, time: 200, messaging: [ { sender: { id: thisUserId }, recipient: { id: pageId }, timestamp: 222, postback: { payload: decodeURIComponent(payload) } } ] } ] } sendPayload(postbackPayload); } else { // it is a url click -- let it go thru } }) .off('click', '.LoginActionLink') .on('click', '.LoginActionLink', function (e) { // open the window with javascript --- this will let us close it subsequently with Javascript var url = $(this).attr('href') console.log('Opening url:' + url) window.open(url, '_blank') e.preventDefault() }) ; if (doNotShow) { hideChatbotEmulator(); } else { showChatbotEmulator(); } }
Start for free